diff --git a/.claude/commands/check-ci.md b/.claude/commands/check-ci.md index ba785ccca..908b4276c 100644 --- a/.claude/commands/check-ci.md +++ b/.claude/commands/check-ci.md @@ -1,11 +1,5 @@ -Run all CI checks locally, in order. Stop and report if any step fails. +Run every check in the [canonical CI gate list](/CLAUDE.md#ci-gates), in its +documented order. Stop and report if any gate fails. -1. `cargo fmt --all -- --check` -2. `cargo clippy-fastly && cargo clippy-axum && cargo clippy-cloudflare` -3. `cargo test-fastly && cargo test-axum && cargo test-cloudflare` -4. `cargo check-cloudflare` (wasm32-unknown-unknown target check, mirrors CI) -5. `cd crates/trusted-server-js/lib && npx vitest run` -6. `cd crates/trusted-server-js/lib && npm run format` -7. `cd docs && npm run format` - -Report a summary of all results when done. +Report the result of each canonical gate. Do not maintain a separate gate list +in this command. diff --git a/.claude/commands/review-changes.md b/.claude/commands/review-changes.md index 8c9546056..cac6a356b 100644 --- a/.claude/commands/review-changes.md +++ b/.claude/commands/review-changes.md @@ -1,5 +1,8 @@ Review all staged and unstaged changes in the working tree. +Use the [canonical CI gate list](/CLAUDE.md#ci-gates) as the sole source for +required verification. Do not copy its commands into this file. + 1. Run `git diff` and `git diff --cached` to see all changes. 2. Review each changed file for: - Correctness and logic errors diff --git a/.claude/commands/test-all.md b/.claude/commands/test-all.md index 3f2cabec3..b71c466b1 100644 --- a/.claude/commands/test-all.md +++ b/.claude/commands/test-all.md @@ -1,13 +1,6 @@ -Run the full test suite for both Rust and JavaScript. +Run the Rust and JavaScript test gates from the +[canonical CI gate list](/CLAUDE.md#ci-gates). Do not maintain a separate test +command list in this file. -```bash -cargo test-fastly && cargo test-axum && cargo test-cloudflare -``` - -Then run JS tests: - -```bash -cd crates/trusted-server-js/lib && npx vitest run -``` - -Report results for both. If any test fails, investigate and suggest a fix. +Report each test-gate result. If a test fails, investigate it before reporting +the command complete. diff --git a/.claude/commands/test-crate.md b/.claude/commands/test-crate.md index f7c37db0c..85626f103 100644 --- a/.claude/commands/test-crate.md +++ b/.claude/commands/test-crate.md @@ -2,16 +2,10 @@ Test a specific crate by name. Usage: /test-crate $ARGUMENTS -Run: +Use the target-aware test rules referenced by the +[canonical CI gate list](/CLAUDE.md#ci-gates). Select the canonical adapter or +JavaScript gate that covers `$ARGUMENTS`; do not substitute a bare workspace +test. For a host-only crate without a covering alias, follow the host-target +procedure in `CLAUDE.md`. -```bash -cargo test -p $ARGUMENTS -``` - -If $ARGUMENTS is "js" or "javascript", run: - -```bash -cd crates/trusted-server-js/lib && npx vitest run -``` - -Report results and investigate any failures. +Report the selected canonical rule and its result. Investigate any failure. diff --git a/.claude/commands/verify.md b/.claude/commands/verify.md index 7a8454891..87275d88a 100644 --- a/.claude/commands/verify.md +++ b/.claude/commands/verify.md @@ -1,12 +1,5 @@ -Full verification: build, test, and lint the entire project. +Run full repository verification from the +[canonical CI gate list](/CLAUDE.md#ci-gates). That region is the sole source +for required gate commands; do not maintain a copy here. -1. `cargo build-fastly && cargo build-axum && cargo build-cloudflare` -2. `cargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1` -3. `cargo fmt --all -- --check` -4. `cargo clippy-fastly && cargo clippy-axum && cargo clippy-cloudflare` -5. `cargo test-fastly && cargo test-axum && cargo test-cloudflare` -6. `cd crates/trusted-server-js/lib && npx vitest run` -7. `cd crates/trusted-server-js/lib && npm run format` -8. `cd docs && npm run format` - -Report results for each step. Stop and investigate if any step fails. +Report every canonical gate result. Stop and investigate if any gate fails. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5f4cc6ca9..34db797ac 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -21,22 +21,15 @@ Closes # ## Test plan - - -- [ ] `cargo test-fastly && cargo test-axum` -- [ ] `cargo clippy-fastly && cargo clippy-axum` -- [ ] `cargo fmt --all -- --check` -- [ ] JS tests: `cd crates/trusted-server-js/lib && npx vitest run` -- [ ] JS format: `cd crates/trusted-server-js/lib && npm run format` -- [ ] Docs format: `cd docs && npm run format` -- [ ] WASM build: `cargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1` -- [ ] Manual testing via `fastly compute serve` -- [ ] Other: + + +- [ ] Completed the [canonical CI gate list](/CLAUDE.md#ci-gates) +- Evidence: ## Checklist - [ ] Changes follow [CLAUDE.md](/CLAUDE.md) conventions - [ ] No `unwrap()` in production code — use `expect("should ...")` -- [ ] Uses `tracing` macros (not `println!`) +- [ ] Uses `log` macros (not `println!`) - [ ] New code has tests - [ ] No secrets or credentials committed diff --git a/AGENTS.md b/AGENTS.md index 836df88d5..d0cf176dd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,13 +17,20 @@ If you cannot read `CLAUDE.md`, follow these rules: 1. Present a plan and get approval before coding. 2. Keep changes minimal — do not refactor unrelated code. -3. Run tests after every code change — use the workspace aliases defined in `.cargo/config.toml`: - - `cargo test-fastly` — Fastly adapter + core (wasm32-wasip1 via Viceroy) - - `cargo test-axum` — Axum dev server adapter (native) - - `cargo test-cloudflare` — Cloudflare Workers adapter (native host) - Do NOT use bare `cargo test --workspace` — it will attempt to compile the Fastly adapter for the host target. -4. Run `cargo fmt --all -- --check` and `cargo clippy-fastly && cargo clippy-axum && cargo clippy-cloudflare`. -5. Run JS tests with `cd crates/trusted-server-js/lib && npx vitest run` when touching JS/TS code. -6. Use `error-stack` (`Report`) for error handling — not anyhow, eyre, or thiserror. -7. Use `log` macros (not `println!`) and `expect("should ...")` (not `unwrap()`). -8. Target is `wasm32-wasip1` — no Tokio or OS-specific dependencies in core crates. + + + +Every PR must pass: + +1. `cargo fmt --all -- --check` +2. `cargo clippy-fastly && cargo clippy-axum && cargo clippy-cloudflare && cargo clippy-cloudflare-wasm && cargo clippy-spin-native && cargo clippy-spin-wasm` +3. `cargo test-fastly && cargo test-axum && cargo test-cloudflare && cargo test-spin` +4. `cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test parity` +5. JS build and test (`cd crates/trusted-server-js/lib && npx vitest run`) +6. JS format (`cd crates/trusted-server-js/lib && npm run format`) +7. Docs format (`cd docs && npm run format`) + + +8. Use `error-stack` (`Report`) for error handling — not anyhow, eyre, or thiserror. +9. Use `log` macros (not `println!`) and `expect("should ...")` (not `unwrap()`). +10. Target is `wasm32-wasip1` — no Tokio or OS-specific dependencies in core crates. diff --git a/CLAUDE.md b/CLAUDE.md index 546a3bf52..d1d098116 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -274,6 +274,12 @@ impl core::error::Error for MyError {} - Do not write or commit real domains, customer names, credentials, configuration values, or other potentially sensitive real-world information in comments, tests, docs, or examples. +- Sensitive-data exceptions are limited to these types: vendor URL, + hash-pinned fake-credential fixture, historical example, service ID, and + project-owned public domain. +- Record every exception before use with its exact type and scope, owner, + rationale, and expiry timestamp. Ownerless, expired, broad, or untyped + exceptions are prohibited. --- diff --git a/crates/trusted-server-adapter-axum/src/app.rs b/crates/trusted-server-adapter-axum/src/app.rs index 1deddcab5..824c0cdd0 100644 --- a/crates/trusted-server-adapter-axum/src/app.rs +++ b/crates/trusted-server-adapter-axum/src/app.rs @@ -649,3 +649,27 @@ fn build_router(state: &Arc) -> RouterService { router.build() } + +#[cfg(test)] +mod task8_route_tests { + use super::*; + + #[test] + fn startup_error_route_set_matches_the_prechange_contract() { + let report = Report::new(TrustedServerError::BadRequest { + message: "startup failure".to_owned(), + }); + let observed = startup_error_router(&report) + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect::>(); + let mut expected = std::collections::BTreeSet::new(); + for path in ["/", "/{*rest}"] { + for method in ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] { + expected.insert((method.to_owned(), path.to_owned())); + } + } + assert_eq!(observed, expected); + } +} diff --git a/crates/trusted-server-adapter-axum/tests/routes.rs b/crates/trusted-server-adapter-axum/tests/routes.rs index 6812b7421..88fb459a8 100644 --- a/crates/trusted-server-adapter-axum/tests/routes.rs +++ b/crates/trusted-server-adapter-axum/tests/routes.rs @@ -4,6 +4,8 @@ //! and self-contained. Each test builds the full `TrustedServerApp` router and //! drives it through the Tower `Service` interface. +use std::collections::BTreeSet; + use axum::body::Body as AxumBody; use axum::http::Request; use edgezero_adapter_axum::service::EdgeZeroAxumService; @@ -141,6 +143,42 @@ fn all_explicit_routes_are_registered() { } } +#[test] +fn complete_route_registration_set_matches_the_prechange_contract() { + let named_paths = [ + "/.well-known/trusted-server.json", + "/verify-signature", + "/_ts/admin/keys/rotate", + "/_ts/admin/keys/deactivate", + "/_ts/admin/ec", + "/_ts/admin/ec/{id}", + "/_ts/admin/eids", + "/admin/keys/rotate", + "/admin/keys/deactivate", + "/auction", + "/_ts/page-bids", + "/__ts/page-bids", + "/first-party/proxy", + "/first-party/click", + "/first-party/sign", + "/first-party/proxy-rebuild", + ]; + let fallback_methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"]; + let mut expected = BTreeSet::new(); + for path in named_paths.into_iter().chain(["/", "/{*rest}"]) { + for method in fallback_methods { + expected.insert((method.to_owned(), path.to_owned())); + } + } + expected.insert(("GET".to_owned(), "/health".to_owned())); + + assert_eq!( + registered_routes().into_iter().collect::>(), + expected, + "Axum route registration must preserve every named/fallback method exactly" + ); +} + /// Verify the legacy non-`/_ts` admin aliases ARE registered — to the local /// deny handler — matching the Fastly and Cloudflare adapters. /// diff --git a/crates/trusted-server-adapter-cloudflare/src/app.rs b/crates/trusted-server-adapter-cloudflare/src/app.rs index b57c4a6b8..c31cd5d9b 100644 --- a/crates/trusted-server-adapter-cloudflare/src/app.rs +++ b/crates/trusted-server-adapter-cloudflare/src/app.rs @@ -661,6 +661,25 @@ fn build_router(state: &Arc) -> RouterService { mod tests { use super::*; + #[test] + fn startup_error_route_set_matches_the_prechange_contract() { + let report = Report::new(TrustedServerError::BadRequest { + message: "startup failure".to_owned(), + }); + let observed = startup_error_router(&report) + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect::>(); + let mut expected = std::collections::BTreeSet::new(); + for path in ["/", "/{*rest}"] { + for method in ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] { + expected.insert((method.to_owned(), path.to_owned())); + } + } + assert_eq!(observed, expected); + } + fn aps_profile_settings() -> Settings { let mut settings = Settings::from_toml( r#" diff --git a/crates/trusted-server-adapter-cloudflare/tests/routes.rs b/crates/trusted-server-adapter-cloudflare/tests/routes.rs index fb498ce4e..26b2852b4 100644 --- a/crates/trusted-server-adapter-cloudflare/tests/routes.rs +++ b/crates/trusted-server-adapter-cloudflare/tests/routes.rs @@ -4,6 +4,8 @@ //! `TrustedServerApp::routes()` builds without panicking. Does not exercise //! the platform layer or outbound network calls. +use std::collections::BTreeSet; + use edgezero_core::app::Hooks as _; use edgezero_core::http::{Request, Response, request_builder}; use edgezero_core::router::RouterService; @@ -285,6 +287,49 @@ fn all_explicit_routes_are_registered() { } } +#[test] +fn complete_route_registration_set_matches_the_prechange_contract() { + let mut expected = BTreeSet::from([ + ( + "GET".to_owned(), + "/.well-known/trusted-server.json".to_owned(), + ), + ("POST".to_owned(), "/verify-signature".to_owned()), + ("POST".to_owned(), "/_ts/admin/keys/rotate".to_owned()), + ("POST".to_owned(), "/_ts/admin/keys/deactivate".to_owned()), + ("GET".to_owned(), "/_ts/admin/ec".to_owned()), + ("GET".to_owned(), "/_ts/admin/ec/{id}".to_owned()), + ("GET".to_owned(), "/_ts/admin/eids".to_owned()), + ("POST".to_owned(), "/auction".to_owned()), + ("GET".to_owned(), "/_ts/page-bids".to_owned()), + ("OPTIONS".to_owned(), "/_ts/page-bids".to_owned()), + ("GET".to_owned(), "/__ts/page-bids".to_owned()), + ("OPTIONS".to_owned(), "/__ts/page-bids".to_owned()), + ("GET".to_owned(), "/first-party/proxy".to_owned()), + ("GET".to_owned(), "/first-party/click".to_owned()), + ("GET".to_owned(), "/first-party/sign".to_owned()), + ("POST".to_owned(), "/first-party/sign".to_owned()), + ("GET".to_owned(), "/first-party/proxy-rebuild".to_owned()), + ("POST".to_owned(), "/first-party/proxy-rebuild".to_owned()), + ]); + for path in [ + "/admin/keys/rotate", + "/admin/keys/deactivate", + "/", + "/{*rest}", + ] { + for method in LEGACY_ADMIN_DENY_METHODS { + expected.insert(((*method).to_owned(), path.to_owned())); + } + } + assert_eq!(expected.len(), 46); + assert_eq!( + registered_routes().into_iter().collect::>(), + expected, + "Cloudflare inline builder must preserve every route and method exactly" + ); +} + // --------------------------------------------------------------------------- // Basic-auth parity tests // --------------------------------------------------------------------------- diff --git a/crates/trusted-server-adapter-fastly/src/app.rs b/crates/trusted-server-adapter-fastly/src/app.rs index c1ba5ed6b..1567bc916 100644 --- a/crates/trusted-server-adapter-fastly/src/app.rs +++ b/crates/trusted-server-adapter-fastly/src/app.rs @@ -1353,7 +1353,7 @@ impl Hooks for TrustedServerApp { #[cfg(test)] mod tests { - use std::collections::HashMap; + use std::collections::{BTreeSet, HashMap}; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex}; use std::time::Duration; @@ -1589,6 +1589,48 @@ mod tests { TrustedServerApp::routes_for_state(&state) } + #[test] + fn complete_route_registration_set_matches_the_prechange_contract() { + let named_paths = [ + "/.well-known/trusted-server.json", + "/verify-signature", + "/_ts/admin/keys/rotate", + "/_ts/admin/keys/deactivate", + "/_ts/admin/ec", + "/_ts/admin/ec/{id}", + "/_ts/admin/eids", + "/admin/keys/rotate", + "/admin/keys/deactivate", + "/_ts/api/v1/batch-sync", + "/_ts/api/v1/identify", + "/_ts/set-tester", + "/_ts/clear-tester", + "/auction", + "/_ts/page-bids", + "/__ts/page-bids", + "/first-party/proxy", + "/first-party/click", + "/first-party/sign", + "/first-party/proxy-rebuild", + ]; + let fallback_methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"]; + let mut expected = BTreeSet::new(); + for path in named_paths.into_iter().chain(["/", "/{*rest}"]) { + for method in fallback_methods { + expected.insert((method.to_owned(), path.to_owned())); + } + } + let observed = test_router() + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect::>(); + assert_eq!( + observed, expected, + "Fastly app router must preserve every named/fallback method exactly" + ); + } + #[test] fn per_request_services_register_the_fastly_template_assembler() { let state = build_state_from_settings(test_settings()).expect("should build test state"); @@ -1784,6 +1826,25 @@ mod tests { ); } + #[test] + fn startup_error_route_set_matches_the_prechange_contract() { + let report = Report::new(TrustedServerError::BadRequest { + message: "startup failed".to_owned(), + }); + let observed = startup_error_router(&report) + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect::>(); + let mut expected = BTreeSet::new(); + for path in ["/", "/{*rest}"] { + for method in ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] { + expected.insert((method.to_owned(), path.to_owned())); + } + } + assert_eq!(observed, expected); + } + #[test] fn dynamic_tsjs_fallback_is_get_only() { assert!( diff --git a/crates/trusted-server-adapter-spin/src/app.rs b/crates/trusted-server-adapter-spin/src/app.rs index e6abe75ea..804ce28d2 100644 --- a/crates/trusted-server-adapter-spin/src/app.rs +++ b/crates/trusted-server-adapter-spin/src/app.rs @@ -1333,4 +1333,24 @@ mod tests { "startup-fallback health body should be `ok`" ); } + + #[test] + fn startup_error_route_set_matches_the_prechange_contract() { + let report = Report::new(TrustedServerError::BadRequest { + message: "startup failure".to_owned(), + }); + let observed = startup_error_router(&report) + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect::>(); + let mut expected = std::collections::BTreeSet::new(); + for path in ["/", "/{*rest}"] { + for method in ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] { + expected.insert((method.to_owned(), path.to_owned())); + } + } + expected.insert(("GET".to_owned(), "/health".to_owned())); + assert_eq!(observed, expected); + } } diff --git a/crates/trusted-server-adapter-spin/tests/routes.rs b/crates/trusted-server-adapter-spin/tests/routes.rs index f75ea687e..bb18ead59 100644 --- a/crates/trusted-server-adapter-spin/tests/routes.rs +++ b/crates/trusted-server-adapter-spin/tests/routes.rs @@ -6,6 +6,8 @@ //! that depends on external stores assert routing only; deterministic auth and //! method gates assert exact status codes. +use std::collections::BTreeSet; + use edgezero_core::app::Hooks as _; use edgezero_core::http::{Request, Response, request_builder}; use edgezero_core::router::RouterService; @@ -44,6 +46,14 @@ fn test_router() -> RouterService { .expect("should build router from test settings") } +fn registered_routes() -> BTreeSet<(String, String)> { + test_router() + .routes() + .into_iter() + .map(|route| (route.method().to_string(), route.path().to_owned())) + .collect() +} + async fn route(router: RouterService, req: Request) -> Response { router.oneshot(req).await.expect("should route request") } @@ -55,6 +65,42 @@ fn routes_build_without_panic() { let _router = TrustedServerApp::routes(); } +#[test] +fn complete_route_registration_set_matches_the_prechange_contract() { + let named_paths = [ + "/.well-known/trusted-server.json", + "/verify-signature", + "/_ts/admin/keys/rotate", + "/_ts/admin/keys/deactivate", + "/_ts/admin/ec", + "/_ts/admin/ec/{id}", + "/_ts/admin/eids", + "/admin/keys/rotate", + "/admin/keys/deactivate", + "/auction", + "/_ts/page-bids", + "/__ts/page-bids", + "/first-party/proxy", + "/first-party/click", + "/first-party/sign", + "/first-party/proxy-rebuild", + ]; + let fallback_methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"]; + let mut expected = BTreeSet::new(); + for path in named_paths.into_iter().chain(["/", "/{*rest}"]) { + for method in fallback_methods { + expected.insert((method.to_owned(), path.to_owned())); + } + } + expected.insert(("GET".to_owned(), "/health".to_owned())); + + assert_eq!( + registered_routes(), + expected, + "Spin route registration must preserve every named/fallback method exactly" + ); +} + #[test] fn edgezero_manifest_loads_and_resolves_spin_stores() { let loader = edgezero_core::manifest::ManifestLoader::load_from_str(include_str!( diff --git a/crates/trusted-server-core/src/auction/profile.rs b/crates/trusted-server-core/src/auction/profile.rs index 8f5b25806..9021d0bd9 100644 --- a/crates/trusted-server-core/src/auction/profile.rs +++ b/crates/trusted-server-core/src/auction/profile.rs @@ -323,3 +323,84 @@ fn reject_reserved_fields( } Ok(()) } + +#[cfg(test)] +mod tests { + use std::collections::BTreeSet; + + use serde::Deserialize; + use serde_json::json; + + use super::*; + + #[derive(Deserialize)] + struct Task7CheckedManifest { + template: Task7CheckedTemplate, + } + + #[derive(Deserialize)] + struct Task7CheckedTemplate { + profile_ids: BTreeSet, + } + + fn task7_checked_profile_ids() -> BTreeSet { + let checked: Task7CheckedManifest = toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/settings-companions.toml" + ))) + .expect("checked Task 7 settings manifest should parse"); + checked.template.profile_ids + } + + #[test] + fn task7_profile_registry_and_compiler_probes_are_exact() { + let registrations = profile_registrations() + .iter() + .map(|registration| registration.id.to_owned()) + .collect::>(); + assert_eq!( + registrations, + BTreeSet::from([ + APS_PROFILE_ID.to_owned(), + PREBID_PROFILE_ID.to_owned(), + STANDARD_PROFILE_ID.to_owned(), + ]) + ); + assert_eq!( + registrations, + task7_checked_profile_ids(), + "profile registry and checked documentation record should be equal" + ); + + for (id, positive, negative) in [ + ( + STANDARD_PROFILE_ID, + json!({"request_ext": {"fictional": true}}), + json!({"unknown": true}), + ), + ( + PREBID_PROFILE_ID, + json!({"debug": true}), + json!({"unknown": true}), + ), + ( + APS_PROFILE_ID, + json!({"account_id": "fictional-account"}), + json!({}), + ), + ] { + let registration = find_profile(id).expect("registered profile should resolve"); + let compiled = registration + .compile(&positive) + .unwrap_or_else(|error| panic!("{id} positive probe should compile: {error:?}")); + assert_eq!(compiled.id(), id); + let error = registration + .compile(&negative) + .expect_err("negative profile probe should fail"); + assert!( + error.to_string().contains("profile_config"), + "{id} negative probe should identify profile_config: {error:?}" + ); + } + } +} diff --git a/crates/trusted-server-core/src/config.rs b/crates/trusted-server-core/src/config.rs index fb88448a0..5e7f8f738 100644 --- a/crates/trusted-server-core/src/config.rs +++ b/crates/trusted-server-core/src/config.rs @@ -432,13 +432,15 @@ fn report_to_validation_error( #[cfg(test)] mod tests { - use std::collections::HashSet; + use std::collections::{BTreeMap, BTreeSet}; use super::*; + use crate::platform::{PlatformError, PlatformSecretStore, StoreId, StoreName}; use crate::redacted::Redacted; use crate::settings::{ProxyAssetRoute, S3SigV4AuthConfig}; use crate::test_support::tests::crate_test_settings_str; use edgezero_core::app_config::AppConfigMeta; + use edgezero_core::blob_envelope::BlobEnvelope; #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] @@ -453,6 +455,33 @@ mod tests { slot: Vec, } + #[derive(Deserialize)] + struct Task7CheckedManifest { + template: Task7CheckedTemplate, + } + + #[derive(Deserialize)] + struct Task7CheckedTemplate { + placeholder_paths: BTreeSet, + integration_ids: BTreeSet, + profile_ids: BTreeSet, + consumer_literals: BTreeSet, + expected_failure_diagnostic: String, + } + + fn task7_checked_template() -> Task7CheckedTemplate { + let checked: Task7CheckedManifest = toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/settings-companions.toml" + ))) + .expect("checked Task 7 settings manifest should parse"); + checked.template + } + + fn task7_checked_integration_ids() -> BTreeSet { + task7_checked_template().integration_ids + } + fn app_config_with_creative_opportunities( gam_unit_path: Option<&str>, ) -> TrustedServerAppConfig { @@ -495,6 +524,40 @@ formats = [{ width = 300, height = 250 }] settings } + struct Task7SecretStore; + + impl PlatformSecretStore for Task7SecretStore { + fn get_bytes( + &self, + _store_name: &StoreName, + key: &str, + ) -> Result, Report> { + let resolved = match key { + "publisher_proxy_secret" => "fictional-proxy-secret-32-bytes-ok", + "ec_passphrase" => "fictional-ec-passphrase-32-bytes-ok", + "handler_password" => "fictional-admin-password-32-bytes-ok", + _ => { + return Err(Report::new(PlatformError::SecretStore) + .attach(format!("unexpected Task 7 secret key: {key}"))); + } + }; + Ok(resolved.as_bytes().to_vec()) + } + + fn create( + &self, + _store_id: &StoreId, + _name: &str, + _value: &str, + ) -> Result<(), Report> { + Ok(()) + } + + fn delete(&self, _store_id: &StoreId, _name: &str) -> Result<(), Report> { + Ok(()) + } + } + /// Source-controlled operator-facing config template. const EXAMPLE_TEMPLATE: &str = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), @@ -537,7 +600,12 @@ formats = [{ width = 300, height = 250 }] .strip_prefix("# ") .or_else(|| line.strip_prefix('#')) .unwrap_or(line); - out.push(bare.to_owned()); + let syntax = bare.trim_start(); + if syntax.starts_with('[') || syntax.contains('=') { + out.push(bare.to_owned()); + } else { + out.push(line.to_owned()); + } } else { out.push(line.to_owned()); } @@ -1140,17 +1208,121 @@ password = "production-admin-password-32-bytes" } #[test] - fn deploy_validation_covers_registered_integration_builders() { - let validated_ids: HashSet<&'static str> = - DEPLOY_VALIDATED_INTEGRATION_IDS.iter().copied().collect(); - let missing_ids = crate::integrations::registered_builder_ids() - .filter(|id| !validated_ids.contains(id)) - .collect::>(); + fn deploy_validation_ids_match_checked_settings_record() { + let validated_ids: BTreeSet = DEPLOY_VALIDATED_INTEGRATION_IDS + .iter() + .map(|id| (*id).to_owned()) + .collect(); + let registered_ids: BTreeSet = crate::integrations::registered_builder_ids() + .map(str::to_owned) + .collect(); assert!( - missing_ids.is_empty(), - "deploy validation should cover all registered integration builders: {missing_ids:?}" + registered_ids.is_subset(&validated_ids), + "deploy validation IDs should cover every registered integration builder" + ); + + assert_eq!( + validated_ids, + task7_checked_integration_ids(), + "deploy validation IDs and the checked documentation record should be equal" + ); + } + + #[test] + fn task7_enables_every_deploy_validated_integration_in_isolation() { + let blocks = task7_source_integration_blocks(); + assert_eq!( + blocks + .keys() + .map(|id| (*id).to_owned()) + .collect::>(), + task7_checked_integration_ids(), + "source-template integration blocks and checked IDs must be equal" ); + for (id, header) in blocks { + let mut settings = task7_settings_with_source_integration_enabled(id, header); + validate_settings_for_deploy(&settings) + .unwrap_or_else(|error| panic!("{id} should validate while enabled: {error:?}")); + + settings + .integrations + .get_mut(id) + .and_then(serde_json::Value::as_object_mut) + .expect("source integration block should be an object") + .insert( + "enabled".to_owned(), + serde_json::Value::String("not-a-bool".to_owned()), + ); + assert!( + validate_settings_for_deploy(&settings).is_err(), + "{id} should reject its source-derived negative probe" + ); + } + } + + fn task7_source_integration_blocks() -> BTreeMap<&'static str, &'static str> { + BTreeMap::from([ + ("adserver_mock", "[integrations.adserver_mock]"), + ("aps", "[integrations.aps]"), + ("datadome", "[integrations.datadome]"), + ("didomi", "[integrations.didomi]"), + ("google_tag_manager", "[integrations.google_tag_manager]"), + ("gpt", "[integrations.gpt]"), + ("gpt_diagnostics", "[integrations.gpt_diagnostics]"), + ("lockr", "[integrations.lockr]"), + ("nextjs", "[integrations.nextjs]"), + ("osano", "[integrations.osano]"), + ("permutive", "[integrations.permutive]"), + ("prebid", "[integrations.prebid]"), + ("sourcepoint", "[integrations.sourcepoint]"), + ("testlight", "[integrations.testlight]"), + ]) + } + + fn task7_settings_with_source_integration_enabled(id: &str, header: &str) -> Settings { + let source = if EXAMPLE_TEMPLATE.lines().any(|line| line == header) { + EXAMPLE_TEMPLATE.to_owned() + } else { + let commented = format!("# {header}"); + assert!( + EXAMPLE_TEMPLATE.lines().any(|line| line == commented), + "{id} must be represented by an exact source-template block" + ); + uncomment_block(EXAMPLE_TEMPLATE, header) + }; + let mut settings = toml::from_str::(&source) + .unwrap_or_else(|error| panic!("source-derived {id} block should parse: {error}")) + .into_settings(); + task7_customize_nonsecret_values(&mut settings); + let raw = settings + .integrations + .get_mut(id) + .unwrap_or_else(|| panic!("source-derived {id} block should exist")); + let object = raw + .as_object_mut() + .unwrap_or_else(|| panic!("source-derived {id} block should be an object")); + object.insert("enabled".to_owned(), serde_json::Value::Bool(true)); + match id { + "prebid" => { + object.insert( + "external_bundle_url".to_owned(), + serde_json::json!("https://assets.example.com/prebid.js"), + ); + settings.proxy.allowed_domains = vec!["assets.example.com".to_owned()]; + } + "google_tag_manager" => { + object.insert("container_id".to_owned(), serde_json::json!("GTM-ABC123")); + } + _ => {} + } + settings + } + + fn task7_customize_nonsecret_values(settings: &mut Settings) { + settings.publisher.domain = "publisher.example".to_owned(); + settings.publisher.cookie_domain = ".publisher.example".to_owned(); + settings.publisher.origin_url = "https://origin.publisher.example".to_owned(); } #[test] @@ -1230,4 +1402,401 @@ password = "production-admin-password-32-bytes" "validation error should mention invalid provider" ); } + + #[test] + fn task7_source_template_round_trips_through_production_apis() { + let observation = run_task7_template_harness() + .expect("source template should pass every production harness phase"); + let checked = task7_checked_template(); + assert_eq!(observation.placeholder_paths, checked.placeholder_paths); + assert_eq!( + observation.failure_diagnostic, + checked.expected_failure_diagnostic + ); + assert_eq!( + observation.integration_ids, checked.integration_ids, + "source-derived integration probe set must be exact" + ); + assert_eq!( + observation.profile_ids, checked.profile_ids, + "source-derived profile compile set must be exact" + ); + assert_eq!( + observation.consumer_literals, checked.consumer_literals, + "serialized secret-key consumer literals must be exact" + ); + } + + #[test] + fn task7_standard_profile_probe_is_derived_from_the_source_template() { + let cases = task7_source_profile_cases().expect("source profile cases should parse"); + let (positive, negative) = cases + .get("standard") + .expect("source profile cases should contain standard"); + let registration = crate::auction::profile::find_profile("standard") + .expect("standard profile should be registered"); + let compiled = registration + .compile(positive) + .expect("source standard profile config should compile"); + assert_eq!(compiled.id(), "standard"); + let error = registration + .compile(negative) + .expect_err("malformed source-derived request_ext should fail"); + assert!(error.to_string().contains("request_ext")); + } + + #[test] + fn task7_production_harness_rejects_all_eight_contract_mutations() { + let typo_source = EXAMPLE_TEMPLATE.replacen( + "origin_url = \"https://origin.example.com\"", + "orgin_url = \"https://origin.example.com\"", + 1, + ); + toml::from_str::(&typo_source) + .expect_err("a source-template key typo must fail typed parsing"); + + let mut disabled_unknown = toml::from_str::(EXAMPLE_TEMPLATE) + .expect("source template should parse") + .into_settings(); + task7_customize_nonsecret_values(&mut disabled_unknown); + disabled_unknown + .integrations + .get_mut("prebid") + .and_then(serde_json::Value::as_object_mut) + .expect("source Prebid block should be an object") + .insert("task7_unknown".to_owned(), serde_json::Value::Bool(true)); + let _error = validate_settings_for_deploy(&disabled_unknown) + .expect_err("an unknown key must fail even in a disabled source block"); + + let mut bad_profile = toml::from_str::(EXAMPLE_TEMPLATE) + .expect("source template should parse") + .into_settings(); + task7_customize_nonsecret_values(&mut bad_profile); + bad_profile + .auction + .providers + .values_mut() + .find(|provider| provider.profile == "prebid-server") + .expect("source Prebid provider should exist") + .profile_config + .as_object_mut() + .expect("source profile config should be an object") + .insert("task7_unknown".to_owned(), serde_json::Value::Bool(true)); + let _error = validate_settings_for_deploy(&bad_profile) + .expect_err("a bad source-derived provider profile must fail compilation"); + + let mut unresolved = task7_serialized_source_config(EXAMPLE_TEMPLATE) + .expect("customized source template should serialize"); + *unresolved + .pointer_mut("/publisher/proxy_secret") + .expect("serialized publisher secret path should exist") = + serde_json::json!("task7_missing_secret"); + task7_resolve_envelope(unresolved) + .expect_err("an unresolved secret key must fail fake-store resolution"); + + let stranded_source = EXAMPLE_TEMPLATE.replacen( + "password = \"handler_password\"", + "password = \"handler_password_stranded\"", + 1, + ); + let stranded = task7_serialized_source_config(&stranded_source) + .expect("stranded-literal source mutation should serialize"); + assert_eq!( + task7_serialized_secret_literals(&stranded) + .expect("stranded source should retain all secret paths"), + BTreeSet::from([ + "ec_passphrase".to_owned(), + "handler_password_stranded".to_owned(), + "publisher_proxy_secret".to_owned(), + ]), + "stranded source literal must produce the exact wrong consumer set" + ); + task7_resolve_envelope(stranded) + .expect_err("a stranded literal must fail the production fake-store path"); + + let mut inactive = + task7_settings_with_source_integration_enabled("permutive", "[integrations.permutive]"); + let inactive_raw = inactive + .integrations + .get_mut("permutive") + .and_then(serde_json::Value::as_object_mut) + .expect("source Permutive block should be an object"); + inactive_raw.insert("enabled".to_owned(), serde_json::Value::Bool(false)); + inactive_raw.insert( + "organization_id".to_owned(), + serde_json::Value::String(String::new()), + ); + validate_settings_for_deploy(&inactive) + .expect("inactive invalid value demonstrates why forced-enabled probing is required"); + inactive + .integrations + .get_mut("permutive") + .and_then(serde_json::Value::as_object_mut) + .expect("source Permutive block should be an object") + .insert("enabled".to_owned(), serde_json::Value::Bool(true)); + let _error = validate_settings_for_deploy(&inactive) + .expect_err("the same source-derived block must fail when forced enabled"); + + let missing_profile = task7_probe_source_profiles(Some("aps")) + .expect("remaining source-derived profiles should compile"); + let checked_profiles = task7_checked_template().profile_ids; + assert_eq!( + missing_profile, + BTreeSet::from(["prebid-server".to_owned(), "standard".to_owned()]) + ); + assert_ne!( + missing_profile, checked_profiles, + "omitting a compiled provider profile must fail exact set equality" + ); + + let mut wrong_diagnostic = toml::from_str::(EXAMPLE_TEMPLATE) + .expect("source template should parse") + .into_settings(); + wrong_diagnostic.publisher.origin_url = "https://origin.publisher.example".to_owned(); + let (wrong_paths, wrong_text) = task7_placeholder_observation(&wrong_diagnostic) + .expect("remaining placeholders should produce a typed diagnostic"); + assert_eq!( + wrong_paths, + BTreeSet::from([ + "publisher.cookie_domain".to_owned(), + "publisher.domain".to_owned(), + ]) + ); + assert_eq!( + wrong_text, + "unmodified template rejects publisher.cookie_domain, publisher.domain" + ); + assert_ne!( + wrong_text, + task7_checked_template().expected_failure_diagnostic, + "a partial placeholder diagnostic must fail exact equality" + ); + } + + #[derive(Debug, Eq, PartialEq)] + struct Task7HarnessObservation { + placeholder_paths: BTreeSet, + integration_ids: BTreeSet, + profile_ids: BTreeSet, + consumer_literals: BTreeSet, + failure_diagnostic: String, + } + + fn run_task7_template_harness() -> Result { + let source: TrustedServerAppConfig = toml::from_str(EXAMPLE_TEMPLATE) + .map_err(|error| format!("source template parse failed: {error}"))?; + let (placeholder_paths, failure_diagnostic) = + task7_placeholder_observation(source.settings())?; + + let mut settings = source.into_settings(); + task7_customize_nonsecret_values(&mut settings); + validate_settings_for_deploy(&settings) + .map_err(|error| format!("deploy validation failed: {error:?}"))?; + + let app_config = TrustedServerAppConfig::new(settings) + .map_err(|error| format!("typed app config failed: {error:?}"))?; + let data = serde_json::to_value(&app_config) + .map_err(|error| format!("app config serialization failed: {error}"))?; + let consumer_literals = task7_serialized_secret_literals(&data)?; + + let envelope = BlobEnvelope::new(data, "2026-01-01T00:00:00Z".to_owned()); + let envelope_json = serde_json::to_string(&envelope) + .map_err(|error| format!("blob envelope serialization failed: {error}"))?; + let runtime = crate::config_payload::settings_from_config_blob( + &envelope_json, + &Task7SecretStore, + &StoreName::from("trusted_server_secrets"), + ) + .map_err(|error| format!("runtime settings resolution failed: {error:?}"))?; + + assert_eq!( + runtime.publisher.proxy_secret.expose(), + "fictional-proxy-secret-32-bytes-ok" + ); + assert_eq!( + runtime.ec.passphrase.expose(), + "fictional-ec-passphrase-32-bytes-ok" + ); + assert_eq!( + runtime.handlers[0].password.expose(), + "fictional-admin-password-32-bytes-ok" + ); + let integration_ids = task7_probe_source_integrations()?; + let profile_ids = task7_probe_source_profiles(None)?; + Ok(Task7HarnessObservation { + placeholder_paths, + integration_ids, + profile_ids, + consumer_literals, + failure_diagnostic, + }) + } + + fn task7_placeholder_observation( + settings: &Settings, + ) -> Result<(BTreeSet, String), String> { + let error = validate_settings_for_deploy(settings) + .expect_err("unmodified source template must reject its placeholders"); + let TrustedServerError::InsecureDefault { field } = error.current_context() else { + return Err(format!( + "unexpected source-template failure context: {:?}", + error.current_context() + )); + }; + let paths = field + .split(", ") + .map(str::to_owned) + .collect::>(); + let diagnostic = format!( + "unmodified template rejects {}", + paths.iter().cloned().collect::>().join(", ") + ); + Ok((paths, diagnostic)) + } + + fn task7_serialized_secret_literals( + data: &serde_json::Value, + ) -> Result, String> { + [ + "/publisher/proxy_secret", + "/ec/passphrase", + "/handlers/0/password", + ] + .into_iter() + .map(|pointer| { + data.pointer(pointer) + .and_then(serde_json::Value::as_str) + .map(str::to_owned) + .ok_or_else(|| format!("missing serialized secret-key literal at {pointer}")) + }) + .collect() + } + + fn task7_serialized_source_config(source: &str) -> Result { + let mut settings = toml::from_str::(source) + .map_err(|error| format!("source template parse failed: {error}"))? + .into_settings(); + task7_customize_nonsecret_values(&mut settings); + validate_settings_for_deploy(&settings) + .map_err(|error| format!("source deploy validation failed: {error:?}"))?; + let app_config = TrustedServerAppConfig::new(settings) + .map_err(|error| format!("source typed app config failed: {error:?}"))?; + serde_json::to_value(app_config) + .map_err(|error| format!("source app config serialization failed: {error}")) + } + + fn task7_resolve_envelope(data: serde_json::Value) -> Result { + let envelope = BlobEnvelope::new(data, "2026-01-01T00:00:00Z".to_owned()); + let envelope_json = serde_json::to_string(&envelope) + .map_err(|error| format!("blob envelope serialization failed: {error}"))?; + crate::config_payload::settings_from_config_blob( + &envelope_json, + &Task7SecretStore, + &StoreName::from("trusted_server_secrets"), + ) + .map_err(|error| format!("runtime settings resolution failed: {error:?}")) + } + + fn task7_probe_source_integrations() -> Result, String> { + let mut observed = BTreeSet::new(); + for (id, header) in task7_source_integration_blocks() { + let settings = task7_settings_with_source_integration_enabled(id, header); + validate_settings_for_deploy(&settings) + .map_err(|error| format!("source-derived {id} probe failed: {error:?}"))?; + observed.insert(id.to_owned()); + } + Ok(observed) + } + + fn task7_probe_source_profiles(omitted: Option<&str>) -> Result, String> { + let cases = task7_source_profile_cases()?; + let mut observed = BTreeSet::new(); + for (id, (positive, negative)) in cases { + if omitted == Some(id) { + continue; + } + let registration = crate::auction::profile::find_profile(id) + .ok_or_else(|| format!("source-derived profile {id} is not registered"))?; + let compiled = registration + .compile(&positive) + .map_err(|error| format!("source-derived profile {id} failed: {error:?}"))?; + if compiled.id() != id { + return Err(format!( + "source-derived profile {id} compiled as {}", + compiled.id() + )); + } + if registration.compile(&negative).is_ok() { + return Err(format!("source-derived profile {id} negative probe passed")); + } + observed.insert(id.to_owned()); + } + Ok(observed) + } + + fn task7_source_profile_cases() + -> Result, String> { + let source = toml::from_str::(EXAMPLE_TEMPLATE) + .map_err(|error| format!("source template profile parse failed: {error}"))? + .into_settings(); + let pbs = source + .auction + .providers + .values() + .find(|provider| provider.profile == "prebid-server") + .ok_or_else(|| "source template has no prebid-server provider".to_owned())?; + let aps_source = uncomment_block( + &uncomment_block(EXAMPLE_TEMPLATE, "[auction.providers.aps-main]"), + "[auction.providers.aps-main.profile_config]", + ); + let aps_settings = toml::from_str::(&aps_source) + .map_err(|error| format!("source APS provider parse failed: {error}"))? + .into_settings(); + let aps = aps_settings + .auction + .providers + .values() + .find(|provider| provider.profile == "aps") + .ok_or_else(|| "source template has no APS provider".to_owned())?; + let standard_source = uncomment_block( + &uncomment_block(EXAMPLE_TEMPLATE, "[auction.providers.standard-main]"), + "[auction.providers.standard-main.profile_config]", + ); + let standard_settings = toml::from_str::(&standard_source) + .map_err(|error| format!("source standard provider parse failed: {error}"))? + .into_settings(); + let standard = standard_settings + .auction + .providers + .values() + .find(|provider| provider.profile == "standard") + .ok_or_else(|| "source template has no standard provider".to_owned())?; + let mut malformed_standard = standard.profile_config.clone(); + let request_ext = malformed_standard + .as_object_mut() + .and_then(|object| object.get_mut("request_ext")) + .ok_or_else(|| "source standard profile does not exercise request_ext".to_owned())?; + *request_ext = serde_json::Value::String("not-an-object".to_owned()); + + Ok(BTreeMap::from([ + ( + "aps", + ( + aps.profile_config.clone(), + serde_json::json!({"debug": false}), + ), + ), + ( + "prebid-server", + ( + pbs.profile_config.clone(), + serde_json::json!({"unknown": true}), + ), + ), + ( + "standard", + (standard.profile_config.clone(), malformed_standard), + ), + ])) + } } diff --git a/crates/trusted-server-core/src/integrations/aps.rs b/crates/trusted-server-core/src/integrations/aps.rs index 6bffddf16..64ca0edc7 100644 --- a/crates/trusted-server-core/src/integrations/aps.rs +++ b/crates/trusted-server-core/src/integrations/aps.rs @@ -1963,6 +1963,8 @@ pub fn register_providers( #[cfg(test)] mod tests { + use std::collections::BTreeSet; + use super::*; use crate::auction::test_support::canonical_parity_auction_request; use crate::auction::types::{ @@ -1975,6 +1977,53 @@ mod tests { use crate::test_support::tests::create_test_settings; use serde_json::json; + #[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] + struct Task7CompanionReceipt { + source: String, + symbol: String, + kind: String, + value: Option, + positive_probe: String, + negative_probe: String, + } + + #[derive(Deserialize)] + struct Task7CompanionManifest { + companions: Vec, + } + + macro_rules! task7_companion_receipt { + ($positive:ident, $negative:ident, $symbol:literal, $kind:literal, $value:expr, $positive_body:block, $negative_body:block) => {{ + fn $positive() $positive_body + fn $negative() $negative_body + $positive(); + $negative(); + let value: Option<&str> = $value; + Task7CompanionReceipt { + source: "crates/trusted-server-core/src/integrations/aps.rs".to_owned(), + symbol: $symbol.to_owned(), + kind: $kind.to_owned(), + value: value.map(str::to_owned), + positive_probe: stringify!($positive).to_owned(), + negative_probe: stringify!($negative).to_owned(), + } + }}; + ($positive:ident, $negative:ident, $symbol:literal, $kind:literal, dynamic $value:expr, $positive_body:block, $negative_body:block) => {{ + fn $positive() $positive_body + fn $negative() $negative_body + $positive(); + $negative(); + Task7CompanionReceipt { + source: "crates/trusted-server-core/src/integrations/aps.rs".to_owned(), + symbol: $symbol.to_owned(), + kind: $kind.to_owned(), + value: Some($value), + positive_probe: stringify!($positive).to_owned(), + negative_probe: stringify!($negative).to_owned(), + } + }}; + } + fn config() -> LegacyApsProviderConfig { LegacyApsProviderConfig { enabled: true, @@ -3248,4 +3297,29 @@ mod tests { assert!(APS_RENDERER_CSP.contains("sandbox allow-forms")); assert!(!APS_RENDERER_CSP.contains("allow-same-origin")); } + + #[test] + fn task7_aps_companions_are_exact_and_compiled_per_record() { + let actual = BTreeSet::from([task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_aps_rs_deserialize_account_id_deserializer_positive, + task7_crates_trusted_server_core_src_integrations_aps_rs_deserialize_account_id_deserializer_negative, + "deserialize_account_id", "deserializer", None, + { + let numeric: ApsProfileConfig = serde_json::from_value(json!({"account_id":12345})).expect("numeric account ID should deserialize"); + assert_eq!(numeric.account_id, "12345"); + }, + { serde_json::from_value::(json!({"account_id":[]})).expect_err("array account ID should fail"); } + )]); + let checked: Task7CompanionManifest = toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/settings-companions.toml" + ))) + .expect("checked Task 7 companion manifest should parse"); + let expected = checked + .companions + .into_iter() + .filter(|record| record.source == "crates/trusted-server-core/src/integrations/aps.rs") + .collect::>(); + assert_eq!(actual, expected, "compiled APS receipts must be exact"); + } } diff --git a/crates/trusted-server-core/src/integrations/prebid.rs b/crates/trusted-server-core/src/integrations/prebid.rs index 31b265cae..ca674ecbc 100644 --- a/crates/trusted-server-core/src/integrations/prebid.rs +++ b/crates/trusted-server-core/src/integrations/prebid.rs @@ -3425,10 +3425,43 @@ mod tests { use bytes::Bytes; use http::Method; use serde_json::json; - use std::collections::{BTreeMap, HashMap}; + use std::collections::{BTreeMap, BTreeSet, HashMap}; use std::io::Cursor; use std::str::FromStr as _; + #[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] + struct Task7CompanionReceipt { + source: String, + symbol: String, + kind: String, + value: Option, + positive_probe: String, + negative_probe: String, + } + + #[derive(Deserialize)] + struct Task7CompanionManifest { + companions: Vec, + } + + macro_rules! task7_companion_receipt { + ($positive:ident, $negative:ident, $symbol:literal, $kind:literal, $value:expr, $positive_body:block, $negative_body:block) => {{ + fn $positive() $positive_body + fn $negative() $negative_body + $positive(); + $negative(); + let value: Option<&str> = $value; + Task7CompanionReceipt { + source: "crates/trusted-server-core/src/integrations/prebid.rs".to_owned(), + symbol: $symbol.to_owned(), + kind: $kind.to_owned(), + value: value.map(str::to_owned), + positive_probe: stringify!($positive).to_owned(), + negative_probe: stringify!($negative).to_owned(), + } + }}; + } + #[test] fn external_bundle_sha256_validation_matches_hex_pattern() { use validator::Validate as _; @@ -9221,4 +9254,61 @@ set = { networkId = 42 } "should preserve the complete enabled PBS wire shape" ); } + + #[test] + fn task7_prebid_companions_are_exact_and_compiled_per_record() { + let actual = BTreeSet::from([ + task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_prebid_rs_default_script_patterns_default_positive, + task7_crates_trusted_server_core_src_integrations_prebid_rs_default_script_patterns_default_negative, + "default_script_patterns", "default", Some("[/prebid.js,/prebid.min.js,/prebidjs.js,/prebidjs.min.js]"), + { assert_eq!(default_script_patterns(), ["/prebid.js", "/prebid.min.js", "/prebidjs.js", "/prebidjs.min.js"]); }, + { assert_ne!(default_script_patterns(), ["/prebid.js"]); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_prebid_rs_crate_settings_vec_from_seq_or_map_deserializer_positive, + task7_crates_trusted_server_core_src_integrations_prebid_rs_crate_settings_vec_from_seq_or_map_deserializer_negative, + "crate::settings::vec_from_seq_or_map", "deserializer", None, + { + let parsed: PrebidIntegrationConfig = toml::from_str("script_patterns = { 0 = \"first\", 1 = \"second\" }").expect("map script patterns should deserialize"); + assert_eq!(parsed.script_patterns, ["first", "second"]); + }, + { toml::from_str::("script_patterns = 42").expect_err("scalar script patterns should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_url_validator_positive, + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_url_validator_negative, + "validate_external_bundle_url", "validator", None, + { validate_external_bundle_url("https://assets.example/prebid.js").expect("HTTPS URL should validate"); }, + { validate_external_bundle_url("http://assets.example/prebid.js").expect_err("insecure URL should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_sri_validator_positive, + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_sri_validator_negative, + "validate_external_bundle_sri", "validator", None, + { validate_external_bundle_sri(&test_sri("sha384", &[0; 48])).expect("algorithm-sized SRI should validate"); }, + { validate_external_bundle_sri("sha384-AAAA").expect_err("wrong-size SRI should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_excluded_gam_ad_unit_path_suffixes_validator_positive, + task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_excluded_gam_ad_unit_path_suffixes_validator_negative, + "validate_excluded_gam_ad_unit_path_suffixes", "validator", None, + { validate_excluded_gam_ad_unit_path_suffixes(&["/excluded".to_owned()]).expect("non-root suffix should validate"); }, + { validate_excluded_gam_ad_unit_path_suffixes(&["/".to_owned()]).expect_err("root suffix should fail"); } + ), + ]); + let checked: Task7CompanionManifest = toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/settings-companions.toml" + ))) + .expect("checked Task 7 companion manifest should parse"); + let expected = checked + .companions + .into_iter() + .filter(|record| { + record.source == "crates/trusted-server-core/src/integrations/prebid.rs" + }) + .collect::>(); + assert_eq!(actual, expected, "compiled Prebid receipts must be exact"); + } } diff --git a/crates/trusted-server-core/src/integrations/registry.rs b/crates/trusted-server-core/src/integrations/registry.rs index 5b11b105e..a846b202c 100644 --- a/crates/trusted-server-core/src/integrations/registry.rs +++ b/crates/trusted-server-core/src/integrations/registry.rs @@ -1383,10 +1383,16 @@ impl IntegrationRegistry { #[cfg(test)] mod tests { + use std::collections::BTreeSet; + use super::*; + use crate::auction::plan::AuctionPlanConfig; + use crate::auction::{AuctionPlan, NotificationConfig, ProviderConfig, RoutingMode}; use crate::constants::COOKIE_TS_EC; + use crate::integrations::aps::{ApsConfig, ApsRenderingMode}; use crate::platform::test_support::noop_services; use http::{HeaderValue, StatusCode, header}; + use serde::Deserialize; struct DefaultMetadataHeadInjector; @@ -2364,4 +2370,600 @@ mod tests { "should reconstruct full module list from immediate + deferred" ); } + + #[test] + fn task8_behavioral_capability_matrix_matches_checked_records_exactly() { + let manifest = task8_checked_manifest(); + task8_validate_bundle_receipt(&manifest.js_bundle_ids) + .expect("compiled JS bundles must equal the reviewed bundle inventory"); + let observed = task8_observed_capabilities(); + assert_eq!( + observed, + manifest.capabilities.into_iter().collect(), + "real integration registrations across every checked predicate must equal the reviewed capability records" + ); + let mut observed_loading = BTreeMap::new(); + for capability in &observed { + if capability.js_mode != "none" { + let previous = + observed_loading.insert(capability.id.clone(), capability.js_mode.clone()); + assert!( + previous + .as_ref() + .is_none_or(|mode| mode == &capability.js_mode), + "one integration must not report conflicting JS loading modes" + ); + } + } + assert_eq!( + observed_loading, + manifest + .loading_modes + .into_iter() + .map(|row| (row.id, row.mode)) + .collect(), + "real registration loading modes must equal the reviewed loading records" + ); + } + + #[test] + fn task8_predicate_negative_matrix_matches_registration_contracts() { + for (id, mut config) in task8_builder_fixtures() { + config["enabled"] = serde_json::Value::Bool(false); + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config(id, &config) + .expect("should insert disabled Task 8 integration config"); + let registration = crate::integrations::builders() + .iter() + .find(|builder| builder.id == id) + .and_then(|builder| { + (builder.build)(&settings).expect("should evaluate disabled integration") + }); + assert!( + registration.is_none(), + "disabled {id} must not register routes or hooks" + ); + } + let mut datadome_settings = crate::test_support::tests::create_test_settings(); + datadome_settings + .integrations + .insert_config( + "datadome", + &serde_json::json!({"enabled": false, "enable_protection": true}), + ) + .expect("should insert disabled DataDome config"); + assert!( + crate::integrations::builders() + .iter() + .find(|builder| builder.id == "datadome") + .and_then(|builder| { + (builder.build)(&datadome_settings).expect("should evaluate disabled DataDome") + }) + .is_none(), + "disabled DataDome must register neither proxy hooks nor protection filters" + ); + + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config( + "prebid", + &serde_json::json!({ + "enabled": false, + "external_bundle_url": "https://assets.example/prebid/trusted-prebid.js" + }), + ) + .expect("should insert disabled Prebid config"); + let plan = crate::auction::compile_auction_plan(&settings) + .expect("should compile plan with disabled Prebid"); + assert!( + crate::integrations::prebid::register_for_plan(&settings, &plan) + .expect("should evaluate disabled Prebid") + .is_none(), + "disabled Prebid must not register" + ); + + settings + .integrations + .insert_config( + "aps", + &ApsConfig { + enabled: false, + rendering_mode: ApsRenderingMode::TrustedServer, + }, + ) + .expect("should insert disabled APS config"); + assert!( + crate::integrations::aps::register_for_plan(&settings, &plan) + .expect("should evaluate APS without an APS plan profile") + .is_none(), + "APS browser config alone must not register without an APS plan profile" + ); + let aps_plan = AuctionPlan::compile(AuctionPlanConfig { + timeout_ms: 1_000, + providers: BTreeMap::from([( + "aps-disabled-fixture" + .parse() + .expect("should parse disabled APS provider ID"), + ProviderConfig { + protocol: "openrtb-2.6".to_owned(), + profile: "aps".to_owned(), + endpoint: "https://aps.example/openrtb".to_owned(), + timeout_ms: None, + routing: RoutingMode::AllEligible, + notifications: NotificationConfig::default(), + profile_config: serde_json::json!({"account_id": "example-account"}), + }, + )]), + ..AuctionPlanConfig::default() + }) + .expect("should compile a plan containing an APS profile"); + assert!( + crate::integrations::aps::register_for_plan(&settings, &aps_plan) + .expect("should evaluate APS with a plan profile") + .is_some(), + "APS registration is plan-backed; an APS profile registers even when the independent browser config is disabled" + ); + + settings + .integrations + .insert_config( + "adserver_mock", + &serde_json::json!({ + "enabled": false, + "endpoint": "https://adserver.example/mediate" + }), + ) + .expect("should insert disabled mediator config"); + assert!( + crate::integrations::adserver_mock::register_providers(&settings) + .expect("should evaluate disabled mediator") + .is_empty(), + "disabled mediator must not register providers" + ); + } + + #[test] + fn task8_compiled_receipts_reject_duplicate_capabilities_routes_and_hooks() { + for axis in [ + "proxy_routes", + "attribute_rewriters", + "script_rewriters", + "head_injectors", + "post_processors", + "request_filters", + "providers", + ] { + assert!( + task8_unique_receipt_values(axis, ["same", "same"]).is_err(), + "compiled {axis} observations must retain and reject duplicate cardinality" + ); + } + + let capability = Task8Capability { + id: "fixture".to_owned(), + predicate: "enabled=true".to_owned(), + proxy_routes: BTreeSet::new(), + attribute_rewriters: BTreeSet::new(), + script_rewriters: BTreeSet::new(), + head_injectors: BTreeSet::new(), + post_processors: BTreeSet::new(), + request_filters: BTreeSet::new(), + providers: BTreeSet::new(), + js_mode: "none".to_owned(), + }; + let mut capabilities = BTreeSet::new(); + task8_insert_capability(&mut capabilities, capability.clone()) + .expect("should insert the first compiled capability observation"); + assert!( + task8_insert_capability(&mut capabilities, capability).is_err(), + "compiled capability observations must reject duplicate rows" + ); + + let compiled = trusted_server_js::all_module_ids() + .into_iter() + .map(str::to_owned) + .collect::>(); + let mut duplicate_bundle = compiled.clone(); + duplicate_bundle.push(compiled[0].clone()); + assert!(task8_validate_bundle_receipt(&duplicate_bundle).is_err()); + let mut missing_bundle = compiled.clone(); + missing_bundle.pop(); + assert!(task8_validate_bundle_receipt(&missing_bundle).is_err()); + let mut nonexistent_bundle = compiled; + nonexistent_bundle.push("nonexistent".to_owned()); + assert!(task8_validate_bundle_receipt(&nonexistent_bundle).is_err()); + } + + #[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] + #[serde(deny_unknown_fields)] + struct Task8Capability { + id: String, + predicate: String, + #[serde(default)] + proxy_routes: BTreeSet, + #[serde(default)] + attribute_rewriters: BTreeSet, + #[serde(default)] + script_rewriters: BTreeSet, + #[serde(default)] + head_injectors: BTreeSet, + #[serde(default)] + post_processors: BTreeSet, + #[serde(default)] + request_filters: BTreeSet, + #[serde(default)] + providers: BTreeSet, + js_mode: String, + } + + #[derive(Deserialize)] + struct Task8Manifest { + #[serde(default)] + js_bundle_ids: Vec, + #[serde(default)] + capabilities: Vec, + #[serde(default)] + loading_modes: Vec, + } + + #[derive(Deserialize)] + struct Task8Loading { + id: String, + mode: String, + } + + fn task8_checked_manifest() -> Task8Manifest { + toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/integrations.toml" + ))) + .expect("should parse checked Task 8 integration manifest") + } + + fn task8_unique_receipt_values(axis: &str, values: I) -> Result, String> + where + I: IntoIterator, + S: AsRef, + { + let values = values + .into_iter() + .map(|value| value.as_ref().to_owned()) + .collect::>(); + let count = values.len(); + let unique = values.into_iter().collect::>(); + if unique.len() != count { + Err(format!("duplicate compiled {axis} observation")) + } else { + Ok(unique) + } + } + + fn task8_validate_bundle_receipt(expected: &[String]) -> Result<(), String> { + let compiled = trusted_server_js::all_module_ids(); + let compiled_set = task8_unique_receipt_values("JS bundle IDs", compiled.iter().copied())?; + let expected_set = task8_unique_receipt_values("checked JS bundle IDs", expected)?; + if compiled_set != expected_set { + return Err("compiled JS bundle inventory differs".to_owned()); + } + for id in expected { + if trusted_server_js::module_bundle(id).is_none() { + return Err(format!("checked JS bundle `{id}` has no emitted bundle")); + } + } + Ok(()) + } + + fn task8_insert_capability( + observations: &mut BTreeSet, + capability: Task8Capability, + ) -> Result<(), String> { + if observations.insert(capability) { + Ok(()) + } else { + Err("duplicate compiled capability observation".to_owned()) + } + } + + fn task8_observed_capabilities() -> BTreeSet { + let mut observations = BTreeSet::new(); + let empty_registry = IntegrationRegistry::empty_for_tests(); + let creative_mode = if empty_registry.js_module_ids_immediate() == ["creative"] + && empty_registry.js_module_ids_deferred().is_empty() + && trusted_server_js::module_bundle("creative").is_some() + { + "bundled" + } else { + "invalid" + }; + task8_insert_capability( + &mut observations, + Task8Capability { + id: "creative".to_owned(), + predicate: "always".to_owned(), + proxy_routes: BTreeSet::new(), + attribute_rewriters: BTreeSet::new(), + script_rewriters: BTreeSet::new(), + head_injectors: BTreeSet::new(), + post_processors: BTreeSet::new(), + request_filters: BTreeSet::new(), + providers: BTreeSet::new(), + js_mode: creative_mode.to_owned(), + }, + ) + .expect("should insert the creative capability observation"); + + for (id, config) in task8_builder_fixtures() { + task8_insert_capability( + &mut observations, + task8_builder_capability(id, &config, "enabled=true"), + ) + .expect("should insert a unique settings-builder capability observation"); + } + for capability in [ + task8_builder_capability( + "datadome", + &serde_json::json!({"enabled": true, "enable_protection": false}), + "enabled=true;enable_protection=false", + ), + task8_builder_capability( + "datadome", + &serde_json::json!({ + "enabled": true, + "enable_protection": true, + "server_side_key_secret_name": "example-key-name" + }), + "enabled=true;enable_protection=true", + ), + task8_prebid_capability(), + task8_aps_capability(ApsRenderingMode::TrustedServer), + task8_aps_capability(ApsRenderingMode::PublisherNative), + task8_mediator_capability(), + ] { + task8_insert_capability(&mut observations, capability) + .expect("should insert a unique compiled capability observation"); + } + observations + } + + fn task8_builder_fixtures() -> Vec<(&'static str, serde_json::Value)> { + vec![ + ( + "testlight", + serde_json::json!({ + "enabled": true, + "endpoint": "https://testlight.example/auction" + }), + ), + ("nextjs", serde_json::json!({"enabled": true})), + ( + "permutive", + serde_json::json!({ + "enabled": true, + "organization_id": "example-organization", + "workspace_id": "example-workspace" + }), + ), + ( + "lockr", + serde_json::json!({"enabled": true, "app_id": "example-app"}), + ), + ("didomi", serde_json::json!({"enabled": true})), + ("sourcepoint", serde_json::json!({"enabled": true})), + ("osano", serde_json::json!({"enabled": true})), + ( + "google_tag_manager", + serde_json::json!({"enabled": true, "container_id": "GTM-EXAMPLE"}), + ), + ("gpt", serde_json::json!({"enabled": true})), + ("gpt_diagnostics", serde_json::json!({"enabled": true})), + ] + } + + fn task8_builder_capability( + id: &'static str, + config: &serde_json::Value, + predicate: &str, + ) -> Task8Capability { + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config(id, config) + .expect("should insert Task 8 integration config"); + let registration = crate::integrations::builders() + .iter() + .find(|builder| builder.id == id) + .and_then(|builder| (builder.build)(&settings).expect("should run integration builder")) + .expect("enabled Task 8 integration should register"); + task8_capability(®istration, predicate) + } + + fn task8_prebid_capability() -> Task8Capability { + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config( + "prebid", + &serde_json::json!({ + "enabled": true, + "external_bundle_url": "https://assets.example/prebid/trusted-prebid.js" + }), + ) + .expect("should insert Task 8 Prebid config"); + let plan = crate::auction::compile_auction_plan(&settings) + .expect("should compile Task 8 Prebid plan"); + let registration = crate::integrations::prebid::register_for_plan(&settings, &plan) + .expect("should run plan-backed Prebid registration") + .expect("enabled Prebid should register"); + task8_capability(®istration, "enabled=true") + } + + fn task8_aps_capability(rendering_mode: ApsRenderingMode) -> Task8Capability { + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config( + "aps", + &ApsConfig { + enabled: true, + rendering_mode, + }, + ) + .expect("should insert Task 8 APS config"); + let plan = AuctionPlan::compile(AuctionPlanConfig { + timeout_ms: 1_000, + providers: BTreeMap::from([( + "aps-fixture" + .parse() + .expect("should parse Task 8 APS provider ID"), + ProviderConfig { + protocol: "openrtb-2.6".to_owned(), + profile: "aps".to_owned(), + endpoint: "https://aps.example/openrtb".to_owned(), + timeout_ms: None, + routing: RoutingMode::AllEligible, + notifications: NotificationConfig::default(), + profile_config: serde_json::json!({"account_id": "example-account"}), + }, + )]), + ..AuctionPlanConfig::default() + }) + .expect("should compile Task 8 APS plan"); + let registration = crate::integrations::aps::register_for_plan(&settings, &plan) + .expect("should run plan-backed APS registration") + .expect("APS profile should register the renderer integration"); + task8_capability( + ®istration, + match rendering_mode { + ApsRenderingMode::TrustedServer => { + "plan.has_profile(aps);rendering_mode=trusted_server" + } + ApsRenderingMode::PublisherNative => { + "plan.has_profile(aps);rendering_mode=publisher_native" + } + }, + ) + } + + fn task8_mediator_capability() -> Task8Capability { + let mut settings = crate::test_support::tests::create_test_settings(); + settings + .integrations + .insert_config( + "adserver_mock", + &serde_json::json!({ + "enabled": true, + "endpoint": "https://adserver.example/mediate" + }), + ) + .expect("should insert Task 8 mediator config"); + let providers = task8_unique_receipt_values( + "providers", + crate::integrations::adserver_mock::register_providers(&settings) + .expect("should register Task 8 mediator") + .into_iter() + .map(|provider| provider.provider_name().to_owned()), + ) + .expect("should observe unique mediator providers"); + Task8Capability { + id: "adserver_mock".to_owned(), + predicate: "auction.mediator=adserver_mock;enabled=true".to_owned(), + proxy_routes: BTreeSet::new(), + attribute_rewriters: BTreeSet::new(), + script_rewriters: BTreeSet::new(), + head_injectors: BTreeSet::new(), + post_processors: BTreeSet::new(), + request_filters: BTreeSet::new(), + providers, + js_mode: "none".to_owned(), + } + } + + fn task8_capability( + registration: &IntegrationRegistration, + predicate: &str, + ) -> Task8Capability { + let id = registration.integration_id; + let proxy_routes = task8_unique_receipt_values( + "proxy_routes", + registration + .proxies + .iter() + .flat_map(|proxy| proxy.routes()) + .map(|route| format!("{} {}", route.method, route.path)), + ) + .expect("should observe unique integration proxy routes"); + let attribute_rewriters = task8_unique_receipt_values( + "attribute_rewriters", + registration + .attribute_rewriters + .iter() + .map(|rewriter| rewriter.integration_id()), + ) + .expect("should observe unique integration attribute rewriters"); + let script_rewriters = task8_unique_receipt_values( + "script_rewriters", + registration + .script_rewriters + .iter() + .map(|rewriter| format!("{}:{}", rewriter.integration_id(), rewriter.selector())), + ) + .expect("should observe unique integration script rewriters"); + let head_injectors = task8_unique_receipt_values( + "head_injectors", + registration + .head_injectors + .iter() + .map(|injector| injector.integration_id()), + ) + .expect("should observe unique integration head injectors"); + let post_processors = task8_unique_receipt_values( + "post_processors", + registration + .html_post_processors + .iter() + .map(|processor| processor.integration_id()), + ) + .expect("should observe unique integration post-processors"); + let request_filters = task8_unique_receipt_values( + "request_filters", + registration + .request_filters + .iter() + .map(|filter| filter.integration_id()), + ) + .expect("should observe unique integration request filters"); + let js_mode = if registration.js_disabled { + if id == "gpt_diagnostics" + && crate::integrations::gpt_diagnostics::GptDiagnosticsRequestDecision::active_for_tests() + .module_script_tag() + .is_some_and(|tag| tag.contains("tsjs-gpt_diagnostics.min.js")) + && trusted_server_js::module_bundle(id).is_some() + { + "standalone" + } else { + "none" + } + } else if registration.js_deferred { + "deferred" + } else if trusted_server_js::module_bundle(id).is_some() { + "bundled" + } else { + "none" + }; + Task8Capability { + id: id.to_owned(), + predicate: predicate.to_owned(), + proxy_routes, + attribute_rewriters, + script_rewriters, + head_injectors, + post_processors, + request_filters, + providers: BTreeSet::new(), + js_mode: js_mode.to_owned(), + } + } } diff --git a/crates/trusted-server-core/src/settings.rs b/crates/trusted-server-core/src/settings.rs index 8fff7917d..27d922e37 100644 --- a/crates/trusted-server-core/src/settings.rs +++ b/crates/trusted-server-core/src/settings.rs @@ -3682,7 +3682,7 @@ mod tests { use super::*; use regex::Regex; use serde_json::json; - use std::collections::HashSet; + use std::collections::{BTreeSet, HashSet}; use std::sync::Arc; use crate::auction::build_orchestrator; @@ -3693,6 +3693,206 @@ mod tests { use crate::redacted::Redacted; use crate::test_support::tests::{crate_test_settings_str, create_test_settings}; + #[derive(Debug, Deserialize)] + struct Task7DeserializerProbe { + #[serde(deserialize_with = "from_value_or_str")] + number: u32, + #[serde(deserialize_with = "bool_from_bool_or_str")] + enabled: bool, + #[serde(deserialize_with = "vec_from_seq_or_map")] + values: Vec, + #[serde(deserialize_with = "map_from_obj_or_str")] + headers: HashMap, + } + + #[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] + struct Task7CompanionReceipt { + source: String, + symbol: String, + kind: String, + value: Option, + positive_probe: String, + negative_probe: String, + } + + #[derive(Deserialize)] + struct Task7CompanionManifest { + companions: Vec, + } + + macro_rules! task7_companion_receipt { + ( + $positive:ident, + $negative:ident, + $symbol:literal, + $kind:literal, + $value:expr, + $positive_body:block, + $negative_body:block + ) => {{ + fn $positive() $positive_body + fn $negative() $negative_body + $positive(); + $negative(); + let value: Option<&str> = $value; + Task7CompanionReceipt { + source: "crates/trusted-server-core/src/settings.rs".to_owned(), + symbol: $symbol.to_owned(), + kind: $kind.to_owned(), + value: value.map(str::to_owned), + positive_probe: stringify!($positive).to_owned(), + negative_probe: stringify!($negative).to_owned(), + } + }}; + } + + #[test] + fn task7_settings_companions_are_exact_and_compiled_per_record() { + let actual = BTreeSet::from([ + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_default_max_buffered_body_bytes_default_positive, + task7_crates_trusted_server_core_src_settings_rs_default_max_buffered_body_bytes_default_negative, + "default_max_buffered_body_bytes", "default", Some("16777216"), + { assert_eq!(default_max_buffered_body_bytes(), 16 * 1024 * 1024); }, + { assert_ne!(default_max_buffered_body_bytes(), 16 * 1024 * 1024 - 1); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_from_value_or_str_deserializer_positive, + task7_crates_trusted_server_core_src_settings_rs_from_value_or_str_deserializer_negative, + "from_value_or_str", "deserializer", None, + { + let value: Task7DeserializerProbe = serde_json::from_value(json!({"number":"7","enabled":true,"values":[],"headers":{}})).expect("string number should deserialize"); + assert_eq!(value.number, 7); + }, + { serde_json::from_value::(json!({"number":[],"enabled":true,"values":[],"headers":{}})).expect_err("array number should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_vec_from_seq_or_map_deserializer_positive, + task7_crates_trusted_server_core_src_settings_rs_vec_from_seq_or_map_deserializer_negative, + "vec_from_seq_or_map", "deserializer", None, + { + let value: Task7DeserializerProbe = serde_json::from_value(json!({"number":7,"enabled":true,"values":{"1":"second","0":"first"},"headers":{}})).expect("indexed map should deserialize"); + assert_eq!(value.values, ["first", "second"]); + }, + { serde_json::from_value::(json!({"number":7,"enabled":true,"values":false,"headers":{}})).expect_err("boolean sequence should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_map_from_obj_or_str_deserializer_positive, + task7_crates_trusted_server_core_src_settings_rs_map_from_obj_or_str_deserializer_negative, + "map_from_obj_or_str", "deserializer", None, + { + let value: Task7DeserializerProbe = serde_json::from_value(json!({"number":7,"enabled":true,"values":[],"headers":"{\"X-Probe\":\"present\"}"})).expect("JSON string map should deserialize"); + assert_eq!(value.headers.get("X-Probe").map(String::as_str), Some("present")); + }, + { serde_json::from_value::(json!({"number":7,"enabled":true,"values":[],"headers":[]})).expect_err("array map should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_bool_from_bool_or_str_deserializer_positive, + task7_crates_trusted_server_core_src_settings_rs_bool_from_bool_or_str_deserializer_negative, + "bool_from_bool_or_str", "deserializer", None, + { + let value: Task7DeserializerProbe = serde_json::from_value(json!({"number":7,"enabled":"true","values":[],"headers":{}})).expect("string bool should deserialize"); + assert!(value.enabled); + }, + { serde_json::from_value::(json!({"number":7,"enabled":1,"values":[],"headers":{}})).expect_err("numeric bool should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_publisher_domain_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_publisher_domain_validator_negative, + "validate_publisher_domain", "validator", None, + { validate_publisher_domain("publisher.example").expect("plain publisher domain should validate"); }, + { validate_publisher_domain("https://publisher.example").expect_err("publisher scheme should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_cookie_domain_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_cookie_domain_validator_negative, + "validate_cookie_domain", "validator", None, + { validate_cookie_domain(".publisher.example").expect("plain cookie domain should validate"); }, + { validate_cookie_domain("publisher.example; Secure").expect_err("cookie metacharacter should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_no_trailing_slash_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_no_trailing_slash_validator_negative, + "validate_no_trailing_slash", "validator", None, + { validate_no_trailing_slash("https://origin.example").expect("origin should validate"); }, + { validate_no_trailing_slash("https://origin.example/").expect_err("trailing slash should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_host_header_override_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_host_header_override_validator_negative, + "validate_host_header_override", "validator", None, + { validate_host_header_override("origin.example:443").expect("host override should validate"); }, + { validate_host_header_override("https://origin.example").expect_err("host scheme should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_redacted_not_empty_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_redacted_not_empty_validator_negative, + "validate_redacted_not_empty", "validator", None, + { validate_redacted_not_empty(&Redacted::new("value".to_owned())).expect("value should validate"); }, + { validate_redacted_not_empty(&Redacted::new(String::new())).expect_err("empty value should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_ecpartner_validate_source_domain_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_ecpartner_validate_source_domain_validator_negative, + "EcPartner::validate_source_domain", "validator", None, + { EcPartner::validate_source_domain("identity.example").expect("source domain should validate"); }, + { EcPartner::validate_source_domain("https://identity.example").expect_err("source scheme should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_ec_validate_passphrase_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_ec_validate_passphrase_validator_negative, + "Ec::validate_passphrase", "validator", None, + { Ec::validate_passphrase(&Redacted::new("fictional-ec-passphrase-32-bytes-ok".to_owned())).expect("strong passphrase should validate"); }, + { Ec::validate_passphrase(&Redacted::new("short".to_owned())).expect_err("short passphrase should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_path_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_path_validator_negative, + "validate_path", "validator", None, + { validate_path("^/articles/[a-z]+$").expect("valid regex should validate"); }, + { validate_path("[").expect_err("invalid regex should fail"); } + ), + task7_companion_receipt!( + task7_crates_trusted_server_core_src_settings_rs_validate_trusted_client_ip_validator_positive, + task7_crates_trusted_server_core_src_settings_rs_validate_trusted_client_ip_validator_negative, + "validate_trusted_client_ip", "validator", None, + { validate_trusted_client_ip(&TrustedClientIpConfig { ip_header: "fastly-client-ip".to_owned(), auth_header: "x-trusted-client-auth".to_owned(), shared_secret: Redacted::new("fictional-shared-secret-32-bytes-ok".to_owned()) }).expect("trusted client config should validate"); }, + { validate_trusted_client_ip(&TrustedClientIpConfig { ip_header: "x-same".to_owned(), auth_header: "x-same".to_owned(), shared_secret: Redacted::new("short".to_owned()) }).expect_err("unsafe trusted client config should fail"); } + ), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_openrtb_atype_default_positive, task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_openrtb_atype_default_negative, "EcPartner::default_openrtb_atype", "default", Some("3"), { assert_eq!(EcPartner::default_openrtb_atype(), 3); }, { assert_ne!(EcPartner::default_openrtb_atype(), 2); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_batch_rate_limit_default_positive, task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_batch_rate_limit_default_negative, "EcPartner::default_batch_rate_limit", "default", Some("60"), { assert_eq!(EcPartner::default_batch_rate_limit(), 60); }, { assert_ne!(EcPartner::default_batch_rate_limit(), 59); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_ttl_sec_default_positive, task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_ttl_sec_default_negative, "EcPartner::default_pull_sync_ttl_sec", "default", Some("86400"), { assert_eq!(EcPartner::default_pull_sync_ttl_sec(), 86_400); }, { assert_ne!(EcPartner::default_pull_sync_ttl_sec(), 86_399); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_rate_limit_default_positive, task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_rate_limit_default_negative, "EcPartner::default_pull_sync_rate_limit", "default", Some("10"), { assert_eq!(EcPartner::default_pull_sync_rate_limit(), 10); }, { assert_ne!(EcPartner::default_pull_sync_rate_limit(), 9); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ec_default_pull_sync_concurrency_default_positive, task7_crates_trusted_server_core_src_settings_rs_ec_default_pull_sync_concurrency_default_negative, "Ec::default_pull_sync_concurrency", "default", Some("3"), { assert_eq!(Ec::default_pull_sync_concurrency(), 3); }, { assert_ne!(Ec::default_pull_sync_concurrency(), 2); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_trust_threshold_default_positive, task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_trust_threshold_default_negative, "Ec::default_cluster_trust_threshold", "default", Some("10"), { assert_eq!(Ec::default_cluster_trust_threshold(), 10); }, { assert_ne!(Ec::default_cluster_trust_threshold(), 9); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_recheck_secs_default_positive, task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_recheck_secs_default_negative, "Ec::default_cluster_recheck_secs", "default", Some("3600"), { assert_eq!(Ec::default_cluster_recheck_secs(), 3_600); }, { assert_ne!(Ec::default_cluster_recheck_secs(), 3_599); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_s3_access_key_id_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_s3_access_key_id_default_negative, "default_s3_access_key_id", "default", Some("access_key_id"), { assert_eq!(default_s3_access_key_id().expose(), "access_key_id"); }, { assert_ne!(default_s3_access_key_id().expose(), "secret_access_key"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_s3_secret_access_key_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_s3_secret_access_key_default_negative, "default_s3_secret_access_key", "default", Some("secret_access_key"), { assert_eq!(default_s3_secret_access_key().expose(), "secret_access_key"); }, { assert_ne!(default_s3_secret_access_key().expose(), "access_key_id"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_profile_param_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_profile_param_default_negative, "default_profile_param", "default", Some("profile"), { assert_eq!(default_profile_param(), "profile"); }, { assert_ne!(default_profile_param(), "ar"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_aspect_ratio_param_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_aspect_ratio_param_default_negative, "default_aspect_ratio_param", "default", Some("ar"), { assert_eq!(default_aspect_ratio_param(), "ar"); }, { assert_ne!(default_aspect_ratio_param(), "profile"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_debug_param_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_debug_param_default_negative, "default_debug_param", "default", Some("_io_debug"), { assert_eq!(default_debug_param(), "_io_debug"); }, { assert_ne!(default_debug_param(), "debug"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_default_profile_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_default_profile_default_negative, "default_default_profile", "default", Some("default"), { assert_eq!(default_default_profile(), "default"); }, { assert_ne!(default_default_profile(), "standard"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_x_param_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_x_param_default_negative, "default_crop_offset_x_param", "default", Some("x"), { assert_eq!(default_crop_offset_x_param(), "x"); }, { assert_ne!(default_crop_offset_x_param(), "y"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_y_param_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_y_param_default_negative, "default_crop_offset_y_param", "default", Some("y"), { assert_eq!(default_crop_offset_y_param(), "y"); }, { assert_ne!(default_crop_offset_y_param(), "x"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_buckets_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_buckets_default_negative, "default_crop_offset_buckets", "default", Some("[10,30,50,70,90]"), { assert_eq!(default_crop_offset_buckets(), [10,30,50,70,90]); }, { assert_ne!(default_crop_offset_buckets(), [10,30,50,70]); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_tinybird_auction_dataset_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_tinybird_auction_dataset_default_negative, "default_tinybird_auction_dataset", "default", Some("auction_events_raw"), { assert_eq!(default_tinybird_auction_dataset(), "auction_events_raw"); }, { assert_ne!(default_tinybird_auction_dataset(), "access_logs_raw"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_tinybird_access_dataset_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_tinybird_access_dataset_default_negative, "default_tinybird_access_dataset", "default", Some("access_logs_raw"), { assert_eq!(default_tinybird_access_dataset(), "access_logs_raw"); }, { assert_ne!(default_tinybird_access_dataset(), "auction_events_raw"); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_tinybird_max_body_bytes_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_tinybird_max_body_bytes_default_negative, "default_tinybird_max_body_bytes", "default", Some("1048576"), { assert_eq!(default_tinybird_max_body_bytes(), 1024*1024); }, { assert_ne!(default_tinybird_max_body_bytes(), 1024*1024-1); }), + task7_companion_receipt!(task7_crates_trusted_server_core_src_settings_rs_default_auction_debug_metadata_keys_default_positive, task7_crates_trusted_server_core_src_settings_rs_default_auction_debug_metadata_keys_default_negative, "default_auction_debug_metadata_keys", "default", Some("[error_type,http_status,message]"), { assert_eq!(default_auction_debug_metadata_keys(), ["error_type","http_status","message"]); }, { assert_ne!(default_auction_debug_metadata_keys(), ["error_type","message"]); }), + ]); + let checked: Task7CompanionManifest = toml::from_str(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../tools/docs-parity/manifests/settings-companions.toml" + ))) + .expect("checked Task 7 companion manifest should parse"); + let expected = checked + .companions + .into_iter() + .filter(|record| record.source == "crates/trusted-server-core/src/settings.rs") + .collect::>(); + assert_eq!(actual, expected, "compiled settings receipts must be exact"); + } + fn trusted_client_ip_toml(ip_header: &str, auth_header: &str, shared_secret: &str) -> String { format!( "{}\n[trusted_client_ip]\nip_header = \"{ip_header}\"\nauth_header = \"{auth_header}\"\nshared_secret = \"{shared_secret}\"\n", diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 498e2e37a..0ec992096 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -38,6 +38,14 @@ export default withMermaid( description: 'Edge computing for ad serving, consent signal handling, and edge cookie (EC) generation', base: '/trusted-server', + srcExclude: [ + 'superpowers/**', + 'internal/**', + 'epics/**', + 'guide/onboarding.md', + 'README.md', + 'business-use-cases.md', + ], // Replace version placeholders like {{NODEJS_VERSION}} with values from .tool-versions markdown: { @@ -58,8 +66,7 @@ export default withMermaid( // https://vitepress.dev/reference/default-theme-config nav: [ { text: 'Home', link: '/' }, - { text: 'Guide', link: '/guide/getting-started' }, - { text: 'Business Value', link: '/business-use-cases' }, + { text: 'Guide', link: '/guide/' }, { text: 'Roadmap', link: '/roadmap' }, ], diff --git a/docs/business-use-cases.md b/docs/business-use-cases.md index 4e78a2e51..50fdcf82c 100644 --- a/docs/business-use-cases.md +++ b/docs/business-use-cases.md @@ -1,5 +1,11 @@ # Business Use Cases +> [!CAUTION] +> **Unverified planning material.** The claims, metrics, projections, and +> capabilities in this document have not been validated against the current +> implementation. Do not treat them as shipped behavior or product +> commitments. + Scenarios where publishers can realize measurable value with Trusted Server across revenue, consent handling, performance, and user experience. diff --git a/docs/guide/error-reference.md b/docs/guide/error-reference.md index b45cac63a..928437ce4 100644 --- a/docs/guide/error-reference.md +++ b/docs/guide/error-reference.md @@ -8,7 +8,7 @@ Common errors, their causes, and solutions when working with Trusted Server. - [Runtime Errors](#runtime-errors) - [Integration Errors](#integration-errors) - [Request Signing Errors](#request-signing-errors) -- [Build & Deployment Errors](#build--deployment-errors) +- [Build & Deployment Errors](#build-deployment-errors) --- diff --git a/docs/guide/index.md b/docs/guide/index.md index e69de29bb..8a2c00d04 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -0,0 +1,30 @@ +# Guide + +Use these guides to understand Trusted Server, configure a deployment, and +contribute to the project. + +## Start here + +- [What is Trusted Server?](/guide/what-is-trusted-server) +- [Getting Started](/guide/getting-started) + +## Core concepts + +- [Edge Cookies](/guide/edge-cookies) +- [GDPR Compliance](/guide/gdpr-compliance) +- [Ad Serving](/guide/ad-serving) +- [First-Party Proxy](/guide/first-party-proxy) +- [Asset Routes](/guide/asset-routes) + +## Development + +- [Architecture](/guide/architecture) +- [Configuration](/guide/configuration) +- [CLI](/guide/cli) +- [Testing](/guide/testing) +- [Integration Guide](/guide/integration-guide) + +## Reference + +- [API Reference](/guide/api-reference) +- [Error Reference](/guide/error-reference) diff --git a/docs/guide/onboarding.md b/docs/guide/onboarding.md deleted file mode 100644 index 5d4d5b32a..000000000 --- a/docs/guide/onboarding.md +++ /dev/null @@ -1,160 +0,0 @@ -# New Engineer Onboarding Guide - -This document is intended for internal onboarding. For public setup steps, start with -[Getting Started](/guide/getting-started). For test commands and workflows, use the -[Testing guide](/guide/testing). - -Welcome to the Trusted Server project! This guide keeps internal onboarding notes concise and links out to the canonical docs. - -## Table of Contents - -1. [Start Here](#start-here) -2. [Local Setup Notes](#local-setup-notes) -3. [Codebase Pointers](#codebase-pointers) -4. [Development Workflow](#development-workflow) -5. [Debugging & Troubleshooting](#debugging--troubleshooting) -6. [Team & Governance](#team--governance) -7. [Resources & Getting Help](#resources--getting-help) -8. [Onboarding Checklist](#onboarding-checklist) - ---- - -## Start Here - -- Product overview: [What is Trusted Server](/guide/what-is-trusted-server) -- System design: [Architecture](/guide/architecture) -- Setup and deploy: [Getting Started](/guide/getting-started) and [Fastly Setup](/guide/fastly) -- Configure features: [Configuration](/guide/configuration) (see the Detailed Reference section) -- Testing workflow: [Testing guide](/guide/testing) -- Integrations: [Integrations Overview](/guide/integrations-overview) and [Integration Guide](/guide/integration-guide) - -## Local Setup Notes - -- Tool versions live in `.tool-versions` (use asdf or your preferred version manager). -- For docs site development, see `docs/README.md`. - -## Codebase Pointers - -| File | Purpose | -| --------------------------------------------------------- | -------------------------------- | -| `crates/trusted-server-adapter-fastly/src/main.rs` | Request routing entry point | -| `crates/trusted-server-core/src/publisher.rs` | Publisher origin handling | -| `crates/trusted-server-core/src/proxy.rs` | First-party proxy implementation | -| `crates/trusted-server-core/src/ec/` | EC identity subsystem | -| `crates/trusted-server-core/src/integrations/registry.rs` | Integration module pattern | -| `trusted-server.toml` | Application configuration | - -## Development Workflow - -- Contribution process: [CONTRIBUTING.md](https://github.com/IABTechLab/trusted-server/blob/main/CONTRIBUTING.md) -- Adding integrations: [Integration Guide](/guide/integration-guide) -- Request flows: [SEQUENCE.md](https://github.com/IABTechLab/trusted-server/blob/main/SEQUENCE.md) - -## Debugging & Troubleshooting - -- [Error Reference](/guide/error-reference) -- [Testing guide](/guide/testing) -- [Fastly Setup](/guide/fastly) (local simulator notes) - ---- - -## Team & Governance - -### Project Structure - -The project follows IAB Tech Lab's open-source governance model: - -- **Trusted Server Task Force**: Defines requirements and roadmap (meets biweekly) -- **Development Team**: Handles engineering implementation and releases - -### Team Roles - -| Role | Responsibility | -| ------------ | ------------------------------------ | -| Project Lead | Overall project vision and direction | -| Developer | Contributes code/docs | - -See [ProjectGovernance.md](https://github.com/IABTechLab/trusted-server/blob/main/ProjectGovernance.md) for full details. - -### Key Contacts - -| Role | GitHub Handle | -| ------------ | ------------------------------------------------------------ | -| Project Lead | [@jevansnyc](https://github.com/jevansnyc) | -| Developer | [@aram356](https://github.com/aram356) | -| Developer | [@ChristianPavilonis](https://github.com/ChristianPavilonis) | - -### Meetings - - - -- **Task Force Meeting**: Biweekly (check calendar for schedule) -- **Development Team Standup**: Weekly (check calendar for schedule) - -Ask your manager or onboarding buddy for calendar invites to relevant meetings. - ---- - -## Resources & Getting Help - -### Documentation - -| Resource | Description | -| ----------------------------------------------------------------------------------------- | ------------------------------------------- | -| [README.md](https://github.com/IABTechLab/trusted-server/blob/main/README.md) | Project overview and setup | -| [CONTRIBUTING.md](https://github.com/IABTechLab/trusted-server/blob/main/CONTRIBUTING.md) | Contribution guidelines | -| [CLAUDE.md](https://github.com/IABTechLab/trusted-server/blob/main/CLAUDE.md) | AI agent conventions and project guidelines | -| [SEQUENCE.md](https://github.com/IABTechLab/trusted-server/blob/main/SEQUENCE.md) | Request flow diagrams | -| [FAQ_POC.md](https://github.com/IABTechLab/trusted-server/blob/main/FAQ_POC.md) | Frequently asked questions | - -For docs site development, see `docs/README.md`. - -### Getting Help - -- **GitHub Issues**: For bugs, feature requests, and questions -- **Task Force Meetings**: Biweekly meetings for roadmap discussions -- **Code Review**: Submit PRs for feedback from maintainers - -### External Resources - -- [Fastly Compute Documentation](https://developer.fastly.com/learning/compute/) -- [Rust Book](https://doc.rust-lang.org/book/) -- [WebAssembly Overview](https://webassembly.org/) -- [OpenRTB Specification](https://iabtechlab.com/standards/openrtb/) - ---- - -## Onboarding Checklist - -Use this checklist to track your onboarding progress: - -### Access & Accounts - -- [ ] Get GitHub access to [IABTechLab/trusted-server](https://github.com/IABTechLab/trusted-server) -- [ ] Get access to the [Trusted Server project board](https://github.com/orgs/IABTechLab/projects/3) -- [ ] Create a [Fastly account](https://manage.fastly.com) and obtain an API token -- [ ] Join the Slack workspace and `#trusted-server-internal` channel -- [ ] Get calendar invites for Task Force and Development Team meetings - -### Environment Setup - -- [ ] Complete the setup steps in [Getting Started](/guide/getting-started) -- [ ] Run the test flow in the [Testing guide](/guide/testing) -- [ ] Start the local server (see [Getting Started](/guide/getting-started)) - -### Codebase Exploration - -- [ ] Read through `main.rs` to understand request routing -- [ ] Trace a request through `publisher.rs` and `proxy.rs` -- [ ] Understand the EC identity subsystem in `ec/` -- [ ] Review an existing integration (e.g., `prebid.rs`) - -### Documentation & Contribution - -- [ ] Read `CONTRIBUTING.md` for PR guidelines -- [ ] Browse the [documentation site guides](/guide/getting-started) -- [ ] Make a small contribution (fix a typo, add a test, etc.) - ---- - -Welcome aboard! Don't hesitate to ask questions - we're here to help you succeed. diff --git a/docs/internal/audits/documentation-refresh-decisions.md b/docs/internal/audits/documentation-refresh-decisions.md new file mode 100644 index 000000000..20b930807 --- /dev/null +++ b/docs/internal/audits/documentation-refresh-decisions.md @@ -0,0 +1,170 @@ +# Documentation Refresh Decisions + +- **Decision date:** 2026-08-31 +- **Approver:** `aram356` +- **Status:** Approved for implementation + +This record fixes the owner-gated choices for the documentation refresh. It +does not record operational receipts; those belong in +`documentation-refresh-evidence.md` and its referenced external captures. + +## Audited tips + +| Name | Full commit SHA | Use | +| --------------------------- | ------------------------------------------ | ------------------------------------------------------------- | +| `audited_target_tip` | `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` | Exact required `origin/rc/202608` tip for every package | +| `implementation_start_head` | `01bf84a4beb4a1be4f26965478a0211f59392962` | Program-record alignment package start on `spec-docs-refresh` | + +The program-record alignment package fetched `origin/rc/202608` and +`origin/spec-docs-refresh` on 2026-09-01. The rc ref equaled +`audited_target_tip`, and the implementation branch contained that commit. +Every later package repeats both checks and stops for a focused delta audit if +the target advances. + +## Owner-gated decisions + +### 1. Temporary Fastly service-ID exception + +- Selection: retain the checked-in `fastly.toml` `service_id` only through a + typed, temporary scanner allowlist entry. +- Owner: `aram356`. +- Rationale: preserve the existing Fastly service binding during this refresh; + removing the source-controlled identifier is an independent operation. +- Expiry: `2026-09-30T00:00:00Z`. +- Control: check mode fails at or after the expiry instant. Renewal requires a + reviewed, committed replacement before expiry. This is not the ops migration + deadline, and the migration does not block this refresh. + +### 2. CNAME + +- Selection: delete `docs/public/CNAME` and retain the project-path base. +- Owner: `aram356`. +- Decision date: 2026-08-31. +- Rejected alternative: adopt a custom domain with `base: '/'`, verified + Pages/DNS/TLS configuration, URL inventory changes, and live smokes. +- Rollback: never restore the placeholder CNAME. Keep the CNAME deleted and + re-smoke project URLs, or restore only a previously verified custom-domain + DNS/CNAME/TLS tuple without weakening containment exclusions. + +### 3. `FAQ_POC.md` + +- Selection: move it to `docs/superpowers/archive/FAQ_POC.md`. +- Owner: `aram356`. +- Decision date: 2026-08-31. +- Rejected alternatives: delete it, or rewrite it as the active public page + `docs/guide/faq.md` with the rewrite-specific verification contract. +- Result: no active-set FAQ page and no FAQ route to preserve. The independent + gam/kargo tombstone requirements remain unchanged. + +### 4. `business-use-cases.md` + +- State: closed. +- Selection: exclude it from the public build and add the source-level + unverified banner. +- Rejected alternative: rewrite and republish it inside this refresh. + +### 5. CHANGELOG release cut + +- State: explicitly non-blocking and out of scope. +- Selection: apply the deterministic no-release edit in the design unless a + release lands first; a release requires rebase and focused re-audit. + +### 6. Governance ownership + +- Owner: none named. +- Selection: factual-governance fallback. +- Decision date: 2026-08-31. +- Required edit: correct `ProjectGovernance.md` to current evidence—no minutes + exist and releases are not continuous—without adding CODEOWNERS or minutes + commitments. Naming owners remains a maintainer follow-up. + +### 7. Delivery shape and external controls + +`aram356` approved the following on 2026-08-31: + +- all repository implementation work remains on `spec-docs-refresh` and + existing PR #1049, targeted at `rc/202608`; +- no separate containment, CNAME, controller, activation, or release-handoff + implementation PR is created; +- PR #1104 remains closed and superseded, with only its two reviewed source + commits retained for transfer into #1049 during Task 2; and +- live Pages/CNAME behavior, the first real schedule, dependency submission + and graph visibility, and any optional `main` protection change remain + external release operations. + +The immutable-baseline, exact-SHA binding, and durable external-capture +requirements in the design remain mandatory. Local builds and fixture output +may prove repository behavior but cannot substitute for release receipts. + +### 8. CodeQL rc push coverage + +- State: explicitly non-blocking. +- Selection: no additional decision is required for implementation to start. + +### 9. Sensitive-data exception taxonomy + +- Allowed types: vendor URL, hash-pinned fake-credential fixture, historical + example, service ID, and project-owned public domain. +- Required fields: exact type and scope, owner, rationale, and expiry timestamp. +- Control: ownerless, expired, broad, or untyped exceptions fail closed. An + allowed type is not a blanket exemption; each occurrence requires its own + narrow record. +- Current historical-example exception: the exact + `your-custom-domain.com` literal occurs only in the approved + `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` audit and + this decision row. Owner: `aram356`. Rationale: preserve the approved audit's + exact record of the deleted placeholder CNAME. Expiry: + `2027-08-31T00:00:00Z`. +- Current service-ID exception: the `fastly.toml` `service_id` record in + decision 1. These are the only two active WP1 sensitive-data exceptions. + +## Delivery records + +PR #1049 is the only implementation row. Its head is a timestamped remote +capture, not a permanent final SHA. + +| Implementation PR | Target | Audited base | Captured remote head | Capture time | State | +| ------------------------------------------------------ | ----------- | ------------------------------------------ | ------------------------------------------ | -------------------- | ----------- | +| https://github.com/IABTechLab/trusted-server/pull/1049 | `rc/202608` | `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` | `01bf84a4beb4a1be4f26965478a0211f59392962` | 2026-09-01T07:35:08Z | OPEN, draft | + +### PR #1049 metadata capture + +- Capture timestamp: 2026-09-01T07:35:08Z. +- URL: https://github.com/IABTechLab/trusted-server/pull/1049. +- State: OPEN, draft. +- Base: ref `rc/202608`, SHA + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`. +- Remote head: ref `spec-docs-refresh`, captured SHA + `01bf84a4beb4a1be4f26965478a0211f59392962`. + +This capture does not assert the eventual final head. Refresh it after package +commits are pushed and before using PR #1049 as a hosted validation input. + +### Superseded reviewed source + +PR #1104 is closed and superseded. Its base is +`d516a9e94249e10cbc36e41beb4269f9255cf407`. The reviewed source commits are +`34b0613dc603ba6529396dad4dd4b7e68b1e11a9` and +`e6554f24f58f6122fb806ce25432f66033765c65`. Its source branch exists only for +their later transfer into #1049 in Task 2. PR #1104 has no live merge or deploy +receipt, and this record claims none. + +## Release-pending records + +These rows require real post-`main` external captures under the evidence +ledger's durable hashed-body contract. + +| Surface | Required external evidence | Capture owner | Canonical capture destination | State | +| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------- | --------------------------- | +| Pages and CNAME | Deployed `main` SHA, live response matrix and headers, project-path assets, and observed CNAME behavior | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| First scheduled link run | Default-branch run, attempt, jobs, URLs, app identities, bounded artifact, and resulting issue-reconciliation state | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| Dependency submission/graph | Authenticated `main` SHA, redacted submission and response bodies with hashes, detector/correlator, and graph API JSON | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| Optional `main` protection | Only if maintainers opt in: exact contexts/apps, strictness, bypass policy, API bodies with hashes, and planted-failure proof | Pending if selected — Task 17 | Pending if selected — Task 17 | `release-pending`, optional | + +Local builds, CI simulations, mocked API responses, and fixture output cannot +complete any release-pending row. + +Before Task 17 commits, it must replace every applicable pending owner with a +named owner and every applicable pending destination with the authoritative +external capture or comment location. If optional protection is not selected, +Task 17 records that disposition instead of fabricating an owner or URL. diff --git a/docs/internal/audits/documentation-refresh-evidence.md b/docs/internal/audits/documentation-refresh-evidence.md new file mode 100644 index 000000000..e64748f6c --- /dev/null +++ b/docs/internal/audits/documentation-refresh-evidence.md @@ -0,0 +1,3250 @@ +# Documentation Refresh Evidence + +- **Schema version:** 1 +- **Created:** 2026-08-31 +- **Implementation system of record:** this append-only repository ledger + +This ledger records evidence, not plans or inferred outcomes. A pending field +is not proof. Command output may be summarized only when the command, exact +commit, result, and authoritative raw-capture location are also recorded. + +## Durable capture contract + +This contract applies only to real external captures. Local builds, fixture +runs, simulations, and mocked API output belong in package checkpoints and +cannot be represented as external receipts. Every external capture must be +append-only and timestamped in UTC. Each capture includes: + +- schema version, actor, operation, and timestamp; +- exact commit and ref, plus PR number and exact head, base, and trusted-tool + SHAs when a PR or validator is involved; +- workflow run ID, attempt, job name, and job URL when automation is involved; +- redacted request method, endpoint, and body; +- response status and redacted response body; +- dependency snapshot detector, correlator, snapshot ID, ref, and SHA when + applicable; and +- the applicable dependency-graph, ruleset, branch-protection, or branch API + JSON. + +Tokens, credential-bearing headers, cookies, and unredacted secrets are never +captured. Every request body, response body, and applicable API JSON body +includes its actual redacted content, byte length, and SHA-256. Each issue +comment is at most 60 KiB. A larger capture is split into ordered chunks; each +chunk includes its actual redacted content, index, byte length, and SHA-256, +and the capture records the aggregate byte length and SHA-256. Workflow, PR, +issue, and artifact URLs are navigation aids only; pasted redacted bodies plus +hashes are authoritative. Corrections append a new comment that names the +superseded comment URL and capture ID; existing comments are never edited or +deleted. + +### Capture template + +```text +Capture ID: +Schema version: 1 +Timestamp (UTC): +Actor: +Operation: +Commit SHA: +Ref: +PR number / URL: +PR head SHA: +PR base SHA: +Trusted-tool SHA: +Run ID / attempt / URL: +Job name / URL: +Request method / endpoint: +Redacted request body: +Request-body bytes / SHA-256: +Response status: +Redacted response body: +Response-body bytes / SHA-256: +Snapshot detector / correlator / ID / ref / SHA: +Graph API redacted JSON body / bytes / SHA-256: +Ruleset API redacted JSON body / bytes / SHA-256: +Protection API redacted JSON body / bytes / SHA-256: +Branch API redacted JSON body / bytes / SHA-256: +Ordered chunk index / total: +Ordered chunk redacted content / bytes / SHA-256: +Aggregate bytes / SHA-256: +Navigation URLs: +Authoritative capture/comment URL: +Supersedes capture/comment: +Result: +``` + +## Package checkpoint template + +Copy this block into the matching implementation section before each package +starts. One block covers one reviewed package or adjacent evidence-only +commit. + +```text +Task / package: +Package start HEAD: +Timestamp (UTC): +Actor: +Approved path list: +Failing fixture or pre-change proof: +Focused red command / expected diagnostic: +Minimal change: +Focused green command / result: +Affected regressions / result: +Exact staged name-status from package start HEAD: +Untracked-path check / result: +Unstaged tracked-byte check / result: +Generated command / second-run no-diff proof: +Docs-parity checks / result: +Live smoke or external receipt: +Exception / owner / rationale / expiry: +Evidence-ledger restage and repeated checks: +git diff --cached --check result: +Commit SHA / message: +Post-commit clean-status result: +Correction reference: +``` + +## Pre-merge implementation evidence + +This ledger retains exact evidence while `origin/rc/202608` equals +`07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` and the implementation branch +contains that commit. Any rc advance requires a focused delta audit and an +updated approved baseline before work continues. + +### Prior approval package: decisions and immutable tips + +- Capture timestamp: 2026-08-31T22:55:52Z. +- Executor: `OpenAI Codex task agent task1_implementer`. +- Approver: `aram356`. +- Operation: fetch refs, verify exact rc tip and ancestry, record starting + `main` tip, and establish decision/evidence records. +- Implementation start HEAD: + `b904b3aeb5af26a536afadcbfb2d70af36bca5a2`. +- `git fetch origin rc/202608 main`: passed. +- `git rev-parse origin/rc/202608`: + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`. +- Ancestry check for `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` + against `HEAD`: exited 0. +- `git rev-parse origin/main`: + `d516a9e94249e10cbc36e41beb4269f9255cf407`. +- Approved paths: the design, implementation plan, decision record, and this + evidence record. +- `cd docs && npm run format`: passed. +- `cd docs && npm run lint`: passed. +- `cd docs && npm run build`: passed; generated `.vitepress/.temp` output was + removed and not staged. +- `git diff --check` and `git diff --cached --check`: passed after formatting. +- Cached path review: exactly the four approved paths above; no unintended + untracked file or unstaged tracked byte remained. +- Commit: `8588391b9e9d6f02d886c519836eedb84a37abd8` uses + `Approve documentation refresh delivery plan`; the review-fix and later + evidence-only receipt commits are identified below. + +#### Prior approval package completion receipt + +- Receipt timestamp: 2026-08-31T23:15:37Z. +- Executor: `OpenAI Codex task agent task1_implementer`. +- Approver: `aram356`. +- Primary implementation commit: + `8588391b9e9d6f02d886c519836eedb84a37abd8`. +- Review-fix commit: + `349fd46a38fac68d803bc80e1557b9cfddba6ac6`. +- `npx prettier --write` on the four Task 1 records: passed. +- `cd docs && npm run format`: passed. +- `cd docs && npm run lint`: passed. +- `cd docs && npm run build`: passed. VitePress emitted only the known + non-failing `vcl`-to-plain-text syntax-highlighting warning; generated + `.vitepress/.temp` output was removed and not staged. +- `git diff --check` and pre-commit `git diff --cached --check`: passed. +- Review-fix staged path set: exactly the spec, plan, decisions record, and + evidence record; no unintended untracked file or unstaged tracked byte. +- Clean-status observation immediately before this evidence-only mutation: + `git status --porcelain` printed nothing. + +The immediately adjacent evidence-only receipt commit is +`931e53e2cbd94d8a7f9fad9ec9d337d37a0f21ca`. That commit did not record its +own SHA; this later ledger update supplies the exact identifier. + +### Task 1: align program records to the single PR + +- Capture timestamp: 2026-09-01T07:41:54Z. +- Executor: `OpenAI Codex task agent task1_single_pr_records`. +- Package start HEAD: + `01bf84a4beb4a1be4f26965478a0211f59392962`. +- Approved paths: the design, decision record, and this evidence record. +- `git fetch origin rc/202608 spec-docs-refresh`: passed; both named refs were + fetched from `github.com:IABTechLab/trusted-server`. +- `test "$(git rev-parse origin/rc/202608)" = 07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`: + exited 0. +- `git merge-base --is-ancestor 07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf HEAD`: + exited 0. +- `git rev-parse origin/rc/202608`: + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`. +- `git rev-parse origin/spec-docs-refresh`: + `01bf84a4beb4a1be4f26965478a0211f59392962`. +- `gh pr view 1049 --json url,state,isDraft,baseRefName,baseRefOid,headRefName,headRefOid`: + passed with the exact JSON recorded in the live metadata capture below. +- Minimal change: approved the reviewed spec, made #1049 the only + implementation row, retained #1104 only as closed reviewed source, removed + obsolete delivery machinery, and defined durable release-pending rows. +- Initial `npm run format && npm run lint && npm run build`: stopped at + `npm run format` because the two edited audit files required Prettier. +- `npx prettier --check internal/audits/documentation-refresh-decisions.md internal/audits/documentation-refresh-evidence.md`: + reproduced the two-file formatting failure. +- `npx prettier --write internal/audits/documentation-refresh-decisions.md internal/audits/documentation-refresh-evidence.md`: + formatted exactly those two files. +- `npm run format && npm run lint && npm run build`: passed from `docs`. + VitePress completed in 11.07 seconds with only the known non-failing `vcl` + syntax-highlighting fallback. +- Generated cleanup: removed only `docs/.vitepress/.temp`. +- `git diff --check`: passed. +- `git ls-files --others --exclude-standard`: printed nothing after generated + cleanup. +- Enclosing commit message: `Align documentation refresh records to one PR`. + Its SHA and push result are reported in the execution handoff because the + commit cannot contain its own SHA. + +### Implementation PR and immutable identifiers + +PR #1049 is the only implementation row. The captured remote head is evidence +of the named observation only, not a permanent final SHA. + +| Implementation PR | Target | Audited base | Captured remote head | Capture time | State | +| ------------------------------------------------------ | ----------- | ------------------------------------------ | ------------------------------------------ | -------------------- | ----------- | +| https://github.com/IABTechLab/trusted-server/pull/1049 | `rc/202608` | `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` | `01bf84a4beb4a1be4f26965478a0211f59392962` | 2026-09-01T07:35:08Z | OPEN, draft | + +#### PR #1049 live metadata capture + +- Capture timestamp: 2026-09-01T07:35:08Z. +- Command: + `gh pr view 1049 --json url,state,isDraft,baseRefName,baseRefOid,headRefName,headRefOid`. +- Result: + `{"baseRefName":"rc/202608","baseRefOid":"07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf","headRefName":"spec-docs-refresh","headRefOid":"01bf84a4beb4a1be4f26965478a0211f59392962","isDraft":true,"state":"OPEN","url":"https://github.com/IABTechLab/trusted-server/pull/1049"}`. + +Refresh this capture after package commits are pushed and before using PR #1049 +as a hosted validation input. + +### Superseded reviewed source PR + +- PR: https://github.com/IABTechLab/trusted-server/pull/1104. +- State: closed and superseded. +- Base: `d516a9e94249e10cbc36e41beb4269f9255cf407`. +- Reviewed source commits: + `34b0613dc603ba6529396dad4dd4b7e68b1e11a9` and + `e6554f24f58f6122fb806ce25432f66033765c65`. +- Retention: its source branch remains only as historical provenance; its + reviewed commits were transferred into #1049 in Task 2. +- External result: no live merge or deploy receipt exists; none is claimed. + +### Release-pending external evidence + +Only real post-`main` operations can complete these rows. Each completion uses +the durable capture contract, including the actual redacted bodies, byte +lengths, and SHA-256 hashes. Local builds, CI simulations, fixtures, and mocked +API output cannot complete a row. + +| Surface | Required real external capture | Capture owner | Canonical capture destination | State | +| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | ----------------------------- | --------------------------- | +| Pages and CNAME | Deployed `main` SHA; live URL/content/header matrix; project-path asset behavior; observed CNAME and canonical-URL behavior | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| First scheduled link run | Default-branch run ID, attempt, jobs, URLs, app identities, bounded artifact, concurrency/timeout result, and issue-reconciliation outcome | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| Dependency submission/graph | Authenticated `main` SHA; submission request and response; 201 result; detector/correlator; graph API body; triage owner and SLA | Pending — Task 17 | Pending — Task 17 | `release-pending` | +| Optional `main` protection | Only if maintainers opt in: exact contexts/apps, strictness, bypass policy, API bodies, and planted-failure block | Pending if selected — Task 17 | Pending if selected — Task 17 | `release-pending`, optional | + +Before Task 17 commits, it must replace every applicable pending owner with a +named owner and every applicable pending destination with the authoritative +external capture or comment location. If optional protection is not selected, +Task 17 records that disposition instead of fabricating an owner or URL. + +### First-success adapter smokes + +| Surface | Exact commit/ref | Command or operation | Expected oracle | Receipt / result | +| ---------- | ---------------- | ------------------------------------------------------- | --------------------------------------------------------------------- | ---------------- | +| Axum | Pending | `scripts/smoke-axum.sh` | Non-health publisher response satisfies the documented strong oracle | Pending | +| Fastly | Pending | `scripts/smoke-fastly.sh` | Local push and required secrets yield a non-health publisher response | Pending | +| Cloudflare | Pending | `scripts/smoke-cloudflare.sh` | Envelope transfer yields a non-health publisher response | Pending | +| Spin | Pending | `scripts/smoke-spin.sh` or time-bounded manual contract | Local push and variables yield a non-health publisher response | Pending | + +### Generated-diff proof + +Each generator records its command, first-run changed paths, second-run exit +status, and exact clean-diff assertion. “Generated” without a second-run +no-diff proof is incomplete. + +| Generator / region | Source SHA | First-run output | Second-run command | Clean-diff assertion | Result | +| ----------------------------- | ---------- | ---------------- | ------------------ | -------------------- | ------- | +| Tracked/source classification | Pending | Pending | Pending | Pending | Pending | +| Settings reference | Pending | Pending | Pending | Pending | Pending | +| Route/API reference | Pending | Pending | Pending | Pending | Pending | +| Integration/support matrix | Pending | Pending | Pending | Pending | Pending | +| CLI help goldens | Pending | Pending | Pending | Pending | Pending | +| Gate consumers | Pending | Pending | Pending | Pending | Pending | + +### Exceptions and waivers + +Every exception requires an owner, narrow rationale, and review or expiry date. +Expired or ownerless entries fail the checkpoint. + +| Type / path | Value classification | Owner | Rationale | Review or expiry | State | +| ---------------------------------------------------- | ---------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | -------- | +| `fastly.toml` `service_id` | Service ID | `aram356` | Preserve the existing service binding during this refresh; check mode fails at or after expiry; removal is independent | `2026-09-30T00:00:00Z` | Approved | +| Deleted placeholder literal in design and Decision 9 | Historical example | `aram356` | Preserve the approved audit's exact record; scope is `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` and `docs/internal/audits/documentation-refresh-decisions.md` | `2027-08-31T00:00:00Z` | Approved | +| Task 13 temporary public-page ownership | Page/orphan transition | Pending Task 13 owner | Page registered before Task 14 final ownership | Expires at Task 14 | Pending | +| Spin manual smoke, only if CI cannot run it | Manual evidence | Pending | Runner capability gap | Time-bounded date required | Pending | + +### Follow-up issues + +Each row requires a deduplicated issue URL or explicit existing-issue +disposition, owner, and labels. Do not replace these rows with umbrella issues. + +| Finding | Issue or disposition URL | Owner | Labels | State | +| -------------------------------------------------- | ------------------------ | ------- | ------- | ------- | +| Adapter `Hooks::stores()` and dead store manifests | Pending | Pending | Pending | Pending | +| Cloudflare config-store / CLI envelope bridge | Pending | Pending | Pending | Pending | +| Axum local config-store / env bridge | Pending | Pending | Pending | Pending | +| Cross-adapter health and startup-failure contract | Pending | Pending | Pending | Pending | +| `imp_ext` reserved-field protection | Pending | Pending | Pending | Pending | +| Partner pull-token placeholder rejection | Pending | Pending | Pending | Pending | +| Inline `trusted_client_ip.shared_secret` | Pending | Pending | Pending | Pending | +| Deploy-ID constant and set equality | Pending | Pending | Pending | Pending | +| Vendored CLI help internal references | Pending | Pending | Pending | Pending | +| Tinybird telemetry runtime support | Pending | Pending | Pending | Pending | +| `.env.dev` undeclared `opid_store` | Pending | Pending | Pending | Pending | +| Fastly staging config-blob selection | Pending | Pending | Pending | Pending | + +### Package sections + +Every section below receives a completed package checkpoint block. All +implementation stays on `spec-docs-refresh` and PR #1049. + +#### Task 2 — Transfer the reviewed containment commits + +- Capture timestamp: 2026-09-01T09:24:44Z. +- Executor: `OpenAI Codex task agent task2_transfer_containment`. +- Package start HEAD: + `43145751bb4c4286802fbc59624844bed8a73dfc`. +- Approved paths: `docs/.vitepress/config.mts`, `docs/guide/index.md`, + `docs/guide/onboarding.md`, `docs/internal/onboarding.md`, plus this + evidence-only ledger update. +- `git fetch origin rc/202608 spec-docs-refresh`: exited 0 and fetched both + named branches from `github.com:IABTechLab/trusted-server`. +- Before mutation, + `git rev-parse HEAD origin/spec-docs-refresh origin/rc/202608` returned, in + order, `43145751bb4c4286802fbc59624844bed8a73dfc`, + `43145751bb4c4286802fbc59624844bed8a73dfc`, and + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`. +- `git merge-base origin/rc/202608 origin/spec-docs-refresh` returned + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`, and + `git merge-base --is-ancestor origin/rc/202608 origin/spec-docs-refresh` + exited 0. The immutable rc tip was therefore exact and ancestral to the + package-start branch. +- Source PR: https://github.com/IABTechLab/trusted-server/pull/1104; state + `CLOSED`; base branch `main`; base SHA + `d516a9e94249e10cbc36e41beb4269f9255cf407`; source branch + `docs-public-containment`; head SHA + `e6554f24f58f6122fb806ce25432f66033765c65`. +- Exact authentication command: + `gh pr view 1104 --repo IABTechLab/trusted-server --json url,state,baseRefName,baseRefOid,headRefName,headRefOid,commits`. + It exited 0 and returned the required two commits in order: + `34b0613dc603ba6529396dad4dd4b7e68b1e11a9` with subject + `Contain internal documentation pages`, then + `e6554f24f58f6122fb806ce25432f66033765c65` with subject + `Fix internal onboarding links`; the returned base, head, URL, and state + matched the values above. +- `git cat-file -e '34b0613dc603ba6529396dad4dd4b7e68b1e11a9^{commit}'` + and + `git cat-file -e 'e6554f24f58f6122fb806ce25432f66033765c65^{commit}'` + each exited 0. `git log --reverse --format='%H %s' +d516a9e94249e10cbc36e41beb4269f9255cf407..e6554f24f58f6122fb806ce25432f66033765c65` + returned exactly those two authenticated SHA/subject pairs and no others. +- `git diff --name-only +d516a9e94249e10cbc36e41beb4269f9255cf407..e6554f24f58f6122fb806ce25432f66033765c65` + returned exactly the four reviewed source paths: + `docs/.vitepress/config.mts`, `docs/guide/index.md`, + `docs/guide/onboarding.md`, and `docs/internal/onboarding.md`. +- `git cherry-pick 34b0613dc603ba6529396dad4dd4b7e68b1e11a9` + completed without a conflict and produced + `06d916fcc839a67c7f4bb9fc4445e17ea0a10e56` with the unchanged subject + `Contain internal documentation pages`. +- `git cherry-pick e6554f24f58f6122fb806ce25432f66033765c65` + completed without a conflict and produced + `5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed` with the unchanged subject + `Fix internal onboarding links`. +- Conflict status: none. No manual conflict resolution was performed. +- `git diff --name-status +43145751bb4c4286802fbc59624844bed8a73dfc..HEAD` returned exactly + `M docs/.vitepress/config.mts`, `M docs/guide/index.md`, + `D docs/guide/onboarding.md`, and `A docs/internal/onboarding.md`. +- `git diff --quiet e6554f24f58f6122fb806ce25432f66033765c65 +HEAD -- docs/.vitepress/config.mts docs/guide/index.md +docs/guide/onboarding.md docs/internal/onboarding.md` exited 0. The source + and transferred blobs were byte-identical: config + `0ec992096fe4b1e3e097269a039f81868c76694c`, guide index + `8a2c00d049e6a8e54d25cab3183802a74a26c35a`, and internal onboarding + `7a84844e79c4e13688f5476086e89011946cc74e`; guide onboarding was absent + from both trees. +- From `docs`, `npm ci` exited 0 and reported `added 346 packages in 3s`; + `npm run lint` exited 0 after `eslint .`; `npm run format` exited 0 with + `All matched files use Prettier code style!`; and `npm run build` exited 0 + with `build complete in 4.86s.` VitePress emitted only the known non-failing + `vcl`-to-`txt` syntax-highlighting fallback. +- Containment evidence correction timestamp: 2026-09-01T11:08:07Z. This + correction supersedes the shell-command-substitution containment and href + assertions and the unrecorded supplemental assertion from evidence commit + `0a8e57f5e5aa03423dce29b61817dfb2b7194a1e`; those checks could discard a + scanner error and are not authoritative evidence. +- Correction package start HEAD: + `0a8e57f5e5aa03423dce29b61817dfb2b7194a1e`. Before mutation, it equaled + `origin/spec-docs-refresh`; `origin/rc/202608` remained exactly + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` and was ancestral to HEAD; the + worktree was clean. +- From `docs`, the fresh correction build ran `npm ci`, `npm run lint`, + `npm run format`, and `npm run build` in that order. They all exited 0: + `npm ci` added 346 packages in 3 seconds, lint completed after `eslint .`, + format reported `All matched files use Prettier code style!`, and VitePress + reported `build complete in 4.83s.` with only the known non-failing + `vcl`-to-`txt` fallback. +- The following exact fail-closed command was run from `docs`. The initial + `git diff --quiet` binds the four containment paths at current HEAD to + `5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed` before any artifact scan. Git + invocation errors or nonzero status, directory-walk or file-read errors, + invalid JSON, malformed URLs, unsupported filesystem entries, missing + required artifacts, missing identifying markers, or any excluded output + terminate nonzero. It recursively enumerates all dist files, parses + `hashmap.json`, reads every HTML file, and inspects double-quoted, + single-quoted, and unquoted `href` attributes. + + ```sh + node <<'NODE' + const fs = require('node:fs') + const path = require('node:path') + const { spawnSync } = require('node:child_process') + + const boundContentSha = '5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed' + const containmentPaths = [ + 'docs/.vitepress/config.mts', + 'docs/guide/index.md', + 'docs/guide/onboarding.md', + 'docs/internal/onboarding.md', + ] + const docsRoot = process.cwd() + const repoRoot = path.resolve(docsRoot, '..') + const distRoot = path.join(docsRoot, '.vitepress', 'dist') + + const binding = spawnSync( + 'git', + ['diff', '--quiet', boundContentSha, 'HEAD', '--', ...containmentPaths], + { cwd: repoRoot, encoding: 'utf8' }, + ) + if (binding.error) throw binding.error + if (binding.status !== 0) { + throw new Error( + `containment binding failed with status ${String(binding.status)}: ${binding.stderr}`, + ) + } + + function walkFiles(root) { + const files = [] + for (const entry of fs.readdirSync(root, { withFileTypes: true }).sort((a, b) => + a.name < b.name ? -1 : a.name > b.name ? 1 : 0, + )) { + const absolute = path.join(root, entry.name) + if (entry.isDirectory()) files.push(...walkFiles(absolute)) + else if (entry.isFile()) files.push(absolute) + else throw new Error(`unsupported filesystem entry: ${absolute}`) + } + return files + } + + function countMarkdownFiles(root) { + return walkFiles(root).filter((file) => file.endsWith('.md')).length + } + + function countOptionalFile(file) { + try { + const stat = fs.statSync(file) + if (!stat.isFile()) throw new Error(`expected a file: ${file}`) + return 1 + } catch (error) { + if (error && error.code === 'ENOENT') return 0 + throw error + } + } + + function requireFileCount(file) { + const stat = fs.statSync(file) + if (!stat.isFile()) throw new Error(`expected a file: ${file}`) + return 1 + } + + const families = [ + { + name: 'superpowers/**', + sourceCount: () => countMarkdownFiles(path.join(docsRoot, 'superpowers')), + fileMatch: (file) => file.startsWith('superpowers/') || file.startsWith('assets/superpowers_'), + manifestMatch: (key) => key.startsWith('superpowers_') || key.startsWith('superpowers/'), + routeMatch: (route) => route === '/superpowers' || route.startsWith('/superpowers/'), + }, + { + name: 'internal/**', + sourceCount: () => countMarkdownFiles(path.join(docsRoot, 'internal')), + fileMatch: (file) => file.startsWith('internal/') || file.startsWith('assets/internal_'), + manifestMatch: (key) => key.startsWith('internal_') || key.startsWith('internal/'), + routeMatch: (route) => route === '/internal' || route.startsWith('/internal/'), + }, + { + name: 'epics/**', + sourceCount: () => countMarkdownFiles(path.join(docsRoot, 'epics')), + fileMatch: (file) => file.startsWith('epics/') || file.startsWith('assets/epics_'), + manifestMatch: (key) => key.startsWith('epics_') || key.startsWith('epics/'), + routeMatch: (route) => route === '/epics' || route.startsWith('/epics/'), + }, + { + name: 'guide/onboarding.md', + sourceCount: () => countOptionalFile(path.join(docsRoot, 'guide', 'onboarding.md')), + fileMatch: (file) => file === 'guide/onboarding.html' || file.startsWith('guide/onboarding/') || file.startsWith('assets/guide_onboarding.md.'), + manifestMatch: (key) => key === 'guide_onboarding.md' || key === 'guide/onboarding.md', + routeMatch: (route) => route === '/guide/onboarding' || route.startsWith('/guide/onboarding/'), + }, + { + name: 'README.md', + sourceCount: () => requireFileCount(path.join(docsRoot, 'README.md')), + fileMatch: (file) => file === 'readme.html' || file.startsWith('readme/') || file.startsWith('assets/readme.md.'), + manifestMatch: (key) => key.toLowerCase() === 'readme.md', + routeMatch: (route) => route === '/readme' || route.startsWith('/readme/'), + }, + { + name: 'business-use-cases.md', + sourceCount: () => requireFileCount(path.join(docsRoot, 'business-use-cases.md')), + fileMatch: (file) => file === 'business-use-cases.html' || file.startsWith('business-use-cases/') || file.startsWith('assets/business-use-cases.md.'), + manifestMatch: (key) => key === 'business-use-cases.md', + routeMatch: (route) => route === '/business-use-cases' || route.startsWith('/business-use-cases/'), + }, + ] + + const distFiles = walkFiles(distRoot) + const relativeDistFiles = distFiles.map((file) => path.relative(distRoot, file).split(path.sep).join('/')) + const htmlFiles = relativeDistFiles.filter((file) => file.endsWith('.html')) + const hashmap = JSON.parse(fs.readFileSync(path.join(distRoot, 'hashmap.json'), 'utf8')) + if (hashmap === null || Array.isArray(hashmap) || typeof hashmap !== 'object') { + throw new Error('hashmap.json must contain an object') + } + const manifestKeys = Object.keys(hashmap).sort() + for (const key of manifestKeys) { + if (typeof hashmap[key] !== 'string') throw new Error(`non-string hashmap entry: ${key}`) + } + + function normalizeHref(rawHref, htmlFile) { + const value = rawHref.replaceAll('&', '&') + if (value === '' || value.startsWith('#')) return null + if (/^(?:data|javascript|mailto|tel):/i.test(value)) return null + const base = new URL(`/trusted-server/${htmlFile}`, 'https://local.invalid') + const url = new URL(value, base) + let route = decodeURIComponent(url.pathname) + route = path.posix.normalize(route) + if (route === '/trusted-server') route = '/' + else if (route.startsWith('/trusted-server/')) route = route.slice('/trusted-server'.length) + route = route.replace(/\.(?:html|md)$/i, '') + if (route.length > 1) route = route.replace(/\/$/, '') + return route.toLowerCase() + } + + const hrefPattern = /(?:^|[\s<])href\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+))/gimu + const hrefRecords = [] + for (const htmlFile of htmlFiles) { + const html = fs.readFileSync(path.join(distRoot, htmlFile), 'utf8') + for (const match of html.matchAll(hrefPattern)) { + const href = match[1] ?? match[2] ?? match[3] + hrefRecords.push({ file: htmlFile, href, route: normalizeHref(href, htmlFile) }) + } + } + + const violations = [] + const familyResults = {} + for (const family of families) { + const routeAssets = relativeDistFiles.filter((file) => family.fileMatch(file.toLowerCase())) + const manifest = manifestKeys.filter((key) => family.manifestMatch(key)) + const hrefs = hrefRecords.filter((record) => record.route !== null && family.routeMatch(record.route)) + familyResults[family.name] = { + sourceCount: family.sourceCount(), + routeAssetCount: routeAssets.length, + manifestCount: manifest.length, + hrefCount: hrefs.length, + } + for (const file of routeAssets) violations.push(`${family.name} file: ${file}`) + for (const key of manifest) violations.push(`${family.name} manifest: ${key}`) + for (const record of hrefs) violations.push(`${family.name} href in ${record.file}: ${record.href}`) + } + + const artifactSpecifications = [ + { + name: 'Home', + file: 'index.html', + markers: ['Trusted Server', 'The New Execution Layer for Publishers'], + }, + { + name: 'Guide', + file: 'guide/index.html', + markers: ['Guide | Trusted Server', '

API Reference | Trusted Server', + 'Quick reference for all Trusted Server HTTP endpoints.', + ], + }, + ] + const requiredArtifacts = {} + for (const specification of artifactSpecifications) { + const html = fs.readFileSync(path.join(distRoot, specification.file), 'utf8') + const missingMarkers = specification.markers.filter((marker) => !html.includes(marker)) + requiredArtifacts[specification.name] = { + file: specification.file, + exists: true, + markerCount: specification.markers.length - missingMarkers.length, + requiredMarkerCount: specification.markers.length, + } + for (const marker of missingMarkers) { + violations.push(`${specification.name} missing marker: ${marker}`) + } + } + + if (violations.length > 0) { + throw new Error(`containment verification failed:\n${violations.sort().join('\n')}`) + } + + console.log( + JSON.stringify( + { + boundContentSha, + families: familyResults, + htmlFileCount: htmlFiles.length, + hrefCount: hrefRecords.length, + requiredArtifacts, + }, + null, + 2, + ), + ) + NODE + ``` + + It exited 0. The following fenced JSON is the authoritative verbatim stdout + from this local command: + + ```json + { + "boundContentSha": "5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed", + "families": { + "superpowers/**": { + "sourceCount": 135, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "internal/**": { + "sourceCount": 4, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "epics/**": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "guide/onboarding.md": { + "sourceCount": 0, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "README.md": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "business-use-cases.md": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + } + }, + "htmlFileCount": 43, + "hrefCount": 4604, + "requiredArtifacts": { + "Home": { + "file": "index.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + }, + "Guide": { + "file": "guide/index.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + }, + "API": { + "file": "guide/api-reference.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + } + } + } + ``` + + This earlier raw local result is superseded by the semantic-parser correction + below and is no longer authoritative. It was never a live Pages, CNAME, + deployment, or release receipt. + +- Semantic containment evidence correction timestamp: + 2026-09-01T13:35:41Z. This correction supersedes both prior href + implementations: the shell-command-substitution scan from + `0a8e57f5e5aa03423dce29b61817dfb2b7194a1e` and the regex-over-document Node + scan from `75fd40671bf5ae6acafc7f5230a39e88b8e70fc6`. Neither prior href result is + authoritative because it did not apply HTML attribute semantics. +- Semantic correction package start HEAD: + `75fd40671bf5ae6acafc7f5230a39e88b8e70fc6`. Before mutation, it equaled + `origin/spec-docs-refresh`; `origin/rc/202608` remained exactly + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` and ancestral to HEAD; the + worktree was clean. +- From `docs`, the fresh semantic correction build ran `npm ci`, + `npm run lint`, `npm run format`, and `npm run build` in that order. All + exited 0: `npm ci` added 346 packages in 4 seconds, lint completed after + `eslint .`, format reported `All matched files use Prettier code style!`, + and VitePress reported `build complete in 5.21s.` with only the known + non-failing `vcl`-to-`txt` fallback. +- The following exact fail-closed command was run from `docs`. It retains the + four-path Git binding to + `5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed`, recursive filesystem walk, + manifest/file checks, six excluded families, and Home/Guide/API markers. + Python standard-library `html.parser.HTMLParser` collects only literal + `href` attributes from start and start-end tags and decodes HTML character + references. Parser, filesystem, decoding, URL-normalization, Git-binding, + and synthetic-assertion exceptions propagate; none are suppressed. + + ```sh + python3 <<'PY' + import json + import os + import platform + import posixpath + import re + import stat + import subprocess + from html.parser import HTMLParser + from pathlib import Path + from urllib.parse import unquote_to_bytes, urljoin, urlsplit + + BOUND_CONTENT_SHA = '5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed' + CONTAINMENT_PATHS = [ + 'docs/.vitepress/config.mts', + 'docs/guide/index.md', + 'docs/guide/onboarding.md', + 'docs/internal/onboarding.md', + ] + LOCAL_ORIGIN = 'https://local.invalid' + LOCAL_ORIGIN_TUPLE = ('https', 'local.invalid', 443) + DOCS_ROOT = Path.cwd() + REPO_ROOT = DOCS_ROOT.parent + DIST_ROOT = DOCS_ROOT / '.vitepress' / 'dist' + + binding = subprocess.run( + ['git', 'diff', '--quiet', BOUND_CONTENT_SHA, 'HEAD', '--', *CONTAINMENT_PATHS], + cwd=REPO_ROOT, + capture_output=True, + text=True, + check=False, + ) + if binding.returncode != 0: + raise RuntimeError( + f'containment binding failed with status {binding.returncode}: {binding.stderr}' + ) + + + def walk_files(root): + files = [] + with os.scandir(root) as iterator: + entries = sorted(iterator, key=lambda entry: entry.name) + for entry in entries: + absolute = Path(entry.path) + if entry.is_dir(follow_symlinks=False): + files.extend(walk_files(absolute)) + elif entry.is_file(follow_symlinks=False): + files.append(absolute) + else: + raise RuntimeError(f'unsupported filesystem entry: {absolute}') + return files + + + def count_markdown_files(root): + return sum(file.suffix == '.md' for file in walk_files(root)) + + + def count_optional_file(file): + try: + mode = os.stat(file, follow_symlinks=False).st_mode + except FileNotFoundError: + return 0 + if not stat.S_ISREG(mode): + raise RuntimeError(f'expected a regular file: {file}') + return 1 + + + def require_file_count(file): + mode = os.stat(file, follow_symlinks=False).st_mode + if not stat.S_ISREG(mode): + raise RuntimeError(f'expected a regular file: {file}') + return 1 + + + class HrefParser(HTMLParser): + def __init__(self): + super().__init__(convert_charrefs=True) + self.hrefs = [] + + def collect_hrefs(self, attrs): + for name, value in attrs: + if name.lower() == 'href': + if value is None: + raise ValueError('href attribute must have a literal value') + self.hrefs.append(value) + + def handle_starttag(self, tag, attrs): + self.collect_hrefs(attrs) + + def handle_startendtag(self, tag, attrs): + self.collect_hrefs(attrs) + + + def parse_hrefs(source): + parser = HrefParser() + parser.feed(source) + parser.close() + return parser.hrefs + + + def origin_tuple(parts): + hostname = parts.hostname + if hostname is None: + return (parts.scheme.lower(), None, None) + port = parts.port + if port is None: + if parts.scheme.lower() == 'https': + port = 443 + elif parts.scheme.lower() == 'http': + port = 80 + return (parts.scheme.lower(), hostname.lower(), port) + + + def normalize_href(raw_href, html_file): + if raw_href is None: + raise ValueError(f'{html_file}: href value is missing') + if any(ord(character) < 0x20 or ord(character) == 0x7F for character in raw_href): + raise ValueError(f'{html_file}: href contains a control character: {raw_href!r}') + if '\\' in raw_href: + raise ValueError(f'{html_file}: href contains an ambiguous backslash: {raw_href!r}') + if re.search(r'%(?![0-9A-Fa-f]{2})', raw_href): + raise ValueError(f'{html_file}: href contains invalid percent encoding: {raw_href!r}') + base_url = f'{LOCAL_ORIGIN}/trusted-server/{html_file}' + try: + resolved = urlsplit(urljoin(base_url, raw_href)) + resolved_origin = origin_tuple(resolved) + except ValueError as error: + raise ValueError(f'{html_file}: malformed href {raw_href!r}: {error}') from error + if resolved_origin != LOCAL_ORIGIN_TUPLE: + return None + try: + route = unquote_to_bytes(resolved.path).decode('utf-8', errors='strict') + except UnicodeDecodeError as error: + raise ValueError(f'{html_file}: href path is not valid UTF-8: {raw_href!r}') from error + route = posixpath.normpath(route) + if not route.startswith('/'): + raise ValueError(f'{html_file}: normalized local href is not absolute: {raw_href!r}') + if route == '/trusted-server': + route = '/' + elif route.startswith('/trusted-server/'): + route = route[len('/trusted-server'):] + route = re.sub(r'\.(?:html|md)$', '', route, flags=re.IGNORECASE) + if len(route) > 1: + route = route.rstrip('/') + return route.lower() + + + synthetic_results = {} + + + def require_synthetic(name, condition): + if not condition: + raise AssertionError(f'synthetic assertion failed: {name}') + synthetic_results[name] = True + + + text_hrefs = parse_hrefs( + '
href="/trusted-server/internal/pre"
' + '<a href="/trusted-server/internal/code">' + '

href=/trusted-server/internal/plain

' + ) + require_synthetic('hrefLookingTextIgnored', text_hrefs == []) + entity_hrefs = parse_hrefs('entity') + require_synthetic( + 'entityEncodedLocalHrefDecodedAndNormalized', + entity_hrefs == ['/trusted-server/internal/x'] + and normalize_href(entity_hrefs[0], 'index.html') == '/internal/x', + ) + require_synthetic( + 'absoluteOffsiteHrefIgnored', + normalize_href('https://offsite.example/internal/x', 'index.html') is None, + ) + require_synthetic( + 'protocolRelativeOffsiteHrefIgnored', + normalize_href('//offsite.example/internal/x', 'index.html') is None, + ) + quoted_hrefs = parse_hrefs( + 'double' + "single" + 'unquoted' + ) + require_synthetic( + 'doubleQuotedHrefCollected', + quoted_hrefs[0] == '/trusted-server/guide/double', + ) + require_synthetic( + 'singleQuotedHrefCollected', + quoted_hrefs[1] == '/trusted-server/guide/single', + ) + require_synthetic( + 'unquotedHrefCollected', + quoted_hrefs[2] == '/trusted-server/guide/unquoted', + ) + + families = [ + { + 'name': 'superpowers/**', + 'source_count': lambda: count_markdown_files(DOCS_ROOT / 'superpowers'), + 'file_match': lambda file: file.startswith('superpowers/') + or file.startswith('assets/superpowers_'), + 'manifest_match': lambda key: key.startswith('superpowers_') + or key.startswith('superpowers/'), + 'route_match': lambda route: route == '/superpowers' + or route.startswith('/superpowers/'), + }, + { + 'name': 'internal/**', + 'source_count': lambda: count_markdown_files(DOCS_ROOT / 'internal'), + 'file_match': lambda file: file.startswith('internal/') + or file.startswith('assets/internal_'), + 'manifest_match': lambda key: key.startswith('internal_') + or key.startswith('internal/'), + 'route_match': lambda route: route == '/internal' + or route.startswith('/internal/'), + }, + { + 'name': 'epics/**', + 'source_count': lambda: count_markdown_files(DOCS_ROOT / 'epics'), + 'file_match': lambda file: file.startswith('epics/') + or file.startswith('assets/epics_'), + 'manifest_match': lambda key: key.startswith('epics_') + or key.startswith('epics/'), + 'route_match': lambda route: route == '/epics' + or route.startswith('/epics/'), + }, + { + 'name': 'guide/onboarding.md', + 'source_count': lambda: count_optional_file(DOCS_ROOT / 'guide' / 'onboarding.md'), + 'file_match': lambda file: file == 'guide/onboarding.html' + or file.startswith('guide/onboarding/') + or file.startswith('assets/guide_onboarding.md.'), + 'manifest_match': lambda key: key in ('guide_onboarding.md', 'guide/onboarding.md'), + 'route_match': lambda route: route == '/guide/onboarding' + or route.startswith('/guide/onboarding/'), + }, + { + 'name': 'README.md', + 'source_count': lambda: require_file_count(DOCS_ROOT / 'README.md'), + 'file_match': lambda file: file == 'readme.html' + or file.startswith('readme/') + or file.startswith('assets/readme.md.'), + 'manifest_match': lambda key: key.lower() == 'readme.md', + 'route_match': lambda route: route == '/readme' + or route.startswith('/readme/'), + }, + { + 'name': 'business-use-cases.md', + 'source_count': lambda: require_file_count(DOCS_ROOT / 'business-use-cases.md'), + 'file_match': lambda file: file == 'business-use-cases.html' + or file.startswith('business-use-cases/') + or file.startswith('assets/business-use-cases.md.'), + 'manifest_match': lambda key: key == 'business-use-cases.md', + 'route_match': lambda route: route == '/business-use-cases' + or route.startswith('/business-use-cases/'), + }, + ] + + dist_files = walk_files(DIST_ROOT) + relative_dist_files = [file.relative_to(DIST_ROOT).as_posix() for file in dist_files] + html_files = [file for file in relative_dist_files if file.endswith('.html')] + hashmap = json.loads((DIST_ROOT / 'hashmap.json').read_text(encoding='utf-8')) + if not isinstance(hashmap, dict): + raise TypeError('hashmap.json must contain an object') + manifest_keys = sorted(hashmap) + for key in manifest_keys: + if not isinstance(hashmap[key], str): + raise TypeError(f'non-string hashmap entry: {key}') + + href_records = [] + for html_file in html_files: + html = (DIST_ROOT / html_file).read_text(encoding='utf-8') + for href in parse_hrefs(html): + href_records.append( + { + 'file': html_file, + 'href': href, + 'route': normalize_href(href, html_file), + } + ) + + violations = [] + family_results = {} + for family in families: + route_assets = [ + file + for file in relative_dist_files + if family['file_match'](file.lower()) + ] + manifest = [key for key in manifest_keys if family['manifest_match'](key)] + hrefs = [ + record + for record in href_records + if record['route'] is not None and family['route_match'](record['route']) + ] + family_results[family['name']] = { + 'sourceCount': family['source_count'](), + 'routeAssetCount': len(route_assets), + 'manifestCount': len(manifest), + 'hrefCount': len(hrefs), + } + violations.extend(f"{family['name']} file: {file}" for file in route_assets) + violations.extend(f"{family['name']} manifest: {key}" for key in manifest) + violations.extend( + f"{family['name']} href in {record['file']}: {record['href']}" + for record in hrefs + ) + + artifact_specifications = [ + { + 'name': 'Home', + 'file': 'index.html', + 'markers': [ + 'Trusted Server', + 'The New Execution Layer for Publishers', + ], + }, + { + 'name': 'Guide', + 'file': 'guide/index.html', + 'markers': ['Guide | Trusted Server', '

API Reference | Trusted Server', + 'Quick reference for all Trusted Server HTTP endpoints.', + ], + }, + ] + required_artifacts = {} + for specification in artifact_specifications: + html = (DIST_ROOT / specification['file']).read_text(encoding='utf-8') + missing_markers = [ + marker for marker in specification['markers'] if marker not in html + ] + required_artifacts[specification['name']] = { + 'file': specification['file'], + 'exists': True, + 'markerCount': len(specification['markers']) - len(missing_markers), + 'requiredMarkerCount': len(specification['markers']), + } + violations.extend( + f"{specification['name']} missing marker: {marker}" + for marker in missing_markers + ) + + if violations: + raise RuntimeError('containment verification failed:\n' + '\n'.join(sorted(violations))) + + result = { + 'parser': { + 'name': 'html.parser.HTMLParser', + 'pythonVersion': platform.python_version(), + 'convertCharRefs': True, + }, + 'syntheticAssertions': { + 'count': len(synthetic_results), + 'results': synthetic_results, + }, + 'boundContentSha': BOUND_CONTENT_SHA, + 'families': family_results, + 'htmlFileCount': len(html_files), + 'hrefCount': len(href_records), + 'requiredArtifacts': required_artifacts, + } + print(json.dumps(result, indent=2, ensure_ascii=False)) + PY + ``` + + It exited 0. The following fenced JSON is the authoritative verbatim stdout + from the semantic local command: + + ```json + { + "parser": { + "name": "html.parser.HTMLParser", + "pythonVersion": "3.9.6", + "convertCharRefs": true + }, + "syntheticAssertions": { + "count": 7, + "results": { + "hrefLookingTextIgnored": true, + "entityEncodedLocalHrefDecodedAndNormalized": true, + "absoluteOffsiteHrefIgnored": true, + "protocolRelativeOffsiteHrefIgnored": true, + "doubleQuotedHrefCollected": true, + "singleQuotedHrefCollected": true, + "unquotedHrefCollected": true + } + }, + "boundContentSha": "5dcf84bd0bebf8e6297822d0435e737bb7b4e2ed", + "families": { + "superpowers/**": { + "sourceCount": 135, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "internal/**": { + "sourceCount": 4, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "epics/**": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "guide/onboarding.md": { + "sourceCount": 0, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "README.md": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + }, + "business-use-cases.md": { + "sourceCount": 1, + "routeAssetCount": 0, + "manifestCount": 0, + "hrefCount": 0 + } + }, + "htmlFileCount": 43, + "hrefCount": 4601, + "requiredArtifacts": { + "Home": { + "file": "index.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + }, + "Guide": { + "file": "guide/index.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + }, + "API": { + "file": "guide/api-reference.html", + "exists": true, + "markerCount": 2, + "requiredMarkerCount": 2 + } + } + } + ``` + + This fenced JSON is the sole authoritative Task 2 containment and href + result. It is local build evidence only, not a live Pages, CNAME, + deployment, or release receipt, and it does not complete a release-pending + row. + +- After the final `npm run format`, `npm run lint`, and `npm run build` pass, + an independent verifier extracted and reran the exact fenced command and + compared stdout to the fenced JSON byte-for-byte. The command exited 0; + both values were 1,831 bytes with SHA-256 + `7d2e9d27e69789149eafb99956a4608c391d5cce71aff71e19ad9942cbd0d44e`, and + `byteIdentical` was `true`. Only generated `.vitepress/.temp` was removed + afterward. + +- The exact onboarding-link assertion was: + + ```sh + test "$(rg -o '\.\./[^)# ]+' internal/onboarding.md | wc -l | tr -d ' ')" = 9 && while IFS= read -r link; do test -f "internal/$link" && git ls-files --error-unmatch -- ":(top)docs/${link#../}" >/dev/null || exit 1; done < <(rg -o '\.\./[^)# ]+' internal/onboarding.md) + ``` + + It exited 0 and printed nothing. All 9/9 repository-relative links resolved + to tracked targets; the seven unique targets were + `docs/guide/what-is-trusted-server.md`, `docs/guide/architecture.md`, + `docs/guide/getting-started.md`, `docs/guide/configuration.md`, + `docs/guide/testing.md`, `docs/guide/integrations-overview.md`, and + `docs/guide/integration-guide.md`. + +- Removed only generated `docs/.vitepress/.temp` after the artifact checks. + `git diff --check` then exited 0, and `git status --porcelain=v1 +--untracked-files=all` printed nothing before this evidence-only mutation. +- `npx prettier --write +internal/audits/documentation-refresh-evidence.md` exited 0 and reported + `internal/audits/documentation-refresh-evidence.md 41ms`; the following + `npm run format` exited 0 with + `All matched files use Prettier code style!`. +- This is local build and repository evidence only. It is not a live Pages, + deployment, or CNAME receipt, and it does not complete any release-pending + row. +- Evidence-only commit message: `Record documentation containment transfer`. + Its SHA and push result are reported in the execution handoff because a + commit cannot record its own identifier. + +#### Task 3 — Complete WP1 CNAME and policy hygiene + +- Capture timestamp: 2026-09-01T14:02:47Z. +- Executor: `OpenAI Codex task agent task3_wp1_policy`. +- Task start HEAD: + `e6441a86965735584c8bb31ceee8c1f115c243d5`; it equaled + `origin/spec-docs-refresh` after fetch. `origin/rc/202608` equaled + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`, and that audited target was an + ancestor of the task start. +- Approved path list: `docs/public/CNAME`, `docs/business-use-cases.md`, + `fastly.toml`, `docs/package.json`, `docs/package-lock.json`, `CLAUDE.md`, + `AGENTS.md`, `.github/pull_request_template.md`, + `.claude/commands/check-ci.md`, `.claude/commands/review-changes.md`, + `.claude/commands/test-all.md`, `.claude/commands/test-crate.md`, + `.claude/commands/verify.md`, this evidence record, and + `docs/internal/audits/documentation-refresh-decisions.md`. +- Failing pre-change proof: an inline Node policy assertion at the task start + checked the business-use-case warning, package metadata, Fastly authors and + fixture comments, removal of the obsolete script reference, canonical gate + consumers, generated fallback equality, typed exception policy, CNAME + deletion, and retained project-path base. It exited 1 with 27 failures out of + 28 assertions; only the existing `base: '/trusted-server'` assertion passed. + +##### CNAME deletion commit + +- Minimal change: deleted only `docs/public/CNAME`; the VitePress base remained + `/trusted-server`. +- `npm run build`: passed from `docs`; VitePress completed in 4.87 seconds with + only the known non-failing `vcl` syntax-highlighting fallback. +- Focused green proof: the source and built CNAME were absent; Home contained + both project-path `href` and `src` values; no built HTML used a root + `/assets/` URL; and no active, non-historical tracked file contained the + deleted placeholder domain. +- Exact staged name-status from task start: + `D docs/public/CNAME`. `git diff --cached --check` passed, the unstaged + tracked-byte check passed, and the non-ignored untracked-path check passed + after removing only generated `docs/.vitepress/.temp`. +- Commit: `5a7b389dae483bafdc189dd434f98a92b2305b6a` — + `Resolve documentation site domain`. + +##### Policy and hygiene commit + +- Package start HEAD: + `5a7b389dae483bafdc189dd434f98a92b2305b6a`. +- Minimal change: added the source-level unverified-planning warning without + rewriting marketing copy; emptied Fastly authors; labeled the four KV stores + and key material as local test fixtures; removed the obsolete local-script + reference; retained the service ID only under its owned, expiring decision; + made the docs package private and Apache-2.0; added the exact approved + sensitive-data taxonomy; converted gate consumers to the canonical link; + corrected `tracing` to `log`; and added the marked AGENTS fallback region. +- `npm install --package-lock-only --ignore-scripts`: passed and refreshed the + root package license plus npm's current peer metadata. npm intentionally does + not copy the package's `private` field into lockfile v3. +- Generated fallback proof: the inline gate-region generator read the + `CLAUDE.md#ci-gates` body and replaced only the marked AGENTS region. Two + successive runs reported `changed: false` and the same SHA-256, + `b56a60860159e41fbd97ae4a2a8c34a4cccf24227064b8bc53075354cef45e50`. +- Focused green policy assertion: the corrected inline Node assertion exited 0 + with 30 of 30 checks passing. It also compared the generated AGENTS body + byte-for-byte with the canonical CLAUDE body. +- Tracked-file privacy proof: an inline Node scan read all 689 paths returned by + `git ls-files -z`. Removed contacts, handles, internal-channel and access + phrases had zero occurrences. The only controlled values were the service ID + in `fastly.toml` and the deleted placeholder literal in the approved design + audit plus its narrow decision row. Both exceptions had an owner, rationale, + allowed type, exact scope, and future expiry; no broad exception shape was + present. +- Documentation regression command: + `cd docs && npm ci && npm run lint && npm run format && npm run build` passed. + VitePress built 43 HTML files in 5.13 seconds with only the known non-failing + `vcl` fallback. +- Artifact proof used Python's `HTMLParser` to inspect actual `href` and `src` + attributes. The corrected assertion found 3,425 local URLs and required all + of them to use `/trusted-server/`. Home, Guide, and API Reference HTML plus + two page assets each were present. `superpowers/**`, `internal/**`, + `epics/**`, `guide/onboarding.md`, `README.md`, and + `business-use-cases.md` had no route, page asset, or local URL. The source and + output CNAME were absent. The first artifact run used the guessed marker + `Trusted Server Guide` and failed only that assertion; source inspection + showed the approved H1 is `Guide`, and the corrected exact H1 assertion + passed with no violations. +- Final checkpoint hygiene: the first post-evidence regression invocation + stopped at lint because the preceding build had recreated the generated + `docs/.vitepress/.temp` tree. The errors were confined to generated VitePress + JavaScript. After removing only that generated directory, the exact + `npm ci && npm run lint && npm run format && npm run build` sequence passed; + the final full-sequence build completed in 5.41 seconds. The corrected + artifact proof then repeated with the same counts and no violations. +- Exact staged name-status from policy-package start: 14 `M` rows, exactly the + policy package's approved paths and no others. `git diff --cached --check`, + the repository-wide unstaged tracked-byte check, and the non-ignored + untracked-path check all passed. This evidence mutation was then restaged and + those checks repeated before commit. +- Active exceptions: service ID, owner `aram356`, rationale recorded above, + expiry `2026-09-30T00:00:00Z`; historical placeholder example, owner + `aram356`, rationale restricted to preserving approved audit evidence, + expiry `2027-08-31T00:00:00Z`. +- Live Pages, deployed canonical URLs, and observed CNAME behavior remain + `release-pending`. No local result in this package completes that row. +- Enclosing policy commit message: `Clean documentation publishing policy`. + Its SHA and push result are reported in the execution handoff because a + commit cannot contain its own identifier. + +##### Authoritative Task 3 evidence correction + +- Correction timestamp: 2026-09-01T15:05:38Z. +- Correction: the earlier Task 3 policy, privacy, and artifact aggregates are + non-authoritative because their executable predicates and raw output were not + retained, and the artifact aggregate omitted 28 relative local references. + This correction supersedes those aggregates without changing their historical + record. The command and JSON below are the sole authoritative Task 3 gate + evidence. +- Binding: the command fails unless all Task 3 policy and documentation source + paths, excluding this append-only evidence ledger, remain byte-equivalent to + `b4a99c583f62d9d053ffb1c7073b6dd8e96c36c1` in HEAD, index, and working tree. +- Semantics: actual entity-decoded `href` and `src` attributes are resolved + against each emitted page at a synthetic local origin. Every local reference + is checked for project-path containment, excluded-family absence, and an + existing target artifact. Normalized URL origins use lower-case schemes and + hostnames plus effective default ports; user information is origin-irrelevant, + while malformed hosts or ports fail closed. Genuine off-origin HTTP(S) and + non-web-scheme references are ignored and counted; focused synthetics require + entity-decoded relative and normalized same-origin exclusion detection, + project-path escape detection, default-port and user-information handling, + non-default-port offsite handling, and inert offsite, non-web, and code text. +- Exact executable command: + +```sh +python3 - <<'PY' +from __future__ import annotations + +import json +import posixpath +import re +import subprocess +from datetime import datetime, timezone +from html.parser import HTMLParser +from pathlib import Path +from urllib.parse import unquote, urljoin, urlsplit + + +BOUND_SHA = "b4a99c583f62d9d053ffb1c7073b6dd8e96c36c1" +LOCAL_ORIGIN = "https://docs.local.invalid" +PROJECT_PREFIX = "/trusted-server/" +REPOSITORY_ROOT = Path.cwd() +DIST_ROOT = REPOSITORY_ROOT / "docs/.vitepress/dist" +EVIDENCE_PATH = "docs/internal/audits/documentation-refresh-evidence.md" + + +def run_git(arguments: list[str]) -> bytes: + return subprocess.run( + ["git", *arguments], + check=True, + cwd=REPOSITORY_ROOT, + stdout=subprocess.PIPE, + ).stdout + + +bound_pathspecs = [ + ".claude/commands/check-ci.md", + ".claude/commands/review-changes.md", + ".claude/commands/test-all.md", + ".claude/commands/test-crate.md", + ".claude/commands/verify.md", + ".github/pull_request_template.md", + "AGENTS.md", + "CLAUDE.md", + "fastly.toml", + "docs", + f":(exclude){EVIDENCE_PATH}", +] +run_git(["cat-file", "-e", f"{BOUND_SHA}^{{commit}}"]) +run_git(["diff", "--quiet", BOUND_SHA, "HEAD", "--", *bound_pathspecs]) +run_git(["diff", "--quiet", "--", *bound_pathspecs]) +run_git(["diff", "--cached", "--quiet", "--", *bound_pathspecs]) + + +def read_text(path: str) -> str: + return (REPOSITORY_ROOT / path).read_text(encoding="utf-8") + + +business = read_text("docs/business-use-cases.md") +package = json.loads(read_text("docs/package.json")) +package_lock = json.loads(read_text("docs/package-lock.json")) +fastly = read_text("fastly.toml") +claude = read_text("CLAUDE.md") +agents = read_text("AGENTS.md") +template = read_text(".github/pull_request_template.md") +decisions = read_text("docs/internal/audits/documentation-refresh-decisions.md") +gate_link = "[canonical CI gate list](/CLAUDE.md#ci-gates)" +canonical = claude.split("## CI Gates\n\n", 1)[1].split("\n\n---", 1)[0].strip() +generated_begin = "" +generated_end = "" +generated = agents.split(generated_begin, 1)[1].split(generated_end, 1)[0].strip() +policy_region = claude.split("## Other guidelines", 1)[1].split( + "## Git Commit Conventions", 1 +)[0] + +policy_predicates = { + "business warning": "**Unverified planning material.**" in business, + "package private": package.get("private") is True, + "package license": package.get("license") == "Apache-2.0", + "lock license": package_lock["packages"][""]["license"] == "Apache-2.0", + "empty authors": re.search(r"^authors = \[\]$", fastly, re.MULTILINE) + is not None, + "counter KV comment": "# Local test fixture for the counter KV store." + in fastly, + "creative KV comment": "# Local test fixture for the creative KV store." + in fastly, + "EC identity KV comment": "# Local test fixture for the EC identity KV store." + in fastly, + "consent KV comment": "# Local test fixture for the consent KV store." + in fastly, + "obsolete script absent from fastly": "test-prebid-eids.sh" not in fastly, + "service owner": "owner `aram356`" in fastly, + "service expiry": "2026-09-30T00:00:00Z" in fastly, + "template gate link": gate_link in template, + "template log terminology": "Uses `log` macros" in template + and "Uses `tracing` macros" not in template, + ".claude/commands/check-ci.md gate link": gate_link + in read_text(".claude/commands/check-ci.md"), + ".claude/commands/review-changes.md gate link": gate_link + in read_text(".claude/commands/review-changes.md"), + ".claude/commands/test-all.md gate link": gate_link + in read_text(".claude/commands/test-all.md"), + ".claude/commands/test-crate.md gate link": gate_link + in read_text(".claude/commands/test-crate.md"), + ".claude/commands/verify.md gate link": gate_link + in read_text(".claude/commands/verify.md"), + "generated markers": generated_begin in agents and generated_end in agents, + "generated equality": generated == canonical, + "type vendor URL": "vendor URL" in policy_region, + "type hash-pinned fake-credential fixture": "hash-pinned fake-credential fixture" + in policy_region, + "type historical example": "historical example" in policy_region, + "type service ID": "service ID" in policy_region, + "type project-owned public domain": "project-owned public domain" + in policy_region, + "exception fields": all( + field in policy_region.lower() + for field in ("owner", "rationale", "expiry timestamp") + ), + "historical decision": "These are the only two active WP1 sensitive-data exceptions." + in decisions + and "2027-08-31T00:00:00Z" in decisions, + "source CNAME absent": not (REPOSITORY_ROOT / "docs/public/CNAME").exists(), + "project base": "base: '/trusted-server'" + in read_text("docs/.vitepress/config.mts"), +} +if len(policy_predicates) != 30: + raise RuntimeError( + f"policy predicate count changed: expected 30, got {len(policy_predicates)}" + ) +failed_policy = sorted(name for name, passed in policy_predicates.items() if not passed) +if failed_policy: + raise RuntimeError(f"policy predicates failed: {failed_policy}") + + +tracked_paths = run_git(["ls-files", "-z"]).split(b"\0") +tracked_paths = [path.decode("utf-8") for path in tracked_paths if path] +tracked_bytes = { + path: (REPOSITORY_ROOT / path).read_bytes() for path in tracked_paths +} + + +def occurrences(value: str) -> list[str]: + needle = value.encode("utf-8") + found: list[str] = [] + for path, content in tracked_bytes.items(): + found.extend([path] * content.count(needle)) + return sorted(found) + + +removed_terms = { + "personal email": "jason" + "@stackpop.com", + "project-lead handle": "@jev" + "ansnyc", + "developer handle": "@Christian" + "Pavilonis", + "internal channel": "#trusted-server-" + "internal", + "manager or buddy access direction": "Ask your manager or onboarding " + + "buddy", + "GitHub access direction": "Get GitHub " + "access to", + "project-board access direction": "Get access to the [Trusted Server " + + "project board]", + "Slack access direction": "Join the Slack " + "workspace", + "calendar access direction": "Get calendar invites for Task " + "Force", + "internal standup reference": "Development Team " + "Standup", +} +privacy_term_results = { + name: len(occurrences(value)) for name, value in removed_terms.items() +} +privacy_violations = [ + f"{name}: expected zero occurrences, got {count}" + for name, count in privacy_term_results.items() + if count != 0 +] + +historical_value = "your" + "-custom-domain.com" +historical_scope = sorted( + [ + "docs/internal/audits/documentation-refresh-decisions.md", + "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md", + ] +) +historical_occurrences = occurrences(historical_value) +if historical_occurrences != historical_scope: + privacy_violations.append( + "historical example scope: " + f"expected {historical_scope}, got {historical_occurrences}" + ) + +service_value = "dysUw6h73Vze" + "omD61eal85" +service_scope = ["fastly.toml"] +service_occurrences = occurrences(service_value) +if service_occurrences != service_scope: + privacy_violations.append( + f"service ID scope: expected {service_scope}, got {service_occurrences}" + ) + +now = datetime.now(timezone.utc) +for exception_type, expiry in ( + ("service ID", "2026-09-30T00:00:00Z"), + ("historical example", "2027-08-31T00:00:00Z"), +): + expiry_time = datetime.fromisoformat(expiry.replace("Z", "+00:00")) + if expiry not in decisions or now >= expiry_time: + privacy_violations.append(f"{exception_type}: missing or expired {expiry}") +if "Owner: `aram356`." not in decisions: + privacy_violations.append("historical example: missing owner") +if "Rationale: preserve the approved audit" not in decisions: + privacy_violations.append("historical example: missing rationale") +if "These are the only two active WP1 sensitive-data exceptions." not in decisions: + privacy_violations.append("active WP1 exception set is not exact") +if re.search(r"allowed types[^\n]*\ball\b", decisions, re.IGNORECASE) or re.search( + r"(?:domain|credential)[^\n]*\*", decisions, re.IGNORECASE +): + privacy_violations.append("broad exception shape detected") +if privacy_violations: + raise RuntimeError(f"privacy predicates failed: {sorted(privacy_violations)}") + + +EXCLUDED_PREFIXES = ("superpowers/", "internal/", "epics/") +EXCLUDED_EXACT = { + "guide/onboarding", + "guide/onboarding.html", + "readme", + "readme.html", + "business-use-cases", + "business-use-cases.html", +} +EXCLUDED_ASSET_MARKERS = ( + "superpowers_", + "internal_", + "epics_", + "guide_onboarding.md", + "readme.md", + "business-use-cases.md", +) +REQUIRED_HTML = { + "index.html": "Trusted Server", + "guide/index.html": '

str: + decoded = unquote(path) + if "\\" in decoded or "\x00" in decoded: + raise ValueError(f"unsafe local URL path: {path!r}") + normalized = posixpath.normpath(decoded) + if decoded.endswith("/") and not normalized.endswith("/"): + normalized += "/" + return normalized + + +def excluded_route(route: str) -> bool: + folded = route.casefold() + return folded in EXCLUDED_EXACT or any( + folded.startswith(prefix) for prefix in EXCLUDED_PREFIXES + ) + + +def artifact_candidates(local_path: str) -> list[Path]: + route = local_path.removeprefix(PROJECT_PREFIX) + if not route or route.endswith("/"): + return [DIST_ROOT / route / "index.html"] + direct = DIST_ROOT / route + candidates = [direct] + if direct.suffix == "": + candidates.extend([direct.with_suffix(".html"), direct / "index.html"]) + return candidates + + +class AttributeParser(HTMLParser): + def __init__(self) -> None: + super().__init__(convert_charrefs=True) + self.references: list[tuple[str, str, str]] = [] + + def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: + for name, value in attrs: + if name in {"href", "src"} and value is not None: + self.references.append((tag, name, value)) + + +def normalized_origin(parts) -> tuple[str, str, int]: + scheme = parts.scheme.lower() + hostname = parts.hostname + if hostname is None: + raise ValueError("web URL has no hostname") + hostname = hostname.lower() + port = parts.port + if port is None: + port = 443 if scheme == "https" else 80 + return (scheme, hostname, port) + + +LOCAL_ORIGIN_TUPLE = normalized_origin(urlsplit(LOCAL_ORIGIN)) + + +def inspect_references( + page_relative: str, + html: str, + *, + require_targets: bool, +) -> dict[str, object]: + parser = AttributeParser() + parser.feed(html) + parser.close() + page_url = f"{LOCAL_ORIGIN}{PROJECT_PREFIX}{page_relative}" + counts = { + "projectAbsolute": 0, + "relativeArtifact": 0, + "sameDocument": 0, + "absoluteSameOrigin": 0, + "offOrigin": 0, + "nonWebScheme": 0, + } + violations: list[str] = [] + for tag, name, raw_value in parser.references: + value = raw_value.strip() + try: + raw_parts = urlsplit(value) + resolved = urlsplit(urljoin(page_url, value)) + except ValueError as error: + violations.append(f"{page_relative}: {tag}[{name}] malformed URL: {error}") + continue + if resolved.scheme not in {"http", "https"}: + counts["nonWebScheme"] += 1 + continue + try: + resolved_origin = normalized_origin(resolved) + except ValueError as error: + violations.append(f"{page_relative}: {tag}[{name}] malformed origin: {error}") + continue + if resolved_origin != LOCAL_ORIGIN_TUPLE: + counts["offOrigin"] += 1 + continue + try: + local_path = normalize_local_path(resolved.path) + except ValueError as error: + violations.append(f"{page_relative}: {tag}[{name}] {error}") + continue + if not local_path.startswith(PROJECT_PREFIX): + violations.append( + f"{page_relative}: {tag}[{name}] escapes project path: {value!r}" + ) + continue + route = local_path.removeprefix(PROJECT_PREFIX) + if excluded_route(route): + violations.append( + f"{page_relative}: {tag}[{name}] resolves to excluded route: {route!r}" + ) + same_document = value == "" or value.startswith(("#", "?")) + if same_document: + counts["sameDocument"] += 1 + elif value.startswith("/"): + counts["projectAbsolute"] += 1 + elif raw_parts.scheme: + counts["absoluteSameOrigin"] += 1 + else: + counts["relativeArtifact"] += 1 + if require_targets and not any( + candidate.is_file() for candidate in artifact_candidates(local_path) + ): + violations.append( + f"{page_relative}: {tag}[{name}] target artifact missing: {value!r}" + ) + return {"counts": counts, "violations": sorted(set(violations))} + + +synthetic_cases = { + "relative excluded decoded": ( + 'x', + "excluded route", + ), + "relative project escape": ( + '', + "escapes project path", + ), + "default port same-origin excluded decoded": ( + 'x', + "excluded route", + ), + "userinfo same-origin excluded": ( + 'x', + "excluded route", + ), +} +synthetic_results: dict[str, bool] = {} +for name, (html, expected_diagnostic) in synthetic_cases.items(): + result = inspect_references( + "guide/example.html", html, require_targets=False + ) + synthetic_results[name] = any( + expected_diagnostic in violation for violation in result["violations"] + ) +offsite_result = inspect_references( + "guide/example.html", + '<a href="../internal/private.html">' + 'offsite', + require_targets=False, +) +synthetic_results["offsite ignored"] = ( + offsite_result["counts"]["offOrigin"] == 1 + and offsite_result["violations"] == [] +) +nondefault_result = inspect_references( + "guide/example.html", + 'x', + require_targets=False, +) +synthetic_results["non-default port offsite ignored"] = ( + nondefault_result["counts"]["offOrigin"] == 1 + and nondefault_result["violations"] == [] +) +nonweb_result = inspect_references( + "guide/example.html", + '<a href="../internal/private.html">' + 'mail', + require_targets=False, +) +synthetic_results["non-web scheme ignored and inert"] = ( + nonweb_result["counts"]["nonWebScheme"] == 1 + and nonweb_result["violations"] == [] +) +if not all(synthetic_results.values()): + raise RuntimeError(f"artifact synthetics failed: {synthetic_results}") + +artifact_violations: list[str] = [] +artifact_files = sorted(path for path in DIST_ROOT.rglob("*") if path.is_file()) +artifact_relatives = [path.relative_to(DIST_ROOT).as_posix() for path in artifact_files] +for relative in artifact_relatives: + folded_relative = relative.casefold() + if ( + folded_relative == "cname" + or any(folded_relative.startswith(prefix) for prefix in EXCLUDED_PREFIXES) + or folded_relative in EXCLUDED_EXACT + ): + artifact_violations.append(f"excluded artifact: {relative}") + if relative.startswith("assets/") and any( + marker in folded_relative for marker in EXCLUDED_ASSET_MARKERS + ): + artifact_violations.append(f"excluded page asset: {relative}") + +required_asset_counts: dict[str, int] = {} +for relative, marker in REQUIRED_HTML.items(): + path = DIST_ROOT / relative + if not path.is_file() or marker not in path.read_text(encoding="utf-8"): + artifact_violations.append(f"missing required marker: {relative}: {marker}") +for marker, expected in REQUIRED_ASSETS.items(): + count = sum( + relative.startswith(f"assets/{marker}") and relative.endswith(".js") + for relative in artifact_relatives + ) + required_asset_counts[marker] = count + if count != expected: + artifact_violations.append( + f"required asset count {marker!r}: expected {expected}, got {count}" + ) + +aggregate_counts = { + "projectAbsolute": 0, + "relativeArtifact": 0, + "sameDocument": 0, + "absoluteSameOrigin": 0, + "offOrigin": 0, + "nonWebScheme": 0, +} +html_count = 0 +for path in artifact_files: + if path.suffix != ".html": + continue + html_count += 1 + relative = path.relative_to(DIST_ROOT).as_posix() + result = inspect_references( + relative, path.read_text(encoding="utf-8"), require_targets=True + ) + for name, count in result["counts"].items(): + aggregate_counts[name] += count + artifact_violations.extend(result["violations"]) + +local_artifact_references = ( + aggregate_counts["projectAbsolute"] + + aggregate_counts["relativeArtifact"] + + aggregate_counts["absoluteSameOrigin"] +) +expected_counts = { + "projectAbsolute": 3425, + "relativeArtifact": 28, + "absoluteSameOrigin": 0, + "localArtifactReferences": 3453, +} +actual_counts = { + "projectAbsolute": aggregate_counts["projectAbsolute"], + "relativeArtifact": aggregate_counts["relativeArtifact"], + "absoluteSameOrigin": aggregate_counts["absoluteSameOrigin"], + "localArtifactReferences": local_artifact_references, +} +if actual_counts != expected_counts: + artifact_violations.append( + f"bound artifact counts changed: expected {expected_counts}, got {actual_counts}" + ) +if (REPOSITORY_ROOT / "docs/public/CNAME").exists(): + artifact_violations.append("source CNAME exists") +if artifact_violations: + raise RuntimeError( + "artifact predicates failed:\n" + "\n".join(sorted(set(artifact_violations))) + ) + +output = { + "boundSourceSha": BOUND_SHA, + "policy": { + "predicateCount": len(policy_predicates), + "predicates": policy_predicates, + "violations": failed_policy, + }, + "privacy": { + "trackedFilesScanned": len(tracked_paths), + "searchedTermClasses": privacy_term_results, + "activeExceptions": [ + { + "type": "service ID", + "paths": service_scope, + "occurrences": len(service_occurrences), + "owner": "aram356", + "expiry": "2026-09-30T00:00:00Z", + }, + { + "type": "historical example", + "paths": historical_scope, + "occurrences": len(historical_occurrences), + "owner": "aram356", + "expiry": "2027-08-31T00:00:00Z", + }, + ], + "violations": sorted(privacy_violations), + }, + "artifacts": { + "htmlFiles": html_count, + "requiredHtml": sorted(REQUIRED_HTML), + "requiredAssetCounts": required_asset_counts, + "excludedFamilies": [ + "superpowers/**", + "internal/**", + "epics/**", + "guide/onboarding.md", + "README.md", + "business-use-cases.md", + ], + "referenceCounts": { + **aggregate_counts, + "localArtifactReferences": local_artifact_references, + }, + "synthetics": synthetic_results, + "violations": sorted(set(artifact_violations)), + }, +} +print(json.dumps(output, indent=2, sort_keys=True)) +PY +``` + +- Verbatim stdout: + +```text +{ + "artifacts": { + "excludedFamilies": [ + "superpowers/**", + "internal/**", + "epics/**", + "guide/onboarding.md", + "README.md", + "business-use-cases.md" + ], + "htmlFiles": 43, + "referenceCounts": { + "absoluteSameOrigin": 0, + "localArtifactReferences": 3453, + "nonWebScheme": 0, + "offOrigin": 115, + "projectAbsolute": 3425, + "relativeArtifact": 28, + "sameDocument": 1077 + }, + "requiredAssetCounts": { + "guide_api-reference.md.": 2, + "guide_index.md.": 2, + "index.md.": 2 + }, + "requiredHtml": [ + "guide/api-reference.html", + "guide/index.html", + "index.html" + ], + "synthetics": { + "default port same-origin excluded decoded": true, + "non-default port offsite ignored": true, + "non-web scheme ignored and inert": true, + "offsite ignored": true, + "relative excluded decoded": true, + "relative project escape": true, + "userinfo same-origin excluded": true + }, + "violations": [] + }, + "boundSourceSha": "b4a99c583f62d9d053ffb1c7073b6dd8e96c36c1", + "policy": { + "predicateCount": 30, + "predicates": { + ".claude/commands/check-ci.md gate link": true, + ".claude/commands/review-changes.md gate link": true, + ".claude/commands/test-all.md gate link": true, + ".claude/commands/test-crate.md gate link": true, + ".claude/commands/verify.md gate link": true, + "EC identity KV comment": true, + "business warning": true, + "consent KV comment": true, + "counter KV comment": true, + "creative KV comment": true, + "empty authors": true, + "exception fields": true, + "generated equality": true, + "generated markers": true, + "historical decision": true, + "lock license": true, + "obsolete script absent from fastly": true, + "package license": true, + "package private": true, + "project base": true, + "service expiry": true, + "service owner": true, + "source CNAME absent": true, + "template gate link": true, + "template log terminology": true, + "type hash-pinned fake-credential fixture": true, + "type historical example": true, + "type project-owned public domain": true, + "type service ID": true, + "type vendor URL": true + }, + "violations": [] + }, + "privacy": { + "activeExceptions": [ + { + "expiry": "2026-09-30T00:00:00Z", + "occurrences": 1, + "owner": "aram356", + "paths": [ + "fastly.toml" + ], + "type": "service ID" + }, + { + "expiry": "2027-08-31T00:00:00Z", + "occurrences": 2, + "owner": "aram356", + "paths": [ + "docs/internal/audits/documentation-refresh-decisions.md", + "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md" + ], + "type": "historical example" + } + ], + "searchedTermClasses": { + "GitHub access direction": 0, + "Slack access direction": 0, + "calendar access direction": 0, + "developer handle": 0, + "internal channel": 0, + "internal standup reference": 0, + "manager or buddy access direction": 0, + "personal email": 0, + "project-board access direction": 0, + "project-lead handle": 0 + }, + "trackedFilesScanned": 689, + "violations": [] + } +} +``` + +- Result: 30 of 30 named policy predicates passed. The byte scan covered all + 689 tracked files, all ten named removed-value classes had zero occurrences, + and the two active exceptions matched their exact one-path and two-path + scopes. The semantic artifact scan resolved 3,425 project-absolute and 28 + relative artifact references, for 3,453 local artifact references; it also + resolved 1,077 same-document references. All required and excluded artifact, + target-existence, project-path, CNAME, and synthetic predicates passed with + zero violations. Live Pages and observed CNAME behavior remain + `release-pending`. + +#### Task 4 — Scaffold the standalone `docs-parity` crate + +- Package start: `14ea4d99ffb726a75868f1ee1c74622f451f03d7` on + `spec-docs-refresh`. The package-start fetch reasserted + `origin/rc/202608` at + `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`, confirmed that commit as an + ancestor, and observed PR #1049 open and draft from `spec-docs-refresh` to + `rc/202608`. +- Bootstrap RED: before a binary or library target existed, + `cargo test --manifest-path tools/docs-parity/Cargo.toml --test cli` ran ten + integration tests and failed all ten because the `docs-parity` binary was + absent. Exact assertion: + `should build the docs-parity binary for CLI integration tests`. The tests + covered deterministic help, unknown + subcommands, nested repository discovery, check/update exit codes and + no-write checking, outside and unsafe relative paths, an interrupted atomic + stage, and stable ordering. Adding the typed-governance contract before the + library existed produced `E0433` for the absent `docs_parity` crate. +- Atomic and ordering GREEN: after the minimal implementation, the first run + passed ten cases and exposed one defect on the second stable update: exit 2 + reported that the existing record was treated as an unsafe directory. Parent + validation was corrected to begin at the containing directory; the focused + stable-order test and the full then-eleven-test suite passed. The interruption + fixture pre-created `.tracked-paths.txt.docs-parity.tmp`; update exited 2 and + preserved the prior complete target bytes. +- Boundary RED/GREEN: `C:outside.txt` initially exited 0 instead of 2, and a + tracked file below a world-writable intermediate directory initially exited + 0 instead of 2. Focused tests then passed after portable drive-relative path + rejection and full existing-parent-chain validation were added. A tracked + symlink to an internal regular file passed; an escaping symlink and unsafe + tracked/output directory modes failed closed. +- Review correction from `4f7fe471a4945d8d239091b30d07b9667e97239e`: + a dangling final output symlink initially made `update` exit 0 instead of 2 + because `try_exists` followed its missing target. The focused regression then + passed after both check and update inspected the directory entry with + `symlink_metadata`: each exited 2, both symlink entries and link targets were + unchanged, and no dangling target was created. +- Quality hardening from `048ab3aa45f7deeb142ec3076e886eb3f80c7c4e`: + the Git-admin RED check returned drift exit 1 instead of safety exit 2 for + `.git/config`; after the fix, check and update both exited 2 and preserved the + exact config bytes. The portable-name RED case `line\nbreak.txt` exited 0; + the closed grammar then rejected controls, Windows-invalid characters, + backslashes, trailing dots/spaces, case-insensitive `.git` components, and + all reserved Windows device stems with extensions while continuing to allow + `.gitignore` and `.gitmodules`. Repository roots ending in a space or carriage + return failed when more than Git's single LF terminator was removed; stripping + exactly that LF made both focused cases pass. Expiry probes covered leap day, + year zero, and invalid month, day, hour, minute, and second values. Finally, a + standalone Cargo check targeting `wasm32-wasip1` failed with the intended + `docs-parity supports only Linux and macOS hosts` compile-time diagnostic, + proving there is no unsupported-host fallback. +- Final device-name correction from + `91bfa7f71ff554e8e6e71df781c471667a2390e9`: `COM¹.txt` initially exited 0 + instead of 2. The focused portable-name test passed after exact superscript + `¹`, `²`, and `³` suffixes were recognized for case-insensitive `COM` and + `LPT` stems, with and without extensions. Longer lookalikes such as + `COM¹extra.txt` and `lpt³more.log` remained valid. +- Final focused commands: + + ```bash + cargo test --manifest-path tools/docs-parity/Cargo.toml --test cli + cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check + cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings + cargo run --manifest-path tools/docs-parity/Cargo.toml -- check + ``` + + Results: the integration command passed 19 tests, formatting and Clippy + passed, and the README's absolute-manifest invocation passed from + `docs/guide` without writing repository files. + +- Workspace isolation: the standalone tool owns + `tools/docs-parity/Cargo.lock`; the root `Cargo.lock` SHA-256 was + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba` + before and after the package. The tool lock SHA-256 was + `f45722ba1c96ddc8095308407102deb8c1ca33a64d140c1382abf692e111d5e3`. + No root workspace membership was added. Tasks 1-4 remain the approved + classification-manifest bootstrap exception. + +#### Task 5 — Close tracked-file classification and sensitive-data scanning + +- Capture timestamp: 2026-09-01T17:13:39Z. +- Executor: `OpenAI Codex task agent task5_classification_scanner`. +- Package start HEAD: + `d0e8399dddd87db7816eeba2c363b575c6e552ec`; the local and remote + `spec-docs-refresh` tips matched at package start. +- Approved paths: the standalone tool manifest and lock, classification and + scanner modules, their CLI/library/model/repository seams, the four + governance manifests, classification and scanner integration tests, and + this evidence section. The root Cargo manifest and lock were excluded. +- Classification RED: the first exhaustive integration run exited 101 because + `classify` did not exist. The synthesized unknown-text, unknown-binary, + invalid-UTF-8, oversized-text, Dockerfile, MJS, protobuf, unselected-comment, + unsupported-grammar, symlink-escape, and unclassified-span cases then drove + the closed manifest implementation. Separate update RED cases proved that a + new or moved comment span and an inferred binary kind cannot retain review + attestation. +- Scanner RED: the first 16-fixture integration run failed because `scan` did + not exist. Subsequent focused RED runs covered all detector classes, exact + expiry, stale fingerprints, renamed paths, broad scopes, retired-record + shape, duplicate occurrences, moved byte scopes, project-host lookalikes, + governance-field self-amplification, comment-bearing governance, sensitive + governance prose, reviewed-bootstrap preservation, source-member/domain + prefix truncation, RFC-reserved hosts, source-expression credentials, and + URL substrings misread as email addresses. Each focused case passed after + its minimal implementation change; the scanner integration target then + passed 33 tests. +- Classification review: `git ls-files -z` produced 705 exact tracked paths: + 704 reviewed text files and one reviewed binary image. All 704 text paths + have source records: 669 whole-file and 35 extracted-comment sources. The + maintained set contains 645 explicit includes and 588 explicit typed + excludes; the latter are 135 historical, 6 machine-data, 49 + non-documentation, 378 source-code, and 20 test-fixture dispositions. All + 564 extracted comment spans have exact reviewed dispositions. Agent and + skill Markdown is whole-file included. +- Privacy review: the final scanner manifest contains 3,678 exact byte-scoped + occurrences: 3,345 domains, 286 semantically parsed lockfile fields, 35 + credential-shaped literals, 11 binary strings, and one service ID. There + are no repository email, encoded-token, media-metadata, or retired-plaintext + findings. Class counts are 3,618 vendor URLs, 35 hash-pinned fake credential + fixtures, 13 historical examples, 11 project-owned public domains, and one + service ID. +- Credential disposition: all 35 exact literals were inspected at their + source locations. Twenty-five are inside Rust test modules, one is an + integration-test configuration, four are documentation secret-store key + examples, three are historical test plans, and two are commented template + key names. They are dummy literals, placeholder-rejection fixtures, an + industry-standard published signing example, or key identifiers; none is a + resolved production credential. Rust expressions and wrapper constructors + are excluded by regression tests rather than allowlisted. +- Domain/email disposition: scheme URLs and boundary-terminated bare hosts + were reviewed by exact path and normalized host. RFC-reserved `.example`, + `.invalid`, `.test`, `.localhost`, and `example.com`/`example.net`/ + `example.org` hosts are synthetic and consume no exception. Member-name and + suffix-prefix lookalikes fail detector fixtures. URL user-info and `@` image + filenames do not become email findings. Project hosts use the + `project_owned_public_domain` class; the deleted-CNAME audit has exactly two + historical records, both owned by `aram356`, with the approved rationale and + `2027-08-31T00:00:00Z` expiry. +- Governance: the allowlist supports only the five approved classes. Every + record has exact path, detector, byte selector, content SHA-256, owner, + rationale, and expiry. Derived governance fields are structurally parsed + and not re-scanned as content; comments are rejected outside quoted TOML + strings, and owner/rationale text is scanned directly and cannot be + self-allowlisted. Ten reviewed retired identifier/access-phrase records are + SHA-256-only; the manifest and checked-in tests contain no retired plaintext. +- Service exception: the sole record is scoped to `fastly.toml`, owned by + `aram356`, and expires exactly at `2026-09-30T00:00:00Z`. A deterministic + clock seam proves success immediately before and failure exactly at and + after the boundary. +- Determinism and checks: two classification updates and two scanner + bootstraps were byte-stable. Bootstrap preserves a complete reviewed exact + set without writing, drops stale records, and reopens review for any new or + moved finding. Check mode performs no writes. Focused classification and + scanner commands, the full standalone suite, format, Clippy with warnings + denied, `classify --check`, and `scan --check` passed. `git diff --check`, + approved-path scope, generated no-diff, and tracked/untracked cleanliness + checks passed before the enclosing commit. +- Workspace isolation: the root `Cargo.lock` SHA-256 remained + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba`. + The standalone lock contains only the scanner/classifier dependency closure. +- Semantic boundary: these mechanical detectors do not claim completeness for + human semantic sensitivity. Content outside their named classes still + requires reviewed human disposition. +- Enclosing commit subject: `Enforce documentation source classification`. + Its SHA and push/PR receipt are reported in the execution handoff because a + commit cannot contain its own identifier. + +#### Task 5 review correction + +- Review RED: two omitted classification-attestation tests failed with exit 0 + rather than 2; the omitted allowlist-attestation and service-ID-as-historical + tests likewise failed with exit 0 rather than 2. The corrected target-form + commands are recorded in the plan; the earlier filter-form wording is + superseded. +- Review GREEN: the classification target passes 21 tests and the scanner + target passes 37 tests. Comment records now use exact byte spans and content + fingerprints; quote-aware fixtures cover trailing shell, TOML, YAML, + JavaScript, and protobuf comments, string literals, and two block comments on + one line. Lockfiles receive all non-domain detectors plus span-aware + structured URL-field checks. A structured value after an identical + description value selects the actual field bytes. Equal media-metadata and + non-metadata binary values remain separate occurrences. +- The reviewed real manifests contain 704 text sources and 570 extracted + comment spans. The reviewed scanner manifest contains 3,682 exact findings: + 3,348 domain, 286 structured lockfile field, 36 credential-shape, 11 binary + string, and one service ID. Classes are 3,621 vendor URL, 36 hash-pinned fake + credential fixture, 13 historical example, 11 project-owned public domain, + and one service ID. Human semantic sensitivity remains a reviewed-disposition + obligation, not a detector-completeness claim. +- Two post-review classification updates preserved maintained-manifest SHA-256 + `76b9912045566a3cf72b02bcdb14bce36fa062e02e8521710d686c8850597fd8`. + Two post-review scanner bootstraps preserved allowlist SHA-256 + `0ba6ab33c455b0ef6d96eb4feb3de0552a5e8a3ce56196d8474c835faae1fa92`. + +#### Task 5 strict re-review correction + +- RED evidence: the generalized-domain boundary run passed 39 of 40 scanner + tests and exposed a false positive in the source-member/boundary fixture. + Before correction, binary and media service identifiers were surfaced only + as storage detectors, non-string structured URL fields passed silently, + retired governance lacked mandatory attestation, and stale comment records + outside comment-mode sources were not closed over the manifest set. +- GREEN uses the standalone `psl` crate's compiled public-suffix data for + deterministic offline modern, long, country-code, and punycode suffix + recognition. Binary/media findings retain the semantic service detector. + JSON and TOML lock fields reject unsupported shapes and duplicate keys and + fingerprint the exact selected raw bytes. Grammar-specific fixtures cover + JavaScript template interpolation, shell escapes, TOML multiline strings, + and YAML scalar states. The operational contract and review workflow are + documented in the tool README. +- The reviewed real manifests contain 704 text sources and 570 exact comment + spans. The scanner manifest contains 4,856 exact findings: 4,520 domain, + 286 structured lockfile field, 36 credential-shape, 12 binary string, one + email, and one service ID. Exception classes are 4,793 vendor URL, 36 + hash-pinned fake credential fixture, 15 historical example, 11 + project-owned public domain, and one service ID. +- False-positive review sampled Rust and TypeScript member expressions, Rust + build-path strings, format-template URL fragments, HTML test fixtures, + integration script literals, maintained guides, historical plans/specs, and + generated lockfiles. Code-member/path/template candidates were removed; + complete public-suffix bare domains and syntactically valid URL hosts remain + exact reviewed occurrences. + +#### Task 5 domain and grammar re-review correction + +- The preceding 4,856/4,520 totals are retracted: they included path, + source-member, Markdown code, and invalid URL-template false positives. RED + samples included repository filenames, relative guide links, dotted Rust + members, and a format placeholder mistaken for a URL host. +- URL findings now select and fingerprint only exact host bytes. Bare-domain + recognition combines the compiled public-suffix authority with global + repository-path, relative-path, Markdown code-span/fence, ignore-file, and + source lexical context. A representative review covered root/internal/public + Markdown, shell and ignore files, Rust/TypeScript, configuration examples, + HTML fixtures, lockfiles, and the three previously missed modern-domain + occurrences. +- The corrected reviewed inventory contains 3,265 exact findings: 2,929 + domain, 286 structured lockfile field, 36 credential-shape, 12 binary string, + one email, and one service ID. Classes are 3,205 vendor URL, 36 hash-pinned + fake credential fixture, 13 historical example, 10 project-owned public + domain, and one service ID. Maintained classification has 704 sources and + 569 exact comment spans after removing one quote-state false extraction. +- Span-aware TOML tests cover quoted and dotted keys and inline tables; JSON + and TOML reject unsupported or ambiguous value shapes. Multiline shell/YAML + quote state, nested JavaScript templates, and unterminated lexical states are + fail-closed. The plan and README now list the exact targets, full standalone + suite, review flows, and authorized README staging scope. + +#### Task 5 parser re-review correction + +- Domain RED: the repository-path/markup fixture expected five findings but + the prior categorical suffix and Markdown suppression emitted one. The + persistent source-context fixture expected two literal/comment findings but + emitted none. A separate documented-member fixture emitted three findings + instead of the single real host. GREEN replaces those categories with a + repository-aware context: full path tokens must resolve to tracked, + repository-rooted, current-relative, basename/suffix, or repository-anchored + path evidence; source members are derived from persistent Rust/JavaScript + lexical regions. Markup alone never suppresses a public-suffix host. +- Domain selectors and fingerprints cover the exact original host bytes for + URL and bare-host findings, including case. The reviewed 3,484-domain set had + zero selector/fingerprint mismatches. All three pre-existing project-host + occurrences are present. Representative path/member negatives are absent: + root README and contribution files, build/configuration/getting-started + paths, the two named nested settings/member chains, document-body access, + and result containment calls. +- TOML RED: literal-quoted structural keys produced no finding under the + handwritten token loop. GREEN removes that loop and traverses immutable + `toml_edit` syntax trees through decoded tables, arrays of tables, dotted + keys, and nested inline tables. Allowed fields require string scalars and map + the syntax-tree value span to exact raw content bytes. Tests cover basic and + literal quoted keys, dotted/quoted keys, nested inline tables, arrays of + tables, comments/string decoys, non-string/container and duplicate failures, + escapes, and an identical earlier description value. +- Grammar RED: an unterminated TOML basic string passed classification, while + a JavaScript regular-expression character class inside nested template + interpolation became a false block-comment span. GREEN uses one persistent + state-machine pass per grammar for both extraction and EOF validation. TOML + covers basic/literal and multiline forms; JavaScript covers nested + templates/interpolations, strings, comments, and regular expressions. Shell, + YAML, Rust raw strings/nested blocks, protobuf C-style comments, and Markdown + comments likewise fail closed on unsupported or unterminated state. +- Final reviewed inventory before this evidence append contains 3,820 exact + findings: 3,484 domain, 286 structured lockfile field, 36 credential-shape, + 12 binary string, one email, and one service ID. Classes are 3,757 vendor + URL, 36 hash-pinned fake credential fixture, 15 historical example, 11 + project-owned public domain, and one service ID. The two additional + historical records are the exact deleted-CNAME occurrences newly visible + after categorical Markdown suppression was removed. +- Classification remains 704 sources and 569 exact comment spans; the unified + lexer changed no reviewed real selector or disposition. Two classification + updates and two scanner bootstraps were byte-stable at manifest SHA-256 + values `4734c0925182fffe79245344738fe3543d7408b71d16a20b9a45f8f6f984a266` + and `a1e86dacd141cd7180a6666327ae89536b0ffd49b58f4d17791aa8022b50239f`. + The root lock remained + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba`; + `toml_edit` is isolated to the standalone tool lock. +- Fresh pre-evidence gates passed: classification 29, scanner 55, CLI 19, and + the complete 104-test standalone suite, with zero failures. Format and + all-target/all-feature Clippy with warnings denied are re-run after this + evidence is scanned and restaged. + +#### Task 5 final independent-review correction + +- The independent RED pass added ten reproductions. Lockfiles lost domains in + non-structural fields; a source member in one file suppressed the same host + in unrelated prose and source literals; digitless unquoted credentials were + skipped; five common punctuation boundaries failed retired-token matching; + invalid binary bytes destroyed retired-token offsets; class checks accepted + detector-compatible semantic misuse; and valid JavaScript, TOML, shell, and + YAML grammar forms failed extraction. The focused GREEN suites contain 61 + scanner and 33 classification cases; the additional cross-class matrix brings + the final scanner count to 62. +- Lockfiles now receive the general text scan and structural traversal. A + general domain is suppressed only when its exact byte span is contained in + the exact structural value span that represents it. Non-structural JSON and + TOML values remain general domain findings, while structural values retain + one exact lockfile-field record. +- Domain member suppression is occurrence-specific. Rust and JavaScript source + expressions are rejected only at code offsets outside literal/comment + regions; repository-wide matched-byte state no longer exists. The two-file + regression keeps the prose occurrence plus the source string and comment, + while rejecting only the source expression. In the real inventory, the + named nested settings token appears only at its two documentation + occurrences; the corresponding source expression and the named prediction, + document-body, and result-containment expressions remain absent. The named + README, build, configuration, contribution, and getting-started path tokens + remain absent through repository-path evidence. +- Credential grammar no longer requires a digit. Quoted and unquoted + all-letter and digit-bearing values are detected. Source declarations, + member assignments, calls, and JSON-like identifier expressions are rejected + through lexical offset and key/value context rather than value composition. +- Retired matching trims the complete reviewed prose/Markdown boundary set + while retaining punctuation as a separator between code fragments. Binary + scanning walks maximal valid UTF-8 regions with explicit original byte + bases; invalid bytes before and between identical tokens preserve two exact, + distinct selectors and fingerprints. +- Exception classes are checked against the matched finding, not only its + detector. Vendor records require a public host or structural URL and cannot + claim project-owned or deleted-CNAME domains. Fake credentials require a + test/fixture/documentation/example category or an explicit synthetic marker. + Historical domains are limited to the two approved path, selector, and + fingerprint records; historical binary strings are limited to the approved + image artifact; the historical email remains the exact test fixture. + Project-owned domains require the exact owned host/subdomain boundary, and + service path, owner, expiry, detector, selector, and fingerprint controls are + unchanged. +- The reviewed pre-evidence inventory is 5,829 exact findings: 5,491 domain, + 286 structural lockfile field, 38 credential shape, 12 binary string, one + email, and one service ID. Classes are 5,764 vendor URL, 38 hash-pinned fake + credential fixture, 15 historical example, 11 project-owned public domain, + and one service ID. Relative to the prior reviewed inventory, the net change + is 2,009: 2,007 domains exposed by removing repository-global suppression + and two credentials. The exact-key transition is 2,067 new and 58 stale + records because scanner/test edits also move governed offsets. Independent + review found zero selector/fingerprint mismatches across all 5,829 records + and zero class-policy violations. +- Comment classification remains 704 sources and changes from 569 to 568 exact + spans. The sole removal is the shell parameter-count expansion in the + profiling script, which was previously misclassified as a comment. + +#### Task 5 scanner bypass follow-up + +- Three additional RED fixtures closed context and boundary bypasses. Unquoted + credential values containing `::`, `.`, or `-` remain findings in `.env` and + prose; expression suppression now runs only for paths with an established + source lexer and at code occurrences. Existing Rust member and assignment + negatives remain absent. +- Retired-token matching now trims `*`, `~`, and `|` in addition to the prior + punctuation matrix. Paired Markdown delimiters match the exact token bytes; + punctuation within a token still prevents a match. +- Fake-credential semantics no longer accept every `docs/` path or substring + collisions such as `latest`, `contest`, or `exampled`. Evidence is limited to + fixture/test paths, example configuration paths, exact synthetic-marker + tokens, a small exact placeholder vocabulary, and the exact published AWS + signing example; explicit production/live tokens reject arbitrary values. + The complete regenerated set of 39 fake + records was checked against its selected repository bytes and the predicate. + The intentional `production-admin-password-32-bytes` test value remains + provable only through its exact size marker, not through `production`. +- Before final evidence regeneration the inventory was 5,832 findings: 5,493 + domain, 286 lockfile field, 39 credential shape, 12 binary string, one email, + and one service ID. Classes were 5,766 vendor URL, 39 fake credential, 15 + historical example, 11 project-owned public domain, and one service ID. The + three-record increase from the preceding audit is two domain occurrences and + one credential occurrence introduced by the new regression fixtures. + +#### Task 5 consolidated governance edge-hardening checkpoint + +- The preceding bypass checkpoint correctly records 65 scanner tests before + this quality pass. The final focused suites now contain 67 scanner and 35 + classification tests. +- Classification update validates existing manifest versions, size bounds, + paths, record shapes, uniqueness, comment selectors, fingerprints, and + source/comment relationships before constructing preservation maps. Invalid + reviewed input remains byte-unchanged. GitHub operational files use only the + explicit YAML, shell, TOML, JavaScript, protobuf, and Dockerfile mappings; + unknown formats fail update for review. +- URL overlap suppression is limited to the parsed authority host bytes. URL + query and fragment candidates use the ordinary domain context and boundary + checks; path-like components are not promoted to findings. Credential + assignment capture is bounded to one line, + respects quoted escapes and unquoted comment/whitespace terminators, and + accepts punctuation without weakening occurrence-specific source lexing. +- PNG chunks now require a valid signature, bounded lengths, CRCs, IHDR-first + and IEND termination. tEXt and uncompressed iTXt remain scanned; zTXt and + compressed iTXt fail closed deterministically pending bounded decompression, + so compressed sensitive metadata cannot pass silently. JSON lock span + association now uses one forward lexical pass with an object stack rather + than rescanning from byte zero for each field. +- The final reviewed inventory contains 5,847 exact findings: 5,505 domain, + 286 lockfile field, 42 credential shape, 12 binary string, one email, and one + service ID. Classes are 5,778 vendor URL, 42 fake credential, 15 historical, + 11 project-owned, and one service ID. Relative to the preceding 5,832-record + checkpoint, the 15-record increase is 12 validated query/fragment domains + and three punctuation-bearing credentials. The earlier +767 URL-tail claim + is retracted: those raw path-substring findings were false positives. Exact + selector/fingerprint and class-policy validation passed + for all records; the 42 fake records were also reviewed against their selected + repository bytes and narrowed evidence predicate. + +#### Task 5 final domain-context and PNG-keyword checkpoint + +- The prior consolidated checkpoint contained 68 scanner tests; the final + focused scanner suite contains 71 tests. CRC-valid PNG fixtures now prove + that tEXt, zTXt, and iTXt keywords accept only 1–79 printable Latin-1 bytes, + reject C0/C1 controls, and reject leading, trailing, or consecutive ASCII + spaces. Missing separators continue to fail closed. +- The regenerated reviewed inventory contains 5,315 exact findings: 4,970 + domain, 286 lockfile field, 42 credential shape, 12 binary string, four + email, and one service ID. Classes are 5,243 vendor URL, 42 fake credential, + 18 historical example, 11 project-owned public domain, and one service ID. +- Every domain selector was resolved to its exact repository bytes and the 338 + unique values were aggregated by frequency and audited by URL, fixture, + internal-test, source-member, repository-path, and lockfile context. The most + frequent retained values were `registry.npmjs.org` (1,172), `github.com` + (916), `www.test-publisher.com` (867), `cms.theprospectagroup.net` (254), and + `js.datadome.co` (121). Mixed-case, source-extension, and low-frequency + buckets received a separate semantic pass; retained ambiguous-looking bytes + were public-host or deliberate scanner fixtures, not path/member findings. +- The large reduction from 5,847 is the removal of repository basenames, + structured JSON/TOML keys, and documented source-member occurrences that had + been classified as vendor domains. Exact selector assertions now keep all + requested representative path/member values at zero, while focused fixtures + retain real hosts in prose, Markdown code, source strings/comments, and URL + query/fragment values. The real-manifest regression resolves selectors back + to bytes so representative false domains cannot silently return. +- Markdown prose punctuation, English predicates, assignment punctuation, and + capitalization never independently suppress hosts. Documented member + suppression now requires both established harvested evidence and explicit + code/member syntax at the occurrence. Positive prose/port/assignment + fixtures remain findings; repeated harvested inline and fenced member + expressions remain absent. The final regeneration retained all requested + host positives and kept every audited representative path/member selector at + zero. + +#### Task 6 — Implement generated regions, Markdown ownership, and link checks + +- Package start on 2026-09-01 was + `53a5a9e1d42d4dc78e4583d1b5d40ebdcc9c242a`, equal to the then-current + `origin/spec-docs-refresh`. Work remained in the existing + `spec-docs-refresh` worktree and PR #1049. +- The first exact focused commands, + `cargo test --manifest-path tools/docs-parity/Cargo.toml --test markdown` + and the corresponding `--test links` command, both failed with `E0432` + because `docs_parity::markdown` did not exist. The generated-command leaf + then failed with exit 2 for the missing `generate` subcommand rather than + the expected drift exit 1. Later focused red fixtures reproduced + repository-root link misresolution, VitePress punctuation-slug mismatch, + and a missing Setext anchor before their individual implementations. +- The strict-review RED matrix then failed all seven challenged surfaces: + relative links to classified exclusions passed; public headings used the + repository slug contract; multiline CommonMark links were missed and a + residual `%252D` encoding survived; no injectable production-command seam + compiled; an invalid `Xxx` HTTP weekday was honored; `pages.toml` did not + accept typed live/tombstone records; and `mermaid-extra`, arbitrary HTML + prose anchors, and oversized rendered output were accepted. The combined + challenged link run contained 13 passes and 14 failures; the generated + Markdown run contained 9 passes and one failure before implementation. +- A subsequent focused re-review began with 32 passing and five failing link + fixtures. Those failures proved that image alt text incorrectly entered + public heading titles, explicit-ID collisions were suffixed, curl could read + ambient configuration, ignored query bytes escaped strict decoding, and the + header-name grammar both admitted empty names and rejected valid token + punctuation. Each fixture passed after its isolated correction. The curl + isolation fixture uses a temporary `CURL_HOME`, a visible `.curlrc` control + side effect, and a local file URL; it performs no network request. +- The HEAD-framing re-review began with 37 passing and three failing link + fixtures. Exact HEAD arguments, parsed 405/501 fallback, and an actual local + file curl process all exposed the duplicated `--dump-header` plus `--head` + output shape. HEAD now omits `--dump-header`, while GET retains it. The local + process fixture rewrites only protocol and target inside its test command + runner, observes one emitted header copy, normalizes the file-protocol status + for the HTTP parser, and verifies the byte-count trailer and + `parse_curl_output` path without network access. +- The quality re-review began with 42 passing and five failing link fixtures + plus nine passing and two failing generated-Markdown fixtures. Public YAML + frontmatter links were absent from both local and external inventories; + legal repeated response fields were rejected; the production runner accepted + a PATH-resolved executable; diagram fingerprints were not part of the + schema; stale stages remained; and atomic replacement changed a `0644` + target to `0600`. Each failure was observed before its implementation. +- The execution-quality re-review established six further RED results before + implementation. A child process launched under `umask 077` changed a `0644` + generated target to `0600`; a deterministic stage name blocked updates and + was deleted as if owned; the public heading `ΟΣ` produced `οσ` instead of + VitePress's contextual `ος`; themeable `light`/`dark` images were omitted + and incomplete pairs passed; and process inspection found that the deadline + began after reader startup, `kill().and_then(wait)` skipped wait on a kill + error, cleanup diagnostics were discarded, and PID-file fixtures raced + startup. The full-suite RED also retained one obsolete CLI assertion that an + unrelated deterministic stage must block an update. Focused implementation + runs then passed 6 repository, 8 process, 11 Markdown, and 55 link tests; the + corrected CLI target passed all 19 tests. +- Public pages now parse only an exact, closed YAML frontmatter block bounded + to 64 KiB through the maintained YAML-org `yaml_serde` 0.10 compatibility + package. Known hero image/action and feature link/icon shapes are type + checked, while non-link prose is ignored. Hero images and feature icons + support the pinned VitePress 1.6.4 string, `src`, or complete string-valued + `light`/`dark` shapes, and both theme targets enter the same local and + external link model as CommonMark events. Missing members, wrong types, + traversal, and mixed invalid shapes fail closed. Public root assets resolve + through a literal configured `publicDir` or the checked `docs/public` + default, with single percent decoding, normalized containment, tracked-file + membership, and regular non-symlink identity. The real `docs/index.md` + contributes three checked targets: its hero image, Get Started route, and + external project action. +- Atomic writers now receive the expected original bytes and use a unique, + exclusively created, owned sibling stage. Immediately after creation they + explicitly restore the captured safe original mode, then fsync the staged + file and parent directory and compare target contents, type, device, inode, + and mode immediately before rename. A restrictive-umask integration fixture + invokes the updater in a child shell, so the `077` mask cannot leak to other + parallel tests or survive a fixture panic; its `0644` target remains `0644`. + Focused fixtures prove rejection without replacement for same-inode content + edits, same-byte inode replacement, concurrent creation observed before the + immediate precommit check, injected interruption, and rename failure. Every + failure cleans only the owned unique stage, and unrelated peer stages remain + untouched. A deterministic commit-hook fixture also proves the documented + portability boundary: the immediate precommit check detects preceding + changes, but portable rename cannot condition that observation on the final + syscall and can replace a noncooperating write made inside that window. The + implementation and records therefore do not claim compare-and-swap or + protection beyond the observed precommit boundary. A final ownership + regression proved that an armed temporary-file guard could unlink a peer + that recreated the vacated stage pathname after the raw rename. On supported + Unix hosts the writer now calls `NamedTempFile::keep` only after the commit + closure succeeds; this releases cleanup ownership without a second rename. + The deterministic fixture proves the peer remains, while failed commits + retain armed cleanup for the writer's own stage. +- Response fields remain in wire order rather than being collapsed into a + map. All proxy CONNECT and informational blocks are parsed and bounded, and + only the final response drives redirects/retries. Legal repeated Set-Cookie, + Link, and Warning fields pass; duplicate Location, Retry-After, and + Content-Length policy singletons fail in both parsed and injected responses. + A documented stricter security policy separately rejects repeated + Transfer-Encoding and Content-Encoding rather than coalescing their + list-shaped values. The production runner requires + `/usr/bin/curl`, clears PATH/proxy/TLS/curl variables to a fixed C locale, + fixes the deadline before starting its concurrently bounded stdout reader, + and discards stderr. Every post-spawn outcome polls the child, attempts kill + only when it is alive, waits regardless of kill failure, and joins the + reader. Primary, kill, wait, and join diagnostics are retained together. + The runner handshakes reader readiness before polling and prioritizes a + received reader completion at the deadline. Local process fixtures use a + synchronous post-spawn PID observer rather than a child-written file; the + overflow fixture writes more than the cap into the pipe before remaining + alive, rather than depending on producer throughput. They prove silent + timeout, deadline overflow, reader error, output overflow, + kill-error-plus-wait behavior, environment isolation, PATH rejection, and + child reaping without network access. +- All 13 real Mermaid records now bind an exact SHA-256 of semantic fence + content in addition to path, selector, prose heading, and owner. Content + edits and content swaps between selector positions fail with a fingerprint + mismatch. +- Task 6's Files list and staging command were reconciled against the sorted + union of `git diff --name-only BASE..HEAD` (with `BASE` equal to + `53a5a9e1d42d4dc78e4583d1b5d40ebdcc9c242a`) and the final framing worktree + diff. The resulting 20-path set is exact: it adds the changed + classification, repository, and scanner implementations plus the updated + CLI regression fixture, and removes unchanged main and model implementation + files. A direct + planned-versus-actual diff exited 0. The generated-region RED step now + correctly requires the second update to produce no diff. +- Generated-region fixtures cover duplicate, missing, mismatched, nested, + unknown, and non-standalone markers; unknown records; duplicate row keys; + wrong cell counts; deterministic row sorting; hand drift; exact CRLF and + outside-byte preservation; exact owner identity; check-mode no-write; + unique-stage interruption and cleanup; unrelated peer-stage preservation; + restrictive-umask mode preservation; the explicit final-syscall window; + symlink, unsafe-mode, traversal, and oversized-target rejection; and + byte-identical second update. Input + manifests, source documents, and rendered output are each bounded to 4 MiB. + The final focused Markdown target contains 11 passing tests. +- Semantic Markdown fixtures use event offsets and cover one dead relative link + in each active source set; multiline inline/reference/HTML destinations; + uppercase and non-anchor HTML tags; `href`, `id`, and `name`; autolinks and + images; HTML comments; indented, fenced, and inline code exclusion; + repository-root paths; VitePress routes; queries; invalid UTF-8 and residual + percent encodings; ATX and Setext headings; entities, formatting, inline + code, Unicode normalization, leading digits, duplicate slugs, and validated + explicit IDs. Public headings implement the pinned VitePress 1.6.4 shared + title/slug contract, including omitted image alt text and hard failure when + an explicit ID repeats an auto or explicit ID. Auto headings still receive + duplicate suffixes. Whole-string Unicode default lowercase conversion + includes the Final_Sigma cased/case-ignorable context: `ΟΣ`, mixed sigma, + and combining-mark fixtures match the pinned renderer. The special-character + pass uses the exact ECMAScript whitespace set rather than Rust Unicode + whitespace: U+FEFF becomes a separator while U+0085 remains content after + the pinned control removal. Public heading title collection joins only text + and inline-code token content, so soft and hard breaks in multiline Setext + headings add no separator. Repository and maintained-internal headings use + GitHub + title/slug semantics, including image alt text, without VitePress IDs. + Query strings receive the same strict single decoding as paths and fragments, + even though they do not participate in path resolution. Classified + exclusions are checked before + known tracked paths for relative, root, and route spellings; included + repository Markdown and binary targets retain their distinct behavior. +- The live check covers 77 maintained Markdown sources: 42 public pages, + 4 maintained-internal sources, and 31 other repository sources. The corrected + public table-of-contents fragment is `#build-deployment-errors`; the corrected + auction diagram prose selector is `system-flow-prebid-aps`. +- `pages.toml` is exact for the 42 currently built VitePress Markdown pages + and 38 distinct local navigation routes parsed from the checked config. + Reachability leaves one typed manual exception, + `docs/guide/integrations/google_tag_manager.md`, owned by + `documentation-maintainers` and expiring 2027-03-01. `diagrams.toml` is exact + for 13 public Mermaid blocks; every record names an existing prose heading + anchor and owner and binds the exact semantic fence-content fingerprint. + Page records are explicitly typed as live or tombstone; + the page and orphan tombstone `(route, replacement)` sets must be equal, + tombstone routes cannot collide with live routes, and replacements must name + live routes. Manual-orphan equality is checked separately. The real inventory + contains zero tombstones. +- External fixtures use injected transport, clock, and sleeper seams. They + cover all three source sets, HTTPS and credential rejection, HEAD-to-GET + fallback only for unsupported HEAD, final status, five-redirect depth, + loops, relative redirects, three total 429/5xx attempts, 1-second and + 2-second local delays, valid bounded delta and HTTP-date `Retry-After`, + malformed and over-30-second fallback, request time/body bounds, retry + exhaustion, exact owned/reasoned expiry at the boundary, final non-success, + relative redirects, exact non-redirecting HTTPS-only curl arguments, + with `--disable` as the first argument, malformed command output/status, + bounded headers and bodies, nonempty RFC field-name tokens, raw repeated + header count/name/value/line/total limits, proxy and informational response + blocks, and production stdout termination/reaping on overflow and timeout. + The injected and production transports share the header validator and enter + the same redirect/retry/final-status state machine. HEAD and GET + use method-specific output framing so headers are emitted exactly once; + parsed HEAD 405 and 501 responses enter the normal GET fallback. IMF-fixdate + parsing requires the + exact grammar plus a calendar-consistent weekday. The production curl + transport is reachable only through explicit + `links --external --check`; no external network check was run or represented + as a pull-request gate. +- The final focused links target contains 57 passing tests. Repeated default- + parallel standalone full suites each contained 210 passing tests: 17 library + unit, 35 classification, 19 CLI, 57 links, 11 Markdown, and 71 scanner + tests. Fresh local + `links --local --check`, `generate --check`, `classify --check`, and + `scan --check` commands exited 0. Formatting and all-target clippy with + warnings denied also exited 0. +- Only the standalone dependency graph changed. Direct dependencies add the + CommonMark event parser, HTML fragment parser, GitHub slugger, Unicode + normalization support, and bounded YAML frontmatter parser. The deprecated + `serde_yaml` package and its `unsafe-libyaml` dependency were replaced by + YAML-org's maintained drop-in `yaml_serde` 0.10 package and its resolved + parser dependency; the 64 KiB frontmatter bound and closed typed extraction + remain unchanged. This maintained-parser swap removes `serde_yaml` and + `unsafe-libyaml`, adds `yaml_serde` and `libyaml-rs`, and does not change the + resolved package count. The resolved graph remains 48 packages larger than + the pre-review Task 6 graph in + `tools/docs-parity/Cargo.lock`, whose SHA-256 is + `6d37f997368c92062d1297679e10d3c1f79ebac5ffa5641056318f1dca5e7f92`. + Root `Cargo.lock` + remained byte-identical with SHA-256 + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba`. +- The reviewed sensitive inventory contains 5,391 exact + occurrences, 48 more than the pre-review Task 6 + inventory. The additions are the exact registry + host in source fields introduced by the standalone parser dependency graph; + every one is classed `vendor_url`. Five unchanged vendor references in the + corrected public page moved back one byte, and pre-existing standalone-lock + records moved to their regenerated exact offsets. Synthetic plain `.md` link + inputs are assembled from split literals, so repository filenames are not + misclassified as vendor domains. No prior semantic finding was removed. + The maintained-parser lock swap preserved the exact 5,391-entry sensitive + inventory, classes, paths, and fingerprints; it moved 94 Cargo.lock registry + selectors, while the atomic-writer rename moved three scanner source + selectors. Two + classification updates retained identical tracked/source hashes + (`9d907be9...` and `d30a510e...`), and repeated scanner bootstraps retained + sensitive-manifest SHA-256 + `323fbbd6fa3a3d2336342a1c415195967169ff0680f108d1490cac3c22af009c` + with `reviewed = true`. Two generated updates were byte-stable; subsequent + generated, scanner, classification, and local-link check commands all + exited 0. + +#### Task 7 — Extract settings semantics and execute the example harness + +- Task 7 started from the clean, pushed Task 6 head + `24fc8cdd3300daf7de8b9e8de65974e5b5b6127c` in the existing + `spec-docs-refresh` worktree and PR #1049. The initial extractor fixtures + failed to compile because `docs_parity::settings` and its schema and harness + types did not exist. Subsequent RED leaves failed for the absent companion + manifest, unresolved probe declarations, and the missing `settings --check` + subcommand. Review of `e2b48415e` then reproduced three fail-closed gaps: + accepted Serde attributes were not a closed site-aware grammar, stale + companions and broad probe names could pass, and the eight negative harness + cases mutated a manually supplied observation instead of production state. + Quality review of `8240f294954735a18a0d7d73eb59772eadc14301` then found + that the reviewed S3 alias target was nonexistent and self-confirmed by a + tool constant, and that `#[cfg(test)]` legacy APS and Prebid types were being + inventoried as production settings. +- `settings --check` parses four bounded, strict-UTF-8 production sources with + `syn`: the root settings model, standard auction profile, APS profile, and + Prebid settings. Its closed grammar covers Serde container, variant, and + field semantics for `rename`, `rename_all`, `rename_all_fields`, `alias`, + `tag`, `content`, `untagged`, `flatten`, `skip`, `skip_serializing`, + `skip_deserializing`, `skip_serializing_if`, and container/field `default`; + literal and nonliteral defaults; custom deserializers; `Option`; and + validator ranges and functions. The exact eight Serde rename rules use + distinct field and variant transforms. Named and unnamed tuple fields are + parsed before classification and retain zero-based field identities, so + supported skip/default/custom semantics cannot disappear and `with` still + fails closed; named-field-only `flatten` fails on tuple shapes exactly as it + does in the compiled derive. Serde function-path attributes require quoted + strings whose contents parse as paths; offline Serde 1.0.228 compile fixtures + prove both accepted and rejected forms. Literal unary expressions accept + only direct negative integers and floats; `!true` requires a checked + companion. Production presence is closed over the extracted syntax: items, + fields, variants, and literal-default functions without a cfg are included, + one exact `#[cfg(test)]` is excluded, and every other, combined, or + `cfg_attr` form fails closed. This excludes the test-only legacy APS and + Prebid types and their semantics from the production inventory. Invalid + rules, accepted attributes on invalid sites, and unknown shape-changing + attributes fail closed. The checked schema requires exact equality with the + 17-field `Settings` root. +- `settings-companions.toml` is a versioned, explicitly reviewed record with 40 + exact nonliteral-default, deserializer, and validator companions. Each names + its exact source, symbol, kind, value when applicable, and unique + source/symbol/kind-bound positive and negative probe functions. The + AST-discovered and reviewed sets must be equal, so missing and stale entries + both fail. Module-local compiled receipt producers execute and bind all 40 + production records: 34 in settings, one in APS, and five in Prebid. Wrong values, + probe-symbol mismatches, duplicate receipts, and reusable broad probe names + fail exact equality. No public production API or behavior changed. +- The same manifest contains 18 directional field records whose five axes are + checked independently: lifecycle, key identity, serialization, runtime, + and secret handling. Exact equality requires 11 active store-resolved + secret-key paths, one active deliberately-inline shared secret, one + deprecated accepted-and-discarded selector, four deprecated + normalized-away store selectors, and one production deserialization-only + alias. That alias is derived from the extracted enum variant and resolves + exactly from `AssetOriginAuth.s3_sig_v4` to + `AssetOriginAuth.s3_sigv4`; the former `pub_id` record came from a + `#[cfg(test)]` legacy APS type and is excluded. Source-derived struct-field + and enum-variant alias maps must equal the reviewed alias path/target map, so + stale, nonexistent, wrong-canonical, and duplicate aliases fail. An axis + cannot substitute for or erase another disposition. +- The production-API harness parses `trusted-server.example.toml`, proves that + its unmodified form reports exactly the three publisher placeholders, and + applies three non-secret publisher customizations in memory. It then + preserves the exact three secret key names through deploy validation, + settings serialization, and `BlobEnvelope`; resolves them through the + module-local fake platform secret store; and runs runtime validation. Every + one of the 14 deploy-validated optional integration IDs is derived from its + exact active or commented source block, forced enabled, and checked with + paired positive/negative deploy probes. APS, Prebid, and standard provider + profiles are likewise derived from their exact source blocks; the standard + positive uses the commented `request_ext` example and its negative changes + that recognized field to a non-object. All three registered profiles run + paired compile probes. Module-local assertions compare the 14 integration + IDs, three profile IDs, three secret-key literals, exact placeholder paths, + and normalized diagnostic with the reviewed record. +- The eight negative cases now mutate production inputs at their real + boundaries: typed source parsing rejects `orgin_url`; deploy validation + rejects an unknown disabled-integration key and bad profile; envelope + resolution rejects a missing secret and a stranded literal; the same invalid + Permutive source block demonstrates the inactive shortcut and then fails + when forced enabled; an omitted APS compile yields the exact two-profile + mismatch; and a partially corrected template yields exactly + `publisher.cookie_domain, publisher.domain` and its exact normalized + diagnostic, not the checked three-path result. The manual-observation model + and its self-reported negative tests were removed. +- The standalone settings target contains 23 passing tests. The complete + standalone suite contains 238 passing tests: 21 library unit, 35 + classification, 19 CLI, 57 links, 11 Markdown, 72 scanner, and 23 settings + tests. It passed two fresh, consecutive default-parallel runs after the + alias/cfg correction. Root and standalone fmt checks, standalone + all-target clippy with warnings denied, and all three root target clippy + aliases exited 0. +- A final default-parallel repetition exposed one existing Task 6 process + fixture race: its overflow child could be starved before writing any bytes, + so the valid production timeout won over an overflow the fixture had not yet + produced. The overflow fixture now writes its bytes and then a readiness + sentinel; the existing post-spawn observer waits for that sentinel before + returning, and the production deadline is computed only afterward. This is + test-only synchronization, does not lengthen the runner policy timeout, and + changes no production behavior. The exact overflow test passed ten + consecutive focused repetitions before the then-current 226-test suite + passed two fresh, consecutive default-parallel repetitions. +- The target-matched Fastly commands used the repository-pinned Viceroy 0.17.0 + from an isolated host installation. On macOS it required the readable system + certificate file via `SSL_CERT_FILE=/etc/ssl/cert.pem`; no repository file + changed for that host setup. `cargo test-fastly settings` passed 176 core + tests, `cargo test-fastly config` passed 12 adapter and 199 core tests, and + `cargo test-fastly profile` passed 21 core tests. The named Task 7 production + probes were included in those target-matched runs. +- The three secret-disposition words in the companion schema are identifiers, + not credential examples. The credential-shape detector therefore gained one + narrow `settings_schema_identifier` exception class that accepts only the + exact companion-manifest path and exact `store_resolved`, + `deliberately_inline`, or `accepted_discarded` token. Wrong paths, other + values, and detector cross-use fail. This is the only scanner behavior + expansion; using the fake-credential class for schema identifiers would + make its semantic claim false. +- The final reviewed sensitive inventory contains 5,405 exact occurrences, a + net 14 over Task 6: 13 settings-schema identifiers and one synthetic + credential-shaped test literal. The alias/cfg correction removed the APS + vendor endpoint occurrence with its test-only companion record, moved 13 + unchanged settings-schema selectors with the smaller companion manifest, + and moved the existing synthetic fixture selector with the expanded + standalone test. No exception class, path, detector, fingerprint, owner, + rationale, or expiry changed for the retained records. Classification added + only the three new standalone text paths; + their reviewed dispositions are one non-documentation manifest and two + source-code files. Repeated classification updates retained tracked/source + SHA-256 values + `c0747847b67394a370255388dd2955bd595216acb31def101f2a386ac557332c` + and + `108c4769bca7aa7709b88da1560b6879702b33e7111d46e46b346132570fd506`. + The final reviewed companion manifest SHA-256 is + `13571b03124f7a3e389cf2828976ab379bf0310322ecfb5bd6d96e1f7e8637c6`. + Repeated sensitive bootstraps retained reviewed-manifest SHA-256 + `eaabfc0d1bea32bcffa58d95a3aa4889a6de133aa37876ba1790239d52169acd` + for the original Task 7 checkpoint. The review correction preserves the + exact 5,406-record class/path/detector/fingerprint multiset; only selectors + moved with the four formatted core test modules. Two final bootstraps + retained reviewed-manifest SHA-256 + `f45ae49a3b66a4cca63e68b6942f03065b9fdc94bc8919bb994016e73bf5150b` + byte-for-byte. The second correction retains the exact 5,406-record + class/path/detector/fingerprint multiset and moves only one selector for the + existing synthetic credential fixture in the expanded standalone settings + test. Two final bootstraps retained reviewed-manifest SHA-256 + `e09dc7859e133e7001e4b71d2ba66a5835a7aacf01c6477a58730c48ec5a0b03` + byte-for-byte. After the alias/cfg audit and explicit re-attestation, two + final bootstraps retained reviewed-manifest SHA-256 + `73ebcec67f181f9443fe5d3b5b3ae2d18ae867106aa14b45e07196e4a41fe593` + byte-for-byte. + Fresh `settings --check`, local-link, generated-region, classification, and + sensitive-scan checks all exited 0. +- Only the standalone lock gained the direct `syn` dependency already present + in its resolved graph; its final SHA-256 is + `8d12168733c63ecce2566f3267fde5741155a87cf767b8415fc845d496bbf3ca`. + Root `Cargo.lock` remained byte-identical at + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba`. + The current Task 7 Files list is exact for the final 22-path diff from + `24fc8cdd3300daf7de8b9e8de65974e5b5b6127c`, including the scanner + class/test required by the new manifest vocabulary and the process-fixture + synchronization required by the repeated default suite, while excluding + all unchanged files: the five checked core sources; the checked source + template; the design spec, this evidence file, and the execution plan; the + standalone manifest, lockfile, and README; the tracked, maintained, + sensitive, and settings-companion manifests; the standalone library, + Markdown, scanner, and settings implementations; and the scanner and + settings integration-test files. The historical Step 7 staging command + contains exactly 20 paths and omits `trusted-server.example.toml`; adding the + Step 8 staging command does not change that 20-path union. Step 8 itself is + the exact 10-path first correction: four core sources, this evidence file and + the plan, the sensitive and settings-companion manifests, and the standalone + settings implementation and test. The + `cc6be34f96cdc9e88031bd0908cb7ffc206a1347..c5afbf9e4e3a5a41516c47503760ad82def43765` + second correction is exactly the seven paths in Step 9: the source-derived + profile harness and template, this evidence file and the plan, the sensitive + manifest, and the standalone settings implementation and test. Step 10 is + the exact two-path governance-only correction to this evidence and the plan. + The alias/cfg correction is exactly the nine paths in Step 11: the APS and + Prebid compiled receipts, the design spec, this evidence file and the plan, + the sensitive and settings-companion manifests, and the standalone settings + implementation and test. Mechanical set comparison reports 20 Step 7 paths, + 10 Step 8 paths, seven Step 9 paths, two Step 10 paths, and nine Step 11 + paths. The Step 7 and Step 8 union is 20, the union through Steps 9 and 10 is + 21, and the union through Step 11 is 22; the final 22-path aggregate and + Files sets equal that union with every directional set difference empty. + +#### Task 8 — Check integration capabilities and adapter routes + +- Task 8 started from the clean, pushed Task 7 head + `9366d6e890c19b68ac4f224886f0f7299ef66550` in the existing + `spec-docs-refresh` worktree and PR #1049. The initial inventory fixtures + failed to compile because neither checked module existed. Subsequent RED + leaves reproduced missing and extra values on every static and behavioral + axis, an unclassified builder expression, route method/predicate/status and + startup-router drift, an unsupported Cloudflare builder call, and + unreviewed/duplicate/unknown manifest records. Exact page-bids fixtures then + exposed that GET and OPTIONS had been collapsed under one guarded status; + three route tests failed until GET was recorded as real and only OPTIONS as + guarded. Additional closed-grammar fixtures proved that a route-affecting + Cloudflare local initializer and statement macro had previously been + ignored, and that an unknown deploy `validate_*` call could previously + undercount the inventory. Both shapes now fail closed. +- `integrations.toml` is a versioned, explicitly reviewed inventory of the 14 + deploy-validated IDs, 11 settings-only builders, two plan registrations, + three auction profiles, one mediator, 12 integration `index.ts` modules, 13 + emitted bundles including core, 12 loading-mode rows, 17 behavioral + capability records, and 15 manually owned operational records. Static Rust + extraction is closed over `validate_enabled_integrations`, the exact + `IntegrationBuilder` array, `with_plan`, `PROFILE_REGISTRATIONS`, and + `register_providers`; JavaScript source discovery uses the same one-level + `integrations//index.ts` contract as the build. Missing, extra, + duplicate, malformed, and unclassified registrations fail exact set + equality. Release status remains manual and every row has an owner and real + review date. +- The module-local compiled capability receipt instantiates every enabled + settings builder, Prebid, both APS rendering modes, the ad-server mediator, + creative's always-loaded module, and both DataDome protection states. It + reads the checked manifest and compares the exact observed proxy routes, + attribute and script rewriters, head injectors, post-processors, request + filters, providers, and JavaScript mode. The negative predicate receipt + proves all 11 settings builders plus DataDome register nothing when + disabled, disabled Prebid registers nothing, and a disabled mediator emits + no providers. It also pins APS's independent axes: browser configuration + alone does not register without an APS plan profile, while a compiled APS + profile does register the renderer integration even when the browser flag + is false. Existing APS renderer response tests and the capability receipt + jointly bind the trusted-server route and publisher-native no-route modes. +- `routes.toml` expands to exactly 103 records across Fastly, Axum, + Cloudflare, and Spin. Each record binds methods, literal/template/ + config-derived/conditional shape, predicate, real/unsupported/guarded/ + publisher-fallback/startup-error status, and production versus startup + router. The private named-route source collections contain 22 Fastly, 18 + Axum, and 18 Spin semantic records after method-specific page-bids splitting; + the closed Cloudflare AST grammar extracts 20 records. It recognizes only + the production builder chain, known path constants, path and method loops, + method arrays, middleware, and publisher fallback helper. Unknown router + methods, calls, control flow, local initializers, macros, paths, and methods + fail instead of undercounting. Dynamic integration route families remain + single-sourced in the 17 compiled capability records rather than duplicated + in the adapter registration manifest. +- Direct adapter regression tests compare the unchanged production routers as + exact method/path sets: 154 pairs for Fastly, 127 for Axum, 46 for + Cloudflare, and 127 for Spin. Startup-router tests compare 14 root/rest + method pairs for Fastly, Axum, and Cloudflare and 15 for Spin, whose extra + entry is live `GET /health`. Existing endpoint assertions retain the + handler-level 404/501, denied preflight, publisher-fallback, and health + semantics. The source seams and tests are private or `cfg(test)`; no public + API, route registration, or production behavior changed. +- The focused standalone targets contain seven integration and eight route + tests. Two fresh default-parallel standalone suites each contained 253 + passing tests: 21 library unit, 35 classification, 19 CLI, seven + integrations, 57 links, 11 Markdown, eight routes, 72 scanner, and 23 + settings tests. Pinned Viceroy 0.17.0 with + `SSL_CERT_FILE=/etc/ssl/cert.pem` ran the full Fastly matrix: 175 adapter + tests, 2,424 core tests with six ignored, two JavaScript tests, 21 OpenRTB + tests, and four core doctests with four ignored all passed. The full Axum + matrix passed 15 library, one binary, and 27 route tests; Cloudflare passed + 23 library and 23 route tests; Spin passed 50 library and 38 route tests; + cross-adapter parity passed all 13 tests. The first sandboxed Axum attempt + could not bind three loopback fixtures; the repository-scoped rerun with + loopback permission passed without a code change. +- Task 8 enables only `syn`'s already-resolved visitor feature in the + standalone manifest. Neither lockfile changed: the standalone lock remains + SHA-256 + `8d12168733c63ecce2566f3267fde5741155a87cf767b8415fc845d496bbf3ca` + and root `Cargo.lock` remains + `9bb34225c5b8d1da39c75c3a8143d905f4b7d228a8986dc93d7e58a4196b4bba`. + The final reviewed integration, route, and adapter-support manifest hashes + are respectively + `2f2b7585326639ccc7056c13c5673e3b7f0ae56f70f853341ba2b47bb5ab4dd2`, + `52df1bfb5bfc6a27b04648a95e2a724502e558759a8399995d9a2201f2f04005`, + and + `14abdc67bc7ddf836ba72e0d4a00108286dee6a76435824ab21e1922b80f19e3`. +- Classification adds exactly seven tracked text paths: three + non-documentation manifests, two source modules, and two test modules. The + sensitive inventory retains the exact 5,405-record class/path/detector/ + fingerprint multiset; no finding is added or removed. Twenty-five selectors + move only because behavior-preserving tests shifted existing synthetic + credential and vendor references in touched adapter/core sources. Repeated + classification updates and sensitive bootstraps are byte-stable after + explicit review. Fresh formatting, standalone and root clippy, Prettier, + settings, local-link, generated-region, integration, route, + classification, and sensitive-scan checks all exit 0. The generated update + is byte-stable and both lockfiles remain unchanged. Repeated classification + updates retain tracked/source manifest SHA-256 values + `cb4c9da3a4b539376fbeb415a09d3d1b2dd8edc11babbf227a49d41545efba86` + and + `53b794afa17af803d0cb6a9f7fa1f718ae15f9c2e6ff4b30d64059b1068fbe56`; + repeated sensitive bootstraps retain + `4295fe81312737d20941cca5b88fd54bebd972a9535398d3a6653a5e3c9950f0`. +- The Task 8 **Files** list and Step 6 staging command are the exact 23-path + diff from the approved Task 7 head: eight adapter source/test paths; the + compiled core capability receipt; this evidence and the execution plan; the + standalone manifest, README, and library; two new implementation/test pairs; and + the six integration, route, adapter-support, tracked, maintained, and + sensitive manifests. Both directional set differences are empty. +- Post-implementation review at `5e0d9ab7f16eddf9bf6feb8f6abb20299273c854` + identified set canonicalization before duplicate validation. RED fixtures + produced nine failures in the 17-test integration target: all seven static + manifest arrays, nested capability members, and duplicate Rust source + registrations. The 11-test route target produced two failures for duplicate + row adapters/methods and duplicate named/Cloudflare semantics; a subsequent + overlapping-method fixture also failed before correction. The compiled core + receipt separately failed on duplicate raw route/hook/provider observations + and duplicate capability rows. +- The corrected parsers retain vector cardinality until validation. They reject + duplicates across deploy, builder, plan, profile, mediator, JavaScript source, + JavaScript bundle, loading, capability-key, every nested capability, + operational, route-adapter, route-method, expanded-route-semantic, and + adapter-support axes. Deploy, plan, and mediator visitors now treat a failed + source insertion as an error; the existing builder/profile checks remain + exact. Named adapter and Cloudflare extraction reject duplicate methods or + semantic routes. The module-local compiled receipt performs the same raw + cardinality check before constructing its comparison sets, so production + registrations cannot hide duplicate proxy routes, hook identities, providers, + or complete capability observations. +- The settings appendix now records exactly one production struct-level schema + companion, `validate_trusted_client_ip`. The test-only APS schema annotation + is excluded, while APS account and inventory validation remains in the + imperative profile-compiler inventory. This is an inventory correction only; + no runtime behavior or public API changed. +- After the correction, the focused standalone targets pass 17 integration and + 12 route tests, and the pinned Viceroy Task 8 filter passes all three compiled + receipt/predicate tests. Two fresh default-parallel standalone suites each + pass all 267 tests. The full pinned Viceroy 0.17.0 matrix passes 175 Fastly + adapter tests, 2,425 core tests with six ignored, two JavaScript tests, 21 + OpenRTB tests, and four core doctests with four ignored. Axum passes 15 + library, one binary, and 27 route tests after the expected repository-scoped + loopback rerun; Cloudflare passes 23 library and 23 route tests; Spin passes + 50 library and 38 route tests; cross-adapter parity passes all 13 tests. +- The integration, route, and adapter-support manifests remain unchanged at + SHA-256 + `2f2b7585326639ccc7056c13c5673e3b7f0ae56f70f853341ba2b47bb5ab4dd2`, + `52df1bfb5bfc6a27b04648a95e2a724502e558759a8399995d9a2201f2f04005`, + and + `14abdc67bc7ddf836ba72e0d4a00108286dee6a76435824ab21e1922b80f19e3`. + The tracked and maintained manifests remain unchanged at + `cb4c9da3a4b539376fbeb415a09d3d1b2dd8edc11babbf227a49d41545efba86` + and + `53b794afa17af803d0cb6a9f7fa1f718ae15f9c2e6ff4b30d64059b1068fbe56`. + Two sensitive bootstraps and the final check preserve all 5,405 records and + SHA-256 + `4295fe81312737d20941cca5b88fd54bebd972a9535398d3a6653a5e3c9950f0`, + with no semantic or selector changes. + Both lockfiles remain byte-identical at the hashes recorded above. +- Fresh root and standalone formatting, standalone all-target clippy with + warnings denied, all six root clippy aliases, Prettier, settings, integration, + route, local-link, generated-region, classification, and sensitive-scan + checks exit 0. Two generated updates preserve the page, diagram, and orphan + hashes; two classification updates and two sensitive bootstraps are + byte-stable. +- Step 7 was the exact eight-path correction: the compiled core receipt; this + evidence, plan, and design specification; and the two standalone + implementation/test pairs. The aggregate from the approved Task 7 head was + the then-current 24-path Task 8 **Files** set. The correction, aggregate, and + plan/staging directional set differences are empty. + +- Quality review of `a04ae1fd6e431c2c0ccf1c5b32886682f9da4a7d` + found six execution-oracle gaps. RED fixtures reproduced decoy and ambiguous + integration owners; macro, closure, dead-branch, and conditional registration + hiding; Cloudflare decoy/multiple builder authority and unsupported dataflow; + over-limit and symlinked repository inputs; missing, duplicate, or nonexistent + compiled JavaScript bundles and wrong loading evidence; route method, path, + predicate, status, handler, dead-branch, and comment-decoy mutations; and raw + route identity collisions whose metadata differed. +- Integration extraction now resolves one exact production top-level function + or owned inherent method, excludes only exact `cfg(test)` definitions, rejects + every other conditional or ambiguous definition, and accepts only the closed + registration statement shapes exercised by production. The complete + `with_plan` body is checked statement by statement, including each nested + proxy-route conversion, router selection, insertion/error path, recorded + route, capability transfer, JavaScript disposition, and returned registry. + Plan and mediator registrations must bind the returned value into the + production collection or mediator result; extra mutation, shadowing, nested + control flow, and evaluated macro arguments fail closed. Source visitors + retain raw insert cardinality. Cloudflare extraction proves exactly one raw + builder occurrence across the complete production function and follows its + uniquely returned authority through the supported assignment, loop, and + returned-chain forms; replacement builders, aliases, macros, nested items, + and unsupported control flow fail closed. +- All integration and route repository inputs are read through a non-symlink + regular-file reader with a 4 MiB pre-read bound and bounded streaming read. + Before and after the read, descriptor snapshots compare device, inode, mode, + length, and nanosecond modification/change timestamps; a separate path check + proves that the name still resolves to the opened descriptor. Manifests cap + total input, rows, nested lists, and every string field. Exact-limit, + limit-plus-one, symlink, same-length in-place mutation, and same-length path + replacement fixtures pass only at the documented boundary. +- The compiled capability receipt compares the raw output of + `trusted_server_js::all_module_ids()` with every checked emitted bundle and + verifies `module_bundle` for every browser-served ID. Creative, Prebid, and + GPT diagnostics loading assignments come from their runtime paths. Route + receipts structurally bind Fastly health and JA4 control flow, each adapter's + dynamic TSJS condition and returned handler, Fastly asset routing, + healthy/startup fallback loops, health handlers, startup status, page-bids + preflight handlers, and legacy denial handlers. Named and Cloudflare route + records also bind the expected handler identity under an explicit production + `cfg` policy. Comments, unrelated expressions, dead branches, unused closures, + disconnected helpers, and discarded builders cannot attest those routes. +- One raw route accumulator now rejects any repeated + `(adapter, path, method, startup_router)` before shape, predicate, or status + grouping. Manifest, named adapter, Cloudflare, and synthesized receipt records + all cross that boundary, including a named-versus-synthesized collision + fixture. +- Repeated independent adversarial rereviews reproduced the remaining + false passes before the correction was committed: deploy generic-type swaps; + unused deploy/runtime validation entrypoints; suffix-only plan, constructor, + handler, fallback-iterator, and mediator calls; mediator alternative side effects; + shadowed or helper-built Cloudflare authorities; opaque initializer macros; + dead, unused, shadowed, or trailing health, TSJS, asset, handler, fallback, + and startup-status evidence; route calls in dead closures; post-registration + builder resets; omitted Fastly early/method handlers; and conditional, + duplicate, or hardcoded imported path constants. A final reachability pass + also reproduced local validator shadowing, prior conditional exits from + validation and Fastly health, router construction that returned before + registration, dead reviewed named-route collections paired with empty + iterators, handler calls hidden after an earlier diversion, block-scoped + direct or aliased imports that replaced validation and fallback authorities, + conditional terminal paths before a trailing expected handler call, + control-flow or error propagation hidden in local initializers, + named-collection import shadows, handler argument substitutions, validation + helpers that swallowed errors, unchecked response-construction statements, + suffix-matched constructors and statuses, and synthesized guarded statuses + without handler-body receipts. The + final RED fixtures bind both production validation entrypoints and their + reachable lexical sequence; their exact error-propagating helper flows; full + registration paths, types, receivers, arguments, and constructors; lexical + router and response identity through the returned value; every reviewed named + collection to its live registration loop; each named handler identifier to a + closed reachable production body, exact arguments, and terminal behavior; + guarded and unsupported statuses to exact response bodies; and exact + production ownership for nested functions and referenced constants. + Page-bids paths are read from their authoritative core publisher definitions + rather than fallback literals. +- The focused correction targets pass 33 integration and 68 route tests. A + fresh default-parallel standalone suite passes all 343 tests: 25 library, + 35 classification, 19 CLI, 33 integration, 57 links, 11 Markdown, 68 route, + 72 scanner, and 23 settings tests. Standalone formatting and all-target, + all-feature clippy with warnings denied pass. +- Pinned Viceroy 0.17.0 with `SSL_CERT_FILE=/etc/ssl/cert.pem` passes the three + Task 8 receipts and the full matrix: 175 Fastly adapter tests, 2,425 core + tests with six ignored, two JavaScript tests, 21 OpenRTB tests, and four core + doctests with four ignored. Axum passes 15 library, one binary, and 27 route + tests after the expected loopback-permitted rerun; Cloudflare passes 23 + library and 23 route tests; Spin passes 50 library and 38 route tests; and + cross-adapter parity passes 13 tests. Root formatting and all six adapter + clippy aliases pass. +- Step 8 is the exact eight-path correction: the compiled core receipt; this + evidence and plan; the standalone integration, repository, and route + implementations; and both focused test modules. The + aggregate from the approved Task 7 head is the current 25-path Task 8 + **Files** set. Both directional differences for the correction, aggregate, + and plan/staging sets are empty. Neither lockfile changes. + +#### Task 9 — Check CLI help, snippets, gates, and workflow foundations + +Pending. Preserve the planned adjacent source and golden commits and record +both clean checkpoints. + +#### Task 10 — Complete WP2 truth pass and dispositions + +Pending. Record full source/disposition equality, scanner results, tombstone +smokes, and the selected archive move. + +#### Task 11 — Complete WP3 configuration reference and template + +Pending. Record generated reference equality, compiled probes, template +round-trip proof, and bounded PR-description publication. + +#### Task 12 — Complete WP4 generated API contracts + +Pending. Record route-set equality, adapter predicates, generated no-diff, and +adapter regression suites for any private seam. + +#### Task 13 — Add deployment guides and recurring first-success smokes + +Pending. Record all four smoke contracts, exact tool versions, cleanup, and +any time-bounded Spin exception. + +#### Task 14 — Complete WP5 product coverage and navigation + +Pending. Record page/orphan ownership, diagram prose equivalents, snippet +checks, and removal of the Task 13 transition exception. + +#### Task 15 — Complete WP6 root and crate documentation + +Pending. Apply and verify the factual-governance fallback. + +#### Task 16 — Complete WP7 rustdoc and JSDoc + +Pending. Record the rustdoc matrix, doctests, JSDoc fixtures, and JS checks. + +#### Task 17 — Activate final CI and release-pending controls + +Pending. Record workflow negative fixtures, generated consumer proof, +follow-up issue rows, and the release runbook. Real release receipts remain in +the release-pending table until observed after the result reaches `main`. + +#### Task 18 — Close PR #1049 implementation + +Pending. Record the exact final rc baseline, full local and hosted gates, +generated no-diff, smokes, follow-up dispositions, clean package shape, final +PR head, and implementation approval without claiming release-pending effects. diff --git a/docs/internal/onboarding.md b/docs/internal/onboarding.md new file mode 100644 index 000000000..7a84844e7 --- /dev/null +++ b/docs/internal/onboarding.md @@ -0,0 +1,42 @@ +# Maintainer Onboarding + +This document collects public repository and setup pointers for maintainers. +For project usage, start with the public guides. + +## Start here + +- [What is Trusted Server?](../guide/what-is-trusted-server.md) +- [Architecture](../guide/architecture.md) +- [Getting Started](../guide/getting-started.md) +- [Configuration](../guide/configuration.md) +- [Testing](../guide/testing.md) +- [Integrations Overview](../guide/integrations-overview.md) +- [Integration Guide](../guide/integration-guide.md) + +## Local setup + +- Tool versions are defined in `.tool-versions`. +- Documentation development instructions are in `docs/README.md`. +- Contribution requirements are in + [CONTRIBUTING.md](https://github.com/IABTechLab/trusted-server/blob/main/CONTRIBUTING.md). + +## Codebase pointers + +| Path | Purpose | +| --------------------------------------------------------- | --------------------------------- | +| `crates/trusted-server-adapter-fastly/src/main.rs` | Request routing entry point | +| `crates/trusted-server-core/src/publisher.rs` | Publisher origin handling | +| `crates/trusted-server-core/src/proxy.rs` | First-party proxy implementation | +| `crates/trusted-server-core/src/ec/` | EC identity subsystem | +| `crates/trusted-server-core/src/integrations/registry.rs` | Integration module registry | +| `trusted-server.example.toml` | Example application configuration | + +## Development workflow + +- Follow [CONTRIBUTING.md](https://github.com/IABTechLab/trusted-server/blob/main/CONTRIBUTING.md) + when preparing changes. +- Use the [Testing guide](../guide/testing.md) for test commands. +- Use the [Integration Guide](../guide/integration-guide.md) when adding an + integration. +- Report bugs and request changes through the repository's public + [GitHub issues](https://github.com/IABTechLab/trusted-server/issues). diff --git a/docs/package-lock.json b/docs/package-lock.json index e6003067a..a3305fbd0 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7,7 +7,7 @@ "": { "name": "trusted-server-docs", "version": "1.0.0", - "license": "ISC", + "license": "Apache-2.0", "devDependencies": { "@eslint/js": "^10", "@types/node": "^24.10", @@ -180,6 +180,7 @@ "integrity": "sha512-Jc360x4yqb3eEg4OY4KEIdGePBxZogivKI+OGIU8aLXgAYPTECvzeOBc90312yHA1hr3AeRlAFl0rIc8lQaIrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@algolia/client-common": "5.50.0", "@algolia/requester-browser-xhr": "5.50.0", @@ -1885,6 +1886,7 @@ "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1956,6 +1958,7 @@ "integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.66.0", "@typescript-eslint/types": "8.66.0", @@ -2430,6 +2433,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2470,6 +2474,7 @@ "integrity": "sha512-yE5I83Q2s8euVou8Y3feXK08wyZInJWLYXgWO6Xti9jBUEZAGUahyeQ7wSZWkifLWVnQVKEz5RAmBlXG5nqxog==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@algolia/abtesting": "1.16.0", "@algolia/client-abtesting": "5.50.0", @@ -2562,6 +2567,7 @@ "integrity": "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.1.2", "@chevrotain/gast": "11.1.2", @@ -2666,6 +2672,7 @@ "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10" } @@ -3100,6 +3107,7 @@ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -3355,6 +3363,7 @@ "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", @@ -3604,6 +3613,7 @@ "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tabbable": "^6.4.0" } @@ -3969,6 +3979,7 @@ "integrity": "sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", @@ -4294,6 +4305,7 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4925,6 +4937,7 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -4985,6 +4998,7 @@ "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@docsearch/css": "3.8.2", "@docsearch/js": "3.8.2", @@ -5096,6 +5110,7 @@ "integrity": "sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.31", "@vue/compiler-sfc": "3.5.31", diff --git a/docs/package.json b/docs/package.json index df1bd66d0..459bcbc2c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,8 +1,9 @@ { "name": "trusted-server-docs", "version": "1.0.0", + "private": true, "description": "Documentation site for Trusted Server", - "license": "ISC", + "license": "Apache-2.0", "author": "", "type": "module", "scripts": { diff --git a/docs/public/CNAME b/docs/public/CNAME deleted file mode 100644 index dead23eda..000000000 --- a/docs/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -your-custom-domain.com diff --git a/docs/superpowers/plans/2026-08-30-documentation-refresh.md b/docs/superpowers/plans/2026-08-30-documentation-refresh.md new file mode 100644 index 000000000..e4bfff96c --- /dev/null +++ b/docs/superpowers/plans/2026-08-30-documentation-refresh.md @@ -0,0 +1,1488 @@ +# Documentation Refresh (Full Surface) Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Refresh every maintained documentation surface, derive reader-facing inventories from checked records, and commit all implementation work to PR #1049 without exposing write credentials to pull-request-controlled code. + +**Architecture:** The existing `spec-docs-refresh` branch and PR #1049 are the only implementation branch and PR. Reviewable package commits build one standalone `docs-parity` tool and final-state documentation automation; Pages, schedules, dependency submission, and optional `main` protection effects that cannot run from rc are recorded as release-pending rather than represented by auxiliary PRs. + +**Tech Stack:** Rust 1.95 (`syn`, Serde, `error-stack`, Cargo), VitePress/Node 24, ESLint/JSDoc, GitHub Actions and REST APIs, shell smoke scripts, Fastly Viceroy, Wrangler, Spin, Axum + +**Revised:** 2026-08-31 for the approved single-PR delivery model + +--- + +## Execution gate + +- Work only in `/Users/ag/projects/iab/trusted-server/.claude/worktrees/spec-docs-refresh` on branch `spec-docs-refresh`. +- Push implementation commits only to PR #1049. Do not create containment, CNAME, controller, activation, or release-handoff implementation PRs. +- PR #1104 is closed. Its source branch remains only long enough to transfer reviewed commits `34b0613dc603ba6529396dad4dd4b7e68b1e11a9` and `e6554f24f58f6122fb806ce25432f66033765c65`. +- Before every package, fetch `origin/rc/202608` and require it to equal `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`; require the implementation branch to contain that commit. Any target advance stops execution for a full delta audit and spec/plan re-review. +- Owner decisions are fixed: delete CNAME, archive `FAQ_POC.md`, use the factual-governance fallback, and expire the Fastly service-ID exception at `2026-09-30T00:00:00Z`. +- Live Pages, real scheduled runs, dependency submission, graph visibility, and optional `main` protection changes are release-pending. Never substitute local output for those receipts or create another PR to obtain them. + +## File map + +### Program records + +| File | Responsibility | +| ------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` | Approved single-PR design and immutable baseline. | +| `docs/superpowers/plans/2026-08-30-documentation-refresh.md` | This package-by-package execution plan. | +| `docs/internal/audits/documentation-refresh-decisions.md` | Owner decisions, exact #1049 identity, closed #1104 transfer, and release bounds. | +| `docs/internal/audits/documentation-refresh-inventory.toml` | Per-file or per-region WP2 dispositions and source anchors. | +| `docs/internal/audits/documentation-refresh-evidence.md` | Package evidence, hosted runs, smokes, issues, and release-pending schema. | +| `docs/internal/runbooks/documentation-automation-release.md` | Post-main Pages, schedule, snapshot, graph, and optional protection verification. | + +### `docs-parity` crate and checked records + +`tools/docs-parity` is a standalone Cargo workspace with its own committed lockfile; it is not added to the repository workspace members. + +| File | Responsibility | +| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `tools/docs-parity/Cargo.toml` | Standalone binary/library metadata, `[workspace]`, dependencies, and lint policy. | +| `tools/docs-parity/Cargo.lock` | Reproducible host-tool dependency graph. | +| `tools/docs-parity/README.md` | Subcommands, manifest ownership, update/check flow, and failure semantics. | +| `tools/docs-parity/src/main.rs` | Thin CLI parsing and exit-code mapping. | +| `tools/docs-parity/src/lib.rs` | Subcommand dispatch and shared `Report` API. | +| `tools/docs-parity/src/model.rs` | Checked schemas, ownership/expiry types, and generated markers. | +| `tools/docs-parity/src/repository.rs` | Root discovery, tracked files, safe paths, Git object reads, and atomic writes. | +| `tools/docs-parity/src/classification.rs` | Text/binary classification and exhaustive candidate/span closure. | +| `tools/docs-parity/src/scanner.rs` | Domain, email, credential, identifier, encoded-token, lockfile, binary-string, and metadata scanning. | +| `tools/docs-parity/src/markdown.rs` | Links, anchors, fences, ownership markers, orphan/tombstone checks, and generated regions. | +| `tools/docs-parity/src/settings.rs` | Serde-aware settings extraction, companions, compiled probes, and template harness. | +| `tools/docs-parity/src/integrations.rs` | Integration/provider inventory and behavioral capability checks. | +| `tools/docs-parity/src/routes.rs` | Route records, Cloudflare fail-closed parser, and adapter-support rendering. | +| `tools/docs-parity/src/cli_help.rs` | Native Linux/macOS capture, annotated union, overrides, and goldens. | +| `tools/docs-parity/src/snippets.rs` | Fence modes, diagnostics, isolated execution, and waiver expiry. | +| `tools/docs-parity/src/gates.rs` | Canonical gate manifest and generated/link-only consumers. | +| `tools/docs-parity/src/workflow.rs` | YAML policy for read-only PR checks and final default-branch readers/writers. | +| `tools/docs-parity/src/dependency_snapshot.rs` | Bounded dependency snapshot schema and deterministic generation. | + +Checked records live under `tools/docs-parity/manifests/`: `tracked-files.toml`, `maintained-sources.toml`, `sensitive-allowlist.toml`, `retired-identifiers.toml`, `snippets.toml`, `settings-companions.toml`, `routes.toml`, `integrations.toml`, `adapter-support.toml`, `cli-overrides.toml`, `gates.toml`, `pages.toml`, `diagrams.toml`, and `orphans.toml`. CLI goldens live at `tools/docs-parity/goldens/cli-linux.txt` and `tools/docs-parity/goldens/cli-macos.txt`. Synthetic fixtures live under `tools/docs-parity/tests/fixtures/`; never add a live secret, internal contact, or real customer value. + +### Existing product/documentation surfaces + +- Publishing/policy: `docs/.vitepress/config.mts`, `docs/guide/index.md`, `docs/internal/onboarding.md`, `docs/business-use-cases.md`, `docs/public/CNAME`, `docs/package.json`, `docs/package-lock.json`, `fastly.toml`, `CLAUDE.md`, `AGENTS.md`, `.github/pull_request_template.md`, and `.claude/commands/{check-ci,review-changes,test-all,test-crate,verify}.md`. +- Truth/config/API/product: the exact WP2-WP5 paths enumerated in Tasks 10-14. +- README/rustdoc/JSDoc: the WP6/WP7 paths enumerated in Tasks 15-16. +- Automation: `.github/workflows/{codeql,deploy-docs,docs-links,format,integration-tests,test}.yml`, `.github/dependabot.yml`, `.tool-versions`, and `crates/trusted-server-openrtb-codegen/Cargo.toml`. + +## Package checkpoint rule + +1. Fetch and reassert the immutable rc tip. Record `package_start_head="$(git rev-parse HEAD)"` before editing. +2. Execute one test-first leaf at a time: add one named failing fixture/assertion, run the focused red command and record its diagnostic, implement the minimum change, then rerun the focused command and immediate regressions. +3. Fully stage only the package allowlist. Never use `git add -N` or directory-wide staging. Review `git diff --cached --name-status "$package_start_head"`. Require `git ls-files --others --exclude-standard` to print nothing and `git diff --quiet` to exit 0. +4. From Task 5 onward, regenerate and stage `tracked-files.toml` and `maintained-sources.toml` whenever a tracked path is created, moved, or deleted. Public-page changes also regenerate page/orphan records. Tasks 1-4 are bootstrap exceptions because Task 5 creates the classification records. +5. Run focused tests, regenerate checked outputs, restage exact output paths, run `docs-parity check` where available, and prove a second generation is byte-stable. +6. Append commands/results to `documentation-refresh-evidence.md`. Restage that exact file, rerun any scanner/classifier consuming it, and reassert no unstaged bytes. +7. Run `git diff --cached --check` and inspect the cached content. Commit with the exact task message. If final identifiers require a receipt, create one immediately adjacent evidence-only commit; do not create recursive self-SHA receipts. +8. Push the clean package commits to `origin/spec-docs-refresh` so PR #1049 is the only hosted review surface. Require clean status before advancing. + +### Atomic execution rule + +Composite parser, scanner, workflow, settings, route, and smoke tasks are packages, not single coding actions. Copy each named negative fixture into the evidence checklist and complete its red/green cycle before the next leaf. Never batch multiple parser or trust classes into one unreviewed implementation change. + +### Task 1: Align program records to the single PR + +**Files:** + +- Modify: `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` +- Modify: `docs/internal/audits/documentation-refresh-decisions.md` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` + +- [ ] **Step 1: Revalidate PR #1049 and the immutable target** + +Run: + +```bash +git fetch origin rc/202608 spec-docs-refresh +test "$(git rev-parse origin/rc/202608)" = 07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf +git merge-base --is-ancestor 07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf HEAD +gh pr view 1049 --json url,state,isDraft,baseRefName,baseRefOid,headRefName,headRefOid +``` + +Expected: exact target SHA, ancestry success, and PR #1049 open from `spec-docs-refresh` to `rc/202608`. Record the current remote head as a timestamped capture, not as a permanent final SHA. + +- [ ] **Step 2: Replace obsolete delivery records** + +Make #1049 the only implementation row. Record PR #1104 as closed/superseded with its two reviewed source commits and no live merge/deploy receipt. Remove executable fields for PRs (b), (c), (d), (c2), and (e), all Epoch terminology, temporary protection/status changes, snapshot retirement, and cross-worktree import blocks. + +- [ ] **Step 3: Define release-pending evidence** + +Keep the durable hashed-body schema, but use it only for real external captures. Add explicit `release-pending` rows for Pages/CNAME, first schedule, dependency submission/graph, and optional `main` protection. State that local/fixture output cannot complete those rows. + +- [ ] **Step 4: Mark the reviewed spec executable** + +Change the spec status to approved for implementation and record the written-spec approval date and owner. Do not change WP scope. + +- [ ] **Step 5: Verify and commit** + +Run `cd docs && npm run format && npm run lint && npm run build`, remove only generated VitePress temp output, then run `git diff --check`. + +Stage exactly the three files and commit: + +```bash +git add docs/superpowers/specs/2026-08-19-documentation-refresh-design.md docs/internal/audits/documentation-refresh-decisions.md docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Align documentation refresh records to one PR" +``` + +### Task 2: Transfer the reviewed containment commits + +**Files:** + +- Modify: `docs/.vitepress/config.mts` +- Modify: `docs/guide/index.md` +- Delete: `docs/guide/onboarding.md` +- Create: `docs/internal/onboarding.md` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` + +- [ ] **Step 1: Authenticate the closed source PR and commits** + +Require PR #1104 closed, base `d516a9e94249e10cbc36e41beb4269f9255cf407`, and source commits `34b0613dc603ba6529396dad4dd4b7e68b1e11a9` and `e6554f24f58f6122fb806ce25432f66033765c65`. Verify their combined base-to-head path set is exactly the four paths above. + +- [ ] **Step 2: Transfer the two commits** + +Cherry-pick the commits in order. Any conflict outside the four authorized paths stops execution. Resolve an authorized-path conflict only by preserving the reviewed containment behavior on the rc version; record the conflict and resulting blob comparison. + +```bash +git cherry-pick 34b0613dc603ba6529396dad4dd4b7e68b1e11a9 +git cherry-pick e6554f24f58f6122fb806ce25432f66033765c65 +``` + +Expected commit subjects: `Contain internal documentation pages` and `Fix internal onboarding links`. + +- [ ] **Step 3: Reprove containment on rc** + +Run `cd docs && npm ci && npm run lint && npm run format && npm run build`. Assert no output for the six excluded families, required Home/Guide/API artifacts with expected content, no excluded hrefs, and every repository-relative onboarding target exists. + +- [ ] **Step 4: Record the transfer** + +Append source PR URL/state, source base/head, original and resulting commit SHAs, exact path set, commands, and local-only status. Commit only the evidence ledger: + +```bash +git add docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Record documentation containment transfer" +``` + +### Task 3: Complete WP1 CNAME and policy hygiene + +**Files:** + +- Delete: `docs/public/CNAME` +- Modify: `docs/business-use-cases.md` +- Modify: `fastly.toml` +- Modify: `docs/package.json` +- Modify: `docs/package-lock.json` +- Modify: `CLAUDE.md` +- Modify: `AGENTS.md` +- Modify: `.github/pull_request_template.md` +- Modify: `.claude/commands/check-ci.md` +- Modify: `.claude/commands/review-changes.md` +- Modify: `.claude/commands/test-all.md` +- Modify: `.claude/commands/test-crate.md` +- Modify: `.claude/commands/verify.md` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` +- Modify: `docs/internal/audits/documentation-refresh-decisions.md` + +- [ ] **Step 1: Add failing policy assertions** + +Prove the banner, package privacy/license, empty authors, fixture labels, KV comments, canonical gate link, generated AGENTS region, exception taxonomy, and CNAME deletion are absent or stale. + +- [ ] **Step 2: Delete the selected CNAME** + +Remove `docs/public/CNAME` and retain `base: '/trusted-server'`. Assert no tracked placeholder remains and build assets use the project path. Commit the exact deletion: + +```bash +git add -A -- docs/public/CNAME +git diff --cached --check +git commit -m "Resolve documentation site domain" +``` + +- [ ] **Step 3: Apply policy and hygiene edits** + +Add the unverified marketing banner; scrub `fastly.toml` while preserving only the expiring service-ID record; set docs package private/Apache-2.0 and refresh lock metadata; add the typed exception taxonomy to CLAUDE; make command files and PR template link-only; generate the AGENTS fallback region. + +- [ ] **Step 4: Prove privacy and policy state** + +Search all tracked files for removed contacts, handles, channels, access phrases, placeholder CNAME, and prohibited exception shapes. Expected: no match outside a typed, unexpired decision entry. + +- [ ] **Step 5: Verify and commit** + +Run `cd docs && npm ci && npm run lint && npm run format && npm run build`, exact included/excluded artifact assertions, `git diff --check`, and the package checkpoint checks. Record live Pages/CNAME as release-pending. + +```bash +git add docs/business-use-cases.md fastly.toml docs/package.json docs/package-lock.json CLAUDE.md AGENTS.md .github/pull_request_template.md .claude/commands/check-ci.md .claude/commands/review-changes.md .claude/commands/test-all.md .claude/commands/test-crate.md .claude/commands/verify.md docs/internal/audits/documentation-refresh-evidence.md docs/internal/audits/documentation-refresh-decisions.md +git commit -m "Clean documentation publishing policy" +``` + +### Task 4: Scaffold the standalone `docs-parity` crate + +**Files:** + +- Create: `tools/docs-parity/Cargo.toml` +- Create: `tools/docs-parity/Cargo.lock` +- Create: `tools/docs-parity/README.md` +- Create: `tools/docs-parity/src/main.rs` +- Create: `tools/docs-parity/src/lib.rs` +- Create: `tools/docs-parity/src/model.rs` +- Create: `tools/docs-parity/src/repository.rs` +- Create/Test: `tools/docs-parity/tests/cli.rs` + +- [ ] **Step 1: Write the failing CLI contract tests** + +Cover repository-root discovery from nested directories, `--help`, unknown subcommands, check-vs-update exit codes, paths outside the repository, unsafe relative paths, atomic-update interruption, and stable ordering. Expect the binary to be absent. + +- [ ] **Step 2: Create the independent Cargo root** + +Add `[workspace]`, package metadata, the repository's lint policy, `error-stack` error flow, and only the dependencies required by the checked formats. Do not add the tool to root `workspace.members`. + +- [ ] **Step 3: Implement the minimal shared model and repository boundary** + +The model must make ownership and expiry structurally mandatory where the spec requires them. Repository APIs accept normalized relative paths, reject symlink escapes/unsafe modes, enumerate Git-tracked paths, and write generated files atomically. + +- [ ] **Step 4: Run the focused tests** + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test cli +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +``` + +Expected: all pass, `tools/docs-parity/Cargo.lock` exists, and root `Cargo.lock` is unchanged. + +- [ ] **Step 5: Document the update/check contract and commit the foundation** + +```bash +git add tools/docs-parity/Cargo.toml tools/docs-parity/Cargo.lock tools/docs-parity/README.md tools/docs-parity/src/main.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/model.rs tools/docs-parity/src/repository.rs tools/docs-parity/tests/cli.rs docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Add documentation parity tool foundation" +``` + +### Task 5: Close tracked-file classification and sensitive-data scanning + +**Files:** + +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.lock` +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.toml` +- Create: `tools/docs-parity/src/classification.rs` +- Create: `tools/docs-parity/src/scanner.rs` +- Modify: `tools/docs-parity/src/main.rs` +- Modify: `tools/docs-parity/src/lib.rs` +- Modify: `tools/docs-parity/src/model.rs` +- Modify: `tools/docs-parity/src/repository.rs` +- Create: `tools/docs-parity/manifests/tracked-files.toml` +- Create: `tools/docs-parity/manifests/maintained-sources.toml` +- Create: `tools/docs-parity/manifests/sensitive-allowlist.toml` +- Create: `tools/docs-parity/manifests/retired-identifiers.toml` +- Create/Test: `tools/docs-parity/tests/classification.rs` +- Create/Test: `tools/docs-parity/tests/scanner.rs` +- Modify: `tools/docs-parity/README.md` + +- [ ] **Step 1: Write exhaustive-classification failures** + +Add synthesized repositories proving each of these fails: an unknown text extension, an unknown binary, invalid UTF-8 in an expected-text file, oversized expected text, a new Dockerfile, a `.mjs` file, a `.proto` file, a human-facing comment outside an existing selector, a comment syntax without an extractor, a symlink escape, and an unclassified extracted comment span. + +- [ ] **Step 2: Implement the checked classification contract** + +Start from `git ls-files -z`; classify every path as text or binary without treating content sniffing as the authority. Require each text path to have a whole-file include/exclude or comment-region selector and each extracted comment span to have a disposition. Fail closed on new paths, selectors, or comment syntaxes. + +- [ ] **Step 3: Write scanner detector and allowlist tests** + +For domain, email, credential shape, service ID, encoded token, binary strings, lockfile structured fields, media metadata, and identifier/access-phrase denylist, add both a positive fixture and an owner/rationale/expiry allowlisted fixture. Prove expired entries, stale hashes, renamed files, and broad domain exemptions fail. Encode the `fastly.toml` exception expiry as `2026-09-30T00:00:00Z`; check mode must fail at or after that instant. Renewal requires a reviewed, committed replacement before expiry and is independent of the ops migration deadline. + +- [ ] **Step 4: Implement deterministic scanning** + +Scan all tracked files. Parse lockfile source/registry/URL fields structurally, inspect binary strings and media metadata, and support only the five typed exception classes approved in WP1. Report semantic sensitivity outside detector classes as a required human disposition, not as a scanner guarantee. + +- [ ] **Step 5: Bootstrap and review the real manifests** + +Generate candidate entries, then manually disposition every path and comment span. Seed the identifier denylist from the WP1/WP2 removals. Record the `fastly.toml` exception owner/date from Task 1; do not enable check mode if that entry is incomplete. + +- [ ] **Step 6: Run the negative matrix and real scan** + +Add each scanner/classification dependency only in the standalone manifest and +regenerate its lockfile. Require `git diff --quiet -- Cargo.lock` so the root +workspace lockfile is unchanged. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test classification +cargo test --manifest-path tools/docs-parity/Cargo.toml --test scanner +cargo test --manifest-path tools/docs-parity/Cargo.toml --test cli +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo run --manifest-path tools/docs-parity/Cargo.toml -- classify --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- scan --check +``` + +Expected: synthesized violations fail for the intended diagnostic; the repository scan passes only with typed, unexpired entries. + +- [ ] **Step 7: Commit the closed universe** + +```bash +git add tools/docs-parity/Cargo.toml tools/docs-parity/Cargo.lock tools/docs-parity/README.md tools/docs-parity/src/classification.rs tools/docs-parity/src/scanner.rs tools/docs-parity/src/main.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/model.rs tools/docs-parity/src/repository.rs tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/retired-identifiers.toml tools/docs-parity/tests/classification.rs tools/docs-parity/tests/scanner.rs docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Enforce documentation source classification" +``` + +### Task 6: Implement generated regions, Markdown ownership, and link checks + +**Files:** + +- Modify for renderer-accurate public anchor: `docs/guide/error-reference.md` +- Modify for package receipts: `docs/internal/audits/documentation-refresh-evidence.md` +- Modify for exact verification/staging scope: `docs/superpowers/plans/2026-08-30-documentation-refresh.md` +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.lock` +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.toml` +- Modify: `tools/docs-parity/README.md` +- Create: `tools/docs-parity/manifests/diagrams.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Create: `tools/docs-parity/manifests/orphans.toml` +- Create: `tools/docs-parity/manifests/pages.toml` +- Modify for scanner offsets: `tools/docs-parity/manifests/sensitive-allowlist.toml` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/src/classification.rs` +- Modify: `tools/docs-parity/src/lib.rs` +- Create: `tools/docs-parity/src/markdown.rs` +- Modify for atomic replacement with immediate precommit validation: `tools/docs-parity/src/repository.rs` +- Modify for atomic manifest writes: `tools/docs-parity/src/scanner.rs` +- Modify/Test: `tools/docs-parity/tests/cli.rs` +- Create/Test: `tools/docs-parity/tests/links.rs` +- Create/Test: `tools/docs-parity/tests/markdown.rs` + +- [ ] **Step 1: Write generated-region failure tests** + +Cover duplicate/missing markers, unknown record names, hand-edited output, +unstable ordering, update mode changing bytes outside markers, interrupted +writes and renames, content/identity changes before the precommit check, the +documented final-syscall window, restrictive-umask mode preservation, unique +owned-stage cleanup, untouched peer stages, and a second update producing no +diff. + +- [ ] **Step 2: Implement deterministic region updates** + +Require named start/end markers, render from typed records, compare expected +bytes and file identity immediately before a portable atomic rename, and make +`generate --check` fail on any byte drift. Abort changes observed by that +precommit validation while documenting that portable rename cannot protect the +final syscall window from noncooperating writers. Explicitly restore safe modes +after unique-stage creation, fsync the staged file and parent, and clean only +owned stages. Manual endpoint prose must carry ownership markers that are +separately checked. + +- [ ] **Step 3: Write set-specific Markdown tests** + +Add one dead-link fixture for each active set; include missing relative files, +missing anchors, duplicate headings, contextual Unicode lowercasing, exact +ECMAScript whitespace, public soft/hard-break omission, percent-encoded +fragments, tombstone routes, an unlisted orphan, a built page that links to an +excluded source, and bounded typed VitePress frontmatter with hero/action/ +feature targets, string/src/light-and-dark image variants, and configured/ +default public-asset resolution. + +- [ ] **Step 4: Implement local and external link contracts** + +Local checks cover active repo/maintained-internal path and anchor links. +External checks cover all active sets with final HTTPS/status validation, at +most five redirects, HEAD→GET fallback, and at most three total attempts for +429/5xx with 1-second then 2-second delays. Honor `Retry-After` only up to 30 +seconds; otherwise use the bounded local delay. Exact-URL exceptions require +owner/reason/expiry. Add fixtures for allowlisted URL, expiry, redirect loop, +redirect-depth overflow, malformed/oversized `Retry-After`, retry exhaustion, +and credentials accidentally embedded in a URL. +The production runner uses fixed `/usr/bin/curl`, clears ambient environment, +computes its deadline before starting the bounded stdout reader, and on every +post-spawn result or failure polls, kills if still alive, waits regardless of +kill failure, and joins the reader while retaining all diagnostics. A +synchronous post-spawn observer and reader-readiness handshake make process +tests deterministic; received reader results take precedence at the deadline. +It retains legal repeated response fields, rejects +duplicate Location, Retry-After, and Content-Length policy singletons, applies +an explicit stricter security policy against repeated Transfer-Encoding or +Content-Encoding, validates every proxy/1xx header block, and selects only the +final response for policy. + +- [ ] **Step 5: Check page/nav/orphan/diagram records** + +Make `pages.toml` the intended VitePress publication/nav inventory, +`orphans.toml` carry only typed tombstone/manual exceptions, and +`diagrams.toml` require a prose equivalent, owner, and exact semantic-content +SHA-256 for every diagram. Content edits and selector-order swaps reopen review. + +- [ ] **Step 6: Verify** + +Add each Markdown/link dependency only in the standalone manifest, regenerate +its lockfile, and require `git diff --quiet -- Cargo.lock` before the commands +below. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test markdown +cargo test --manifest-path tools/docs-parity/Cargo.toml --test links +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +cargo run --manifest-path tools/docs-parity/Cargo.toml -- links --local --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- classify --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- scan --check +git diff --quiet -- Cargo.lock +git diff --check +git diff --name-only 53a5a9e1d42d4dc78e4583d1b5d40ebdcc9c242a..HEAD +``` + +Expected: focused tests and current local repository checks pass; the final +name-only output equals the Task 6 **Files** list exactly. External network +checks remain scheduled/manual, not a required per-PR network gate. + +- [ ] **Step 7: Commit** + +```bash +git add docs/guide/error-reference.md docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md tools/docs-parity/Cargo.lock tools/docs-parity/Cargo.toml tools/docs-parity/README.md tools/docs-parity/manifests/diagrams.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/orphans.toml tools/docs-parity/manifests/pages.toml tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/src/classification.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/markdown.rs tools/docs-parity/src/repository.rs tools/docs-parity/src/scanner.rs tools/docs-parity/tests/cli.rs tools/docs-parity/tests/links.rs tools/docs-parity/tests/markdown.rs +git commit -m "Close documentation execution quality gaps" +``` + +### Task 7: Extract settings semantics and execute the example harness + +**Files:** + +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.toml` +- Modify as dependencies are introduced: `tools/docs-parity/Cargo.lock` +- Create: `tools/docs-parity/src/settings.rs` +- Modify: `tools/docs-parity/src/lib.rs` +- Modify/Test for deterministic process-gate readiness: `tools/docs-parity/src/markdown.rs` +- Modify: `tools/docs-parity/src/scanner.rs` +- Modify: `tools/docs-parity/README.md` +- Create: `tools/docs-parity/manifests/settings-companions.toml` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/sensitive-allowlist.toml` +- Create/Test: `tools/docs-parity/tests/settings.rs` +- Modify/Test: `tools/docs-parity/tests/scanner.rs` +- Modify/Test: `crates/trusted-server-core/src/config.rs` +- Modify/Test: `crates/trusted-server-core/src/settings.rs` +- Modify/Test: `crates/trusted-server-core/src/auction/profile.rs` +- Modify/Test: `crates/trusted-server-core/src/integrations/aps.rs` +- Modify/Test: `crates/trusted-server-core/src/integrations/prebid.rs` +- Modify/Test: `trusted-server.example.toml` +- Modify: `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` +- Modify: `docs/superpowers/plans/2026-08-30-documentation-refresh.md` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` + +- [x] **Step 1: Write extractor grammar fixtures** + +Cover the exact Serde field/container/variant sites for `rename`, +`rename_all`, `rename_all_fields`, `alias`, `tag`, `content`, `untagged`, +`flatten`, `skip`, `skip_serializing`, `skip_deserializing`, +`skip_serializing_if`, and container/field `default`; cover all eight legal +rename rules, literal/nonliteral defaults, custom deserializers, `Option`, +validation ranges, invalid attribute sites, invalid rename rules, and unknown +shape-changing attributes. Parse every named and indexed tuple field before +classifying its attributes. Function-path values must be quoted `LitStr` +values that parse as paths, matching the compiled Serde grammar; only direct +numeric negation counts as a literal default, and named-field-only `flatten` +must fail on tuple shapes. Exclude one exact `#[cfg(test)]` from production +type, field, variant, and literal-default extraction; reject every other, +combined, or `cfg_attr` form as unsupported production selection. Expected: +unclassified, site-invalid, malformed-path, unsupported tuple-field, and +ambiguous cfg behavior fails closed. + +- [x] **Step 2: Implement the AST plus companion chain** + +Resolve literal defaults from AST; require exact source/symbol/kind companion +entries for custom deserializers, nonliteral defaults, and validator functions; +and require equality between the AST-discovered and reviewed companion sets. +Bind every reviewed value and unique probe name to a module-local compiled +positive/negative receipt, with exact receipt-set equality per source. Emit +independent lifecycle, key identity, serialization, runtime, and +secret-handling axes; never collapse overlapping dispositions. Derive every +struct-field and enum-variant alias path and canonical serialized target from +the production AST, and require exact equality with reviewed alias +dispositions; stale, missing, wrong-target, and duplicate aliases fail. + +- [x] **Step 3: Write the eight-phase template harness failures** + +Use the production-API harness, not a manually constructed observation, to +prove that a typo, unknown disabled integration key, bad profile config, +unresolved secret, stranded literal substitution, inactive-block shortcut, +missing profile compiler probe, and wrong failure diagnostic do not pass. +Compare the complete placeholder-path and normalized-diagnostic values, never +substring presence or absence. + +- [x] **Step 4: Implement the harness through production APIs** + +Parse the source template, customize non-secret values in memory, preserve +secret key names through deploy validation and `BlobEnvelope` serialization, +resolve with a fake store, and run runtime validation. Derive every optional +integration and provider-profile probe from its exact active or commented +source-template block, including the commented `standard` profile example; +run paired positive/negative probes with integrations forced enabled; and +compare the 14 integration IDs, three profile IDs, three secret-key literals, +placeholder paths, and normalized diagnostic exactly with the reviewed +record. Enumerate every exact-string consumer in that record. + +- [x] **Step 5: Add visibility-local set-equality seams** + +Replace the one-directional deploy-ID assertion with equality against the checked record. Keep production behavior unchanged and expose no new public API solely for the tool; put private-registry assertions in module-local `#[cfg(test)]` tests. + +- [x] **Step 6: Run focused and target-matched tests** + +Add each AST/settings dependency only in the standalone manifest, regenerate +its lockfile, and require `git diff --quiet -- Cargo.lock` before the commands +below. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml settings +cargo test-fastly config +cargo test-fastly settings +cargo test-fastly profile +``` + +Expected: extractor/harness tests pass and core behavior is unchanged. + +- [x] **Step 7: Commit the extractor checkpoint** + +```bash +git add tools/docs-parity/Cargo.toml tools/docs-parity/Cargo.lock tools/docs-parity/README.md tools/docs-parity/src/settings.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/markdown.rs tools/docs-parity/src/scanner.rs tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/settings-companions.toml tools/docs-parity/tests/settings.rs tools/docs-parity/tests/scanner.rs crates/trusted-server-core/src/config.rs crates/trusted-server-core/src/settings.rs crates/trusted-server-core/src/auction/profile.rs crates/trusted-server-core/src/integrations/aps.rs crates/trusted-server-core/src/integrations/prebid.rs docs/superpowers/plans/2026-08-30-documentation-refresh.md docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Check configuration documentation semantics" +``` + +- [x] **Step 8: Close the Task 7 semantics review** + +```bash +git add crates/trusted-server-core/src/config.rs crates/trusted-server-core/src/integrations/aps.rs crates/trusted-server-core/src/integrations/prebid.rs crates/trusted-server-core/src/settings.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/settings-companions.toml tools/docs-parity/src/settings.rs tools/docs-parity/tests/settings.rs +git commit -m "Close settings semantics review gaps" +``` + +Expected: this historical correction diff contains exactly these 10 paths. +The Step 7 staging command contains 20 paths, and the historical union of the +Step 7 and Step 8 staging commands is the same 20-path set. Both exclude +`trusted-server.example.toml`, which was added later in Step 9; this historical +set is not the current 22-path **Files** set above. Task 8 has not started. + +- [x] **Step 9: Close the Task 7 extractor review** + +```bash +git add crates/trusted-server-core/src/config.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/src/settings.rs tools/docs-parity/tests/settings.rs trusted-server.example.toml +git commit -m "Close settings extractor review gaps" +``` + +Expected: the second correction diff contains exactly these seven paths. At +this historical checkpoint, the complete Task 7 diff from +`24fc8cdd3300daf7de8b9e8de65974e5b5b6127c` contains the exact 21-path union +of the Step 7, Step 8, and Step 9 staging commands, including the newly checked +source-template profile block but excluding the design spec added in Step 11. +Task 8 has not started. + +- [x] **Step 10: Correct the Task 7 staging evidence** + +```bash +git add docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md +git commit -m "Correct Task 7 staging evidence" +``` + +Expected: this governance-only correction contains exactly these two paths. +The union of the Step 7, Step 8, and Step 9 staging commands remains equal to +the then-current 21-path Task 7 diff, and Task 8 has not started. + +- [x] **Step 11: Correct settings alias semantics** + +```bash +git add crates/trusted-server-core/src/integrations/aps.rs crates/trusted-server-core/src/integrations/prebid.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md docs/superpowers/specs/2026-08-19-documentation-refresh-design.md tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/settings-companions.toml tools/docs-parity/src/settings.rs tools/docs-parity/tests/settings.rs +git commit -m "Correct settings alias semantics" +``` + +Expected: the alias/cfg correction contains exactly these nine paths. The +complete Task 7 diff from `24fc8cdd3300daf7de8b9e8de65974e5b5b6127c` +contains the exact 22-path **Files** set above, the union of the Step 7 through +Step 11 staging commands equals that set, and Task 8 has not started. + +### Task 8: Check integration capabilities and adapter routes + +**Files:** + +- Modify: `tools/docs-parity/Cargo.toml` +- Modify: `tools/docs-parity/README.md` +- Create: `tools/docs-parity/src/integrations.rs` +- Create: `tools/docs-parity/src/routes.rs` +- Modify: `tools/docs-parity/src/repository.rs` +- Modify: `tools/docs-parity/src/lib.rs` +- Create: `tools/docs-parity/manifests/integrations.toml` +- Create: `tools/docs-parity/manifests/routes.toml` +- Create: `tools/docs-parity/manifests/adapter-support.toml` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/sensitive-allowlist.toml` +- Create/Test: `tools/docs-parity/tests/integrations.rs` +- Create/Test: `tools/docs-parity/tests/routes.rs` +- Modify/Test: `crates/trusted-server-core/src/integrations/registry.rs` +- Modify/Test: `crates/trusted-server-adapter-fastly/src/app.rs` +- Modify/Test: `crates/trusted-server-adapter-axum/src/app.rs` +- Modify/Test: `crates/trusted-server-adapter-cloudflare/src/app.rs` +- Modify/Test: `crates/trusted-server-adapter-spin/src/app.rs` +- Modify/Test: `crates/trusted-server-adapter-axum/tests/routes.rs` +- Modify/Test: `crates/trusted-server-adapter-cloudflare/tests/routes.rs` +- Modify/Test: `crates/trusted-server-adapter-spin/tests/routes.rs` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` +- Modify: `docs/superpowers/plans/2026-08-30-documentation-refresh.md` +- Modify: `docs/superpowers/specs/2026-08-19-documentation-refresh-design.md` + +- [x] **Step 1: Write inventory equality failures** + +Prove missing and extra deploy IDs, builders, plan registrations, profiles, mediator, JS module/bundle/loading-mode entries, route/method/predicate rows, and startup-router semantics all fail. + +- [x] **Step 2: Add behavioral capability probes** + +Instantiate every integration across its predicate matrix and compare observed proxy routes, rewriters, injectors, post-processors, filters, and JS modes. Exercise APS rendering and DataDome protection in both states. Keep operational/release status manual with owner/review date. + +- [x] **Step 3: Add complete adapter route seams** + +Snapshot Fastly, Axum, and Spin through named private test-only route +collections. Parse Cloudflare's builder with a closed grammar that expands only +the known constants, loops, method arrays, and publisher fallback helper; make +an unknown builder construct fail rather than undercount. If obtaining a +collection requires a production-source extraction, keep it private and +behavior-preserving: capture the pre-change route/method/predicate/status and +startup-router sets, then require exact equality after the extraction. Add no +public API. + +- [x] **Step 4: Compare checked records as sets** + +Assert methods, literal/template/config-derived/conditional predicates, +unsupported/guarded semantics, fan-out capability, and degraded startup +routers. Every adapter regression suite plus the before/after equality proof +must pass; do not change routing behavior to make the records convenient. + +- [x] **Step 5: Verify every affected target** + +Enable the already-resolved `syn` visitor feature only in the standalone +manifest. Neither lockfile changes. Require `git diff --quiet -- Cargo.lock` +before the commands below. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml integrations +cargo test --manifest-path tools/docs-parity/Cargo.toml routes +cargo test-fastly +cargo test-axum +cargo test-cloudflare +cargo test-spin +cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test parity +``` + +Expected: all pass; the standalone suite contains 253 tests, the expanded route +manifest contains 103 exact records, and a generated route/capability update +followed by `generate --check` is clean. + +- [x] **Step 6: Commit** + +```bash +git add crates/trusted-server-adapter-axum/src/app.rs crates/trusted-server-adapter-axum/tests/routes.rs crates/trusted-server-adapter-cloudflare/src/app.rs crates/trusted-server-adapter-cloudflare/tests/routes.rs crates/trusted-server-adapter-fastly/src/app.rs crates/trusted-server-adapter-spin/src/app.rs crates/trusted-server-adapter-spin/tests/routes.rs crates/trusted-server-core/src/integrations/registry.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md tools/docs-parity/Cargo.toml tools/docs-parity/README.md tools/docs-parity/manifests/adapter-support.toml tools/docs-parity/manifests/integrations.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/routes.toml tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/src/integrations.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/routes.rs tools/docs-parity/tests/integrations.rs tools/docs-parity/tests/routes.rs +git commit -m "Check integration and adapter inventories" +``` + +Expected: the original Task 8 commit contains the historical 23-path set from +this staging command. The post-review correction in Step 7 adds the design +specification to the current 24-path Task 8 **Files** set above. + +- [x] **Step 7: Close duplicate cardinality and validator-inventory review gaps** + +Retain raw manifest and compiled-observation cardinality until duplicate +validation completes. Reject duplicate values on every static integration +axis; loading, capability, nested capability, and operational rows; route +adapters, methods, expanded semantics, named and Cloudflare source routes; and +adapter-support records. Make deploy, plan, and mediator source visitors reject +duplicate insertions, retaining the builder and profile checks. Correct the +settings validator statement to one production struct-level companion and keep +APS account/inventory validators in the imperative profile-compiler inventory. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test integrations +cargo test --manifest-path tools/docs-parity/Cargo.toml --test routes +PATH=/private/tmp/task7-viceroy/bin:$PATH SSL_CERT_FILE=/etc/ssl/cert.pem cargo test-fastly task8_ +git add crates/trusted-server-core/src/integrations/registry.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md docs/superpowers/specs/2026-08-19-documentation-refresh-design.md tools/docs-parity/src/integrations.rs tools/docs-parity/src/routes.rs tools/docs-parity/tests/integrations.rs tools/docs-parity/tests/routes.rs +git commit -m "Close integration inventory review gaps" +``` + +Expected: the correction commit contains exactly these eight paths, the +standalone suite contains 267 tests, and the full Task 8 aggregate contains +the then-current 24-path set. The quality correction in Step 8 adds the bounded +repository reader to the current 25-path Task 8 **Files** set above. + +- [x] **Step 8: Close integration execution quality gaps** + +Resolve exact production registration owners and reject hidden or ambiguous +registration grammar. Follow Cloudflare's uniquely returned builder authority. +Bound manifest and Rust-source reads before allocation. Bind emitted JavaScript +bundles and loading modes to compiled runtime receipts. Replace route substring +checks with exact AST/control-flow receipts, and reject duplicate raw route +identities before metadata grouping. + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test integrations +cargo test --manifest-path tools/docs-parity/Cargo.toml --test routes +PATH=/private/tmp/task7-viceroy/bin:$PATH SSL_CERT_FILE=/etc/ssl/cert.pem cargo test-fastly task8_ +git add crates/trusted-server-core/src/integrations/registry.rs docs/internal/audits/documentation-refresh-evidence.md docs/superpowers/plans/2026-08-30-documentation-refresh.md tools/docs-parity/src/integrations.rs tools/docs-parity/src/repository.rs tools/docs-parity/src/routes.rs tools/docs-parity/tests/integrations.rs tools/docs-parity/tests/routes.rs +git commit -m "Close integration execution quality gaps" +``` + +Expected: the correction commit contains exactly these eight paths, the +standalone suite contains 343 tests, and the full Task 8 aggregate contains +exactly the 25 paths in **Files** above. + +### Task 9: Check CLI help, snippets, gates, and final workflow foundations + +**Files:** + +- Modify: `tools/docs-parity/Cargo.toml` +- Modify: `tools/docs-parity/Cargo.lock` +- Create: `tools/docs-parity/src/cli_help.rs` +- Create: `tools/docs-parity/src/snippets.rs` +- Create: `tools/docs-parity/src/gates.rs` +- Create: `tools/docs-parity/src/workflow.rs` +- Create: `tools/docs-parity/src/dependency_snapshot.rs` +- Modify: `tools/docs-parity/src/{main,lib,model,repository}.rs` +- Create: `tools/docs-parity/manifests/{cli-overrides,snippets,gates}.toml` +- Modify: `tools/docs-parity/manifests/{tracked-files,maintained-sources}.toml` +- Create: `tools/docs-parity/goldens/{cli-linux,cli-macos}.txt` +- Create/Test: `tools/docs-parity/tests/{cli_help,snippets,gates,workflow,dependency_snapshot}.rs` +- Modify: `.github/workflows/test.yml` +- Create: `.github/workflows/docs-links.yml` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` + +- [ ] **Step 1: Write CLI capture and snippet failures** + +Cover recursive help, host-OS detection with no caller platform override, missing native capture provenance, stale overrides, every snippet mode, wrong failure phase/diagnostic, missing classification, expired waiver, and formerly invalid examples becoming valid. + +- [ ] **Step 2: Add native capture CI** + +Add a permanent Linux/macOS PR matrix job that checks out the exact PR head, runs the same capture command, records runner/`uname`/Rust/Node/source SHA metadata, and uploads bounded raw artifacts. Commit capture-ready code before generating goldens and push that commit to #1049. + +- [ ] **Step 3: Import authenticated goldens** + +Download both artifacts from the same hosted run and exact source SHA. Verify hashes and provenance, import through the deterministic tool command, never hand-edit the goldens, and prove a second import is unchanged. + +- [ ] **Step 4: Implement snippets and canonical gates** + +Define every command once with runner/target/mode; generate checked regions or enforce link-only consumers. Execute fences in isolated working directories and require stable phase/diagnostic matches. + +- [ ] **Step 5: Write final-workflow security fixtures first** + +Positive fixtures: ordinary read-only PR validation, scheduled clean/finding link paths, issue dedup/auto-close, dependency generation/submission, and closed manual refresh. Negative fixtures: `pull_request_target`, `merge_group`, status write, caller tool/SHA input, privileged PR checkout, unpinned action, expanded permissions, unsafe cache/service/local action, stale source, extra path/member, traversal, unsafe mode/symlink, mixed inputs, malformed/oversized artifacts, unknown schema fields, and write job executing repository code. + +- [ ] **Step 6: Implement workflow and snapshot policy** + +Parse YAML as data. Require read-only PR jobs, full action SHA pins, default-deny permissions, separated no-checkout writers, fixed concurrency/timeouts, exact archive member names, schema closure, and authenticated source SHA. Link bounds: 2 MiB archive, 1 MiB JSON, 500 findings, 2,048-byte strings. Snapshot bounds: 4 MiB archive, 2 MiB JSON, 5,000 records, 2,048-byte strings. + +- [ ] **Step 7: Materialize the final workflow foundation** + +Create `docs-links.yml` directly in final-state shape: ordinary read-only PR validation; default-branch schedule; split link reader/issue writer; split snapshot reader/writer; and no-input manual refresh. It contains no temporary rc target, controller attestation, protected-file lifecycle, or caller-selected executable. + +- [ ] **Step 8: Verify and commit in two adjacent checkpoints** + +First commit capture-ready sources and workflow foundation: + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml cli_help +cargo test --manifest-path tools/docs-parity/Cargo.toml snippets +cargo test --manifest-path tools/docs-parity/Cargo.toml gates +cargo test --manifest-path tools/docs-parity/Cargo.toml workflow +cargo test --manifest-path tools/docs-parity/Cargo.toml dependency_snapshot +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +git add tools/docs-parity/Cargo.toml tools/docs-parity/Cargo.lock tools/docs-parity/src/cli_help.rs tools/docs-parity/src/snippets.rs tools/docs-parity/src/gates.rs tools/docs-parity/src/workflow.rs tools/docs-parity/src/dependency_snapshot.rs tools/docs-parity/src/main.rs tools/docs-parity/src/lib.rs tools/docs-parity/src/model.rs tools/docs-parity/src/repository.rs tools/docs-parity/manifests/cli-overrides.toml tools/docs-parity/manifests/snippets.toml tools/docs-parity/manifests/gates.toml tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/tests/cli_help.rs tools/docs-parity/tests/snippets.rs tools/docs-parity/tests/gates.rs tools/docs-parity/tests/workflow.rs tools/docs-parity/tests/dependency_snapshot.rs .github/workflows/test.yml .github/workflows/docs-links.yml docs/internal/audits/documentation-refresh-evidence.md +git diff --cached --check +git commit -m "Add documentation enforcement foundations" +git push origin spec-docs-refresh +``` + +After the native artifacts return, stage only the goldens, regenerated tracked/source manifests, and evidence: + +```bash +git add tools/docs-parity/goldens/cli-linux.txt tools/docs-parity/goldens/cli-macos.txt tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml docs/internal/audits/documentation-refresh-evidence.md +git diff --cached --check +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo run --manifest-path tools/docs-parity/Cargo.toml -- check --all +git commit -m "Record cross-platform CLI help goldens" +``` + +### Task 10: Complete WP2 truth pass and dispositions + +**Files:** + +- Create/Modify: `docs/internal/audits/documentation-refresh-inventory.toml` +- Modify: `docs/guide/ad-serving.md` +- Modify: `docs/guide/architecture.md` +- Modify: `docs/guide/configuration.md` +- Modify: `docs/guide/creative-processing.md` +- Modify: `docs/guide/error-reference.md` +- Modify: `docs/guide/integration-guide.md` +- Modify: `docs/guide/roadmap.md` +- Modify: `docs/guide/integrations/gam.md` +- Modify: `docs/guide/integrations/kargo.md` +- Modify: `docs/.vitepress/config.mts` +- Create: `docs/guide/auction-testing.md` +- Modify: `crates/trusted-server-core/src/auction/README.md` +- Modify: `TESTING.md` +- Retire/Move/Modify: `FAQ_POC.md` +- Create only on FAQ archive path: `docs/superpowers/archive/FAQ_POC.md` +- Modify: `CHANGELOG.md` +- Modify: `.env.example` +- Modify: `.env.dev` +- Modify: `.claude/agents/code-architect.md` +- Modify: `.claude/agents/issue-creator.md` +- Modify: `.github/workflows/test.yml` +- Modify: `scripts/test-cli.sh` +- Modify: `crates/trusted-server-openrtb/generate.sh` +- Modify: `crates/trusted-server-core/src/html_processor.test.html` only if the scanner finds a real value +- Modify: human-facing script/workflow comments selected by the checked inventory +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/sensitive-allowlist.toml` +- Modify: `tools/docs-parity/manifests/retired-identifiers.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` +- Modify: `tools/docs-parity/manifests/pages.toml` +- Modify: `tools/docs-parity/manifests/orphans.toml` + +- [ ] **Step 1: Generate and fail the initial disposition inventory** + +Run the inventory command over all three active sets. Expected: check mode fails for every missing whole-file/region disposition and records the audited merge-base SHA plus candidate source anchors. + +- [ ] **Step 2: Disposition every candidate before rewriting** + +Choose verified/rewrite/retire/create for each file and region. Manually review semantic sensitivity beyond scanner patterns. The inventory is complete only when set equality holds; do not use a wildcard disposition. + +- [ ] **Step 3: Remove the named fabricated/retired content** + +Replace `RequestWrapper` with real platform traits; remove Equativ, `.with_asset`, `npm run type-check`, `settings_data::get_settings`, dead `SEQUENCE.md`, APS `mock`, stale auction provider layout/routes, and retired env overlay keys. Fix only `request_ext` reserved-field protection in docs and record the `imp_ext` code follow-up. + +- [ ] **Step 4: Resolve FAQ and tombstones** + +The selected FAQ branch is **archive**: move `FAQ_POC.md` to +`docs/superpowers/archive/FAQ_POC.md`. The retire and rewrite instructions +remain rejected/reference-only unless Task 1's FAQ decision is formally +reopened and this plan is amended and re-approved. The rejected retire and rewrite alternatives are not executable plan branches. Remove the root path from the active-repo inventory and add no active FAQ page or route. Independently replace GAM/Kargo with route-preserving +tombstones, remove sidebar reachability, and add old-route/tombstone smokes to +`pages.toml`. + +- [ ] **Step 5: Rewrite testing and operator records** + +Make root `TESTING.md` the test-matrix index, move the verified auction runbook into `docs/guide/auction-testing.md`, normalize the deterministic no-release CHANGELOG form, distinguish runtime env from CLI overlay, fix roadmap status, and repair the three known workflow/script comments. + +Record whether operator-visible CHANGELOG entries are complete for the audited range; if an entry is intentionally omitted, record the exact exclusion and source anchor. Formatting alone does not satisfy this check. + +- [ ] **Step 6: Reverify rc-delta content instead of blindly changing it** + +Check allowed-domain semantics, `/first-party/sign` 403 plus `href`/`base`, proxy-signing recommendation, and `--staging` limitation against code. Mark verified with anchors when correct; edit only proven drift. + +- [ ] **Step 7: Run full-set acceptance** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- inventory --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- scan --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- retired --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- pages --check +cd docs && npm run lint && npm run format && npm run build +``` + +Assert that `docs/.vitepress/dist/guide/faq.html` and `/guide/faq` navigation are absent on the selected archive path. + +Expected: set equality passes; retired terms are absent from active sets with only the spec-defined historical exceptions; every executable fence has a valid manifest entry and diagnostic. + +- [ ] **Step 8: Run regression tests for any non-doc fixture changed** + +If `html_processor.test.html` changes, run `cargo test-fastly html_processor`. Run focused tests for every other non-Markdown fixture touched. + +- [ ] **Step 9: Commit WP2** + +Stage the common WP2 paths first, then the selected archive branch and only the +conditional fixture paths that actually changed: + +```bash +git add docs/internal/audits/documentation-refresh-inventory.toml docs/internal/audits/documentation-refresh-evidence.md docs/guide/ad-serving.md docs/guide/architecture.md docs/guide/configuration.md docs/guide/creative-processing.md docs/guide/error-reference.md docs/guide/integration-guide.md docs/guide/roadmap.md docs/guide/integrations/gam.md docs/guide/integrations/kargo.md docs/guide/auction-testing.md docs/.vitepress/config.mts TESTING.md CHANGELOG.md .env.example .env.dev .claude/agents/code-architect.md .claude/agents/issue-creator.md .github/workflows/test.yml scripts/test-cli.sh crates/trusted-server-core/src/auction/README.md crates/trusted-server-openrtb/generate.sh tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/sensitive-allowlist.toml tools/docs-parity/manifests/retired-identifiers.toml tools/docs-parity/manifests/snippets.toml tools/docs-parity/manifests/pages.toml tools/docs-parity/manifests/orphans.toml +git add -A -- FAQ_POC.md docs/superpowers/archive/FAQ_POC.md +# Only when the scanner required this fixture edit: +git add crates/trusted-server-core/src/html_processor.test.html +git commit -m "Correct maintained documentation truth" +``` + +If the mechanical inventory selects another human-facing comment path, add +that one exact path to the reviewed list before running the checkpoint—never +replace this list with `git add docs`, `git add .github`, or another directory. + +### Task 11: Complete WP3 configuration reference and template + +**Files:** + +- Modify: `docs/guide/configuration.md` +- Modify: `docs/guide/cli.md` +- Modify: `trusted-server.example.toml` +- Modify: `tools/docs-parity/manifests/settings-companions.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` +- Modify: PR #1049 description through GitHub API/CLI + +- [ ] **Step 1: Make parity fail on the baseline gaps** + +Run settings check before edits. Expected diagnostics: missing `[consent]`, `[debug]`, and standalone `[tinybird]`; 10/17 key-section rows; 5/14 integration subsections; missing profile schemas; stale template store selectors; duplicate `[trusted_client_ip]`; incomplete directional/secret dispositions. + +- [ ] **Step 2: Generate canonical field/profile regions** + +Render all 17 roots, 14 deploy IDs, three profile configs, resolved defaults/requiredness/grammars/ranges/limits, and every independent disposition axis. Manual prose stays outside markers with an ownership marker. + +- [ ] **Step 3: Repair the example template conservatively** + +Audit all existing root blocks, remove the four accepted-and-discarded store selectors and duplicate trusted-client-IP block, preserve exact placeholder strings/key references, and do not normalize deprecated/ignored fields into recommended examples. + +- [ ] **Step 4: Document the secret model and CLI exposure** + +Classify the 11 store-resolved paths, inline trusted-client-IP secret, and discarded Tinybird secret. Warn that config diff/dry-run/push output can expose inline values. + +- [ ] **Step 5: Run extractor, harness, and docs gates** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- settings --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- examples --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo test-fastly config +cd docs && npm run lint && npm run format && npm run build +``` + +Expected: every active canonical field appears in reference/template, noncanonical paths are labeled only, all literal consumers remain connected, and all eight example-harness phases pass. + +- [ ] **Step 6: Commit WP3** + +```bash +git add docs/guide/configuration.md docs/guide/cli.md trusted-server.example.toml tools/docs-parity/manifests/settings-companions.toml tools/docs-parity/manifests/snippets.toml docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Complete configuration documentation" +``` + +- [ ] **Step 7: Push and publish the Appendix B parity checklist to #1049** + +Push the clean WP3 commit to `origin/spec-docs-refresh`, then update only the bounded `` / `` region of PR #1049's description. Render the checklist from the checked settings record and include all 17 roots, all 14 deploy IDs, all three provider profile schemas, the directional-disposition axes, the secret classifications, and the exact WP3 check results. Read the description back through the GitHub API/CLI and require the rendered rows to equal the checked record; preserve every unrelated PR-description section. + +Append the readback timestamp, PR body hash, and equality result to `documentation-refresh-evidence.md`; commit it immediately as `Record configuration checklist publication` and push it. Do not include the receipt commit's own SHA in its body. + +### Task 12: Complete WP4 generated API contracts + +**Files:** + +- Modify: `docs/guide/api-reference.md` +- Modify: `tools/docs-parity/manifests/routes.toml` +- Modify: `tools/docs-parity/manifests/adapter-support.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` +- Modify/Test only for test seams: the four adapter `src/app.rs` files and route tests from Task 8 + +- [ ] **Step 1: Make route generation fail on reader drift** + +Temporarily alter one checked record in a test fixture and prove check mode rejects an unregenerated region. Prove an unknown Cloudflare route-builder construct fails parsing. + +- [ ] **Step 2: Generate the route/availability regions** + +Render all adapters, methods, route families, predicates, Fastly-only routes, guarded/unsupported admin behavior, publisher fallback, startup failure, middleware facts, and fan-out support from the checked records. + +- [ ] **Step 3: Complete manually owned endpoint contracts** + +For every endpoint, cover auth, schemas, status codes, cache/CORS, config gates, rate limits, and examples or mark a typed not-applicable value. Keep minting (`/first-party/sign`) distinct from validation (`/proxy`, `/click`, `/proxy-rebuild`). + +- [ ] **Step 4: Verify set equality and rendered prose** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- routes --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo test-fastly +cargo test-axum +cargo test-cloudflare +cargo test-spin +cd docs && npm run lint && npm run format && npm run build +``` + +Expected: no adapter can add/remove/change a route without a record and generated diff; all ownership markers are present. + +- [ ] **Step 5: Commit WP4** + +```bash +git add docs/guide/api-reference.md tools/docs-parity/manifests/routes.toml tools/docs-parity/manifests/adapter-support.toml tools/docs-parity/manifests/snippets.toml crates/trusted-server-adapter-fastly/src/app.rs crates/trusted-server-adapter-axum/src/app.rs crates/trusted-server-adapter-axum/tests/routes.rs crates/trusted-server-adapter-cloudflare/src/app.rs crates/trusted-server-adapter-cloudflare/tests/routes.rs crates/trusted-server-adapter-spin/src/app.rs crates/trusted-server-adapter-spin/tests/routes.rs docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Generate adapter API documentation" +``` + +### Task 13: Add deployment guides and recurring first-success smokes + +**Files:** + +- Modify: `docs/guide/fastly.md` +- Create: `docs/guide/cloudflare.md` +- Create: `docs/guide/spin.md` +- Create: `docs/guide/axum-dev.md` +- Create: `scripts/smoke-fastly.sh` +- Create: `scripts/smoke-cloudflare.sh` +- Create: `scripts/smoke-spin.sh` +- Create: `scripts/smoke-axum.sh` +- Modify: `.tool-versions` +- Modify: `.github/workflows/integration-tests.yml` +- Modify as fixtures, not operator sources: `crates/trusted-server-integration-tests/fixtures/configs/trusted-server.integration.toml` +- Modify as needed: `crates/trusted-server-adapter-cloudflare/wrangler.ci.toml` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/pages.toml` +- Modify: `tools/docs-parity/manifests/orphans.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` +- Modify: PR #1049 description through GitHub API/CLI + +- [ ] **Step 1: Write smoke failures before guides** + +For each adapter, add a clean-state positive scenario with exact status, stub-origin sentinel, and Trusted Server rewrite/header; add independent missing-config and per-required-secret failures with specific diagnostics. Prove health-only/status-only/degraded-router responses do not satisfy the oracle. + +Select the current stable Wrangler version at implementation time, record its +source/version, add it to `.tool-versions`, and make the Cloudflare smoke/CI +fixture fail if that pin is absent or a different executable is used. + +- [ ] **Step 2: Implement Axum and Fastly scripts** + +Axum exports the exact config/secret bridge and exercises a publisher request. Fastly runs config init/validate/local push, seeds all three `ts_secrets` entries, serves through Viceroy, asserts health plus publisher behavior, and restores `fastly.toml` in a trap. + +- [ ] **Step 3: Implement the Cloudflare bridge exactly** + +Provision/map the selected KV binding before push, run local push, read the envelope with explicit binding/namespace, double-encode with `jq`, write only gitignored generated vars/manifest files, run Wrangler, assert rewritten content, and clean up. Keep local and remote secret instructions separate. + +- [ ] **Step 4: Implement the Spin path** + +Set the required store mapping to `default`, local-push into `.spin/`, encode/export every secret variable name, run `spin up`, assert a non-health publisher response with the strong oracle, and clean all local state. If CI cannot run Spin, record owner/SHA/tool versions/expiry for recurring manual evidence. + +- [ ] **Step 5: Write the guides from the scripts** + +Every guide command must be copyable and remain in the same order as the recurring script. State maturity, fan-out, health/startup, and unwired-store limitations from `adapter-support.toml`; a successful push is not described as a configured runtime where the bridge is still required. + +Register the four new public pages immediately. Until Task 14 adds their final +navigation, give any genuinely unreachable page a typed temporary orphan entry +owned by WP5 and expiring at Task 14; Task 14 must remove that entry. + +- [ ] **Step 6: Wire runnable scripts into integration CI** + +Run `chmod +x scripts/smoke-axum.sh scripts/smoke-fastly.sh +scripts/smoke-cloudflare.sh scripts/smoke-spin.sh`. Run Axum, Fastly, and +Cloudflare smokes in the existing integration workflow after their artifacts +are prepared. Consume Wrangler from the Task 13 `.tool-versions` pin, not an +unpinned global latest. Preserve existing integration suites. + +- [ ] **Step 7: Verify focused journeys** + +```bash +bash -n scripts/smoke-axum.sh scripts/smoke-fastly.sh scripts/smoke-cloudflare.sh scripts/smoke-spin.sh +./scripts/smoke-axum.sh +./scripts/smoke-fastly.sh +./scripts/smoke-cloudflare.sh +``` + +Run Spin or attach its time-bounded evidence. Then run the integration-test parity target and docs build. + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test parity +cd docs && npm run lint && npm run format && npm run build +``` + +- [ ] **Step 8: Commit the deployment half of WP5** + +```bash +git add docs/guide/fastly.md docs/guide/cloudflare.md docs/guide/spin.md docs/guide/axum-dev.md scripts/smoke-fastly.sh scripts/smoke-cloudflare.sh scripts/smoke-spin.sh scripts/smoke-axum.sh .tool-versions .github/workflows/integration-tests.yml crates/trusted-server-integration-tests/fixtures/configs/trusted-server.integration.toml crates/trusted-server-adapter-cloudflare/wrangler.ci.toml tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/pages.toml tools/docs-parity/manifests/orphans.toml tools/docs-parity/manifests/snippets.toml docs/internal/audits/documentation-refresh-evidence.md +git ls-files --stage scripts/smoke-axum.sh scripts/smoke-fastly.sh scripts/smoke-cloudflare.sh scripts/smoke-spin.sh | awk '$1 != "100755" { bad=1 } END { exit bad }' +git commit -m "Document adapter deployment journeys" +``` + +- [ ] **Step 9: Push and publish exact smoke journeys to #1049** + +Push the clean deployment-guide commit to `origin/spec-docs-refresh` and wait for its hosted smoke jobs. Then update only the bounded `` / `` region of PR #1049's description. For Axum, Fastly, Cloudflare, and Spin, include the exact command sequence invoked by the recurring script, its generated-state and process cleanup procedure, the strong success oracle, the two independent negative cases, and the immutable run URL or time-bounded Spin receipt. Read the description back and require each script's command and cleanup sequence to match its checked snippet records; preserve every unrelated PR-description section. + +Append the readback timestamp, PR body hash, run URLs or Spin receipt, and equality result to `documentation-refresh-evidence.md`; commit it immediately as `Record adapter smoke publication` and push it. Do not include the receipt commit's own SHA in its body. + +### Task 14: Complete WP5 product coverage and navigation + +**Files:** + +- Create: `docs/guide/edgezero.md` +- Create: `docs/guide/telemetry.md` +- Create: `docs/guide/tsjs.md` +- Modify: `docs/guide/cli.md` +- Create: `docs/guide/integrations/adserver_mock.md` +- Modify: `docs/guide/integrations/gpt.md` +- Create: `docs/guide/integrations/testlight.md` +- Modify: `docs/guide/integrations-overview.md` +- Modify: `docs/guide/integration-guide.md` +- Create: `tinybird/README.md` +- Modify: `docs/.vitepress/config.mts` +- Modify: `docs/package.json` +- Modify: `.github/workflows/deploy-docs.yml` +- Read/verify: `.tool-versions` (Wrangler pin established in Task 13) +- Create/Test: `crates/trusted-server-integration-tests/tests/documentation_snippets.rs` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/integrations.toml` +- Modify: `tools/docs-parity/manifests/adapter-support.toml` +- Modify: `tools/docs-parity/manifests/cli-overrides.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` +- Modify: `tools/docs-parity/manifests/pages.toml` +- Modify: `tools/docs-parity/manifests/diagrams.toml` +- Modify: `tools/docs-parity/manifests/orphans.toml` + +- [ ] **Step 1: Generate the support matrix and inventory regions** + +Render adapter status/fan-out/startup rows and all 14 deploy IDs plus creative from checked records. Prove repeated status prose cannot diverge from the matrix. + +- [ ] **Step 2: Add missing platform/system pages** + +Write EdgeZero lifecycle/store/blob flow, telemetry plus `browser_family`/Tinybird/Fastly-only emission, tsjs 12-module/13-bundle/three-loading-mode model (including the standalone `gpt_diagnostics` tag), and adserver-mock mediator semantics from their truth sources. Render `docs/guide/cli.md` from the checked two-platform help union while preserving owned explanatory prose outside the generated region. + +- [ ] **Step 3: Complete integration journeys** + +Document GPT slot handoff, script guards, and Testlight. Replace broken integration-guide snippets with one compiling, core-neutral fixture using complete `RuntimeServices`; register every fence and expected diagnostic. + +- [ ] **Step 4: Restructure discoverability** + +Create Operator/Deployment/Reference navigation groups, make every ID reachable, enable local search and `lastUpdated`, and add prose equivalents for every diagram. Keep tombstones out of navigation and containment exclusions intact. + +- [ ] **Step 5: Add rolling-main provenance** + +Inject `GITHUB_SHA` into the build without exposing secrets, render a rolling-main banner, and make deploy-docs paths include `.tool-versions`. Add a built-output assertion for the exact supplied SHA. + +- [ ] **Step 6: Verify journeys, snippets, and publication** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- integrations --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- pages --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --check +cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test documentation_snippets +cd docs && npm run lint && npm run format && GITHUB_SHA="$(git rev-parse HEAD)" npm run build +``` + +Expected: nav/page set equality passes, banner contains the current SHA, excluded pages remain absent, all journeys/diagrams have owners, and the compiling fixture passes. + +- [ ] **Step 7: Commit the remaining WP5 checkpoint** + +```bash +git add docs/guide/edgezero.md docs/guide/telemetry.md docs/guide/tsjs.md docs/guide/cli.md docs/guide/integrations/adserver_mock.md docs/guide/integrations/gpt.md docs/guide/integrations/testlight.md docs/guide/integrations-overview.md docs/guide/integration-guide.md tinybird/README.md docs/.vitepress/config.mts docs/package.json .github/workflows/deploy-docs.yml crates/trusted-server-integration-tests/tests/documentation_snippets.rs tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/integrations.toml tools/docs-parity/manifests/adapter-support.toml tools/docs-parity/manifests/cli-overrides.toml tools/docs-parity/manifests/snippets.toml tools/docs-parity/manifests/pages.toml tools/docs-parity/manifests/diagrams.toml tools/docs-parity/manifests/orphans.toml docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Add full documentation product coverage" +``` + +### Task 15: Complete WP6 root and crate documentation + +**Files:** + +- Modify: `README.md` +- Modify: `CONTRIBUTING.md` +- Modify: `CLAUDE.md` +- Modify: `ProjectGovernance.md` +- Modify: `crates/trusted-server-core/README.md` +- Modify: `crates/trusted-server-integration-tests/README.md` +- Create: `crates/trusted-server-adapter-axum/README.md` +- Create: `crates/trusted-server-adapter-cloudflare/README.md` +- Create: `crates/trusted-server-adapter-fastly/README.md` +- Create: `crates/trusted-server-adapter-spin/README.md` +- Create: `crates/trusted-server-cli/README.md` +- Create: `crates/trusted-server-js/README.md` +- Create: `crates/trusted-server-openrtb-codegen/README.md` +- Read/verify: `crates/trusted-server-openrtb/README.md` +- Create: `scripts/README.md` +- Modify: each corresponding crate `Cargo.toml` +- Modify: `crates/trusted-server-openrtb/Cargo.toml` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` +- Modify: `tools/docs-parity/manifests/snippets.toml` + +- [ ] **Step 1: Add the failing README equality test** + +Use `cargo metadata --no-deps` to enumerate every package. Expected before edits: seven missing README files and ten package manifests missing `readme =` metadata. Include an extra/unlisted README negative fixture. + +- [ ] **Step 2: Correct canonical contributor/operator prose** + +Make root quick starts satisfy the first-success scripts; make contributing link to canonical gates; correct target/integration-model/example policy in CLAUDE; apply the selected factual-governance fallback. + +- [ ] **Step 3: Write responsibility-focused READMEs** + +Each crate README states purpose, runtime/target, important boundaries, build/test command, and links to canonical guides without copying volatile matrices. Rewrite core as an actual module overview and correct integration-test scope. Add a scripts index with inputs/side effects/cleanup. + +- [ ] **Step 4: Connect Cargo metadata** + +Add exact `readme = "README.md"` entries to the seven new crate manifests and any existing package missing the metadata. Do not alter dependency or feature resolution. + +- [ ] **Step 5: Verify** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- readmes --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo metadata --no-deps --format-version 1 +cargo fmt --all -- --check +cd docs && npm run lint && npm run format && npm run build +``` + +Expected: every package maps to an existing README and all active root/crate/skill/agent dispositions remain closed. + +- [ ] **Step 6: Commit WP6** + +```bash +git add README.md CONTRIBUTING.md CLAUDE.md ProjectGovernance.md crates/trusted-server-core/README.md crates/trusted-server-core/Cargo.toml crates/trusted-server-integration-tests/README.md crates/trusted-server-integration-tests/Cargo.toml crates/trusted-server-adapter-axum/README.md crates/trusted-server-adapter-cloudflare/README.md crates/trusted-server-adapter-fastly/README.md crates/trusted-server-adapter-spin/README.md crates/trusted-server-cli/README.md crates/trusted-server-js/README.md crates/trusted-server-openrtb-codegen/README.md crates/trusted-server-openrtb/Cargo.toml crates/trusted-server-adapter-axum/Cargo.toml crates/trusted-server-adapter-cloudflare/Cargo.toml crates/trusted-server-adapter-fastly/Cargo.toml crates/trusted-server-adapter-spin/Cargo.toml crates/trusted-server-cli/Cargo.toml crates/trusted-server-js/Cargo.toml crates/trusted-server-openrtb-codegen/Cargo.toml scripts/README.md tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/snippets.toml docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Refresh contributor and crate documentation" +``` + +### Task 16: Complete WP7 rustdoc and JSDoc + +**Files:** + +- Modify: `crates/trusted-server-core/src/lib.rs` +- Modify: the ten production files in `crates/trusted-server-core/src/platform/`: `backend_naming.rs`, `error.rs`, `http.rs`, `image_optimizer.rs`, `kv.rs`, `mod.rs`, `template_assembly.rs`, `template_cache.rs`, `traits.rs`, and `types.rs` +- Modify: `crates/trusted-server-core/src/auth.rs` +- Modify: `crates/trusted-server-core/src/constants.rs` +- Modify: `crates/trusted-server-core/src/host_rewrite.rs` +- Modify: `crates/trusted-server-core/src/html_processor.rs` +- Modify: `crates/trusted-server-core/src/http_util.rs` +- Modify: `crates/trusted-server-core/src/openrtb.rs` +- Modify: `crates/trusted-server-core/src/price_bucket.rs` +- Modify: `crates/trusted-server-core/src/proxy.rs` +- Modify: `crates/trusted-server-core/src/rsc_flight.rs` +- Modify: `crates/trusted-server-core/src/settings.rs` +- Modify: `crates/trusted-server-core/src/settings_data.rs` +- Modify: `crates/trusted-server-core/src/tsjs.rs` +- Modify: `crates/trusted-server-core/src/storage/kv_store.rs` +- Modify: `crates/trusted-server-core/src/storage/mod.rs` +- Modify: `crates/trusted-server-core/src/integrations/datadome.rs` +- Modify: `crates/trusted-server-core/src/integrations/prebid.rs` +- Modify: `crates/trusted-server-core/src/integrations/registry.rs` +- Modify: all six files under `crates/trusted-server-core/src/integrations/nextjs/`: `html_post_process.rs`, `mod.rs`, `rsc.rs`, `rsc_placeholders.rs`, `script_rewriter.rs`, and `shared.rs` +- Modify: `crates/trusted-server-adapter-fastly/src/main.rs` +- Modify: `crates/trusted-server-adapter-cloudflare/src/lib.rs` +- Modify: `crates/trusted-server-adapter-cloudflare/src/platform.rs` +- Modify: `crates/trusted-server-adapter-spin/src/lib.rs` +- Modify: `crates/trusted-server-adapter-spin/src/platform.rs` +- Modify: `crates/trusted-server-adapter-axum/src/lib.rs` when the checked WP7 inventory marks its existing crate header incomplete +- Modify: `crates/trusted-server-cli/src/lib.rs` +- Modify: `crates/trusted-server-cli/src/run.rs` +- Modify: undocumented CLI command modules recorded by the exact WP2 inventory before this task starts +- Modify: `crates/trusted-server-js/src/lib.rs` +- Modify: `crates/trusted-server-js/lib/src/core/{registry,render,types}.ts` +- Modify: `crates/trusted-server-js/lib/src/shared/globals.ts` +- Modify: `crates/trusted-server-js/lib/src/integrations/creative/*.ts` +- Modify: `crates/trusted-server-js/lib/build-prebid-external.mjs` +- Modify: `crates/trusted-server-js/lib/eslint.config.js` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/file-overview.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/exported-function.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/exported-class.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/exported-interface.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/exported-type-alias.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/exported-variable.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/default-export.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/re-export.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/alignment.ts` +- Create/Test: `tools/docs-parity/tests/fixtures/jsdoc/types.ts` +- Modify: `tools/docs-parity/manifests/tracked-files.toml` +- Modify: `tools/docs-parity/manifests/maintained-sources.toml` + +- [ ] **Step 1: Capture failing rustdoc/JSDoc evidence** + +Run the complete rustdoc matrix with `RUSTDOCFLAGS="-D warnings"`, native core doctests, and current JS lint. Record every existing failure; do not suppress a warning solely to get green. + +- [ ] **Step 2: Complete the exact Rust worklist** + +Add crate/module/item docs with correct errors/panics/examples only where they earn their keep. Repair Cloudflare/Spin store claims to state the unwired reality and link the follow-up. Keep test-only modules excluded from coverage counts. + +- [ ] **Step 3: Activate scoped JSDoc rules test-first** + +Add separate synthesized failures for file overview, exported function/class/interface/type alias/variable/default export/re-export, alignment, and types. Configure paths relative to `crates/trusted-server-js/lib`; do not accidentally impose this scope on generated/vendor files. + +- [ ] **Step 4: Document the scoped TS/MJS files** + +Add file headers and declaration docs, especially complete `core/types.ts`; document behavior, not TypeScript syntax. Keep runtime code unchanged. + +- [ ] **Step 5: Run the exact rustdoc matrix** + +```bash +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features -p trusted-server-core -p trusted-server-js -p trusted-server-openrtb --target wasm32-wasip1 +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps -p trusted-server-adapter-fastly --target wasm32-wasip1 +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps -p trusted-server-adapter-cloudflare --target wasm32-unknown-unknown --features cloudflare +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps -p trusted-server-adapter-spin --target wasm32-wasip1 --features spin +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features -p trusted-server-adapter-axum +RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features -p trusted-server-cli -p trusted-server-openrtb-codegen --target "$(rustc -vV | sed -n 's/host: //p')" +cargo test --doc -p trusted-server-core +``` + +Expected: warning-free docs and passing native doctests with Node available for the JS build script. + +- [ ] **Step 6: Run JSDoc and target regression suites** + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- jsdoc-fixtures --check +cd crates/trusted-server-js/lib && npm run lint && npm run format && npx vitest run && npm run build +cargo test-fastly +cargo test-axum +cargo test-cloudflare +cargo test-spin +``` + +Expected: all pass with no runtime behavior diff. + +- [ ] **Step 7: Commit WP7** + +Stage only the exact modified paths enumerated in this task plus the ten named +JSDoc fixtures and the evidence ledger. The WP2 inventory may add individual +CLI command modules to this list; record and stage each path explicitly. +Directory-wide `git add crates` is forbidden. + +```bash +git add crates/trusted-server-core/src/lib.rs crates/trusted-server-core/src/platform/backend_naming.rs crates/trusted-server-core/src/platform/error.rs crates/trusted-server-core/src/platform/http.rs crates/trusted-server-core/src/platform/image_optimizer.rs crates/trusted-server-core/src/platform/kv.rs crates/trusted-server-core/src/platform/mod.rs crates/trusted-server-core/src/platform/template_assembly.rs crates/trusted-server-core/src/platform/template_cache.rs crates/trusted-server-core/src/platform/traits.rs crates/trusted-server-core/src/platform/types.rs crates/trusted-server-core/src/auth.rs crates/trusted-server-core/src/constants.rs crates/trusted-server-core/src/host_rewrite.rs crates/trusted-server-core/src/html_processor.rs crates/trusted-server-core/src/http_util.rs crates/trusted-server-core/src/openrtb.rs crates/trusted-server-core/src/price_bucket.rs crates/trusted-server-core/src/proxy.rs crates/trusted-server-core/src/rsc_flight.rs crates/trusted-server-core/src/settings.rs crates/trusted-server-core/src/settings_data.rs crates/trusted-server-core/src/tsjs.rs crates/trusted-server-core/src/storage/kv_store.rs crates/trusted-server-core/src/storage/mod.rs crates/trusted-server-core/src/integrations/datadome.rs crates/trusted-server-core/src/integrations/prebid.rs crates/trusted-server-core/src/integrations/registry.rs crates/trusted-server-core/src/integrations/nextjs/html_post_process.rs crates/trusted-server-core/src/integrations/nextjs/mod.rs crates/trusted-server-core/src/integrations/nextjs/rsc.rs crates/trusted-server-core/src/integrations/nextjs/rsc_placeholders.rs crates/trusted-server-core/src/integrations/nextjs/script_rewriter.rs crates/trusted-server-core/src/integrations/nextjs/shared.rs crates/trusted-server-adapter-fastly/src/main.rs crates/trusted-server-adapter-cloudflare/src/lib.rs crates/trusted-server-adapter-cloudflare/src/platform.rs crates/trusted-server-adapter-spin/src/lib.rs crates/trusted-server-adapter-spin/src/platform.rs crates/trusted-server-cli/src/lib.rs crates/trusted-server-cli/src/run.rs crates/trusted-server-js/src/lib.rs crates/trusted-server-js/lib/src/core/registry.ts crates/trusted-server-js/lib/src/core/render.ts crates/trusted-server-js/lib/src/core/types.ts crates/trusted-server-js/lib/src/shared/globals.ts crates/trusted-server-js/lib/src/integrations/creative/click.ts crates/trusted-server-js/lib/src/integrations/creative/dynamic_src_guard.ts crates/trusted-server-js/lib/src/integrations/creative/iframe.ts crates/trusted-server-js/lib/src/integrations/creative/image.ts crates/trusted-server-js/lib/src/integrations/creative/index.ts crates/trusted-server-js/lib/src/integrations/creative/proxy_sign.ts crates/trusted-server-js/lib/build-prebid-external.mjs crates/trusted-server-js/lib/eslint.config.js tools/docs-parity/tests/fixtures/jsdoc/file-overview.ts tools/docs-parity/tests/fixtures/jsdoc/exported-function.ts tools/docs-parity/tests/fixtures/jsdoc/exported-class.ts tools/docs-parity/tests/fixtures/jsdoc/exported-interface.ts tools/docs-parity/tests/fixtures/jsdoc/exported-type-alias.ts tools/docs-parity/tests/fixtures/jsdoc/exported-variable.ts tools/docs-parity/tests/fixtures/jsdoc/default-export.ts tools/docs-parity/tests/fixtures/jsdoc/re-export.ts tools/docs-parity/tests/fixtures/jsdoc/alignment.ts tools/docs-parity/tests/fixtures/jsdoc/types.ts tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml docs/internal/audits/documentation-refresh-evidence.md +# Append `crates/trusted-server-adapter-axum/src/lib.rs` only if selected and +# each exact CLI command-module path named by the WP2 inventory. +git commit -m "Complete in-code documentation" +``` + +### Task 17: Activate final CI and release-pending controls + +**Files:** + +- Modify: `.github/workflows/format.yml` +- Modify: `.github/workflows/test.yml` +- Modify: `.github/workflows/integration-tests.yml` +- Modify: `.github/workflows/codeql.yml` +- Modify: `.github/workflows/deploy-docs.yml` +- Modify: `.github/workflows/docs-links.yml` +- Modify: `.github/dependabot.yml` +- Modify: `.tool-versions` +- Modify: `crates/trusted-server-openrtb-codegen/Cargo.toml` +- Modify: `CLAUDE.md` +- Modify: `AGENTS.md` +- Modify: `TESTING.md` +- Modify: `docs/guide/testing.md` +- Create: `docs/internal/runbooks/documentation-automation-release.md` +- Modify: `tools/docs-parity/src/{gates,workflow,dependency_snapshot}.rs` +- Modify/Test: `tools/docs-parity/tests/{gates,workflow,dependency_snapshot}.rs` +- Modify: `tools/docs-parity/manifests/{tracked-files,maintained-sources,gates,snippets}.toml` +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` + +- [ ] **Step 1: Write failing automation fixtures** + +Assert missing rc CodeQL triggers, docs-parity jobs, rustdoc/doctest jobs, nested lockfile cache inputs, Node pins, Dependabot roots, Wrangler pin, generated gate equality, action SHA pins, final `main` targets, reader/writer separation, closed manual refresh, and release-pending runbook fields. + +- [ ] **Step 2: Wire blocking deterministic checks** + +Add host docs-parity fmt/clippy/test/check, generated no-diff, settings/examples/inventory/snippets/scanner/local links/readmes/JSDoc/workflow fixtures, rustdoc matrix, native doctests, docs build, and existing target regression jobs. External network links remain scheduled, not a PR dependency. + +- [ ] **Step 3: Normalize existing automation** + +Add CodeQL `rc/*` PR triggers, `.tool-versions` deploy paths, exact setup-node lockfile paths, pinned Wrangler, all approved Dependabot roots targeting `main`, and `[lints] workspace = true`. Choose current stable action/tool versions at implementation time, cite their primary release sources, and pin every new `uses` by full SHA. + +- [ ] **Step 4: Finalize `docs-links.yml`** + +Preserve ordinary read-only PR validation. Finalize weekly `17 9 * * 1` schedule, fixed non-canceling concurrency, 30/20/5-minute timeouts, bounded artifacts, issue dedup/auto-close, fixed snapshot identity, authenticated default-branch SHA, and no-input manual refresh. Require no `pull_request_target`, `merge_group`, status writer, temporary rc target, retirement path, or caller-selected tool. + +- [ ] **Step 5: Write the release-pending runbook** + +Document exact post-main Pages/CNAME smoke, first scheduled link run, first dependency submission and 201/graph proof, Dependabot/action-pin inspection, alert owner/SLA, and optional branch-protection activation only after contexts report from expected apps. Mark every receipt release-pending; do not create another PR or claim execution from rc. + +- [ ] **Step 6: Generate all gate consumers** + +Regenerate CLAUDE/AGENTS/TESTING/guide testing from `gates.toml`. Prove command files, CONTRIBUTING, and PR template remain link-only. A second generation produces no diff. + +- [ ] **Step 7: Deduplicate all code follow-ups** + +Search the tracker for every item in the spec. File or record an exact existing-issue disposition for all twelve, with URL, owner, and labels. Do not collapse distinct adapter-store, config-bridge, health, reserved-field, placeholder, inline-secret, deploy-ID, CLI-help, telemetry, env-store, or staging-blob findings. + +- [ ] **Step 8: Run WP8 acceptance and commit** + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo run --manifest-path tools/docs-parity/Cargo.toml -- check --all +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- snippets --check +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +cargo fmt --all -- --check +cd docs && npm run lint && npm run format && npm run build +``` + +Stage exactly the enumerated files and commit: + +```bash +git add .github/workflows/format.yml .github/workflows/test.yml .github/workflows/integration-tests.yml .github/workflows/codeql.yml .github/workflows/deploy-docs.yml .github/workflows/docs-links.yml .github/dependabot.yml .tool-versions crates/trusted-server-openrtb-codegen/Cargo.toml CLAUDE.md AGENTS.md TESTING.md docs/guide/testing.md docs/internal/runbooks/documentation-automation-release.md tools/docs-parity/src/gates.rs tools/docs-parity/src/workflow.rs tools/docs-parity/src/dependency_snapshot.rs tools/docs-parity/tests/gates.rs tools/docs-parity/tests/workflow.rs tools/docs-parity/tests/dependency_snapshot.rs tools/docs-parity/manifests/tracked-files.toml tools/docs-parity/manifests/maintained-sources.toml tools/docs-parity/manifests/gates.toml tools/docs-parity/manifests/snippets.toml docs/internal/audits/documentation-refresh-evidence.md +git commit -m "Activate documentation enforcement gates" +``` + +### Task 18: Close PR #1049 implementation + +**Files:** + +- Modify: `docs/internal/audits/documentation-refresh-evidence.md` +- Modify: `docs/internal/audits/documentation-refresh-decisions.md` +- Modify: PR #1049 description through GitHub API/CLI + +- [ ] **Step 1: Reassert immutable state** + +Fetch and require `origin/rc/202608` still equals `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`, the branch contains it, PR #1049 targets rc from `spec-docs-refresh`, and the worktree has no unrelated bytes. + +- [ ] **Step 2: Run the complete local matrix** + +```bash +cargo fmt --all -- --check +cargo clippy-fastly +cargo clippy-axum +cargo clippy-cloudflare +cargo clippy-cloudflare-wasm +cargo clippy-spin-native +cargo clippy-spin-wasm +cargo clippy --package trusted-server-cli --target "$(rustc -vV | sed -n 's/host: //p')" --all-targets --all-features -- -D warnings +cargo clippy --package trusted-server-openrtb-codegen --target "$(rustc -vV | sed -n 's/host: //p')" --all-targets -- -D warnings +cargo test-fastly +cargo test-axum +cargo test-cloudflare +cargo test-spin +cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test parity +cargo test --manifest-path crates/trusted-server-integration-tests/Cargo.toml --test documentation_snippets +./scripts/test-cli.sh +cargo test --package trusted-server-openrtb-codegen --target "$(rustc -vV | sed -n 's/host: //p')" +cargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1 +cargo build --package trusted-server-adapter-spin --target wasm32-wasip1 --features spin --release +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo run --manifest-path tools/docs-parity/Cargo.toml -- check --all +cd crates/trusted-server-js/lib && npm ci && npm run lint && npx vitest run && npm run format && npm run build +cd ../../.. +cd docs && npm ci && npm run lint && npm run format && npm run build +``` + +Also run Task 16 rustdoc commands and all four Task 13 smoke/evidence paths. Record exact commands, tool versions, durations, and results. + +- [ ] **Step 3: Prove every acceptance surface** + +Record generated no-diff; classification/disposition equality; retired/privacy scans; route/settings/integration equality; snippet diagnostics; README/JSDoc/rustdoc gates; local Pages/CNAME artifact proof; first-success smokes; all follow-up issue URLs/dispositions; package commit/path review; and release-pending fields without fabricated receipts. Read PR #1049's description back through the GitHub API/CLI and require the bounded settings-parity region to equal the Appendix B checklist and the bounded adapter-smokes region to contain each of the four exact script command/cleanup sequences plus its immutable run evidence. + +- [ ] **Step 4: Commit final records** + +```bash +git add docs/internal/audits/documentation-refresh-evidence.md docs/internal/audits/documentation-refresh-decisions.md +git diff --cached --check +git commit -m "Record documentation refresh acceptance" +git status --porcelain +``` + +If records do not change, omit the empty commit but still require clean status. + +- [ ] **Step 5: Push and verify hosted checks on the exact head** + +Push to `origin/spec-docs-refresh`. Update only the bounded `` / `` region of PR #1049's description with the exact final head/base, run URLs, job/app identities, local evidence, and release-pending operations. Preserve every unrelated region. Read the final PR description back and revalidate the settings-parity and adapter-smokes regions after the final-acceptance update. Require every expected hosted job green on that SHA; a prior head does not count. + +- [ ] **Step 6: Mark implementation complete** + +Review `git diff origin/rc/202608...HEAD` path by path, require no unrelated runtime change, keep package commits unsquashed, and mark PR #1049 ready for review without opening or requesting approval on any other PR. Completion means repository implementation is finished; merge and release-pending operations remain outside this plan. + +## Final plan-to-spec traceability + +| Spec surface | Plan tasks | +| ------------------------------------------ | ---------- | +| Single-PR decisions and evidence | 1-3 | +| WP1 containment, CNAME, policy | 2-3 | +| WP8a tool, manifests, workflow foundations | 4-9 | +| WP2 truth pass | 10 | +| WP3 configuration | 11 | +| WP4 API/routes | 12 | +| WP5 deployment and product coverage | 13-14 | +| WP6 root/crate docs | 15 | +| WP7 in-code docs | 16 | +| WP8b final CI/release-pending controls | 17 | +| Final PR #1049 acceptance | 18 | + +The implementation is complete only when Task 18 verifies the exact final #1049 head. No individual implementation PR or default-branch receipt is part of this plan. diff --git a/docs/superpowers/specs/2026-08-19-documentation-refresh-design.md b/docs/superpowers/specs/2026-08-19-documentation-refresh-design.md new file mode 100644 index 000000000..09c2a09b0 --- /dev/null +++ b/docs/superpowers/specs/2026-08-19-documentation-refresh-design.md @@ -0,0 +1,1360 @@ +# Documentation Refresh (Full Surface) + +**Date:** 2026-08-19 +**Revised:** 2026-08-31 (single-PR delivery revision) +**Status:** Approved for implementation +**Written-spec approval date:** 2026-08-31 +**Written-spec approval owner:** `aram356` +**Scope:** Documentation and doc tooling. No runtime behavior changes. +**Baseline:** audited_target_tip `07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` +(2026-08-28). The bulk +inventories were regenerated by a four-track delta audit at `a163367b3` +(the main→rc merge that landed #870); the ranges `a163367b3..985ff2298` +and `985ff2298..07dfc1c6d` (56 commits total) were each audited as +focused deltas and folded in below (notably: template secret references +restored and the placeholder consumer surface widened; a duplicate +commented `[trusted_client_ip]` template block introduced; +`proxy.allowed_domains` semantics broadened to signing + initial fetch + +redirects with rc's docs updated in the same commits; the +`validate_proxy_secret_strength` runtime validator REMOVED; `--scroll` +added to `ts audit ad-templates generate`; `browser_family` added to +device signals, auction telemetry, and the Tinybird datasource; the +`EdgeTerminatedAuthorization` digest for template-cache reuse; JS +`types.ts` renamed `suppressionConsumed` to `publisherRegistrationClosed` +and `proxy_sign` returns an outcome union). +Baseline contract - a merge-base check alone false-greens when the target +advances without a rebase, so the guard is exact-tip: after fetching, +`origin/rc/202608` must equal the recorded audited_target_tip AND the +implementation branch must contain that commit; the same exact-tip +assertion (never a merge-base comparison) repeats at the final rc-PR +HEAD. If either assertion fails, rebase, re-audit the delta, and update this +spec first. Rounds 1-8 of review history live in git; this revision supersedes +their inventories and the round-21 multi-PR delivery graph. + +## Context + +Trusted Server's documentation spans the VitePress site (`docs/`), root and +per-crate markdown, in-code documentation (rustdoc, clap help, JSDoc), and +configuration templates. The original audit found systemic drift; the +release branch has since fixed a meaningful subset itself and changed the +runtime model underneath the rest. Current state at the baseline: + +**Already fixed on rc (removed from this spec's worklist):** + +- The fabricated `GET /first-party/ad` / `POST /third-party/ad` endpoints + are gone from all four pages that carried them; `api-reference.md` now + documents `POST /auction` and the `/_ts/admin/ec`, `/_ts/admin/ec/{id}`, + and `/_ts/admin/eids` diagnostics with an auth-coverage contract. +- `format.yml` now runs `vitepress build` on PRs (dead internal links fail + CI). Note the interaction: with no `srcExclude`, CI now builds all 133 + internal `docs/superpowers/**` files as site pages. +- `cli.md` covers `active-version`, `healthcheck`, `rollback`, and + `config gc`; `configuration.md` documents the secret-store migration + (all 11 secret paths), `[trusted_client_ip]`, and the config-first + `[auction.providers.]` model; `getting-started.md` was rewritten + around the blob + secret-reference flow. +- Spin no longer hardcodes the example config: startup reads the blob from + Spin's `default` KV store and resolves secret references through Spin + variables. The old blocking follow-up is closed. + +**Still open (verified at the baseline):** + +1. **Publishing and policy hygiene.** No `srcExclude` in + `docs/.vitepress/config.mts` (133 internal spec/plan files build into + the public site); `docs/guide/index.md` is 0 bytes; the nav Guide link + targets `/guide/getting-started` and a Business Value nav item points at + `business-use-cases.md` (uncited quantitative claims; presents planned + headless-browser malvertising detection as shipped while `roadmap.md` + calls it planned); `docs/public/CNAME` is the literal + `your-custom-domain.com`; `fastly.toml` carries a real personal email + (line 4), the real service id (line 10), the orphaned + `test-prebid-eids.sh` comment (line 38), and inconsistently labeled key + fixtures; `docs/package.json` is ISC and not `private`; + `docs/guide/onboarding.md` publishes internal contacts and access + guidance. +2. **Fabricated or dead content that survives.** + `architecture.md:93-104` still shows the nonexistent `RequestWrapper` + trait (also in `.claude/agents/code-architect.md:16`); `ad-serving.md:11` + still documents Equativ (also `.claude/agents/issue-creator.md:85` and + `FAQ_POC.md`; it is gone from `integration-guide.md`); + `.with_asset(...)` remains in `creative-processing.md:808` and + `integration-guide.md:84,248`; `error-reference.md:614` still says + `npm run type-check`; `configuration.md:2301` still imports the + nonexistent `settings_data::get_settings`; the auction README's rotted + route table, `providers/` directory, and APS `mock` sections; + `onboarding.md`'s dead `SEQUENCE.md` links; `TESTING.md` is still the + auction curl runbook; `FAQ_POC.md` is still false on every axis. +3. **References behind the new runtime model.** `Settings` now has 17 root + fields (new `Option`; `request_signing` and + `creative_opportunities` are also `Option`), but `configuration.md` + still has no `[consent]` or `[debug]` reference sections, documents + `[tinybird]` only inside Quick Start, and its "Key Sections" table + lists 10 of 17 roots. Docs claim reserved-field protection for both + `request_ext` and `imp_ext` while `reject_reserved_fields` guards only + `request_ext`. `adserver_mock` is doubly stranded: rc deleted its old + config subsection without a replacement page. The template now + carries a DUPLICATE commented `[trusted_client_ip]` block (lines + 73-80 and 145-151, near-identical). The CHANGELOG carries 8 + breaking `[Unreleased]` entries with inconsistent `**Breaking**` + formatting and two dead `v1.2.0` compare links (no tag exists). +4. **Adapter truth gaps.** `/health` is not registered on Cloudflare; + `/_ts/admin/eids` is a real handler on all four adapters while + `/_ts/admin/ec{,/{id}}` are registered everywhere but functional only + on Fastly (KV-backed) and key rotation returns 501 off Fastly; + Cloudflare and Spin reject multi-provider auction plans at startup + (capability `concurrent_provider_fanout = false`; dormant configs are + accepted); startup-failure behavior differs (Spin: hardened 503 router + that keeps `/health` alive; Cloudflare/Fastly: 500; Cloudflare/Axum + degraded routers answer errors on every path); `Hooks::stores()` is + implemented only by Fastly, so on Cloudflare and Spin the request-time + config/KV registries are empty - the declared `TRUSTED_SERVER_KV` + binding is never opened, Spin's `v_current_x2dkid`/`v_active_x2dkids` + variables are unreachable, the Cloudflare `platform.rs:579-592` rustdoc + describing injected handles is false, and `cloudflare.toml` is dead + config referenced by nothing live. A bare `fastly compute serve` from + the checked-in `fastly.toml` cannot start the app: the + `trusted_server_config` store is empty and `ts_secrets` lacks the three + required keys, so every non-health path returns 500. +5. **Missing coverage.** No pages exist for Cloudflare, Spin, or Axum + deployment, EdgeZero, telemetry/Tinybird, tsjs, GPT slot handoff, + script guards, parity testing, or `adserver_mock`; seven of ten crates + have no README; the integration guide's snippets still do not compile + (`RuntimeServices` omissions, `fastly::http` import in core-neutral + code); `integrations-overview.md` covers 7 of 14 IDs. +6. **No enforcement beyond the new docs build.** No `cargo doc` in CI, + doctests never run (cross-compile only), no parity between code and the + hand-maintained inventories, `eslint-plugin-jsdoc` inert, + `openrtb-codegen` missing `[lints] workspace = true`, the PR template + still says `tracing`, and the slash-command files omit Spin/parity + gates. + +Appendices A-E carry the regenerated inventories with citations. + +## Decision + +Treat documentation as a product surface with a defined source of truth per +artifact, fix the verified-open findings in eight work packages, and add +enforcement, including executable parity checks bound to the reader-facing +markdown, so drift is caught by CI instead of by the next manual audit. +Every claim in the refreshed docs must be verifiable against code at the PR +HEAD's merge base with `rc/202608`; anything aspirational is labeled or +removed; adapter support claims come from an owned support matrix grounded +in current operational evidence. + +The source-of-truth map: + +| Artifact | Truth source | Consumers | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- | +| HTTP API reference | Adapter route tables and entry points (`adapter-*/src/{app,main,lib,platform}.rs`) + core handlers | Publishers, partners | +| Config reference | `Settings` (17 roots, `deny_unknown_fields`) + the typed per-integration configs + the provider profile schemas (`PROFILE_REGISTRATIONS`) + `secret_fields()` | Operators | +| CLI reference | The built `ts` binary's recursive `--help` tree (Linux + macOS) | Operators | +| Integration pages | The named inventories in Appendix C: deploy IDs (14), registry `builders()` (11), plan registrations (prebid, aps), profile registry (3), mediator (`adserver_mock`), JS modules (12) and bundles (13) | Publishers, integrators | +| Integration guide snippets | A compiling sample integration (`testlight` or a doc-tested fixture) | Integrators | +| Deployment guides | Adapter manifests + per-adapter startup paths (Appendix D) + support matrix | Operators | +| Architecture | `Cargo.toml` workspace members + `core/src/platform/` + `AuctionPlan` | Contributors | +| Test/CI docs | `.cargo/config.toml` aliases + `.github/workflows/*` | Contributors | + +## Source sets + +Truth-pass acceptance and parity checks operate on defined source sets: + +- **Active public set:** everything VitePress builds (`docs/**` minus the + WP1 `srcExclude` list). +- **Active repo set:** root markdown (`README.md`, `CONTRIBUTING.md`, + `TESTING.md`, `CHANGELOG.md`, `FAQ_POC.md` until its selected WP2 + disposition moves or removes it, `ProjectGovernance.md`, `AGENTS.md`, + `CLAUDE.md`), crate READMEs, config + templates (`trusted-server.example.toml`, `fastly.toml`, `edgezero.toml`, + `.env.example`, `.env.dev`), and `.claude/commands/*.md`. +- **Active maintained internal set:** `docs/README.md`, `docs/internal/**` + (including the moved onboarding page), `docs/epics/**` (maintained + internal records), `docs/business-use-cases.md` while excluded-but- + tracked, `scripts/README.md`, `tinybird/README.md`, and + `tools/docs-parity/README.md` once created, and human-facing comment + regions DISCOVERED across all tracked operational files rather than a + narrow directory list: `.github/workflows/**`, `.github/actions/**`, + issue forms, every tracked `**/*.sh` usage header (crate-local scripts + included - `crates/trusted-server-openrtb/generate.sh:23` already + carries a false claim that `.cargo/config.toml` defaults to wasm32, + which WP2 repairs), `.cargo/config.toml`, and the comment surfaces of + the adapter manifests (`fastly.toml`, + `wrangler.toml`, `wrangler.ci.toml`, `spin.toml`, `axum.toml`, and + `cloudflare.toml` until retired), `.claude/skills/**`, + `.claude/agents/**`, and `.github/pull_request_template.md`. The + candidate universe is mechanical and complete: it is derived from the + all-tracked text/binary classification manifest (WP8a) - EVERY tracked + file classified as text is a candidate (a path whitelist cannot + recognize an extension it does not know; `.mjs` build scripts and the + human-facing `.proto` documentation are real examples outside any + whitelist), and every candidate must carry an explicit include or + typed-exclude disposition in the checked maintained-source manifest + (`{path, mode, selector}`; whole-file vs comment-region). Comment + regions are closed the same way files are: every comment-region file + class needs a supported comment extractor (fail closed when none + exists for a class), and EVERY extracted comment span must be + included or typed-excluded - so a new human-facing comment added + outside an existing selector fails the gate rather than passing + because its file is already classified. An unclassified candidate or + span fails the gate, so a new Dockerfile or + unfamiliar operational format cannot silently fall outside the + universe; the path rules below are the default include hints, not the + universe. The WP8b inventory gate asserts final set + equality, with negative fixtures for a new operational extension and + a comment outside an existing selector. +- **Pre-commit set semantics:** "tracked" means visible in the Git index. + Record `package_start_head = HEAD` before editing a package. Before any + package checkpoint runs classification, generation, or parity checks, fully + stage every intended add/modify/delete with exact pathspecs; intent-to-add is + forbidden because it does not expose the candidate blob CI will see. Derive + the package delta from + `git diff --cached --name-status "$package_start_head"`, not from the set of + all index entries, and reject every changed path outside the package's + reviewed path list. Reject every non-ignored untracked path and every + unstaged tracked change anywhere in the repository (`git diff --quiet` must + pass). Checks may read working-tree bytes, but those bytes must equal the + index/HEAD candidate for the complete repository. After + generated output or the evidence ledger changes, restage the exact paths and + repeat the affected checks and cached-diff review. This makes the local + pre-commit candidate identical to the committed universe CI sees; checks + must never run against placeholder index entries or stale staged content. +- **Historical set:** `docs/superpowers/**` and shipped `CHANGELOG.md` + release entries. Exempt from retired-term greps only; privacy/secret + scanning covers ALL tracked files (see WP2). + +## Goals + +- Every endpoint, config key, command, flag, crate name, and code path + named in active-set documentation exists at the baseline, with + per-adapter availability stated where behavior differs. +- Every shipped operator- or publisher-visible surface is documented: all + 14 deploy-validated integration IDs, all 17 config roots, the provider + profile model, the adapters (with evidence-based maturity labels), all + `ts` commands, telemetry, and tsjs. +- The adapter support model is truthful and mechanically canonical: a + checked adapter-support record renders the matrix and every repeated + status summary. +- The public site publishes only intended pages, containment reaches the + live site (Pages deploys only from `main`), and internal details are + scrubbed from the public repository regardless of build exclusion. +- Sensitive real-world values are removed or covered by the typed, + expiring allowlist. The `fastly.toml` `service_id` is its one approved, + time-bounded exception: `aram356` owns it until it expires at + `2026-09-30T00:00:00Z`. Check mode fails at or after that instant. Renewal + requires a reviewed, committed replacement before expiry. This is not the + ops migration deadline. +- CI catches regressions: docs build (already live on rc), rustdoc with + broken-intra-doc-link denial, doctests, and semantic parity bound to the + reader-facing markdown. + +## Non-goals + +- No runtime behavior or public-API changes. Code defects found by the audits + are follow-ups (list below), not in-scope work. A behavior-preserving private + test seam or private route-descriptor extraction is allowed only where WP4 + needs the production route registration set to be asserted directly; it + must preserve before/after route, method, predicate, status, and startup + behavior exactly and pass every adapter regression suite. All other parity + work is tests/tooling only. +- No new documentation toolchains beyond the `tools/docs-parity` dev + tool and the SHA-pinned external link-checker action. +- No rewrite of `business-use-cases.md` marketing copy: it is excluded + from the build via `srcExclude` and carries a source-level unverified + banner (WP1). Question 4 is closed to this disposition - an + evidence-based rewrite is not an option inside this refresh, because + the approved scope does not remove the exclusion, restore navigation, or + smoke the page; republishing it is a separate future publishing effort with + its own design and acceptance. `roadmap.md` gets a + factual status pass only. +- No release management. The 8 breaking `[Unreleased]` entries are a + maintainer decision; the deterministic no-release CHANGELOG edit is: + normalize the `**Breaking**` marker formatting, keep `[1.2.0]` with a + "(tag v1.2.0 was never published)" annotation, remove its dead link + reference, repoint `[Unreleased]` to `v1.1.0...HEAD`. If a release lands + before merge, rebase and re-audit. +- No accessibility audit gate (stock VitePress theme); WP5 ships diagram + prose equivalents, local search, and `lastUpdated`. +- Not chasing 100% rustdoc coverage. "Full surface" for in-code docs means + the WP7 worklist plus the known-false rustdoc repairs (e.g. the + Cloudflare `platform.rs` stores claim), not every item. + +## Delivery shape + +All repository changes for this refresh are delivered through the existing +`spec-docs-refresh` branch and PR #1049, which continues to target +`rc/202608`. No containment, CNAME, controller, activation, or release-handoff +implementation PR is created. PR #1104 was closed as superseded; its reviewed +containment commits are transferred to #1049 before the next package starts. + +### Single-PR boundary + +PR #1049 contains: + +- this design, the implementation plan, decisions, and evidence ledger; +- public-site containment, CNAME deletion, and all WP1-WP7 documentation; +- the standalone `tools/docs-parity` tool, manifests, fixtures, and generated + records; +- the final steady-state CI, external-link, dependency-snapshot, and + Dependabot configuration; +- release-time operational instructions for effects that cannot occur while + the change exists only on `rc/202608`; and +- one reviewable commit or small non-squashed series per package, with + immediately adjacent evidence-only commits when final identifiers cannot be + recorded inside the package commit. + +Every package starts from a clean tree, records its start SHA, stages an exact +path allowlist, rejects untracked or unstaged candidate bytes, runs focused and +repository-wide checks required by that package, and ends clean. All package +commits are pushed to PR #1049. No implementation commit is routed through an +individual PR. + +The immutable implementation baseline remains +`07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf`. Before the next package and at +final PR head, fetch `origin/rc/202608` and require both exact-tip equality and +ancestry. If the target advances, stop, audit the complete delta, update this +design and its checked records, and re-review before continuing. + +### Publishing and CNAME behavior + +The containment delta and CNAME deletion are ordinary commits in #1049: + +- `srcExclude` covers `superpowers/**`, `internal/**`, `epics/**`, + `guide/onboarding.md`, `README.md`, and `business-use-cases.md`; +- the Guide landing and required navigation edits ship in the same PR; +- onboarding moves to `docs/internal/onboarding.md` and is scrubbed even though + that destination is excluded; +- `docs/public/CNAME` is deleted and the project-path VitePress base is + retained; and +- the placeholder CNAME is never restored by rollback. + +GitHub Pages deploys only from `main`. Therefore #1049 acceptance proves +containment and project-path behavior from a clean local/CI VitePress build, +including exact included/excluded artifact assertions and link checks. It does +not claim a live Pages deployment while the PR targets rc. After the normal rc +release reaches `main`, the release owner runs the same URL/content matrix and +records the deployment SHA, response headers, canonical URLs, and CNAME +behavior. Those receipts are release evidence, not a prerequisite for +finishing this PR. + +### Final-state automation + +The superseded multi-stage controller and independent default-branch delivery +machinery are not part of this program. They existed only to protect delivery +PRs that this design no longer uses. + +PR #1049 instead commits one final steady-state automation design: + +1. Pull-request jobs use `pull_request` and read-only permissions. They execute + deterministic docs-parity, generation, docs, rustdoc, doctest, JS, and + workflow-policy checks on #1049 without secrets or write tokens. +2. Scheduled external-link checking and dependency-snapshot submission are + defined in their final `main` form. Scheduled jobs run only from the default + branch, so they remain operationally dormant until the rc release reaches + `main`. +3. The scheduled link reader has `contents: read` only and emits a bounded, + schema-validated artifact. A separate no-checkout reporter has only the + issue permission it needs, deduplicates one owned issue, and auto-closes it + after a clean scheduled run. +4. Dependency snapshot generation reads the authenticated default-branch + source and emits a bounded, schema-validated artifact. A separate + no-checkout writer has only `contents: write` and submits the fixed + detector/correlator identity after revalidating the artifact and source SHA. +5. Manual refresh accepts no caller-supplied executable or tool SHA. It runs + the workflow and tooling committed on the authenticated default branch. +6. Every action is pinned by full SHA; event, permission, checkout, cache, + artifact, archive-member, path, mode, symlink, size, and schema invariants + are enforced by static negative fixtures. + +The final workflow has no `pull_request_target`, status-attestation writer, +caller-selected validation source, protected-file lifecycle state machine, or +merge-queue-specific bypass surface. An unexpected `pull_request_target`, +`merge_group`, status write, PR-code checkout in a writer, or caller-selected +tool SHA fails the checked workflow policy. + +The final dependency configuration targets `main`. It has no temporary +`rc/202608` Dependabot roots or snapshot identity to retire. The first real +scheduled link run and dependency submission occur only after the normal +release makes these files part of `main`. Release acceptance records the run +and graph receipts; no follow-on implementation PR is required. + +### Branch protection and merge queues + +PR #1049 does not mutate `main` branch protection, seed statuses on unrelated +PRs, disable merge queues, request a bypass, or claim that a workflow absent +from `main` is already required there. Hosted checks on the exact #1049 head +are recorded as implementation evidence. + +At the normal rc-to-`main` release, the release owner may make the final +documented check contexts required only after confirming that each context has +reported successfully from the expected GitHub App on the released commit. +Any branch-protection change is an external release operation, not an +individual implementation PR and not part of #1049 completion. Merge-queue +support remains out of scope; enabling a queue with new required-check +semantics requires its own future design. + +### Evidence and completion + +The repository evidence ledger is the system of record for #1049. It records +the exact baseline and package SHAs, commands, generated no-diff proofs, +hosted check URLs, smoke results, typed exceptions, and follow-up issues. +Fields for live default-branch behavior are explicitly labeled +`release-pending`; they are never filled with local substitutes. + +This refresh is implementation-complete when: + +- every WP1-WP8 repository package is committed and pushed to #1049; +- the final #1049 head still satisfies the exact rc-baseline contract; +- all required local and hosted checks for that head are green; +- generated output is byte-stable on a second run; +- the worktree is clean; +- all follow-up issues have exact URLs or deduplicated dispositions; and +- the release runbook contains the post-`main` Pages, scheduled-link, + dependency-graph, and optional branch-protection verification steps. + +Merging #1049, releasing rc to `main`, changing repository protection, and +observing the first default-branch schedule are external release operations. +They are not falsely reported as completed repository work. This distinction +keeps the single PR executable without weakening the evidence standard. + +Platform semantics are revalidated when the final workflows are written: +GitHub scheduled workflows use the default-branch version; pull-request jobs +receive read-only permissions unless explicitly narrowed otherwise; +dependency submission requires `contents: write`; and default-branch +Dependabot configuration becomes active only after release. The implementation +uses GitHub primary documentation as the source for those assertions. + +## Work packages + +### WP1: Publishing and policy hygiene + +- `srcExclude` + onboarding move/scrub + Guide landing page + nav edits + (contents fixed in Delivery shape) land directly in #1049. The package + asserts the exact excluded and required artifact sets from a clean build. +- `business-use-cases.md` gains its source-level unverified banner + (asserted by WP1 acceptance). +- Delete `docs/public/CNAME` and re-smoke the project URLs. The rejected + custom-domain branch would require `base: '/'`, + Pages/DNS/TLS setup, canonical+asset smokes, and a + project-owned-public-domain allowlist classification. The custom-domain + branch also inventories hard-coded Pages URLs (e.g. `README.md:11`) rather + than testing only canonical and asset responses. #1049 proves project-path + output locally and in CI; the live project-URL smoke is release-pending + until the rc changes reach `main`. +- `fastly.toml`: empty `authors` list; label the key fixtures + consistently as local test fixtures; comment the four KV stores; remove + the `test-prebid-eids.sh` comment. `service_id` stays under its + owner-controlled allowlist entry until it expires at + `2026-09-30T00:00:00Z`. Check mode fails at or after that instant; renewal + requires a reviewed, committed replacement before expiry. This is not the + ops migration deadline. +- `docs/package.json`: `"private": true`, license Apache-2.0. +- `CLAUDE.md` policy amendment lands HERE (not WP6): the sensitive-data + policy gains the owner-approved exception taxonomy (vendor URL, + hash-pinned fake-credential fixture, historical example, service ID, + project-owned public domain - each with owner, rationale, expiry), so + the scanner and every later checkpoint rely on a policy that is already + canonical rather than knowingly violating the written one until WP6. +- `.github/pull_request_template.md`: `tracing` → `log`; test-plan gates + become a link to the canonical gate region (link-only mode). +- `.claude/commands/*.md` converted to link-only gate references; + `AGENTS.md` gets a generated gate region (it is the fallback for agents + that cannot read `CLAUDE.md`, so it carries the list). + +Acceptance: a clean `vitepress build` contains none of the excluded pages and +contains the required Home, Guide, and reference artifacts with expected +content; the project-path base is preserved; the CNAME is absent; the banner +is present; no internal contacts or access instructions remain anywhere in +the repository; and every command file links to, rather than copies, the +canonical gates. The live Pages and CNAME smoke is explicitly release-pending. + +### WP2: Truth pass over existing content + +Disposition-based: every document in all three active sets (public, +repo, and maintained internal - root markdown, config templates, +`edgezero.toml`, env files, and command files included) gets +verified / rewrite / retire / created recorded in a +checked inventory under `docs/internal/audits/`, stamped with the audited +merge-base SHA, with source anchors; non-page surfaces get region-level +dispositions. The inventory is an audit record; the WP8 gates are the +continuing control. Executable fences are governed by the WP8a snippet +manifest (all languages, graded modes, expiring waivers). + +Content items (all verified open at the baseline): + +- Remove `RequestWrapper` from `architecture.md` (replace with the real + platform traits) and from `.claude/agents/code-architect.md`; remove + Equativ from `ad-serving.md` (rewrite the page around the real flow), + `.claude/agents/issue-creator.md`, and via the `FAQ_POC.md` handling + below; remove `.with_asset(...)` (closes #277); fix `npm run +type-check` and the `settings_data::get_settings` example (the exported + loader path); retired-token cleanup for maintained agent files happens + here so WP2's own checkpoint grep can pass. +- Reserved-field truth fix: docs claim `request_ext` and `imp_ext` + protection; code guards only `request_ext`. Fix the docs to match code + and file the follow-up asking whether `imp_ext` should be guarded. +- Auction README repairs (route table by symbol name, real provider + layout: `AuctionPlan`, `PROFILE_REGISTRATIONS`, `GenericOpenRtbProvider`, + mediator; remove the removed-`mock` sections). +- Archive `FAQ_POC.md` at `docs/superpowers/archive/FAQ_POC.md`, leaving no + active-set page or route. The rejected alternatives were deletion of the + root file or a factual rewrite moved to `docs/guide/faq.md`. A rewrite would + carry its own acceptance: every answer is verified against code, `/guide/faq` + appears in `pages.toml`, is reachable from the Guide landing page and + Reference navigation, and its built HTML is smoke-tested. The root path is + removed from the active-repo inventory after any branch; rewrite moves the + document into the active public set, while retire and archive leave no + active-set page; + replace `gam.md`/`kargo.md` with tombstone content (routes preserved + unconditionally, `tombstone` orphan-allowlist kind, old-route smokes). +- `TESTING.md` rewritten as the test-matrix index; the auction runbook + verified-then-rewritten into `docs/guide/auction-testing.md`. +- CHANGELOG: the deterministic no-release edit (Non-goals) plus the + missing operator-visible entries check. +- Environment files: `.env.example`/`.env.dev` retired-key cleanup and the + two-surface model (runtime variables vs `ts config` overlay). +- Fictional-data pass with the typed allowlist (vendor URL / hash-pinned + fixture / historical / service ID / project-owned public domain), owner + - rationale + expiry per entry; scanning covers ALL tracked files + (negative fixtures are synthesized at test time, never checked in); + remediation of non-document fixtures (e.g. the scraped + `html_processor.test.html`) is owned here with regression tests re-run; + rotation/history-rewrite decisions escalate per finding. +- Human-facing workflow/script comment repairs: the Spin release-build + comment (claims env overrides fix embedded settings; startup now reads + the KV store), the `test-cli` comment, and + `crates/trusted-server-openrtb/generate.sh:23` (both claim a workspace + default wasm32 target that `.cargo/config.toml` explicitly does not + set). +- Roadmap status pass (shipped/active/deferred; also reconcile the + malvertising-detection claim with `business-use-cases.md`). +- Verified dispositions for the docs rc updated inside the audited + deltas (`allowed_domains` semantics in `configuration.md` and + `first-party-proxy.md`, the `/first-party/sign` 403 + `href`/`base` + contract in `api-reference.md`, the softened `proxy-signing.md` + recommendation, the cli.md `--staging` known-limitation callout): + confirm each against code rather than re-writing. + +Acceptance: checked-in inventory complete over all three active sets; +the retired-token scan covers exactly those active sets (the Historical +set remains exempt as defined above) and is case-insensitive and whitespace-tolerant +(`rg -i` for prose identifiers; pattern classes for spacing variants such +as `mock\s*=\s*true`) for `RequestWrapper`, `Equativ`, `with_asset`, +`type-check`, `settings_data::get_settings`, `SEQUENCE.md`, +`synthetic_id` (outside shipped changelog entries), +`TRUSTED_SERVER__SYNTHETIC__` (the retired env-overlay root in +`.env.example`/`.env.dev`, with its own synthesized regression fixture), +and the APS `mock` key, returning nothing; the all-tracked privacy scan is clean modulo the +allowlist; checkpoint scope = surfaces this package touches, full-set +greps re-run at final HEAD. + +### WP3: Configuration reference completion + +Parity with the 17-field `Settings`, the typed integration configs, the +provider profile schemas, and the secret model. + +- `configuration.md`: add the missing `[consent]` and `[debug]` reference + sections; promote `[tinybird]` from Quick Start prose to a reference + section; complete the "Key Sections" table to all 17 roots; extend + Integration Configurations from 5 to all 14 IDs (audit the existing + five against the field inventory); generate the + `[auction.providers..profile_config]` reference from the three + typed profile schemas (each profile's fields, defaults, timeout + defaults, byte/depth/key limits, endpoint canonicalization, reserved + fields). +- `trusted-server.example.toml`: the template already carries commented + blocks for every root (`[consent]` L151, `[rewrite]` L141, + `[tester_cookie]` L147, `[image_optimizer]` L209, + `[[proxy.asset_routes]]` L183, osano L507 at the baseline), so the work + is an exact present/missing/repair inventory, not block creation: + validate every block against the field inventory, and REMOVE the stale + recommendations - the template still suggests the four legacy store + selectors (`proxy.asset_routes.auth.secret_store`, + `tinybird.secret_store`, + `integrations.datadome.server_side_key_secret_store`, + `integrations.datadome.protection_test_bypass.credential_secret_store`) + that the code accepts-and-discards and the migration guide tells + operators to delete, and remove the duplicate commented + `[trusted_client_ip]` block (the delta introduced a second, + near-identical copy). Preserve the template's contract: placeholder + strings stay in the rejection constants' exact forms and secret + references carry key names, never values. The literal-string consumer + surface is wider than three call sites since `985ff2298`: the config.rs + template tests, the CLI ad_templates substitutions, `config init`, the + audit `generate`/`validate` commands, and + `scripts/template-cache-local-test.sh` all splice on exact strings - + the WP8a harness enumerates these consumers and CI fails when a + placeholder change strands one. +- Directional field dispositions as independent axes, not a flat + "one of" (real fields overlap: `S3SigV4AuthConfig.secret_store` is + simultaneously deprecated, skip-serializing, and normalized away) - + lifecycle (canonical / deprecated / rejected), key identity + (canonical / alias, with `alias_of` - `s3_sig_v4` is a + production-discovered alias; `pub_id` occurs only on a `#[cfg(test)]` + legacy type and is excluded from the production inventory, while + `S3SigV4AuthConfig.secret_store` is a deprecated accepted field, not an + alias), serialization (serialized / skipped), + runtime (active / normalized-away / deserialization-only), and secret + handling (store-resolved / deliberately-inline / none); removed + validators get a `rejected`/removed disposition too - the delta + deleted `validate_proxy_secret_strength` (no 32-byte runtime + enforcement remains; `proxy-signing.md` was already softened to a + recommendation on rc, which WP2 verifies rather than rewrites); the + generated reference renders every applicable axis, so + `tinybird.access_token_secret` reads as deprecated + skipped + + normalized-away simultaneously. `tinybird.access_token_secret` is + accepted-but-normalized-away (deserialized, then set to `None` and + never serialized) - not a deliberately inline secret; only + `trusted_client_ip.shared_secret` currently holds that classification. + Deprecated, ignored, and deserialization-only paths are documented as + such and never promoted into the template as normal fields. +- Secret-model documentation: classify every `Redacted` path with its + directional disposition - store-resolved (the 11 `secret_fields()` + entries), deliberately inline (`trusted_client_ip.shared_secret`, with + exposure guidance), or accepted-but-discarded + (`tinybird.access_token_secret`); the + migration section already on rc gets a verified disposition. CLI/config + pages warn that `ts config diff`/`--dry-run`/push output can print + inline-secret values. +- The extractor-based field inventory (WP8a) carries semantics: resolved + defaults via the literal-AST + companion-manifest + compiled-probe + chain; requiredness; grammars; ranges from `#[validate]`; every custom + validator in Appendix B's inventory gets a companion entry with + positive/negative probes, fail-closed on unclassified validator + functions; `serde(skip)` fields never become documented paths; + canonical keys vs deprecated production aliases (`s3_sig_v4`); aliases on + `#[cfg(test)]` legacy types such as `pub_id` are excluded. + +Acceptance: every canonical-runtime-active field path appears in +template and reference; deprecated/ignored/deserialization-only paths +appear only with their directional disposition stated; every +deploy-validated ID has a config subsection matching its struct; the +WP8a harness passes; the parity checklist (Appendix B) is in the PR +description. + +### WP4: API reference completion + +rc already rebuilt much of the reference; this package brings it to the +contract standard and binds it to generated regions. + +- Route/availability tables become generated regions from the checked + route inventory (Appendix A), which records per-adapter availability + (Cloudflare lacks `/health`; `/_ts/admin/eids` real on all four; + `/_ts/admin/ec{,/{id}}` registered everywhere, functional only on + Fastly; key rotation 501 off Fastly; EC partner API, tester cookies, + and JA4 debug Fastly-only), method shapes (page-bids GET plus + denied-OPTIONS; sign/proxy-rebuild GET+POST; identify GET+OPTIONS), + the seven-method publisher fallback, and route families (literal / + template / config-derived / conditional with config source or + predicate - Prebid `script_patterns`, prefix overrides, APS renderer + route only in `trusted_server` rendering mode). +- Per-endpoint contract checklist for manually owned prose (auth, + schemas, response codes, cache/CORS, config gates, rate limits, + examples), with explicit ownership markers; `/first-party/sign` (mints) + vs `/proxy`/`/click`/`/proxy-rebuild` (validate) stay distinguished. +- Startup-failure behavior documented per adapter (Spin hardened 503 with + live `/health`; Cloudflare/Fastly 500; degraded-router differences). +- `trusted_client_ip` documented as middleware (sanitization on all + adapters, IP resolution only on Fastly), not a route. +- Route parity is mechanically closed over all four adapters, not just + Cloudflare: Fastly, Axum, and Spin expose named route collections that + the per-adapter tests snapshot directly; Cloudflare's inline + `build_router` chain is parsed by `docs-parity` with a fail-closed + grammar that expands the known constants and loops (path arrays, + `publisher_fallback_methods()`) - an unrecognized construct fails the + check rather than undercounting. Each adapter's snapshot covers the + full route set, methods, predicates, unsupported/guarded semantics, + and the startup-error router behavior, asserted as set equality + against the checked inventory - a new route on any adapter fails CI + until the inventory and generated regions update. + +Acceptance: generated regions match the checked inventory per adapter; +contract checklist satisfied; manual-ownership markers present. + +### WP5: New coverage pages and navigation + +- Deployment guides grounded in the audited startup paths, each with a + first-success smoke that provisions BOTH halves (config store and + secret store) from clean state: + - `fastly.md` additions + quick start: init/validate → + `ts config push --adapter fastly --local` → seed the three required + `ts_secrets` keys (exact copyable edit of + `[local_server.secret_stores.ts_secrets]` entries) → + `fastly compute serve` → `/health` → publisher request against a + stub origin → restore the mutated `fastly.toml`. All guide commands + are exact and copyable; "seed the keys" prose is not acceptance. + - `cloudflare.md`: an executable bridge, not a concept. Decided + retrieval path: after `ts config push --adapter cloudflare --local`, + read the envelope back from local Wrangler KV with an explicit + binding selector (the guide first defines the binding strategy: the + config store gets its own provisioned namespace mapped via + `EDGEZERO__STORES__CONFIG__TRUSTED_SERVER_CONFIG__NAME`, or reuses + the existing `TRUSTED_SERVER_KV` namespace with that mapping - one + of the two is chosen and provisioned before the first push, so the + clean-state journey never pushes into an unmapped namespace): + `wrangler kv key get trusted_server_config --binding +--local` (or `--namespace-id`), then double-encode it into + `{"app_config": ""}` with `jq`, and write it into a + gitignored generated manifest (the `wrangler.ci.toml` + + single-placeholder substitution pattern the integration harness + uses) or `.dev.vars` for `wrangler dev`; remote deploys set the var + via the dashboard/`wrangler` and provision secrets with + `wrangler secret put ` (a production flow - local secrets come + from generated `[vars]`/`.dev.vars`, never `secret put`). `--local` + variants are the documented default to prevent accidental remote + writes; cleanup removes the generated files. The guide carries the + exact copyable commands, warns that a green push does not configure + the Worker, and notes no `/health`, the single-provider restriction, + and the unwired request-time `TRUSTED_SERVER_KV`. The smoke + terminates with a publisher request asserting EXPECTED rewritten + content, not merely a response - the degraded error router also + answers, so status-only checks false-green. The preferred end state + is the CLI envelope-export follow-up, which retires the KV + read-back. + - `spin.md` (now writable - the runtime fix landed): `ts config push +--adapter spin --local` with the required + `EDGEZERO__STORES__CONFIG__TRUSTED_SERVER_CONFIG__NAME=default` + mapping (push writes SQLite under `.spin/`; runtime reads store label + `default` - the mismatch footgun is documented), Spin variable names + generated from the operator's key names via the encoder (empty + defaults fail closed; exact copyable `SPIN_VARIABLE_*` exports or + provider config), `spin up`, a non-health request, cleanup. + Maturity label from current evidence: experimental - no + integration-test environment, single-provider only, request-time + config/KV stores unwired. + - `axum-dev.md`: local development only; the env-var config/secret + bridge with exact variable names; read-only admin EIDs available, + key rotation and EC KV lookups not. +- Support matrix from a checked adapter-support record (generated regions + everywhere adapter status is stated), including provider fan-out + capability and startup-failure behavior columns. +- `edgezero.md` (manifest, stores, blob flow, lifecycle commands), + `telemetry.md` (+ `tinybird/README.md`; emission Fastly-only; covers + the new `browser_family` column through device signals, auction rows, + and the Tinybird datasource), + `tsjs.md` (module system including the third loading mode: + `gpt_diagnostics` standalone tag; 12 modules / 13 bundles), + `integrations/adserver_mock.md` (as the mediator, with + `auction.mediator` context - its old config subsection was deleted on + rc), GPT slot handoff in `gpt.md`, script guards in the integration + guide (closes #341), `testlight` reference section, compiling snippet + source for the integration guide. +- `integrations-overview.md` extended to 14 IDs + the creative row from + the capability record. +- Navigation restructure (Operator/Deployment/Reference groups), local + search, `lastUpdated`, rolling-main banner with build-SHA provenance + (`GITHUB_SHA` injected; smoke asserts it), diagram prose equivalents + with a checked inventory, journey walks in acceptance. +- CLI reference from the two-platform help union; description text passes + the internal-term gate with the expiring override table. + +- Every smoke shares one strong oracle - exact expected status, a + stub-origin sentinel present in the response, and an expected Trusted + Server rewrite or header proving the app (not a degraded router) + served it - plus INDEPENDENT negative cases per adapter, each with a + diagnostic matcher: (i) missing config blob fails with the expected + startup/config diagnostic; (ii) each required secret key, missing or + unresolved, fails for its expected reason; and a failure caused by an + unrelated launcher, origin, or port error satisfies neither case. One + negative run cannot stand in for both halves - both the config + handoff and the secret handoff must be proven live. This matters + concretely: Fastly's `/health` short-circuits before app construction + and succeeds while startup is broken, and Spin's degraded router + answers every publisher path with a valid 503, so status-or-response + checks false-green on both. Axum's smoke is the same full clean-state + sequence (export config + secret vars, launch, assert), not a list of + configuration facts. +- The four first-success journeys become recurring smoke scripts + (`scripts/smoke-{axum,fastly,cloudflare,spin}.sh`), each starting from + the documented CLI commands (not the harness's internal shortcuts - + today's Cloudflare integration coverage bypasses the push path), wired + into the integration-test workflow where runnable (Axum, Fastly, + Cloudflare). If Spin cannot run in CI, its manual evidence carries a + named owner, tested SHA and tool versions, and an expiry date - one PR + run is not continuing enforcement. + +Acceptance: every ID documented and nav-reachable; every adapter guide +consistent with the support record; snippets compile; `vitepress build` +green; search/banner/diagram/journey assertions recorded; the smoke +scripts pass in CI (Spin per its evidence contract); each adapter +smoke's exact commands and cleanup recorded in the PR description. + +### WP6: Root markdown and crate READMEs + +- Audit every existing root/crate/skill/agent document (deep audit here; + WP2 already removed falsehoods): `README.md` quick starts must satisfy + the first-success contracts; `CONTRIBUTING.md` refresh (link-only gate + reference); `CLAUDE.md` corrections (no workspace default target; the + integration-system section predates the plan model; `# Examples` + standard reconciled to the earn-their-keep rule; vendor-endpoint + exception sentence); integration-tests README fixes; governance doc + intent statements. +- New READMEs for the seven crates lacking one, plus `scripts/README.md`; + core README rewritten as a real overview; `readme =` keys in Cargo.toml. + +Acceptance: every `cargo metadata` package has a README; dispositions +recorded; quick-start journeys proven. + +### WP7: In-code documentation + +Worklist (acceptance scope): core `lib.rs` module index (13 bullets for +38 `pub mod`s today); `platform/` docs (4 of 10 files documented on rc; +test-only +excluded); crate-level headers for fastly/cloudflare/js/cli; module docs +for the undocumented core files (settings, settings_data, http_util, +proxy, auth, tsjs, openrtb, price_bucket, rsc_flight, host_rewrite, +storage, html_processor, registry, prebid, nextjs/, datadome/); +`constants.rs` items; CLI module docs; the TypeScript files (headers + +complete `core/types.ts`), `build-prebid-external.mjs` header. Plus the +known-false rustdoc repairs: the Cloudflare `platform.rs:579-592` stores +claim (and its Spin sibling) rewritten to match the unwired reality, +citing the follow-up. + +Rustdoc command matrix (self-contained; run with +`RUSTDOCFLAGS="-D warnings"`; the core/js documentation and native +doctest jobs need pinned Node because the js crate's build script runs +npm): + +- `cargo doc --no-deps --all-features -p trusted-server-core -p trusted-server-js -p trusted-server-openrtb --target wasm32-wasip1` +- `cargo doc --no-deps -p trusted-server-adapter-fastly --target wasm32-wasip1` +- `cargo doc --no-deps -p trusted-server-adapter-cloudflare --target wasm32-unknown-unknown --features cloudflare` +- `cargo doc --no-deps -p trusted-server-adapter-spin --target wasm32-wasip1 --features spin` +- `cargo doc --no-deps --all-features -p trusted-server-adapter-axum` +- `cargo doc --no-deps --all-features -p trusted-server-cli -p trusted-server-openrtb-codegen --target x86_64-unknown-linux-gnu` (CI; locally substitute the host triple) +- The adapter invocations deliberately pin explicit features instead of + `--all-features` because their features are target-gated (the + cloudflare feature carries a non-wasm32 `compile_error!`); everywhere + else `--all-features` applies, matching the repo's documented rustdoc + rule and covering core's test-utils feature. +- Native doctests: `cargo test --doc -p trusted-server-core` (host). + +The JSDoc contract is explicit and config-relative (ESLint runs from +`crates/trusted-server-js/lib`, so globs are `src/core/render.ts`, +`src/core/types.ts`, `src/core/registry.ts`, `src/shared/globals.ts`, +`src/integrations/creative/**`): `jsdoc/require-file-overview` enforces +the file-header block (`require-jsdoc` checks declarations, not +headers), and `jsdoc/require-jsdoc` covers every exported declaration +form - functions, classes, interfaces, type aliases, exported +variables/consts, default exports, and re-exports - plus +`jsdoc/check-alignment` and `jsdoc/check-types`. Each declaration form +and the file-overview rule get separate synthesized negative fixtures. + +Acceptance: worklist complete; matrix builds warning-free with +`RUSTDOCFLAGS="-D warnings"`; the WP8 jsdoc lint (mandatory, scoped as +above) green. + +### WP8: Enforcement (WP8a scaffolding early, WP8b final wiring) + +WP8a lands after WP1 and creates the checked foundation in #1049: + +- `tools/docs-parity` is a standalone Cargo workspace with its own committed + lockfile, README, host fmt/clippy/test commands, workspace lint policy, and + `error-stack` error flow. It is not a root-workspace member. +- Repository enumeration begins with `git ls-files -z`. A checked manifest + classifies every tracked path as text or binary and gives every expected + text file a whole-file or extracted-comment disposition. Unknown paths, + unknown comment grammars, unsafe modes, symlink escapes, oversized expected + text, and invalid UTF-8 fail closed. +- The scanner covers domain, email, credential shape, service ID, encoded + token, checked binary strings, media metadata, retired identifiers, and + structured lockfile URL/source/registry fields. Typed exceptions require a + narrow class, owner, rationale, content fingerprint, and expiry. The + `fastly.toml` service-ID entry expires at + `2026-09-30T00:00:00Z`; check mode fails at or after that instant. + Semantic sensitivity outside detector classes remains a human disposition, + not a scanner guarantee. +- The Serde-aware settings extractor handles field, container, and variant + attributes including `rename`, `rename_all`, `alias`, `tag`, `content`, + `untagged`, `flatten`, `skip`, and `skip_serializing`. Unknown + shape-changing attributes fail closed. Checked companions cover custom + deserializers, nonliteral defaults, and validators and are proved by + compiled positive and negative probes. +- Generated regions use named markers, deterministic ordering, atomic writes, + ownership markers for adjacent manual prose, a no-write check mode, and a + second-run byte-stability assertion. +- Markdown checks cover relative files and anchors over all active sets, + duplicate headings, percent-encoded fragments, intended pages/navigation, + excluded-page links, tombstones, orphans, and diagram prose equivalents. +- Integration, adapter-support, route, settings, CLI-help, README, gate, and + snippet records are checked as sets. Private registries use module-local + test seams rather than new public APIs. The Cloudflare route parser has a + closed grammar and fails on unknown builder constructs. +- CLI help is captured from the same authenticated source commit on native + Linux and native macOS. Raw runner identity, `uname -a`, `rustc -vV`, Node + version, source SHA, and SHA-256 are recorded. Platform-only commands are + annotated; prose overrides require owner, rationale, expiry, and a source + fingerprint. +- Every Markdown fence has a checked mode: executable, + expected compile/validation failure with phase and stable diagnostic, or + illustrative fragment with an expiring waiver. A nonzero exit with the + wrong diagnostic fails. +- The example-template harness performs all eight phases: unchanged parse, + exact placeholder failure, deterministic in-memory non-secret + customization, deploy validation with secret names intact, envelope + serialization, fake-store resolution, runtime validation, and isolated + positive/negative probes for every optional integration and provider + profile. + +WP8b lands last in the same PR and wires the final state: + +- Blocking PR jobs run standalone docs-parity fmt/clippy/test/check, generated + clean-diff, settings/examples/inventory/snippets/scanner/local links, + README/JSDoc/workflow fixtures, the rustdoc matrix, native doctests, docs + lint/format/build, and the existing target-specific Rust and JS gates. +- CodeQL covers `rc/*` pull requests. Node is pinned wherever Rust doc/build + paths invoke JS. Setup-node cache inputs name exact lockfiles, including the + standalone tool lockfile. `.tool-versions` pins Wrangler, and workflows + consume that pin rather than global latest. +- Dependabot covers GitHub Actions, browser/Next.js fixture npm roots, docs + npm, the root Cargo workspace, and `tools/docs-parity` Cargo. Its committed + final target is `main`; no temporary rc target is introduced. +- `.github/workflows/docs-links.yml` contains ordinary read-only + `pull_request` validation plus the final default-branch schedule and closed + manual refresh operation. It contains no `pull_request_target`, + `merge_group`, status writer, caller-selected executable SHA, or PR-code + execution in a privileged job. +- Every new `uses` reference is pinned by full SHA with its source version + recorded. Workflow-policy fixtures parse YAML and reject unpinned actions, + expanded permissions, unsafe events, checkout/cache/service-container use + in writers, caller-selected tools, unbounded artifacts, unexpected paths or + modes, symlinks, archive traversal, and unknown schema fields. +- The scheduled external-link reader uses `contents: read`, a fixed + non-canceling concurrency group, and a 30-minute timeout. It follows at most + five redirects, validates final HTTPS/status, falls back from unsupported + HEAD to GET, and makes at most three attempts for 429/5xx with 1-second then + 2-second delays. `Retry-After` is honored only when valid and at most 30 + seconds. Exact-URL exceptions require owner, reason, and expiry. +- The no-checkout issue writer has only `issues: write` and a 5-minute timeout. + Its archive has exactly one regular `link-results.json` member, at most + 2 MiB compressed and 1 MiB decoded, with at most 500 findings and + 2,048-byte strings. It validates before writing, deduplicates one owned + issue, and auto-closes it after a clean run. +- The dependency-snapshot reader uses `contents: read` and produces exactly + one regular `dependency-snapshot.json` member, at most 4 MiB compressed and + 2 MiB decoded, with at most 5,000 records and 2,048-byte strings. The + no-checkout writer has only `contents: write`, revalidates the schema and + authenticated default-branch SHA, and submits the fixed + detector/correlator identity. The manual refresh accepts no SHA or PR input. +- `CLAUDE.md`, `AGENTS.md`, `TESTING.md`, and + `docs/guide/testing.md` gate regions are generated from one checked manifest. + Command files, CONTRIBUTING, and the PR template are link-only consumers. + +The scheduled and writer paths cannot execute from #1049 merely because they +are present on rc: GitHub uses the default-branch workflow for schedules and +manual availability. Their repository acceptance is static policy coverage, +schema/parser tests, deterministic artifact fixtures, and final-state config +inspection. The first real schedule, issue reconciliation, dependency +submission, and graph proof are release-pending. + +Acceptance requires positive fixtures for the ordinary read-only PR path, +scheduled link path, clean and finding-bearing issue reconciliation, +dependency generation/submission, and manual refresh. It requires one negative +fixture per trust or bounds class, including unexpected privileged events, +status writes, caller-selected tools, untrusted checkout, stale source SHA, +extra archive members, traversal, symlink/unsafe mode, unknown fields, +oversized artifacts/strings/record counts, malformed `Retry-After`, redirect +loops, retry exhaustion, credentials embedded in a URL, expired exceptions, +wrong snippet diagnostics, generated drift, missing ownership markers, and a +new unclassified tracked path. + +All real repository checks pass from a fully staged candidate, a second +generation produces no diff, the root `Cargo.lock` remains unchanged by the +standalone tool, and the final #1049 hosted check list records exact run URLs +and GitHub App identities. Main branch-protection activation and the first +scheduled receipts remain release operations under Delivery shape. + +## Sequencing + +Every row is a package checkpoint on `spec-docs-refresh` and PR #1049. + +| Order | Package | Size | Depends on | +| ----- | ------------------------------------------- | ---- | ----------------------------------------------- | +| 0 | Single-PR design, plan, decisions, evidence | S | Owner approval | +| 1 | WP1 containment, CNAME, and hygiene | S | 0; transfer reviewed containment commits | +| 2 | WP8a docs-parity foundation | L | 1 | +| 3 | WP2 truth pass | M | 2 classification, scanner, snippets, page model | +| 4 | WP3 configuration reference | L | 2 settings extractor and example harness | +| 5 | WP4 API reference | M | 2 route/integration records; 3 truth pass | +| 6 | WP5 deployment and product coverage | L | 3-5 | +| 7 | WP6 root and crate documentation | M | 3 | +| 8 | WP7 rustdoc and JSDoc | M | 2 inventory/fixtures | +| 9 | WP8b final CI and scheduled automation | M | 2-8 | +| 10 | Final #1049 acceptance | S | 1-9 | + +No row waits for an individual `main` PR, imports a moving default-branch +blob, or creates a second implementation branch. Packages remain separate +commits so review and evidence can be resumed without squashing unrelated +surfaces. + +## Verification + +### PR #1049 implementation acceptance + +At the final PR head, `origin/rc/202608` must still equal +`07dfc1c6dddf69345ded17bd2d40a3d01bb39bcf` and the branch must contain that +commit. Reachability without exact equality does not pass. + +Acceptance records and verifies: + +- all hosted checks on the exact final head, including CodeQL with rc triggers, + format/docs build, every target-specific Rust test/check job, integration + tests, release builds, JS lint/test/build, docs-parity, rustdoc, and + doctests; +- standalone docs-parity fmt, clippy, full tests, `check --all`, and generated + second-run no-diff; +- docs lint, format, build, exact excluded/included artifacts, local and anchor + links, navigation/page/orphan/tombstone equality, and project-path asset + behavior with CNAME absent; +- source-classification closure and the all-tracked privacy/sensitive scan; +- settings, routes, integrations, adapter support, CLI goldens, snippets, + gates, README, JSDoc, and workflow-policy equality; +- the complete rustdoc matrix with warnings denied and native core doctests; +- JS lint, formatting, Vitest, and build; +- Axum, Fastly, Cloudflare, and Spin first-success smokes, or a named, + time-bounded manual Spin receipt only when the runner cannot execute Spin; +- every follow-up issue URL or exact existing-issue disposition; +- exact package commit/path shape, no unrelated runtime behavior change, + `git diff --check`, and a clean worktree; and +- the final PR description with immutable run URLs, app identities, current + head/base SHAs, and clearly labeled release-pending operations. + +The VitePress proof is not described as a live deployment. Scheduled workflow +fixtures are not described as a real cron run. Dependency artifact fixtures +are not described as a submitted graph. Main protection is not described as +changed. + +### Release-pending verification + +After the normal release makes the #1049 result part of `main`, the release +owner follows the committed runbook and records: + +1. the deployed `main` SHA and Pages response matrix: excluded URLs are absent, + required URLs return expected content, assets use the project path, and the + placeholder/custom CNAME is absent; +2. one real scheduled external-link run, including bounded artifact validation, + deduplicated issue behavior, concurrency, and timeout results; +3. one dependency snapshot submission from the exact authenticated `main` SHA, + its 201 receipt, fixed detector/correlator, graph visibility, and triage + owner/SLA; +4. final Dependabot roots and workflow action pins as observed on `main`; and +5. only if maintainers choose to require the new checks, the exact context + names, source GitHub Apps, strictness, bypass policy, and one planted-failure + block after all contexts have reported on `main`. + +These are release operations, not additional implementation PRs and not +conditions for claiming the repository work in #1049 complete. Any failed +release-pending check opens a focused repair through the normal repository +process; it does not retroactively authorize fabricated release evidence. + +## Owner decisions and remaining non-blocking questions + +1. `fastly.toml` `service_id`: approved as a temporary allowlist exception. + Owner: `aram356`. It expires at `2026-09-30T00:00:00Z`; check mode fails at + or after that instant. Renewal requires a reviewed, committed replacement + before expiry. This is not the ops migration deadline, which remains + non-blocking. +2. CNAME: delete `docs/public/CNAME` and retain the project-path base. Owner: + `aram356`. Decision date: 2026-08-31. The custom-domain alternative was + rejected for this refresh. Rollback never restores the placeholder; it + either keeps the CNAME deleted or restores a previously verified + DNS/CNAME/TLS tuple. +3. `FAQ_POC.md`: archive at `docs/superpowers/archive/FAQ_POC.md`. Owner: + `aram356`. Decision date: 2026-08-31. Retiring the content and rewriting it + as `docs/guide/faq.md` were rejected. The gam/kargo tombstones are not part + of this decision: WP2 applies them unconditionally, preserves their routes, + removes sidebar entries, and smokes the old routes. +4. `business-use-cases.md`: closed. Exclude it with a source-level banner; + republishing remains a separate effort (see Non-goals). +5. CHANGELOG release cut: explicitly non-blocking and out of scope. Apply the + deterministic no-release edit defined in Non-goals. +6. Governance ownership: no owner named. Apply the factual-governance fallback + approved on 2026-08-31: correct `ProjectGovernance.md` to current evidence + (no minutes exist; releases are not continuous) without adding CODEOWNERS + or minutes commitments. Naming owners remains a maintainer follow-up. +7. Delivery shape: superseded on 2026-08-31 by `aram356`. All repository work + is committed to `spec-docs-refresh` and PR #1049; no individual containment, + CNAME, controller, activation, or release-handoff implementation PR is + created. PR #1049 remains targeted at `rc/202608`. Live Pages, scheduled + workflow, dependency-graph, and optional `main` protection verification are + release-pending operations under Delivery shape, not implementation claims. +8. CodeQL `push` coverage for `rc/*`: explicitly non-blocking. + +## Follow-up issues to file (code, not docs) + +Filing is owned work, not an aspiration: WP8b deduplicates this list +against the existing tracker and files each item (or records an +existing-issue disposition), with issue URLs, owner, and labels recorded +in the rc PR description; final verification checks that every entry +below has a URL or disposition. + +- `Hooks::stores()` unimplemented on Cloudflare, Spin, and Axum: request- + time config/KV registries are empty, the declared `TRUSTED_SERVER_KV` + binding is never opened, Spin's request-signing kid variables are + unreachable, and `cloudflare.toml` is dead config - wire `stores()` or + retire the manifests and the stale rustdoc claims (docs fix the rustdoc + in WP7 either way). +- The Cloudflare Worker does not read the config store `ts config push` + writes (nested-var startup only), and the CLI has no envelope + export/output flag - wire the store read or add the export so the + documented bridge becomes unnecessary. +- `ts serve --adapter axum` does not consume the local config store the + push writes; the env-var bridge is the documented path. +- Cloudflare registers no `/health`; startup-failure status/health + behavior differs per adapter (Spin 503 + live health, others 500) - + decide a uniform contract. +- `imp_ext` reserved-field protection: docs claimed it, code guards only + `request_ext` - decide whether to guard `imp_ext`. +- `ec.partners[*].ts_pull_token` template placeholder + (`replace-with-partner-ts-pull-token`) is in no rejection constant + list. +- `trusted_client_ip.shared_secret` is `Redacted` but inline in the + blob (not in `secret_fields()`) - confirm intended or migrate to a + store reference. (`tinybird.access_token_secret` is accepted and + discarded at normalization; its only fix is documentation.) +- The deploy-ID constant is `#[cfg(test)]` with a one-directional subset + check (a stale extra entry passes) - superseded by the WP8a + set-equality test, but the constant itself should be fixed or removed. +- Vendored `edgezero-cli` help text leaks internal spec references into + `ts config push --help`; fix upstream and bump the pin. +- Tinybird access-log telemetry config present but rejected at runtime; + auction emission Fastly-only. +- `.env.dev` references an `opid_store` that `fastly.toml` does not + declare. +- Fastly `--staging` deploys load the PRODUCTION config blob (the entry + point does not read the `edgezero_runtime_env` store-name selectors); + rc's cli.md documents it as a known limitation - file the code fix. + +## Appendix A: Route inventory (regenerated at `a163367b3`) + +Sources: `adapter-fastly/src/{main,app}.rs`, `adapter-axum/src/app.rs`, +`adapter-cloudflare/src/app.rs`, `adapter-spin/src/app.rs`. Symbols cited; +line numbers are hints. WP8 snapshots record response semantics for +guarded/unsupported routes. `trusted_client_ip` is middleware (sanitize +outermost on Axum/Cloudflare/Spin; Fastly sanitizes in `main.rs`; only +Fastly resolves the client IP from it). Spin adds an innermost +`NormalizeMiddleware` (spin-header derivation). + +| Route | Methods | Fastly | Axum | Cloudflare | Spin | +| -------------------------------------- | ------------------------------------ | ------------------------------------ | ------------- | ------------------------------- | ---------------------------------- | +| `/health` | GET | pre-router, survives startup failure | real | **absent** (falls to publisher) | real; also alive in the 503 router | +| `/_ts/debug/ja4` | GET | pre-router, config-gated | - | - | - | +| `/.well-known/trusted-server.json` | GET | real | real | real | real | +| `/verify-signature` | POST | real | real | real | real | +| `/_ts/admin/keys/{rotate,deactivate}` | POST | real | 501 | 501 | 501 | +| `/_ts/admin/ec`, `/_ts/admin/ec/{id}` | GET | real (EC KV) | not-supported | not-supported | not-supported | +| `/_ts/admin/eids` | GET | real | real | real | real | +| `/admin/keys/*` (legacy) | 7 methods | 404 deny | 404 deny | 404 deny | 404 deny | +| `/_ts/api/v1/batch-sync` | POST | real (Bearer + rate limit) | - | - | - | +| `/_ts/api/v1/identify` | GET, OPTIONS | real | - | - | - | +| `/_ts/set-tester`, `/_ts/clear-tester` | GET | real (gated) | - | - | - | +| `/auction` | POST | real | real | real | real | +| `/_ts/page-bids`, `/__ts/page-bids` | GET; OPTIONS denied in-handler | real | real | real | real | +| `/first-party/{proxy,click}` | GET | real | real | real | real | +| `/first-party/{sign,proxy-rebuild}` | GET, POST | real | real | real | real | +| `/static/tsjs=` | GET (fallback chain) | real | real | real | real | +| `/integrations//...` | per the route-family inventory below | real | real | real | real | +| asset route prefixes | GET, HEAD | Fastly only | - | - | - | +| publisher fallback | 7 explicit methods | real | real | real | real | + +Integration route families (the checked inventory WP4 generates from; +disabled integrations register nothing and their paths fall through to +the publisher proxy; a duplicate route registration is a startup +configuration error, not silently resolved): + +- Fixed: `prebid` `GET /integrations/prebid/bundle.js`; `aps` + `GET /integrations/aps/renderer` (conditional: only in + `trusted_server` rendering mode); `testlight` + `POST /integrations/testlight/auction`; `didomi` configurable-prefix + loader/api routes; `datadome` `tags.js`, `/js/`, `/js/*`; + `google_tag_manager` `gtm.js`, `gtag/js`, `gtag.js`, `collect`, + `g/collect`; `gpt` `script`, `pagead/*`, `tag/*`; `sourcepoint` + `cdn/*`; `permutive` `api/*`, `secure-signal/*`, `events/*`, `sync/*`, + `cdn/*`, `sdk`; `lockr` `sdk`, `api/*`. +- Prefix-overridable: the trait default `/integrations/` can be + overridden by an integration's implementation; the operator- + configurable case is Didomi's `proxy_path` config field. +- Config-derived: `prebid` additionally neutralizes operator-configured + `script_patterns` plus `/static/prebid/{*rest}`. +- Methods are per-registration (GET for scripts/CDN, GET+POST for + beacon/api paths); the WP8a route snapshot records each. + +Startup failure: Spin installs a hardened 503 router (generic body, +`/health` 200, all fallback methods); Cloudflare and Fastly serve 500 +from the error router; the Cloudflare and Axum degraded routers answer +the underlying error status on every path (no `/health` carve-out). EC partner API, tester cookies, and JA4 remain Fastly-only +(they need platform KV and entry-point wiring). Fastly-only capabilities: +asset routes, image optimizer, request filters (DataDome pre-route), +Tinybird emission. Provider fan-out: Fastly and Axum allow multiple +enabled providers; Cloudflare and Spin reject them at startup (dormant +multi-provider configs are accepted when `auction.enabled = false`). + +## Appendix B: Settings inventory (17 roots at `a163367b3`) + +`Settings` is `deny_unknown_fields`; `Option` roots: `trusted_client_ip`, +`request_signing`, `creative_opportunities`. + +| # | Root | example.toml | configuration.md | +| --- | -------------------------------- | ------------------------------- | -------------------- | +| 1 | `publisher` | active | yes | +| 2 | `tester_cookie` | commented | yes | +| 3 | `trusted_client_ip` (Opt) | commented | yes | +| 4 | `ec` | active (partners commented) | yes | +| 5 | `integrations` | mixed (5 active stubs) | 5 of 14 subsections | +| 6 | `handlers` | active | yes | +| 7 | `response_headers` | commented | yes | +| 8 | `request_signing` (Opt) | commented | yes | +| 9 | `rewrite` | commented | yes | +| 10 | `auction` (+ providers, bidders) | active incl. `pbs-main` | yes (config-first) | +| 11 | `consent` | commented | **missing section** | +| 12 | `cache` | commented rules | yes | +| 13 | `proxy` | header active, leaves commented | yes | +| 14 | `creative_opportunities` (Opt) | active | yes | +| 15 | `image_optimizer` | commented | nested under Proxy | +| 16 | `tinybird` | commented | **Quick Start only** | +| 17 | `debug` | commented (+ comment options) | **missing section** | + +The docs "Key Sections" table lists 10 of 17. Secret model: 11 +`secret_fields()` paths, all `KeyInDefault` (3 required: +`publisher.proxy_secret`, `ec.passphrase`, `handlers[*].password`); +resolution flow is verify → `remove_inactive_secret_references` → +`resolve_secret_references` → `from_json_value` → +`validate_settings_for_runtime`; deploy validation excludes secret-leaf +attributes and requires key names conditionally +(`validate_proxy_secret_strength` was removed in the audited delta - no +runtime length enforcement on the resolved proxy secret remains). Redacted-but-inline: +`trusted_client_ip.shared_secret` only; `tinybird.access_token_secret` +is accepted-but-normalized-away (set to `None`, never serialized). +Directional dispositions (WP3) classify every path. +Template placeholder constants and their consumer surface are +load-bearing; the WP8a-enumerated consumer manifest is canonical (it +distinguishes literal-substitution consumers - config.rs template tests, +CLI ad_templates and audit generate/validate substitutions, the +template-cache script - from include-only consumers such as +`config init`), and this appendix does not restate its count. Validator inventory for +companion entries: exactly one production struct-level schema validator +(`validate_trusted_client_ip`); the test-only APS schema annotation is excluded. +APS account and inventory validators belong only to the imperative profile +compiler inventory. The +field-level custom-validator sites (enumerated canonically by the WP8a +companion manifest, which fails closed on unclassified validators, +rather than by a count here), the imperative +`finalize_deserialized` pipeline (normalize → prepare_runtime → derive +validate → admin coverage → placeholder rejection), the plan-compiler +family (`ProviderId`/`BidderId` grammars, `canonicalize_endpoint`, +notification caps, mediator match, signing gate, +`validate_for_target`), the profile compilers (standard: 16KiB / +depth-8 / 256-key extension limits, `request_ext`-only reserved fields; +prebid-server: override-rule engine; aps: account and inventory validators), +and the integration deploy/startup pairs (DataDome split, +prebid browser-ownership cross-check against the plan, PartnerRegistry +deploy/runtime). + +## Appendix C: Integration and provider inventories (at `a163367b3`) + +Named sets and counts (set-equality tested in WP8a): + +- Deploy-validated IDs: **14** (`validate_enabled_integrations`; the + `#[cfg(test)]` constant currently checks subset one-directionally). +- Registry `builders()`: **11** - testlight, nextjs, permutive, lockr, + didomi, sourcepoint, osano, google_tag_manager, datadome, gpt, + gpt_diagnostics. +- Plan registrations: **2** - `prebid::register_for_plan` and + `aps::register_for_plan`, prepended by `IntegrationRegistry::with_plan` + (builders take only `&Settings`; these two need the compiled + `AuctionPlan`, the single config→runtime boundary shared with the + orchestrator via one `Arc`); APS registers iff + `plan.has_profile("aps")`. +- Profile registry: **3** - `standard` (auction-inherited timeout), + `prebid-server` (1000ms), `aps` (800ms), in `PROFILE_REGISTRATIONS`; + provider instances are operator-defined `[auction.providers.]` + (`ProviderId` grammar `^[a-z][a-z0-9-]{0,62}$`; `profile_config` is a + raw JSON object discriminated by the sibling `profile` field, compiled + into the profile's typed `deny_unknown_fields` struct) flowing through + `GenericOpenRtbProvider`. +- Mediator: `adserver_mock` via `register_providers`, matched exactly to + `auction.mediator`; it never enters the integration registry. +- JS: **12** integration `index.ts` modules (13 dirs; `aps` ships only a + render helper imported by core/prebid/gpt), **13** emitted bundles + (+core). `JS_ALWAYS = ["creative"]`. Three loading modes: bundled, + deferred (prebid only), standalone tag (`gpt_diagnostics`, which is + `.without_js()` in the registry but served via its own decision path). +- `IntegrationMetadata` omits post-processors, JS modes, and plan info - + the checked capability record (typed capability + config-predicate + conditions, fixture matrix evaluating both states) is the rendering + source; equality tests live module-local where the private registries + are visible. + +Capabilities (P proxy, AR attribute rewriter, SR script rewriter, HI head +injector, PP post-processor, RF request filter): prebid P/AR/HI + +deferred JS; aps HI always, P conditional on `trusted_server` rendering +mode, no JS bundle; testlight P/AR; nextjs SRx2/PP, no JS; permutive +P/AR; lockr P/AR; didomi P/HI; sourcepoint P/AR/HI; osano bare; +google_tag_manager P/AR/SR; datadome P/AR/HI + RF conditional on +`enable_protection`; gpt P/AR/HI; gpt_diagnostics bare + standalone JS; +creative JS-only, always injected. + +## Appendix D: CLI and per-adapter configuration handoff + +`ts` (the two-platform help union is canonical; macOS adds `dev proxy`): +`audit page|generate|ad-templates generate[--scroll]|verify`, +`active-version`, +`auth login|logout|status`, `build`, +`config init|diff|push|validate|gc|ad-templates lint|match|check|explain`, +`deploy`, `healthcheck`, `prebid bundle`, `provision`, `rollback`, +`serve`, `dev proxy [ca ...]`. `--version` is available. Drift-detecting +commands use a stable drift exit code. `config gc --store ` is owned +by the pinned `edgezero-cli` (newly documented, not newly added); the +deploy-lifecycle commands (`active-version`, `healthcheck`, `rollback`) +are Fastly-only per rc's own docs; cli.md documents a known limitation +that `--staging` loads the production config blob (follow-up below). +rc's cli.md already covers the lifecycle commands; the remaining work is +the generated-region conversion and description gating. + +Per-adapter configuration handoff (deployment-guide truth): + +- Fastly: config store `trusted_server_config` + secret store + `ts_secrets` (logical mapping via the `edgezero_runtime_env` config + store); `ts config push --local` mutates `fastly.toml`; the checked-in + store ships empty, so a bare `fastly compute serve` serves 500 on + non-health paths. +- Axum: config via + `TRUSTED_SERVER_CONFIG_TRUSTED_SERVER_CONFIG_TRUSTED_SERVER_CONFIG`, + secrets via `TRUSTED_SERVER_SECRET_{STORE}_{KEY}`. +- Cloudflare: `TRUSTED_SERVER_CONFIG` var = `{"app_config": ""}` (nested wrapper) + `wrangler secret put `; + push-written KV is unread by the Worker. +- Spin: blob in KV store label `default` (push requires + `EDGEZERO__STORES__CONFIG__TRUSTED_SERVER_CONFIG__NAME=default` or it + lands in the wrong store); secrets via encoded Spin variables + (`v__v_` encoding; empty defaults fail closed). + +Runtime environment variables and the `TRUSTED_SERVER__` CLI overlay are +documented as separate surfaces (WP2). + +## Appendix E: Still-open finding index (verified at the 2026-08-28 baseline) + +- `srcExclude` absent; 133 superpowers files in the CI-built site; empty + `guide/index.md`; nav Guide/Business Value links; CNAME placeholder. +- `fastly.toml:4,10,38` + inconsistent fixture labels; + `docs/package.json` ISC/not-private; onboarding published. +- `RequestWrapper` (`architecture.md:93-104`, + `.claude/agents/code-architect.md:16`); Equativ (`ad-serving.md:11`, + `.claude/agents/issue-creator.md:85`, `FAQ_POC.md`); `.with_asset` + (`creative-processing.md:808`, `integration-guide.md:84,248`); + `npm run type-check` (`error-reference.md:614`); + `settings_data::get_settings` (`configuration.md:2301`); auction README + rot; `SEQUENCE.md` links; `TESTING.md` runbook. +- `[consent]`/`[debug]` sections missing; `[tinybird]` Quick-Start-only; + Key Sections 10/17; reserved-field `imp_ext` docs/code mismatch; + integration subsections 5/14; `adserver_mock` stranded. +- CHANGELOG: 8 breaking entries (one `**Breaking:**`, seven + `**Breaking** -` variants), dead v1.2.0 links. +- Stale rustdoc: the Cloudflare `platform.rs:579-592` stores claim (and + its Spin sibling); `cloudflare.toml` dead; false workflow comments + (Spin release build, test-cli default target). +- Env files carry retired `TRUSTED_SERVER__SYNTHETIC__*` keys; + `opid_store` mismatch. +- Missing pages: cloudflare/spin/axum-dev/edgezero/telemetry/tsjs/ + adserver_mock guides; 7 crate READMEs; integration-guide snippets do + not compile. +- Enforcement gaps: no rustdoc/doctests in CI, no parity checks, jsdoc + inert, openrtb-codegen lints, PR template `tracing`, slash-command gate + drift. diff --git a/fastly.toml b/fastly.toml index ca8bce8d3..f5184128d 100644 --- a/fastly.toml +++ b/fastly.toml @@ -1,12 +1,14 @@ # This file describes a Fastly Compute package. To learn more visit: # https://www.fastly.com/documentation/reference/compute/fastly-toml -authors = ["jason@stackpop.com"] +authors = [] cloned_from = "https://github.com/fastly/compute-starter-kit-rust-default" description = "EdgePubs - Trusted Server" language = "rust" manifest_version = 3 name = "trusted-server-adapter-fastly" +# Temporary service-ID exception: owner `aram356`; expires +# 2026-09-30T00:00:00Z. See the documentation-refresh decision record. service_id = "dysUw6h73VzeomD61eal85" [scripts] @@ -23,28 +25,32 @@ build = """ [local_server.backends] [local_server.kv_stores] + # Local test fixture for the counter KV store. [[local_server.kv_stores.counter_store]] key = "placeholder" data = "placeholder" + # Local test fixture for the creative KV store. [[local_server.kv_stores.creative_store]] key = "placeholder" data = "placeholder" + # Local test fixture for the EC identity KV store. [[local_server.kv_stores.ec_identity_store]] key = "placeholder" data = "placeholder" - # Pre-seeded test EC entry for local script testing (test-prebid-eids.sh). - # Matches the TEST_EC_ID used in that script. + # Local test fixture for a seeded EC identity entry. [[local_server.kv_stores.ec_identity_store]] key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.test01" data = '{"v":1,"created":1700000000,"last_seen":1700000000,"consent":{"ok":true,"updated":1700000000},"geo":{"country":"US"}}' + # Local test fixture for the consent KV store. [[local_server.kv_stores.consent_store]] key = "placeholder" data = "placeholder" [local_server.secret_stores] + # Local test fixture for a signing key; never use in production. [[local_server.secret_stores.signing_keys]] key = "ts-2025-10-A" data = "NVnTYrw5xoyTJDOwoUWoPJO3A6UCCXOJJUzgGTxxx7k=" @@ -76,6 +82,7 @@ build = """ [local_server.config_stores.jwks_store] format = "inline-toml" [local_server.config_stores.jwks_store.contents] + # Local test fixtures for signing-key publication and rotation. ts-2025-10-A = "{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"kid\":\"ts-2025-10-A\",\"use\":\"sig\",\"x\":\"UVTi04QLrIuB7jXpVfHjUTVN5aIdcbPNr50umTtN8pw\"}" ts-2025-10-B = "{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"kid\":\"ts-2025-10-B\",\"use\":\"sig\",\"x\":\"HVTi04QLrIuB7jXpVfHjUTVN5aIdcbPNr50umTtN8pw\"}" current-kid = "ts-2025-10-A" diff --git a/tools/docs-parity/Cargo.lock b/tools/docs-parity/Cargo.lock new file mode 100644 index 000000000..9636bd325 --- /dev/null +++ b/tools/docs-parity/Cargo.lock @@ -0,0 +1,1382 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clap" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "docs-parity" +version = "0.1.0" +dependencies = [ + "clap", + "derive_more", + "error-stack", + "github-slugger", + "psl", + "pulldown-cmark", + "regex", + "scraper", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tempfile", + "toml", + "toml_edit", + "unicode-normalization", + "url", + "yaml_serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "ego-tree" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2972feb8dffe7bc8c5463b1dacda1b0dfbed3710e50f977d965429692d74cd8" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "error-stack" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b878b3fac9613c3c7f22eb70bc8a3c6ebdc03cc11479ee60fde1692d747fd45f" +dependencies = [ + "anyhow", + "rustc_version", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", +] + +[[package]] +name = "github-slugger" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721820f4eab1c427d482e144b63288754d9872fb7f0d72d73ab101008ef43147" +dependencies = [ + "once_cell", + "regex", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libyaml-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e126dda6f34391ab7b444f9922055facc83c07a910da3eb16f1e4d9c45dc777" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "markup5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psl" +version = "2.1.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc88482eea924ca3a2f56a547454169af58deef35567965eb4fc2392a834841" +dependencies = [ + "psl-types", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "pulldown-cmark" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" +dependencies = [ + "bitflags", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scraper" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5f3a24d916e78954af99281a455168d4a9515d65eca99a18da1b813689c4ad9" +dependencies = [ + "cssparser", + "ego-tree", + "getopts", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "selectors" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5685b6ae43bfcf7d2e7dfcfb5d8e8f61b46442c902531e41a32a9a8bf0ee0fb6" +dependencies = [ + "bitflags", + "cssparser", + "derive_more", + "fxhash", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "smallvec" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.23.10+spec-1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "web_atoms" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "yaml_serde" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b729a08a9a6be689bbad3e2bf8015926db54b6622cc89c3a5f7dc174b9e918" +dependencies = [ + "indexmap", + "itoa", + "libyaml-rs", + "ryu", + "serde", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/tools/docs-parity/Cargo.toml b/tools/docs-parity/Cargo.toml new file mode 100644 index 000000000..c1d28ff1f --- /dev/null +++ b/tools/docs-parity/Cargo.toml @@ -0,0 +1,91 @@ +[package] +name = "docs-parity" +description = "Checks deterministic documentation records for Trusted Server." +version = "0.1.0" +authors = [] +edition = "2024" +license = "Apache-2.0" +publish = false +autobins = false +autolib = false +autotests = false + +[workspace] + +[workspace.lints.clippy] +unwrap_used = "deny" +expect_used = "allow" +panic = "deny" +module_name_repetitions = "allow" +must_use_candidate = "warn" +doc_markdown = "warn" +missing_errors_doc = "warn" +missing_panics_doc = "warn" +needless_pass_by_value = "warn" +redundant_closure_for_method_calls = "warn" +print_stdout = "warn" +print_stderr = "warn" +dbg_macro = "warn" + +[lints] +workspace = true + +[lib] +name = "docs_parity" +path = "src/lib.rs" + +[[bin]] +name = "docs-parity" +path = "src/main.rs" + +[[test]] +name = "cli" +path = "tests/cli.rs" + +[[test]] +name = "classification" +path = "tests/classification.rs" + +[[test]] +name = "scanner" +path = "tests/scanner.rs" + +[[test]] +name = "markdown" +path = "tests/markdown.rs" + +[[test]] +name = "links" +path = "tests/links.rs" + +[[test]] +name = "settings" +path = "tests/settings.rs" + +[[test]] +name = "integrations" +path = "tests/integrations.rs" + +[[test]] +name = "routes" +path = "tests/routes.rs" + +[dependencies] +clap = { version = "4", features = ["derive"] } +derive_more = { version = "2.0", features = ["display"] } +error-stack = "0.6" +github-slugger = "0.1" +psl = "2" +pulldown-cmark = "0.13" +regex = "1" +scraper = "0.24" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_yaml = { package = "yaml_serde", version = "0.10" } +sha2 = "0.10" +syn = { version = "2", features = ["full", "parsing", "visit"] } +tempfile = "3.24" +toml = "0.9" +toml_edit = "0.23" +url = "2.5" +unicode-normalization = "0.1" diff --git a/tools/docs-parity/README.md b/tools/docs-parity/README.md new file mode 100644 index 000000000..412869d00 --- /dev/null +++ b/tools/docs-parity/README.md @@ -0,0 +1,228 @@ +# docs-parity + +`docs-parity` is the repository-local host tool for deterministic documentation +records. It is an independent Cargo workspace and does not participate in the +repository's target-specific root workspace. + +## Commands + +The Cargo manifest path below is relative to the repository root, so run these +development commands from that root: + +```bash +cargo run --manifest-path tools/docs-parity/Cargo.toml -- check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- update \ + --tracked-paths-record path/to/record.txt +cargo run --manifest-path tools/docs-parity/Cargo.toml -- classify --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- classify --update +cargo run --manifest-path tools/docs-parity/Cargo.toml -- scan --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- scan --bootstrap +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- generate --update +cargo run --manifest-path tools/docs-parity/Cargo.toml -- links --local --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- settings --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- integrations --check +cargo run --manifest-path tools/docs-parity/Cargo.toml -- routes --check +# Scheduled or manual only; this command performs bounded network requests. +cargo run --manifest-path tools/docs-parity/Cargo.toml -- links --external --check +``` + +The tool may also be launched from any nested worktree directory. Derive and +quote the exact Git root so Cargo receives an absolute manifest path: + +```bash +repository_root="$(git rev-parse --show-toplevel)" +cargo run --manifest-path "$repository_root/tools/docs-parity/Cargo.toml" -- check +``` + +`check` discovers the worktree root, enumerates Git-tracked paths, and validates +the repository boundary. With `--tracked-paths-record`, it compares the named +repository-relative file with the deterministic, lexically sorted path record. +It never creates directories, creates files, or changes existing bytes. + +`update` requires `--tracked-paths-record` and replaces that file atomically. +It owns a unique sibling stage file, writes and syncs it before a +same-directory rename, then syncs the containing directory. A failed or +interrupted operation cleans only its owned stage and leaves the last complete +target unchanged; an unrelated peer stage is never deleted. + +The exit-code contract is stable: + +- `0`: the check is clean or the update completed; +- `1`: check mode found a missing or stale generated record; +- `2`: command syntax, repository safety, Git, or file I/O failed. + +## Classification and privacy review + +`classify --check` validates every `git ls-files -z` path against +`manifests/tracked-files.toml` and every expected-text path against +`manifests/maintained-sources.toml`. Text/binary classification is manifest +authority: invalid UTF-8 or oversized declared text fails rather than being +reclassified. Whole-file sources carry an include or typed exclude. Operational +sources carry a grammar and every extracted comment has an exact byte-range +selector, SHA-256 content fingerprint, and disposition. + +`classify --update` is a candidate-generation workflow. It preserves only exact +reviewed records, adds new or moved paths/comments as unreviewed candidates, +and drops stale records. Review all differences before changing both manifests' +explicit `reviewed` field to true. Missing or false attestation fails closed. + +`scan --check` scans every tracked text file, printable binary strings, +supported image metadata, and structured lockfile URL fields. Domains use the +compiled public-suffix dataset shipped by the standalone dependency, so checks +remain offline and reproducible. It also enforces the hashed retired identifier +and access-phrase records in `manifests/retired-identifiers.toml`. That manifest +also requires explicit review. + +Every permitted finding has one occurrence record in +`manifests/sensitive-allowlist.toml`: a narrow exception class, exact path and +byte selector, content fingerprint, owner, rationale, and expiry. Check mode +fails at the expiry instant, on stale/moved records, on unsupported structured +data, or on findings without an exact exception. `scan --bootstrap` regenerates +candidates, preserves only exact reviewed matches, and reopens the complete set +for review when findings change. It never approves candidates. Six narrow +exception classes are supported; the settings-schema class applies only to the +three non-value secret-disposition identifiers in the checked companion +manifest. These classes do not assert that mechanical detection is complete +for human semantic sensitivity. + +## Generated regions and links + +`generate --check` renders the typed records in `manifests/pages.toml` and +returns exit code `1` when a named Markdown region differs. Check mode performs +no writes. `generate --update` validates every target first, then atomically +replaces only drifted region bodies; exact bytes outside the paired markers are +preserved. Region names, rows, ownership markers, paths, file modes, sizes, and +marker placement all fail closed. Atomic replacement explicitly restores the +original safe mode on the staged inode, fsyncs the staged file and parent +directory, and compares the expected bytes, file identity, type, and mode +immediately before rename. A change observed by that precommit validation +aborts without replacing the target. Portable rename cannot conditionally bind +that observation to the rename syscall, so a noncooperating write in the final +syscall window can still be replaced. Failed operations clean only their unique +owned stages. A second update is byte-identical. + +`links --local --check` parses CommonMark events with source offsets over all +maintained public, internal, and repository source sets. It checks relative +files, images, references, autolinks, HTML `href`/`id`/`name` attributes, +VitePress routes, queries, strict single-pass path/query/fragment percent +decoding, and anchors. Public-page YAML frontmatter is bounded to 64 KiB, +decoded by the maintained `yaml_serde` compatibility package, and checked for +typed hero image/action and feature link/icon targets. Hero images and feature +icons accept the pinned VitePress string, `src`, or complete `light`/`dark` +shapes; both theme targets enter the same checker. Root assets resolve only +through the configured literal `publicDir` or VitePress's `docs/public` +default and must be regular, non-symlink repository files. Public headings use +the VitePress 1.6.4 `@mdit-vue/shared` slug contract, including contextual +Unicode lowercase conversion and the exact ECMAScript whitespace set. Their +title extraction ignores image alt text plus soft and hard break events, and +colliding explicit IDs fail instead of receiving an automatic suffix. +Repository and maintained-internal headings use GitHub title and slug behavior. +Code and HTML comments do not create destinations. The check also rejects links to excluded +sources, validates the exact live-page and typed-tombstone inventories against +navigation and orphan records, proves live-page reachability, and requires an +owned prose heading for every exact semantic Mermaid fence. All three +publication manifests and every Markdown input are bounded to 4 MiB. Each +diagram record binds its path, selector, prose anchor, owner, and exact semantic +fence-content SHA-256, so edits or order swaps require renewed review. The +command is offline and is suitable for pull-request validation. + +`links --external --check` is the only command that performs network I/O. It is +reserved for scheduled or explicit manual execution. Requests require HTTPS, +reject URL credentials, follow at most five redirects, use HEAD with GET only +for unsupported HEAD responses, and make at most three attempts for 429/5xx. +The production curl process uses the fixed `/usr/bin/curl` executable and +starts with `--disable`, so `PATH`, proxy, TLS, curl-home, and ambient curl +configuration cannot change its behavior. Its environment is cleared except +for a deterministic C locale, and curl cannot follow redirects itself; the +shared checker validates each relative or absolute redirect before issuing the +next request. +Transport arguments allow only credential-free HTTPS and HEAD/GET with bounded +connect and total time. GET writes headers once through `--dump-header`; HEAD +omits that option because `--head --output -` already writes its header block. +Stdout is read concurrently under the same wall-clock bound as the request, +then independently validated for status, raw header count, +line/name/value/total bytes, and body bytes. Every intermediate proxy or 1xx +HTTP block is validated and only the final response drives policy. Legal +repeated fields remain distinct; duplicate Location, Retry-After, and +Content-Length fields fail closed as policy singletons. The stricter security +policy also rejects repeated Transfer-Encoding and Content-Encoding rather +than coalescing their otherwise list-shaped field values. +The wall-clock deadline is fixed before the stdout reader starts. Every +post-spawn outcome polls the child, kills it when still alive, waits regardless +of a kill failure, and joins the reader; primary, kill, wait, and join +diagnostics are retained. Exact exceptions require an owner, reason, and +unexpired timestamp. + +## Settings semantics + +`settings --check` parses the four checked Rust settings/profile sources with +`syn` and a closed Serde/validator attribute grammar. Shape-changing attributes +outside that grammar fail closed. Nonliteral defaults, custom deserializers, +and custom validators require reviewed companion records whose named positive +and negative probes compile in the owning production module's test target. + +The command checks the exact 17-field `Settings` root, independent lifecycle, +key-identity, serialization, runtime, and secret-handling dispositions, the 11 +store-resolved paths, the deliberately-inline and accepted-discarded paths, +deprecated normalized-away selectors, and aliases. It also validates the +source template's three placeholder paths, 14 deploy-validated integration +IDs, three profile IDs, three secret-key literals, and all six literal or +include-only consumers. The source template and every checked source are +bounded to 4 MiB and decoded as strict UTF-8. + +## Integration and route inventories + +`integrations --check` extracts the exact deploy validator, settings-builder, +plan-registration, profile, mediator, JavaScript source, and emitted-bundle +sets from their authoritative repository surfaces. It compares them with the +reviewed inventory and validates the loading, capability, and manually owned +operational domains. Compiled core tests independently instantiate every +capability predicate and compare the real registration receipts with that same +manifest. + +`routes --check` parses the private Fastly, Axum, and Spin named-route +collections plus Cloudflare's inline builder using a closed AST grammar. It +compares the exact per-adapter methods, path shapes, predicates, handler +dispositions, publisher fallback, and degraded startup routers with the +reviewed 103-record inventory. Adapter regression tests bind the source seams +to the unchanged production routers; the support manifest keeps release status +manual and records the reviewed health, startup, and provider-fan-out facts. + +## Repository boundary + +Generated paths must be normalized, non-empty relative paths. Absolute paths, +parent traversal, redundant components, controls, backslashes, Windows-invalid +characters, trailing dots or spaces, reserved Windows device names, and +non-UTF-8 paths are rejected. A `.git` path component is rejected +case-insensitively; names such as `.gitignore` and `.gitmodules` remain valid. +Existing output symlinks, including dangling symlinks, are never replaced. +Git-tracked symlinks may resolve only to regular files inside the repository. +Tracked files and generation directories must not be group- or world-writable. + +Tracked paths come exclusively from `git ls-files -z`, are validated before +use, and are sorted lexically before rendering. A second update with unchanged +Git index state therefore produces identical bytes. + +## Supported hosts + +The tool compiles only on Linux and macOS, matching the native CLI-capture and +enforcement matrix. Its atomic replacement and unsafe-mode contract depends on +same-directory Unix rename and Unix permission semantics. Other targets fail at +compile time; there is no non-atomic or mode-blind fallback. + +## Development gates + +```bash +cargo test --manifest-path tools/docs-parity/Cargo.toml --test cli +cargo test --manifest-path tools/docs-parity/Cargo.toml --test classification +cargo test --manifest-path tools/docs-parity/Cargo.toml --test scanner +cargo test --manifest-path tools/docs-parity/Cargo.toml --test markdown +cargo test --manifest-path tools/docs-parity/Cargo.toml --test links +cargo test --manifest-path tools/docs-parity/Cargo.toml --test settings +cargo test --manifest-path tools/docs-parity/Cargo.toml --test integrations +cargo test --manifest-path tools/docs-parity/Cargo.toml --test routes +cargo test --manifest-path tools/docs-parity/Cargo.toml +cargo fmt --manifest-path tools/docs-parity/Cargo.toml -- --check +cargo clippy --manifest-path tools/docs-parity/Cargo.toml --all-targets -- -D warnings +``` diff --git a/tools/docs-parity/manifests/adapter-support.toml b/tools/docs-parity/manifests/adapter-support.toml new file mode 100644 index 000000000..1e7447544 --- /dev/null +++ b/tools/docs-parity/manifests/adapter-support.toml @@ -0,0 +1,42 @@ +version = 1 +reviewed = true + +[[adapters]] +id = "fastly" +release_status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" +health = "pre_router" +startup_status = 500 +startup_health = true +provider_fanout = "multiple" + +[[adapters]] +id = "axum" +release_status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" +health = "real" +startup_status = 500 +startup_health = false +provider_fanout = "multiple" + +[[adapters]] +id = "cloudflare" +release_status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" +health = "absent" +startup_status = 500 +startup_health = false +provider_fanout = "single" + +[[adapters]] +id = "spin" +release_status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" +health = "real" +startup_status = 503 +startup_health = true +provider_fanout = "single" diff --git a/tools/docs-parity/manifests/diagrams.toml b/tools/docs-parity/manifests/diagrams.toml new file mode 100644 index 000000000..c94544570 --- /dev/null +++ b/tools/docs-parity/manifests/diagrams.toml @@ -0,0 +1,93 @@ +version = 1 +reviewed = true + +[[diagrams]] +path = "docs/guide/architecture.md" +selector = "mermaid:1" +fingerprint = "sha256:a6a7ee7340fbbde17c07a1233298830828a5c9149b4584def5a6c0f11192f930" +prose_anchor = "high-level-overview" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:1" +fingerprint = "sha256:e8448fa8944b726d0cd79667cdb4589d459977bfefcfb14bd7d2b969f66fa135" +prose_anchor = "request-lifecycle" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:2" +fingerprint = "sha256:fdaecd90425fd99b6adaaeeb5659977440039f2973d8132bffda3716b47f21f8" +prose_anchor = "response-finalization" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:3" +fingerprint = "sha256:b8f53f809aeae9251722b5454780dbd2f3b29d22af8b1c85c9fde0afbbd0c8f2" +prose_anchor = "consent-model" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:4" +fingerprint = "sha256:9467bb4a698e9f62487433b01e1ee97dde9942d4c35757ede3d9b04f81f8fec3" +prose_anchor = "partner-sync-channels" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:5" +fingerprint = "sha256:660afdd49c50f4e376e89bbc69983c63a2969131a42a00925aaada9a3dce0f67" +prose_anchor = "prebid-eid-cookie-flow" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/edge-cookies.md" +selector = "mermaid:6" +fingerprint = "sha256:af4610ef92c6d7568c87ea96a2ac26f1c3c68aa015740f2c6ccffebdcfe64bd4" +prose_anchor = "eid-seeding-and-prebid-bidstream-forwarding" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/auction-orchestration.md" +selector = "mermaid:1" +fingerprint = "sha256:8a541c12d53d76fa0d3fc799e2d4646344ba3c0c40824a05c4274f26b3832ffa" +prose_anchor = "system-flow-prebid-aps" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/integrations/datadome.md" +selector = "mermaid:1" +fingerprint = "sha256:f199c03b93bd9da6d208ef4542e06ff5ee96e6ff83b8e2de9d7f6ba861d19698" +prose_anchor = "how-it-works" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/first-party-proxy.md" +selector = "mermaid:1" +fingerprint = "sha256:8d6e7ade18725c27c8136b6c268f2aed55eaed024949d8db93af7be01d921f17" +prose_anchor = "how-it-works" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/collective-sync.md" +selector = "mermaid:1" +fingerprint = "sha256:9f14a631b35ee1499d2a2414e0e6c65cf6eb0026e924d7691a8eeb4379419e7d" +prose_anchor = "overview" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/integrations/google_tag_manager.md" +selector = "mermaid:1" +fingerprint = "sha256:1a2d18a270be1649599d0ec2bf43d30912c68240dcee7683389f6fc1bfa703a1" +prose_anchor = "how-it-works" +owner = "documentation-maintainers" + +[[diagrams]] +path = "docs/guide/integrations/prebid.md" +selector = "mermaid:1" +fingerprint = "sha256:17b5a132c7668052f3c403a9ee692d36a22d28cdfec9faa4dd63317bd1888084" +prose_anchor = "identity-flow" +owner = "documentation-maintainers" diff --git a/tools/docs-parity/manifests/integrations.toml b/tools/docs-parity/manifests/integrations.toml new file mode 100644 index 000000000..6cd8cbc12 --- /dev/null +++ b/tools/docs-parity/manifests/integrations.toml @@ -0,0 +1,265 @@ +version = 1 +reviewed = true +deploy_ids = ["adserver_mock", "aps", "datadome", "didomi", "google_tag_manager", "gpt", "gpt_diagnostics", "lockr", "nextjs", "osano", "permutive", "prebid", "sourcepoint", "testlight"] +builder_ids = ["datadome", "didomi", "google_tag_manager", "gpt", "gpt_diagnostics", "lockr", "nextjs", "osano", "permutive", "sourcepoint", "testlight"] +plan_registration_ids = ["aps", "prebid"] +profile_ids = ["aps", "prebid-server", "standard"] +mediator_ids = ["adserver_mock"] +js_source_module_ids = ["creative", "datadome", "didomi", "google_tag_manager", "gpt", "gpt_diagnostics", "lockr", "osano", "permutive", "prebid", "sourcepoint", "testlight"] +js_bundle_ids = ["core", "creative", "datadome", "didomi", "google_tag_manager", "gpt", "gpt_diagnostics", "lockr", "osano", "permutive", "prebid", "sourcepoint", "testlight"] + +[[loading_modes]] +id = "creative" +mode = "bundled" + +[[loading_modes]] +id = "datadome" +mode = "bundled" + +[[loading_modes]] +id = "didomi" +mode = "bundled" + +[[loading_modes]] +id = "google_tag_manager" +mode = "bundled" + +[[loading_modes]] +id = "gpt" +mode = "bundled" + +[[loading_modes]] +id = "gpt_diagnostics" +mode = "standalone" + +[[loading_modes]] +id = "lockr" +mode = "bundled" + +[[loading_modes]] +id = "osano" +mode = "bundled" + +[[loading_modes]] +id = "permutive" +mode = "bundled" + +[[loading_modes]] +id = "prebid" +mode = "deferred" + +[[loading_modes]] +id = "sourcepoint" +mode = "bundled" + +[[loading_modes]] +id = "testlight" +mode = "bundled" + +[[capabilities]] +id = "adserver_mock" +predicate = "auction.mediator=adserver_mock;enabled=true" +providers = ["adserver_mock"] +js_mode = "none" + +[[capabilities]] +id = "aps" +predicate = "plan.has_profile(aps);rendering_mode=publisher_native" +head_injectors = ["aps"] +js_mode = "none" + +[[capabilities]] +id = "aps" +predicate = "plan.has_profile(aps);rendering_mode=trusted_server" +proxy_routes = ["GET /integrations/aps/renderer"] +head_injectors = ["aps"] +js_mode = "none" + +[[capabilities]] +id = "creative" +predicate = "always" +js_mode = "bundled" + +[[capabilities]] +id = "datadome" +predicate = "enabled=true;enable_protection=false" +proxy_routes = ["GET /integrations/datadome/js/", "GET /integrations/datadome/js/*", "GET /integrations/datadome/tags.js", "POST /integrations/datadome/js/", "POST /integrations/datadome/js/*"] +attribute_rewriters = ["datadome"] +head_injectors = ["datadome"] +js_mode = "bundled" + +[[capabilities]] +id = "datadome" +predicate = "enabled=true;enable_protection=true" +proxy_routes = ["GET /integrations/datadome/js/", "GET /integrations/datadome/js/*", "GET /integrations/datadome/tags.js", "POST /integrations/datadome/js/", "POST /integrations/datadome/js/*"] +attribute_rewriters = ["datadome"] +head_injectors = ["datadome"] +request_filters = ["datadome"] +js_mode = "bundled" + +[[capabilities]] +id = "didomi" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/didomi/consent/*", "POST /integrations/didomi/consent/*"] +head_injectors = ["didomi"] +js_mode = "bundled" + +[[capabilities]] +id = "google_tag_manager" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/google_tag_manager/collect", "GET /integrations/google_tag_manager/g/collect", "GET /integrations/google_tag_manager/gtag.js", "GET /integrations/google_tag_manager/gtag/js", "GET /integrations/google_tag_manager/gtm.js", "POST /integrations/google_tag_manager/collect", "POST /integrations/google_tag_manager/g/collect"] +attribute_rewriters = ["google_tag_manager"] +script_rewriters = ["google_tag_manager:script"] +js_mode = "bundled" + +[[capabilities]] +id = "gpt" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/gpt/pagead/*", "GET /integrations/gpt/script", "GET /integrations/gpt/tag/*"] +attribute_rewriters = ["gpt"] +head_injectors = ["gpt"] +js_mode = "bundled" + +[[capabilities]] +id = "gpt_diagnostics" +predicate = "enabled=true" +js_mode = "standalone" + +[[capabilities]] +id = "lockr" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/lockr/api/*", "GET /integrations/lockr/sdk", "POST /integrations/lockr/api/*"] +attribute_rewriters = ["lockr"] +js_mode = "bundled" + +[[capabilities]] +id = "nextjs" +predicate = "enabled=true" +script_rewriters = ["nextjs:script", "nextjs:script#__NEXT_DATA__"] +post_processors = ["nextjs"] +js_mode = "none" + +[[capabilities]] +id = "osano" +predicate = "enabled=true" +js_mode = "bundled" + +[[capabilities]] +id = "permutive" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/permutive/api/*", "GET /integrations/permutive/cdn/*", "GET /integrations/permutive/events/*", "GET /integrations/permutive/sdk", "GET /integrations/permutive/secure-signal/*", "GET /integrations/permutive/sync/*", "POST /integrations/permutive/api/*", "POST /integrations/permutive/events/*", "POST /integrations/permutive/secure-signal/*", "POST /integrations/permutive/sync/*"] +attribute_rewriters = ["permutive"] +js_mode = "bundled" + +[[capabilities]] +id = "prebid" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/prebid/bundle.js", "GET /prebid.js", "GET /prebid.min.js", "GET /prebidjs.js", "GET /prebidjs.min.js"] +attribute_rewriters = ["prebid"] +head_injectors = ["prebid"] +js_mode = "deferred" + +[[capabilities]] +id = "sourcepoint" +predicate = "enabled=true" +proxy_routes = ["GET /integrations/sourcepoint/cdn/*", "HEAD /integrations/sourcepoint/cdn/*", "OPTIONS /integrations/sourcepoint/cdn/*", "POST /integrations/sourcepoint/cdn/*"] +attribute_rewriters = ["sourcepoint"] +head_injectors = ["sourcepoint"] +js_mode = "bundled" + +[[capabilities]] +id = "testlight" +predicate = "enabled=true" +proxy_routes = ["POST /integrations/testlight/auction"] +attribute_rewriters = ["testlight"] +js_mode = "bundled" + +[[operational]] +id = "adserver_mock" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "aps" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "creative" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "datadome" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "didomi" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "google_tag_manager" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "gpt" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "gpt_diagnostics" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "lockr" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "nextjs" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "osano" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "permutive" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "prebid" +status = "production" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "sourcepoint" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" + +[[operational]] +id = "testlight" +status = "development" +owner = "aram356" +reviewed_at = "2026-09-05" diff --git a/tools/docs-parity/manifests/maintained-sources.toml b/tools/docs-parity/manifests/maintained-sources.toml new file mode 100644 index 000000000..468ae5857 --- /dev/null +++ b/tools/docs-parity/manifests/maintained-sources.toml @@ -0,0 +1,7614 @@ +version = 1 +reviewed = true + +[[sources]] +path = ".cargo/config.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = ".claude/agents/build-validator.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/code-architect.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/code-simplifier.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/issue-creator.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/pr-creator.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/pr-reviewer.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/repo-explorer.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/agents/verify-app.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/commands/check-ci.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/commands/review-changes.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/commands/test-all.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/commands/test-crate.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/commands/verify.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".claude/settings.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = ".claude/skills/deploying-trusted-server-to-fastly/SKILL.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".env.dev" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".env.example" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".github/ISSUE_TEMPLATE/bug_report.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/ISSUE_TEMPLATE/config.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/ISSUE_TEMPLATE/story.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/ISSUE_TEMPLATE/task.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/actions/setup-integration-test-env/action.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/dependabot.yml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = ".github/pull_request_template.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = ".github/workflows/codeql.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/workflows/deploy-docs.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/workflows/format.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/workflows/integration-tests.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".github/workflows/test.yml" +mode = "comments" +grammar = "yaml" + +[[sources]] +path = ".gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = ".tool-versions" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "AGENTS.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "CHANGELOG.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "CLAUDE.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "CONTRIBUTING.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "Cargo.lock" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "FAQ_POC.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "LICENSE" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "ProjectGovernance.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "TESTING.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "clippy.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-axum/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-axum/axum.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "crates/trusted-server-adapter-axum/src/app.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-axum/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-axum/src/main.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-axum/src/middleware.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-axum/src/platform.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-axum/tests/routes.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/cloudflare.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/src/app.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/src/middleware.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/src/platform.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/tests/routes.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/app.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/backend.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/compat.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/ec_kv.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/esi_assembly.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/logging.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/main.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/management_api.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/middleware.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/platform.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/rate_limiter.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/template_cache.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/tests/kv_store/counter_store.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-fastly/tests/kv_store/opid_store.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-spin/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-spin/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-adapter-spin/spin.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "crates/trusted-server-adapter-spin/src/app.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-spin/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-spin/src/middleware.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-spin/src/platform.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-adapter-spin/tests/routes.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-cli/src/ad_templates/compare.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/ad_templates/expected.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/ad_templates/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/ad_templates/output.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/app_config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/ad_template_collector.js" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/ad_templates.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/browser.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/browser_scroll.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/collector.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/consent_stub.js" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/browser_collector.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/collector.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/crawl_plan.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/evidence.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/page_patterns.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/slot_toml.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/unit_template.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/generate/validate.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/audit/page.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/config/ad_templates.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/config/init.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/config/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/ca.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/metrics.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/prefixed_io.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/body.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/connect.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/dns.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/key.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/manager.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/commands/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/error.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/main.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/output.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/prebid_bundle.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/src/run.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/tests/config_env_overlay.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/tests/proxy_e2e.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/tests/proxy_perf.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-cli/tests/support/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-core/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "crates/trusted-server-core/benches/consent_decode.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/benches/html_processor_bench.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/build.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/asset_image_optimizer.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "crates/trusted-server-core/src/auction/config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/context.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/endpoints.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/formats.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/openrtb.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/openrtb/test_executor.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/openrtb/tests.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/plan.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/profile.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/provider.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/routing.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/telemetry.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/test_support.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction/types.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auction_config_types.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/auth.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/cache_policy.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/config_payload.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/extraction.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/gpp.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/jurisdiction.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/tcf.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/types.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent/us_privacy.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/consent_config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/constants.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/cookies.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/creative.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/creative_opportunities.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/admin.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/auth.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/batch_sync.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/consent.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/cookies.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/device.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/eids.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/finalize.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/generation.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/identify.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/kv.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/kv_backend.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/kv_types.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/partner.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/pull_sync.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/rate_limiter.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/ec/registry.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/edge_cookie.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/error.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/geo.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/host_header.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/host_rewrite.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/html_processor.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/html_processor.test.html" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/http_util.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/aps.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/datadome.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/datadome/protection.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/datadome/protection_scope.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/didomi.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/gpt.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/gpt_bootstrap.js" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/gpt_diagnostics.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/lockr.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/fixtures/inlined-data-escaped.html" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/fixtures/inlined-data-nonce.html" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/html_post_process.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/rsc_placeholders.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/script_rewriter.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/nextjs/shared.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/osano.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/permutive.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/prebid.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/registry.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/integrations/testlight.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/migration_guards.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/models.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/openrtb.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/backend_naming.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/error.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/http.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/image_optimizer.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/kv.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/template_assembly.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/template_cache.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/test_support.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/traits.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/platform/types.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/price_bucket.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/proxy.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/publisher.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/redacted.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/discovery.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/jwks.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/rotation.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/request_signing/signing.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/response_privacy.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/rsc_flight.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/s3_sigv4.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/secret_resolution.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/settings.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/settings_data.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/storage/kv_store.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/storage/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/streaming_processor.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/streaming_replacer.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/test_support.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/tester_cookie.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-core/src/tsjs.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/.dockerignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-integration-tests/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-integration-tests/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/global-setup.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/global-teardown.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/helpers/gpt-stub.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/helpers/infra.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/helpers/state.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/helpers/wait-for-ready.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/package.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/playwright.config.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/api-passthrough.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/form-rewriting.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/gpt-diagnostics.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/navigation.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/creative-sandbox.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/script-bundle.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/script-injection.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tests/wordpress/admin-injection.spec.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/browser/tsconfig.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/configs/trusted-server.integration.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/configs/viceroy-template.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +mode = "comments" +grammar = "dockerfile" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/about/page.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/api/data/route.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/api/hello/route.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/components/Navigation.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/components/RouteScript.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/contact/page.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/dashboard/page.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/gpt-diagnostics/page.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/layout.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/page.tsx" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/next.config.mjs" +mode = "comments" +grammar = "javascript" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +mode = "comments" +grammar = "dockerfile" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/theme/index.php" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/theme/wp-admin/index.php" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-integration-tests/src/bin/generate-viceroy-config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/common/assertions.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/common/config.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/common/ec.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/common/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/common/runtime.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/environments/axum.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/environments/cloudflare.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/environments/fastly.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/environments/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/frameworks/mod.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/frameworks/nextjs.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/frameworks/scenarios.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/frameworks/wordpress.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/integration.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-integration-tests/tests/parity.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-js/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-js/build.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-js/lib/.prettierignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-js/lib/.prettierrc.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/build-all.mjs" +mode = "comments" +grammar = "javascript" + +[[sources]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +mode = "comments" +grammar = "javascript" + +[[sources]] +path = "crates/trusted-server-js/lib/eslint.config.js" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/package-lock.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "crates/trusted-server-js/lib/package.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/auction.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/config.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/context.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/first_impression.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/global.d.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/log.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/queue.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/registry.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/render.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/request.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/slot_element.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/styles/normalize.css" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/templates/iframe.html" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/types.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/core/util.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/aps/render.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/click.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/dynamic_src_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/iframe.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/image.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/creative/proxy_sign.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/datadome/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/didomi/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/api.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/badges.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/binding.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/exhaustive.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/observer.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/overlay.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/presentation_helpers.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/slot_size_observer.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/store.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/lockr/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/osano/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/segments.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/prebid_modules/aliases.d.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/prebid_modules/liveIntentIdSystem.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/sourcepoint/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/sourcepoint/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/integrations/testlight/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/async.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/beacon_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/dom_insertion_dispatcher.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/globals.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/origin.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/scheduler.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/src/shared/script_guard.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/build-prebid-external.test.mjs" +mode = "comments" +grammar = "javascript" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/config.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/context.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/registry.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/render.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/core/request.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/fixtures/aps-renderer-v1.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/aps/render.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/creative/click.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/creative/helpers.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/creative/iframe.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/creative/image.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/creative/proxy_sign.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/didomi/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/ad_init.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/gpt_bootstrap.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/schedule_initial_ad_init.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/spa_hook.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/api.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/badges.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/binding.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/observer.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/overlay.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/slot_size_observer.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/store.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/types.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/osano/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/permutive/segments.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/index.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +mode = "comments" +grammar = "javascript" + +[[sources]] +path = "crates/trusted-server-js/lib/test/shared/async.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/shared/beacon_guard.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/shared/origin.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/test/shared/scheduler.test.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/tsconfig.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/vite.config.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/lib/vitest.config.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/src/bundle.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-js/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-openrtb-codegen/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "crates/trusted-server-openrtb-codegen/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-openrtb-codegen/src/main.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-openrtb/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "crates/trusted-server-openrtb/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "crates/trusted-server-openrtb/generate.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +mode = "comments" +grammar = "protobuf" + +[[sources]] +path = "crates/trusted-server-openrtb/src/codegen.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-openrtb/src/generated.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "crates/trusted-server-openrtb/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/.gitignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "docs/.prettierignore" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "docs/.prettierrc" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "docs/.vitepress/config.mts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/.vitepress/theme/custom.css" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/.vitepress/theme/index.ts" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/business-use-cases.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/epics/revenue-operations-dashboard.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/eslint.config.js" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/guide/ad-serving.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/api-reference.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/architecture.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/asset-routes.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/auction-orchestration.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/cli.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/collective-sync.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/configuration.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/creative-processing.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/ec-setup-guide.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/edge-cookies.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/error-reference.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/fastly.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/first-party-proxy.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/gdpr-compliance.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/getting-started.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/index.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integration-guide.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations-overview.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/aps.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/datadome.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/didomi.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/gam.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/google_tag_manager.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/gpt-diagnostics.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/gpt.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/kargo.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/lockr.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/nextjs.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/osano.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/permutive.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/prebid.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/integrations/sourcepoint.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/key-rotation.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/proxy-signing.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/request-signing.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/rsc-hydration.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/testing.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/ts-dev-proxy.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/guide/what-is-trusted-server.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/index.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/internal/EDGEZERO_MIGRATION.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/internal/audits/documentation-refresh-decisions.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/internal/audits/documentation-refresh-evidence.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/internal/onboarding.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/package-lock.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "docs/package.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "docs/roadmap.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "docs/superpowers/archive/2026-03-19-sequence-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/archive/2026-03-24-publisher-ids-audit-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/archive/2026-08-08-esi-cacheable-root-validation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/archive/2026-08-10-1009-esi-validation-spike.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/implementation-notes/2026-07-10-dev-proxy-performance.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-03-25-streaming-response.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-03-30-pr7-geo-client-info.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-03-31-pr8-content-rewriting-verification.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-02-pr10-logging-initialization.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-08-prebid-generic-bid-param-override-rules.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-14-edgezero-pr15-remove-fastly-core.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-15-sourcepoint-gpp-consent.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-17-pr17-cloudflare-adapter.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-04-30-server-side-ad-templates.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-27-pr20-legacy-cleanup.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-29-pr680-reviewer-findings.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-audit-implementation-plan.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-cli-implementation-plan.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-16-trusted-server-cli-respec-context.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-22-ts-dev-proxy.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-23-auction-telemetry-direct-tinybird.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-23-integration-viceroy-config-generation-plan.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-06-26-server-side-ad-template-cli.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-06-cache-control-header-implementation-plan.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-08-true-origin-streaming-fastly.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-10-dev-proxy-performance.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-12-dev-proxy-review-backfill.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-13-ssat-render-inline-creative.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-14-dev-proxy-pr-feedback.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-15-aps-openrtb-first-class-integration.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-15-gam-ts-cohort-attribution.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-20-ssat-debug-comment-config.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-22-ssat-root-document-304-prevention.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-23-per-section-gam-unit-path.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-24-prebid-refresh-gam-path-opt-out.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-24-prevent-duplicate-gpt-slot-requests.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-07-28-gpt-runtime-diagnostics-overlay.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-03-datadome-ip-excluded-client-tag.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-04-gpt-delivery-evidence-and-auction-competition.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-06-gpt-refresh-diagnostics-port.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-06-server-side-ad-templates-cache-control.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-08-1009-measurement-and-stage-0.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-08-1009-measurement-findings.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-10-1009-esi-validation-spike.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-11-config-first-auction-provider-architecture-implementation-plan.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-12-1009-esi-merge-hardening.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-14-1009-esi-parser-assembly.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-18-admin-diagnostics-review-fixes.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-18-contiguous-generated-slot-tables.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-18-pr-823-review-resolution.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-18-pre-navigation-cookie-install.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-18-ssat-debug-comment-format.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-ad-template-generation-progress.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-gam-attribution-review-resolution.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-pr-1013-review-remediation.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-pr928-comprehensive-review-resolution.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-refuse-volatile-div-collisions.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-template-cache-terminology.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-19-trusted-client-ip-header.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-20-pr-1013-round-3-review-remediation.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-21-pr-823-round-5-review-resolution.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-24-ad-template-div-id-reconciliation.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-24-ad-template-generate-scroll-staleness.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-26-first-party-sign-allowlist-enforcement.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-27-pr-1079-review-remediation.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/plans/2026-08-30-documentation-refresh.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-11-production-readiness-report-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-19-auction-orchestration-flow-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-25-streaming-response-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-03-30-pr7-geo-client-info-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-04-02-pr10-logging-initialization-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-04-08-prebid-generic-bid-param-override-rules-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-04-15-server-side-ad-templates-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-04-15-sourcepoint-gpp-consent-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-05-19-asset-s3-auth-fastly-io-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-05-28-edgezero-image-optimizer-primitive-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-05-28-external-prebid-first-party-proxy-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-11-datadome-server-side-protection-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-16-edgezero-based-ts-audit-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-16-edgezero-based-ts-cli-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-17-osano-consent-mirror-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-17-prebid-bundle-cli-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-22-auction-prebid-metrics-tinybird-grafana-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-06-26-server-side-ad-template-cli-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-06-cache-control-header-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-10-dev-proxy-performance-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-13-ssat-render-inline-creative-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-20-ssat-debug-comment-config-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-22-ssat-root-document-304-prevention-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-23-per-section-gam-unit-path-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-24-prebid-refresh-gam-path-opt-out-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-24-prevent-duplicate-gpt-slot-requests-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-07-28-gpt-runtime-diagnostics-overlay-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-03-datadome-ip-excluded-client-tag-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-04-gpt-delivery-evidence-and-auction-competition-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-05-gpt-refresh-source-and-replacement-diagnostics-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-08-esi-cacheable-root-validation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-10-config-first-auction-provider-architecture-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-11-1009-streaming-assembly-architecture.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-12-1009-esi-merge-hardening-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-14-1009-esi-parser-assembly-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-18-admin-diagnostics-review-fixes-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-18-contiguous-generated-slot-tables-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-18-pr-823-review-resolution-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-18-pre-navigation-cookie-install-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-18-ssat-debug-comment-format-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-ad-template-generation-progress-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-gam-attribution-review-resolution-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-pr-1013-review-remediation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-pr928-comprehensive-review-resolution-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-refuse-volatile-div-collisions-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-template-cache-terminology-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-19-trusted-client-ip-header-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-20-pr-1013-round-3-review-remediation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-21-pr-823-round-5-review-resolution-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-24-ad-template-div-id-reconciliation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-24-ad-template-generate-scroll-staleness-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-26-first-party-sign-allowlist-enforcement-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/superpowers/specs/2026-08-27-pr-1079-review-remediation-design.md" +mode = "whole" +disposition = "exclude" +exclude_kind = "historical" + +[[sources]] +path = "docs/tsconfig.json" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "edgezero.toml" +mode = "whole" +disposition = "include" + +[[sources]] +path = "fastly.toml" +mode = "comments" +grammar = "toml" + +[[sources]] +path = "rust-toolchain.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "scripts/batch-sync.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/benchmark.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/generate-integration-viceroy-configs.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/integration-tests-browser.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/integration-tests.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/profile.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/template-cache-local-test.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "scripts/test-cli.sh" +mode = "comments" +grammar = "shell" + +[[sources]] +path = "tinybird/datasources/access_logs_raw.datasource" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/datasources/auction_bid_stats_rollup.datasource" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/datasources/auction_events_raw.datasource" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/datasources/auction_overview_rollup.datasource" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/datasources/auction_provider_stats_rollup.datasource" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/fixtures/auction_events_raw.ndjson" +mode = "whole" +disposition = "exclude" +exclude_kind = "test_fixture" + +[[sources]] +path = "tinybird/pipes/auction_bid_stats_mv.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/auction_overview_mv.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/auction_provider_stats_mv.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/auction_summary.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/ingestion_freshness.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/provider_health.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/provider_latency.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/quarantine_counts.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/pipes/seat_yield.pipe" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/tests/auction_summary.yaml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/tests/provider_health.yaml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tinybird/tests/seat_yield.yaml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/Cargo.lock" +mode = "whole" +disposition = "exclude" +exclude_kind = "machine_data" + +[[sources]] +path = "tools/docs-parity/Cargo.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/README.md" +mode = "whole" +disposition = "include" + +[[sources]] +path = "tools/docs-parity/manifests/adapter-support.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/diagrams.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/integrations.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/maintained-sources.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/orphans.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/pages.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/retired-identifiers.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/routes.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/sensitive-allowlist.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/settings-companions.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/manifests/tracked-files.toml" +mode = "whole" +disposition = "exclude" +exclude_kind = "non_documentation" + +[[sources]] +path = "tools/docs-parity/src/classification.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/integrations.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/lib.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/main.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/markdown.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/model.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/repository.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/routes.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/scanner.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/src/settings.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/classification.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/cli.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/integrations.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/links.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/markdown.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/routes.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/scanner.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "tools/docs-parity/tests/settings.rs" +mode = "whole" +disposition = "exclude" +exclude_kind = "source_code" + +[[sources]] +path = "trusted-server.example.toml" +mode = "whole" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:0-84" +fingerprint = "sha256:96d18a296ed4a0ed9be74ea790c23cc0f66a3ad9b0f6e749bd8a1b9a236757fd" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:85-164" +fingerprint = "sha256:a9f6080dd0e29e851d1f7f58236f6fcfa6e83300eaccdbeadd18db5a8ae406a3" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:165-240" +fingerprint = "sha256:33e12d4e494dbd6173aa236d356b736835e8e78d3a67e9092618474e2c366aa6" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:241-326" +fingerprint = "sha256:188fbd901bd4c3273a1865f28dad6a0ad48beca5e49d6809026466bef9321e68" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:327-404" +fingerprint = "sha256:b6f2f3f3dbebce785dca041a1876a2014d16b0756b61d24a389d89748f936930" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:405-482" +fingerprint = "sha256:d394206bba2f8e21720bd3f4ea6363f28f38d888bc17c237ac82857c4c8489de" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:483-484" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:485-544" +fingerprint = "sha256:72b330545d60599eb2d6bebd7a58261b5162ff144eb57ee3b771b151eaeeff9d" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:545-642" +fingerprint = "sha256:4baeea027fd7fa5ae11cf6d14c5e73c6ccc4a35eb76809798c1afd3f93adc5dc" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:643-720" +fingerprint = "sha256:c50d75d3442e14fce15ddc8f0458139292daf28eb58bd210552e0b646d878205" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:721-773" +fingerprint = "sha256:23791e49473b4d7e4cc3c4a00e330ce84cbc3172eea6ae605df9254a215d9cfa" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:774-775" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:776-850" +fingerprint = "sha256:42719426c51c89053ce7ab928dc90f220fed7671e23840e03ce625af4e1952af" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:851-924" +fingerprint = "sha256:3dc8f3878e8eb43cd9a429d2dece5522f4b0e0e4ef98f0c98b7e13909bc78e13" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:925-999" +fingerprint = "sha256:d1be02c466c3be4d8dabb2647ab9a88eac8f2499f583962071fccade91e8d0a0" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1000-1062" +fingerprint = "sha256:587ac9bab73ec1f729ea5da2acfcb9372e946316e3626625c30cd3b6bd083278" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1063-1133" +fingerprint = "sha256:3550cd2ab015810129273f448c1a21c157b362a0d8ac5fd26e0d8065cd7b3f70" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1143-1195" +fingerprint = "sha256:2786fb3ae2776dfd082f7395357068fe08288bb1df856a4b835cf0bddb22e006" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1249-1306" +fingerprint = "sha256:553f6bf52a19ab378591341d47ee9aa4b47949fb8b10bcf902e72b095977068b" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1307-1387" +fingerprint = "sha256:6018d663f314e8d5399082885ed5f1d54338994b5df1fbd39b1ea5f5af34a33d" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1388-1471" +fingerprint = "sha256:e30f81b8183d83ccbca81591387d669fb390c7ac40778890f5201532b821e253" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1472-1534" +fingerprint = "sha256:60ae9d5f232cfe712f7a04703868cabfc445257524f7159238be68c47a4d6131" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1535-1608" +fingerprint = "sha256:83752ebe2695e010e731a806aa4854292de3016e79f0a79518222d6c96cbd071" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:1609-1642" +fingerprint = "sha256:aa982a43cb652a9b350ec9529f4990d935e8fdb6e1bcc205fddeb9ecc049ddfd" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:2284-2326" +fingerprint = "sha256:bcf801f2676fefd0bddb92899f68d4ad563fe6668e7184c366be0b3f7d674068" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:2580-2647" +fingerprint = "sha256:94b91583391ccb9fd2f70dc631d6588b3ea6604045ce99598f6d0d7de88d2016" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:2648-2722" +fingerprint = "sha256:c16eb211afbcc3e7941f0a272caf4552cc94e723ddf69f4ee28fb1bdc8c7547c" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:2723-2798" +fingerprint = "sha256:757f35e4f717e30ee4a9d036da8d7f6eb0d234d64195236ef59ea7790152b208" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:2799-2825" +fingerprint = "sha256:787fde76361204ed87d55af61bfa7b415fc129dcec921ffe2b88e126256e06a4" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:3062-3137" +fingerprint = "sha256:588bd0a84e391845871572e81cba07a3e0f4d164e80208eccece7b60982d2931" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:3138-3159" +fingerprint = "sha256:9e60d818d1fb70760f819eb601f8eabd36321c5656ea93d727639ff78608ff87" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:3464-3529" +fingerprint = "sha256:bec9485ca55c1e6af65e1b017deb13f12e1bb65ece52bebd7bae3fdd6ba5b2f1" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:3881-3960" +fingerprint = "sha256:92ac0a04afd97ad74783d3f8c9cca04000c5ca9de4077945da6828ec4adc6cb2" +disposition = "include" + +[[comments]] +path = ".cargo/config.toml" +selector = "bytes:4561-4613" +fingerprint = "sha256:c6e40c4bc54953269e4b9e4083222fd1c4ddd3aa38e371fe2de4af4209feb2d9" +disposition = "include" + +[[comments]] +path = ".github/actions/setup-integration-test-env/action.yml" +selector = "bytes:1632-1701" +fingerprint = "sha256:f9b3915c860b6a4806f050c3dd87ce6120edbbda8ce21972a7ede7902b8c6348" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:0-79" +fingerprint = "sha256:5562f6b93f56aa73d94a5eaa65873d742d1b3e9dea409bbac033820e6619fbe6" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:80-114" +fingerprint = "sha256:3f36e37345c494175bc160f6a01ad67f7c77b9147f18f491f8bd00d6214c9667" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:115-116" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:117-193" +fingerprint = "sha256:955c87f57585b5a9de1d91a47f63a83c23601a597fbe00fb5b7c7e740e237712" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:194-240" +fingerprint = "sha256:e02bbf2cbab0a125cd7757d06b5244ed845427310bd2d83376a97346ab6b8b75" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:241-242" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:243-267" +fingerprint = "sha256:8d209842d9d87b6b2e44f2cd7a14a65987f2845c6b8997922ccb1df826d0acb4" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:268-344" +fingerprint = "sha256:732ad45c5fcf9eb0c0421d538e32fce26b38658722150230b2347b8824285731" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:345-421" +fingerprint = "sha256:8f9106029b6cd97f0d77edfd2323a9129b7b1abe7ce8eabad7b23b15e1cdaef9" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:422-451" +fingerprint = "sha256:9c892f0f447161d6484779008a54e71123f1defcbd571f081477ac622a9e3f60" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:452-453" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:655-725" +fingerprint = "sha256:079541d905eaf577ecb1719971257a80ce7a35532f54e57fe9fb06f1b4df0ec7" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:730-799" +fingerprint = "sha256:045e450347ae50de697408ea08d7af929ad82b325bee976abd09360ae5eca41f" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:804-864" +fingerprint = "sha256:87a628750b89e13ff70b79abeabf85396041c52611c99ad6f81c9fb79c86cc05" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:869-927" +fingerprint = "sha256:6f5031031148e6be21a5e63f74dae6bcc0d643006a8aa8f52bb8f76d0535fe56" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:932-1039" +fingerprint = "sha256:a91fab67c7a837121e116a733e6c591acaef567f710992f1b674dc81400a2b89" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1149-1177" +fingerprint = "sha256:b52d205029c95ae9b44cc389ec5669364e8264ad42594bfd680c404b00e85bf2" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1214-1266" +fingerprint = "sha256:0954eebd60346a184e1d7e1ccf66709b0db47b4bd729252d9f8fbeff10df5c8b" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1295-1348" +fingerprint = "sha256:e1b8fbcd8d66a41bf538cf3db663d0aaf746709ac575bd4442082aee9b803122" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1655-1828" +fingerprint = "sha256:7336cc52242c8450ae05e798a6f3fe30787b64e20aa762bbbd265cdc5a6abef9" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1837-1892" +fingerprint = "sha256:3b6033d7b84070c39baa2998255d42300e30df7b933b615c6cc5fc60e8af39e7" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1901-1968" +fingerprint = "sha256:b63adbad3a32870bad874609ad1bead4c77ece75d8821e8da3fa71efa9f54198" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:1977-2064" +fingerprint = "sha256:0c695f29d4b152ebe8775ff188e7d365a1bc2a261276af78f265dcbcacafacd7" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2073-2184" +fingerprint = "sha256:9a7ef2a3c7aedf83dac88efbb25c9fa382839da7510cef063b1563aa78f0670b" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2193-2349" +fingerprint = "sha256:67328f8dc14ed344ed38893689e5797f65c1abf643faf632e0ba45795e863353" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2358-2468" +fingerprint = "sha256:1591df1dca8dabccba27288ccfabede47399bb2eb2c20b43b22f98b56ad6c9b4" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2477-2653" +fingerprint = "sha256:c70808c7293b98a2b0327745a160963e58029ea007398696730b88b0b81a7545" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2740-2816" +fingerprint = "sha256:5bcc0f1e0df6ddb3dc89c0dc173d9d799479e565068cf65d0967786c469a22bc" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2823-2904" +fingerprint = "sha256:eeef7eb4ac89c9ddbf078740689ea9df451e66a3b13139db1bc26ea869c346f6" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2911-2975" +fingerprint = "sha256:803702320e8f6659473c423b6781f4815ef252d97e3d7b10d80e21c2b61beda2" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:2982-3015" +fingerprint = "sha256:08c036f570035852e5fabe58d8dd35a24f2d81dee8501374cabcc66ffed2f947" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3022-3056" +fingerprint = "sha256:a66fd1db76baf8e6ac71a1aa4313cb0817a16478717b95d9b9df0c054a04f07c" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3064-3108" +fingerprint = "sha256:633bdd2871fa62d9a89830b26b5c274f784154ecf0cb41df9f63921a23886ed5" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3299-3379" +fingerprint = "sha256:711a17cb513eccce5000578c166dc95cf7334ce94055e77eda6263152fd85e58" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3390-3469" +fingerprint = "sha256:6464ac24a9e0297da0be99fcb191df644276a2d6346ea4618bda76d31897d06c" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3480-3562" +fingerprint = "sha256:d989fd08b9a3046d499de4c69881c535a2521cbe4f86ca03b7845af4507b9d0e" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3574-3798" +fingerprint = "sha256:ac4a07230f3ca42c4f60fdbef154d8a3b2babe6a788d3c4e44bd492b8f8b28ca" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3809-3858" +fingerprint = "sha256:81619eab818e0186acda226f5afa49a2e5b9d3b1653370735c959578882a02e5" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3866-3941" +fingerprint = "sha256:40f128685b59936d8fc3f9cd170b8702f22d226fb7321c611d71ef3ab33309f8" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:3948-4024" +fingerprint = "sha256:f41c5d966f116c59107790320a9e4bf4bc42ca17bd09a5d16db3133d825ca4c0" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:4031-4107" +fingerprint = "sha256:20806516037f99f27aabf05696a79ee98e3e8fac0860ea2630d6772f0ddafdaa" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:4114-4135" +fingerprint = "sha256:0f0ec25ec01230715e1755e2fe11f9e8507269920d63cf04f5f88366cbb0be6e" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:4142-4199" +fingerprint = "sha256:33198ac91cad01faf30e6ad4e44eb5cf995f7230fbbb21f9c04f25c2f51c6c82" +disposition = "include" + +[[comments]] +path = ".github/workflows/codeql.yml" +selector = "bytes:4206-4321" +fingerprint = "sha256:d9d6c972eda95b908cdaea758f1a99476bd874d5c90dafdc7ad023051afb5ec0" +disposition = "include" + +[[comments]] +path = ".github/workflows/deploy-docs.yml" +selector = "bytes:156-179" +fingerprint = "sha256:a31fc74c7723e4d54dafce45beb3e47fd1057171fa5b13e8b91066d2aa69fdfc" +disposition = "include" + +[[comments]] +path = ".github/workflows/deploy-docs.yml" +selector = "bytes:181-227" +fingerprint = "sha256:a2072be327f2f8d14d3eadcf830c548c8bb90d668728b069696ff065b5ea4635" +disposition = "include" + +[[comments]] +path = ".github/workflows/deploy-docs.yml" +selector = "bytes:292-324" +fingerprint = "sha256:7f1e2c1b723980c65a5c0db8b40c92028a809507c075cdbb90869cc83af44714" +disposition = "include" + +[[comments]] +path = ".github/workflows/deploy-docs.yml" +selector = "bytes:531-556" +fingerprint = "sha256:804beb579f1c80f65289ffc86eac2c6e941b5908036f232e1ecdc9ecd0740cc9" +disposition = "include" + +[[comments]] +path = ".github/workflows/format.yml" +selector = "bytes:1534-1607" +fingerprint = "sha256:96d3763b18b1fe0da0db932c28667a817691eaa38e57b65f4c74afbb08771974" +disposition = "include" + +[[comments]] +path = ".github/workflows/format.yml" +selector = "bytes:1614-1682" +fingerprint = "sha256:0e139f698774557455af996d50837eb2289f818a2a9c684b114216b884db67e4" +disposition = "include" + +[[comments]] +path = ".github/workflows/integration-tests.yml" +selector = "bytes:64-137" +fingerprint = "sha256:44cb34db09569eaefd2daf792323cec8baad1a60b6a691805b5bb53efb4d4142" +disposition = "include" + +[[comments]] +path = ".github/workflows/integration-tests.yml" +selector = "bytes:140-212" +fingerprint = "sha256:506e8dd5b209162954056cc65dab480b6d42be3c76e0af24042b8b01c4692f21" +disposition = "include" + +[[comments]] +path = ".github/workflows/integration-tests.yml" +selector = "bytes:4837-4911" +fingerprint = "sha256:2330dbe6289b49889b5c6d37991ef8ce3ca761a0fede60b9c7a18d4a098e366e" +disposition = "include" + +[[comments]] +path = ".github/workflows/integration-tests.yml" +selector = "bytes:4918-4966" +fingerprint = "sha256:413310b737a2a26ee161a1f960cebc3b707d3e440dc81f35e7679499c04e86ad" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:496-565" +fingerprint = "sha256:851cf80f5d728881efd2b8cf4e16f9508f6a45ad3d4ab404b515a88ec0ae0164" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:574-644" +fingerprint = "sha256:9d17d34b4053a571cbe8d7c4dc1064841cf9cdbf137eb3acc1a5de26891d8b29" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:2622-2684" +fingerprint = "sha256:dddd1c73fc23a32f9f82b87dd2dc6d4a39056019a913524783617838ee48dab5" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:2695-2752" +fingerprint = "sha256:e7462ddcda9246b78604882126b32d821fe6e487f87c76d9d0627cec8f81469d" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:3054-3140" +fingerprint = "sha256:c6669917038ed4d2a44e99243f003462d13cfc5f01ff5ededfe111fd9f0a545d" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:3311-3386" +fingerprint = "sha256:6f1c410220b2af1fbd9fa52b47f81c53e21fdcd6181be21f7eb416a495ca3a54" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:3393-3458" +fingerprint = "sha256:b86e41e444aacb0ebc00a85275f68f910262efd3f7ed9d430154a19ff33ddada" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:5670-5743" +fingerprint = "sha256:8974a9e0f79b30eaafe4754b6e51037c7d8169f81e77a359e12c3c9f790abd41" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:5752-5825" +fingerprint = "sha256:380a9741132d67dc7a1145ca3a1288615e54708bfe8f34ec358e112c3505b5a6" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:5834-5901" +fingerprint = "sha256:bccb1320a64134df7139a0055c838787b2fa48c193d3ba7f9ba1a34f04a9f7cd" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:5910-5964" +fingerprint = "sha256:139e535c32794ec9fb2b1939699f36b6ff18345b6eff7a6332fa4794d7723e55" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:7523-7601" +fingerprint = "sha256:b06c5338992f1662d3abae13e3984faf95b1ef3442b91efeefb7fceb267a7775" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:7606-7684" +fingerprint = "sha256:3f442a0ccb751273c537b03424f8eb1aee472049d49a3ef51ab8241b43ab60d0" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:7689-7770" +fingerprint = "sha256:9e45c88657f733c83e78f5f2c4570b6358794b5790139ac07a3f0903a371618a" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:7775-7852" +fingerprint = "sha256:bc25867ab4fd5236382749d0bbabbd00976c739dac3f2c2e408d3513a5430bb6" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:7857-7924" +fingerprint = "sha256:a264bf6ac101c168dae446940ca42facf19ac94a3b065b6f23ad76a8d3f23723" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:8495-8570" +fingerprint = "sha256:da8b34b5c8e2c1a3bf6a08d682555a1fcbff653614bee41ae48a9d9c51e2fd35" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:8577-8653" +fingerprint = "sha256:b895c72a0578ff3ae34474218aa8e7b684c31a786b18d8070ff1b1f2940307ab" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:8660-8736" +fingerprint = "sha256:e5dda19814742b949f9ac09203ffae37f43165b5b1470a650dd04be857431ad0" +disposition = "include" + +[[comments]] +path = ".github/workflows/test.yml" +selector = "bytes:8743-8822" +fingerprint = "sha256:c2d2731be2dc78c9c5bb1ac73695c63a420e52c587346c0a6f7d52e08a17c91c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:20-95" +fingerprint = "sha256:ce1b2bf435a3e052f5db214f637628132beaa5150dbe770f15232405d003dba5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:96-173" +fingerprint = "sha256:239173f4a35736e4d1eee5cdbcb1d44a4bdd91aeea36cece18bbe8c546c5bf01" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:174-249" +fingerprint = "sha256:1a6d6816663626eb2f1b5d428bb0d37bd670b89bae7c30d7a69fb497d3c1e4ce" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:328-403" +fingerprint = "sha256:eb75521b4fcd5fc4019cf149e837e1ad0aadf92166c35fb2ffe2886a3725a43f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:544-605" +fingerprint = "sha256:9ba7055945f2baab5504f2a83478f8f372ee0667124743b380485677bd9a3829" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:606-678" +fingerprint = "sha256:f8bc286677434657deca5016d65ca1e3b48997c5066c6ecd6e0fedb1b0780eab" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:780-859" +fingerprint = "sha256:fe46916d75ed5ab9047e84eba4e89d9ced8b2991bbdc759ef8e3d2f7e8d47605" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:860-907" +fingerprint = "sha256:70cc51b39ec3c17027345b4d8fb53015d9c0572729c5d974eb28519866615926" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:926-1004" +fingerprint = "sha256:3340d47395add17b0d3b5b2d761dcf75320aef62956e5167f53efe4dbcd237b2" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1005-1086" +fingerprint = "sha256:a0072900b252adb13ea9dcbbb7eb8d3a53ef04e9ba4d3f0085338f2d07353d32" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1087-1161" +fingerprint = "sha256:60275d9edb1c91cdab74c99ad992a355fa325e9e0e253040a7bc73a433578039" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1162-1243" +fingerprint = "sha256:2a37c8d4c0364cf8a599b3ea1f387890fe6861aec61392000904bbe67d432dcd" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1244-1325" +fingerprint = "sha256:df2aa70d82c600d288f33cc33ff1ab95c9f0fcc25170c0b3e7ccc02e8e9fa87d" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1326-1406" +fingerprint = "sha256:6d278dd935ee821ecf318017c9d8ad4787b1f336d8164876e238fcb6b2d50a33" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +selector = "bytes:1407-1478" +fingerprint = "sha256:fd68e4dbcd88974135bf4ae9a96549dc43fda4e405fb946a906871d68222c7ea" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:82-159" +fingerprint = "sha256:6493a98db1da20e6080214579f89ecaf49b1d902e5710dbee5abaac9f94c9b0b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:160-235" +fingerprint = "sha256:566809424b323ad10f2644dcc19824a0536fb8cb9520b36fbaafccb568033275" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:300-382" +fingerprint = "sha256:c70d23d39fced108447ebe5bb51a74e460540b58a2dc5528f27ab6a88048f292" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:459-537" +fingerprint = "sha256:cacfc53de4c597e5f5e9f9334974bfb5ae987091655073fc1279bb8f42a08c3b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:538-601" +fingerprint = "sha256:ecf296e610347827a730c9b458612fb410b9427d9f4657f70caf2ffe3c9dd5d7" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:632-710" +fingerprint = "sha256:7c80759792423c3f619b1d47692223a5743caf8777012748ef395b191324ccf9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:711-791" +fingerprint = "sha256:4898c230f19d434f66e1f6e29a2b2175551a9260f9856768158c475ebabf420a" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +selector = "bytes:792-857" +fingerprint = "sha256:e3f0529b409393692ccd7fe1ea88ef67dade1735bc7be60280097983bca12080" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:48-120" +fingerprint = "sha256:10d47b0ce2b9fda403ce1a385e656237626948dc759a31cd008e29ce109bb19e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:121-193" +fingerprint = "sha256:80efceb91401e42d4c6ec2ea155025a993427b13b44915ce69b46b82f2d2d686" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:194-261" +fingerprint = "sha256:7be66a5047a5e694bcb71f27f56402fd58919fc667375438f12921dc7a3a3f7f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:296-373" +fingerprint = "sha256:60439a98ccedafa2ef4a727d682aa2b19e452d526d796332d615b6dfe4935899" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:374-451" +fingerprint = "sha256:15a71af1baaba91dbc322a0be98bb7c57b89eddc963d1ec731f65c4e526a87b5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:452-531" +fingerprint = "sha256:755854682c09b5926961e9a83adc7ddef1f8a9d720b4a4ef45ae6a685b2ee0ed" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:532-610" +fingerprint = "sha256:81be78507d3128b53e9f9a008a9ded1c749aa9c02acf1866a9d329388c9a24f4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:611-685" +fingerprint = "sha256:f807f187d37a34a0722630e70e4c23bc64d060046d6bfa175fe13b5547111170" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:834-911" +fingerprint = "sha256:75860a3328b8c5bfacb7173d6dac3f69051bcb6bb9c5ac5422fe004cee917415" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:912-974" +fingerprint = "sha256:f377ff6c79d66151d92e64a66d113e7e956c0faea569b572e098c9ffe22f4624" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:975-1047" +fingerprint = "sha256:5ac68f4b9bf1610a9dea12de8a6aa1c706b8042ff5b8fd5d515d163d56259b36" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1097-1171" +fingerprint = "sha256:e41ef85474e40a790ae0fdd990c41cc254594e4479752f25cd5a768d4aaee2b8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1172-1251" +fingerprint = "sha256:9e6a0c628af99a319ea635de6dc11de9f9c8ff9ed8f2974329cd2c5129a207b1" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1252-1311" +fingerprint = "sha256:8503387bdc639a01b848f828d91f1a37361e8ba14f77f2683ca64eb3e3b7f129" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1357-1422" +fingerprint = "sha256:7718c85de7f0fa1c15896d74a6844dfaf3d84514e5d28cfa8aefd0cb01035ddb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1423-1498" +fingerprint = "sha256:2ee7d86a5c310f3b098f94373f84d5e521212bcb4fc4a554594c90e6583a2662" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +selector = "bytes:1499-1545" +fingerprint = "sha256:5971dbe468257a9ef7c47feaceab2ec7a211b2c69207bf58425adbbbb6b04f10" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:97-175" +fingerprint = "sha256:556f197003cd7126b96edeec62374c1a1cd3ae6e48dca0767ee6d67e6cf50ac9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:176-261" +fingerprint = "sha256:b89965364a172a43c15b9924734a2c61d19d83513fb3167c6cbddc1ca39b0eb0" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:262-341" +fingerprint = "sha256:1e3f4316e65978b8b1a550472d2a907b406179a24ff70d4ece4c575e3a069929" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:342-422" +fingerprint = "sha256:9aba6fa0fdb275e52c84ad49222d30e4286e5026794c3536aa3757a4c20d8fbb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:423-455" +fingerprint = "sha256:ddc5eab42bcf40bc486d8325a96cb2d3b0f67b256bb9954a279a52d8ae6522c7" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:456-457" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:458-492" +fingerprint = "sha256:13bb21629132e9108b82d77f00575c9682884aa0f609ca5d153bfd92d735e1d4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:493-530" +fingerprint = "sha256:175ceb5f98d4f0f878ed2c67abebc1de54bf02d87ebfbb4a44597f5c014ed53b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:531-568" +fingerprint = "sha256:5ae9de29b4949b6cced5afd2d568e99b4ad62d8cd0b77961bfb964221b1c8d94" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:569-616" +fingerprint = "sha256:ac6b9b59e2fcf9aca451af6465befa2c4f3cdef1c6036e3e0b9cbcd1a15d2eb8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:617-618" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:619-693" +fingerprint = "sha256:46ef5d00ea6add466a620ebd9df4c9e9f48c500723b1696ee74904afe4f34a16" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:694-747" +fingerprint = "sha256:deced4f02ed826632cffbb4044154540188d434db66c382969185f81bf650074" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:748-793" +fingerprint = "sha256:c8926f7846b3e7b368b24ff66bbe0a4286f48bcc6b7f1a58b4b6578f335ef4b4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:794-843" +fingerprint = "sha256:6e34ac6d67df97fc2775a9bcf5beeb074cd570cd87e83db18f6f54f59682b2ad" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:844-845" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:846-923" +fingerprint = "sha256:04614364aa685c024687453cdc78fe5cc0d0a13438a5b586acd5c94cccde8950" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:924-997" +fingerprint = "sha256:8745fea43e51396b1629fcfa63728d452f1d2a0704c203144768a86bf5c28ffc" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:1082-1164" +fingerprint = "sha256:822e8538f9801444f900f1d0cb875c333996a3082e8864c5a8d82a5c3d7dce59" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:1165-1247" +fingerprint = "sha256:6498109644d1c15d007829df5fdd0e9375c86654d7f7b6946c000c45825e8587" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:1248-1332" +fingerprint = "sha256:f5818221fd5891ba758f5fae92e35278cbde664cf65879789c6ae8df5a196143" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:1333-1406" +fingerprint = "sha256:fc8ce1e6da88a46f5bb23fef626d0efd3bbfb5fc06d6b4347c1cab924ef194f5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:2032-2108" +fingerprint = "sha256:b790bafd0746299559f1d53656d11799def1d4eff57a9e2257572510a1bae193" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:2109-2187" +fingerprint = "sha256:012ba02f2a37375d096f159f2496fa4cf1577346e2d46eaae2f41765cd55fd5e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:2188-2268" +fingerprint = "sha256:f359c17298b9da861b1c56581785d6cf77bcf0948165b6924e3996dfa6857dc8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:2269-2345" +fingerprint = "sha256:1400faf872f36d85594b331eec64c4be550ea3a42c62cf9745242d0df0242121" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-adapter-spin/spin.toml" +selector = "bytes:2346-2409" +fingerprint = "sha256:75d8f8b6047d53cdad8bddd12ecca9c018990a98510750fe0ee867527a20e80e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:0-44" +fingerprint = "sha256:5adf1f53ff832350979d289a56168a64b65e3e46374cc9b41010e8825c13977d" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:45-126" +fingerprint = "sha256:e73d8f5a09de8066b6e6df5a7c186c0d06bc365b324a1465c12431bdc2f70aa4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:127-128" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:129-137" +fingerprint = "sha256:bd9362f5250ca84abad703cdec81706cf7922e566696cbd19a188be9406c1d8f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:138-178" +fingerprint = "sha256:d44f3c2117152349b1d8bb3d75ce64fb98d64add635e2007d6c8d1269329226f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:179-252" +fingerprint = "sha256:b5d044e7778b7074d9b6814c3270859023d6bbf458bffb84d22e35eafcb34ac6" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:253-254" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:255-270" +fingerprint = "sha256:50bc5f001b1aad7b38c45e9f07f0eee65c99aeaaf378a081d1444acf9f6df470" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:271-289" +fingerprint = "sha256:4e26dfcda5185a253468bad2ad7408ffc46711c7b3780a8114a5214c9cf1fd5d" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:290-377" +fingerprint = "sha256:821b15e8beba96ee578e55d432c2a12b907296e985b0f33fd6c5e76e963a83e9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:378-407" +fingerprint = "sha256:a2e2a6724a98b20d96374bbd0e557371270df8d82a59097261fa600d3f2008c2" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:408-481" +fingerprint = "sha256:b5d044e7778b7074d9b6814c3270859023d6bbf458bffb84d22e35eafcb34ac6" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:482-528" +fingerprint = "sha256:dc776179b196fac5dcd575c5cd9b4bfb17810fff2dab761b81fc09dfe89328b5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:530-551" +fingerprint = "sha256:9b2d5642aa2133a396020220cce3448e1bb269baa0b5b8c46f2584462da5f7a3" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:740-763" +fingerprint = "sha256:abcb156bbe45e095c452c6c5521f37116eb36cbceb30f65aa002e8edffb53852" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +selector = "bytes:847-884" +fingerprint = "sha256:3825fc62dd27fce91027415dc78ae0ebedfd1078122c06b5c5ff13ee7b782bd8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/next.config.mjs" +selector = "bytes:0-40" +fingerprint = "sha256:69ca3c5aa0ccb61df057411aaf059a2dead95824ca9653d4bda7f864b2ac9b55" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:0-54" +fingerprint = "sha256:ae89022b901a1f4a81290c97f9cd8d553c4a0e74f2232bcd7a35acf982c555fc" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:55-124" +fingerprint = "sha256:25e58e41a1b46a6594d203fb3b88bdbb111faec298c390b90d4cae6376deae77" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:125-191" +fingerprint = "sha256:29a75ef2538de4a5e31fae0af90e2add44f42f7c1f3a52dbb2f7122ce1133e89" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:192-193" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:194-202" +fingerprint = "sha256:bd9362f5250ca84abad703cdec81706cf7922e566696cbd19a188be9406c1d8f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:203-246" +fingerprint = "sha256:e8035deedccb898ad4996502fbf9ff78a0d0cfc3570cd01922b5def9477258ba" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:247-323" +fingerprint = "sha256:061f4d462377df8523afc7aec1bd09e28f5624ebf8c7aa506567946e37cfbd22" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:324-325" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:326-341" +fingerprint = "sha256:50bc5f001b1aad7b38c45e9f07f0eee65c99aeaaf378a081d1444acf9f6df470" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:342-389" +fingerprint = "sha256:d29b013ed5963a9f2c937ee6d6827f4ea61754b17f4c5a8c56cfcd57c24d6271" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:439-498" +fingerprint = "sha256:ac902e9501d8fbbf34c60ef3120c0a9e964ee556c2a7e7ed6ab162ce43d27f45" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +selector = "bytes:538-570" +fingerprint = "sha256:39ab1fc1354229a2d6feb6ff2248d2cd1d342fe8db60d5a4bae8e941a7b327f7" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:0-631" +fingerprint = "sha256:41dcbef091c4a2679e88afbddd8ab15eae76f6511a060fcb4f31723f6c56a5fd" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:988-1011" +fingerprint = "sha256:b8d7f3bb00f601b9c066932a746bef1a32d918ccaa469965bc2cfaa14669b960" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:1111-1190" +fingerprint = "sha256:744a69058200a359022b147d2cb40c226ac2eaac8b9478dd067dae0bef649091" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:1611-1665" +fingerprint = "sha256:919b2212d567bcdaa334a0d545ca965702a27023ee1e3b25116c6dd146735310" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:2262-2317" +fingerprint = "sha256:d369490142eb62acf648aed8898b583cb62ced0b6033419f8c88fb5257e621c1" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:2483-2553" +fingerprint = "sha256:ea72b4bf59d2907492662ecaec39f4cd798d763a3f2025fa6a37a944fa9b1d51" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-all.mjs" +selector = "bytes:2744-2767" +fingerprint = "sha256:71c5de2a830c18436b4bc7d22b5875d3ab00776be3c1c52352c30255cae4c4f4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +selector = "bytes:0-292" +fingerprint = "sha256:215d35950ff0611ea6fc764f384a83d4bfef92fce1d1c7549069b29fbfbc51c8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +selector = "bytes:4303-4804" +fingerprint = "sha256:4b0f35b99b8cdaa0bbcb3c9a16489eefa45574cc94cb467f2fc643473e68f1f5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +selector = "bytes:5128-5202" +fingerprint = "sha256:cf0b02553c10fd9fabebd07d6ebd3bc104284ec77d0c39b0e13f183c3fc1404e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +selector = "bytes:5209-5276" +fingerprint = "sha256:6ab7e7f4d2fe02e2bc2af15b666e4adbe77f7615aa8aef5fc13d81a2ffa77cf4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/build-prebid-external.test.mjs" +selector = "bytes:0-27" +fingerprint = "sha256:e89bcc293adfc2b4027e72678372811994a50e2da6f8c1e81e8817a9cc053663" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/build-prebid-external.test.mjs" +selector = "bytes:1251-1323" +fingerprint = "sha256:3de1d8d3d65e0f12af904cff1de377ffca09c2e085d0c305f050d21987871f97" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/build-prebid-external.test.mjs" +selector = "bytes:1494-1570" +fingerprint = "sha256:86828c88af39b0f91c14b3758f25f4f8eabdbba40f0f6b8dc4d4bf00de38307c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:0-27" +fingerprint = "sha256:e89bcc293adfc2b4027e72678372811994a50e2da6f8c1e81e8817a9cc053663" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:29-99" +fingerprint = "sha256:5966ea9789ec7e9e054f52b22bec62a4f9e560779b9080245ba803fea3954085" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:100-178" +fingerprint = "sha256:edcc80ca04adc6cfac77bbbf58414bd01ff5baa35e111d796977a7c94bef4064" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:179-255" +fingerprint = "sha256:4ec4d3d4c7839fa0913d31da8ebb8efb6c611e7fb5a1a78eb5d3fedf75749e1e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:256-331" +fingerprint = "sha256:ae1316a0ccba41b233a17d3b45c8502189a631cf7c4e2f56cd85e2573a78fef8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:332-400" +fingerprint = "sha256:274440ad51a034a70d4011e6697ac27c522276bca1c8543d52fb46c03399a1c9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:401-403" +fingerprint = "sha256:a2c2339691fc48fbd14fb307292dff3e21222712d9240810742d7df0c6d74dfb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:404-481" +fingerprint = "sha256:cf486211084df2b96d62e611ee995bafd9cfe167d5709c9d0dcbccd14e2f0c40" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:482-549" +fingerprint = "sha256:469042bb7061d3e2ac12bf10f9e69f9290457a46470533f66bebfb855a9241cf" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:2423-2496" +fingerprint = "sha256:dffbdba1b5022a68949661671f58563b833537050ed6567950a3af5c168e0b16" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:2501-2575" +fingerprint = "sha256:a360765c225bf1890f820c5524f232b170202914e7121f1f260a1232e44eaa78" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:2580-2630" +fingerprint = "sha256:0cd7b52c81faddf30abc0c97e77ac9d8ca9f3e4fb6bfa19c624459ba05941ac0" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:2838-2910" +fingerprint = "sha256:71f700041b282fd1a537bb5cabbe9a609834e355468edf0b31c9152d408c8442" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:2915-2986" +fingerprint = "sha256:3964efabed07db0f0aff1d55922c3a2ef1093c8b92d593e49d83f765e52c3682" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:3585-3651" +fingerprint = "sha256:9176675dbabc48dadca45a6316dc16cc49d2f1b2f8c60ae6933c0a40a73637a9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:3656-3727" +fingerprint = "sha256:56fce6364b0fd1a5ee8eefd7ce65604eddb41c4238f7d16c2e9cd8c184c226d0" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:3732-3805" +fingerprint = "sha256:15cc09c350e7f831e5d16004d519d720a50813cdc307cd1259ad165af2e610ff" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:3810-3872" +fingerprint = "sha256:f9392ed506290f8c8df3e422862fcd208e1e55870129c278545c8af502dbb97c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:4579-4648" +fingerprint = "sha256:e52b3aea20fd171f0e40c66bc209deafb80efdb10b68bd1823079f45e651fbc9" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:4653-4688" +fingerprint = "sha256:29958aa1dc9a6532350b65716055f2d93e53f5d04e169b343556f1dc09fcaa5e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:5328-5398" +fingerprint = "sha256:f26fb208c8d3aab352e7d71d4184826538d03b76a500b00e04ec889bf4247f3a" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:5706-5778" +fingerprint = "sha256:b5cf7d4ae35bba0383f33e273d96d260cd8160ce83922a7e2e77afa30651b8ad" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:5783-5856" +fingerprint = "sha256:bf172bb02608363b9101dd10697935ab830623fd4b5fb053512e75058f3b4326" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:6211-6283" +fingerprint = "sha256:073e9425e772885c9ca2017bf4d30686fca32e4d65ef96bc4ac33dc141d6acf4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:6288-6328" +fingerprint = "sha256:aba4bb8fbd4a2e5aeb741b1934f2fcf252093dfa384315afd6f185c653ce5e70" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:7774-7848" +fingerprint = "sha256:732449e351db1d18e0cc8c24d9155bcf9361a6fb1d24452ea60101b986543e6f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +selector = "bytes:7853-7919" +fingerprint = "sha256:2d9a2feb56a9f191a05e1df0c5660ba38d8106120988f28c9d0edafe3e667dc6" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:20-75" +fingerprint = "sha256:da391f029c561b5c9760e63f0e072d89fc05d3e6eff7c7f10b93391f708f94c4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:76-77" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:78-156" +fingerprint = "sha256:41ee874818496ca20a8a1ac4490a4841f0af7e6e5cc3b3ac101208660079fd66" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:157-215" +fingerprint = "sha256:ec50945472785564a4c3b15b3ba18ebd89acd400bed4f3d486dc19e81a63719b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:216-217" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:218-226" +fingerprint = "sha256:71c969f874afd4e5ea8fb16e708c1a09337a4985b1905148d0704537419fe29f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:227-274" +fingerprint = "sha256:f29135aeb5ca4a1a808153a177ff70aae57fe169d922f8a2abdcfc4fcec82759" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:414-432" +fingerprint = "sha256:3dec753f475cb67e2138ded8f39e13a48172e59255da503117e96499c2156a85" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/generate.sh" +selector = "bytes:734-812" +fingerprint = "sha256:6467659af62d644b73ec349723954f29ddc878da82d2d993c2a33b897d058e75" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:0-38" +fingerprint = "sha256:f31fd3617d2bc42bd09e3eed98588bda1de8356ee6881e931e2c131b99850a03" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:39-41" +fingerprint = "sha256:a2c2339691fc48fbd14fb307292dff3e21222712d9240810742d7df0c6d74dfb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:42-121" +fingerprint = "sha256:6a99a12e36be2180ae168a39dba07747384086f1bba554d4c35d326d33169238" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:122-201" +fingerprint = "sha256:9ad719e7d43b4f31a28e079dce3c7eb59754d1c38a86ca496be725c253ab2878" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:202-204" +fingerprint = "sha256:a2c2339691fc48fbd14fb307292dff3e21222712d9240810742d7df0c6d74dfb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:205-250" +fingerprint = "sha256:894b4d3b566cfa761797053c7a6d04ffa6d80536a8ac8ceb0ec1588757694939" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:251-308" +fingerprint = "sha256:e547579e1b170e6e0489f521aa996916c4ba7b13cb3b7cc70a866a34a43493f8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:309-368" +fingerprint = "sha256:749ee82d17fc40b0434784ad1db962790a7b664570c8fc104b7b5802ceaba76e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:369-445" +fingerprint = "sha256:1e156bc139c5a92c74981c4a11ee72b907a9cbf2f98ee54f6c548f2de53cc5ed" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:446-517" +fingerprint = "sha256:62e51776db7d71d9cd701d942bdd44ef81e56b51c4e1e9d08c23ed8b8b859fa5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:518-567" +fingerprint = "sha256:4605aebc72b408c948081b82ad9e72c4ba1a32b4c7d8b5642fb2d74b7134d882" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:568-643" +fingerprint = "sha256:1b7e51673c3128ea4ae939da95229328f49658abcae0154c6a951b940b177e14" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:644-669" +fingerprint = "sha256:640edcee904e0c8c5fad54852067c71368d8f0d912cd843bfeca70c82f169deb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:670-736" +fingerprint = "sha256:e99fb8d5b541235f13415e4031dc0de97afae87b24a0cf836654b6b79fc0fbfb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:737-739" +fingerprint = "sha256:a2c2339691fc48fbd14fb307292dff3e21222712d9240810742d7df0c6d74dfb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:740-794" +fingerprint = "sha256:df3ed073657d27e0139397238885d417c9f8e66451bc21f00d4568f894e4bcf0" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:852-901" +fingerprint = "sha256:364493cdcf9b285230a2bcf84065baf93eaefad18fa5b8ae4b9b2c43b9cd40bf" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:976-1041" +fingerprint = "sha256:e257f012f7695eac4d97d479a731472620d2a42c5c8239c00a87a364fde310f3" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:1704-1721" +fingerprint = "sha256:155e5addce1954f15ffccfa9f2ff54925bec477613a26dbc0faf31aaaf1488ef" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:1872-1894" +fingerprint = "sha256:3cf7dd82f775c820c56a9631af5bb480e9569024ef00c0263a8e604228d1ba10" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:2027-2053" +fingerprint = "sha256:ce602cb6b447da7e33faf267ef35fe93e7b5dd24813f51fcd21fe5d550475389" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:2264-2278" +fingerprint = "sha256:f4298a317d0bbe10ab9d4886c8afabf4d94c72b22e1496f1eb18bf3c3dbdbe14" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:3080-3097" +fingerprint = "sha256:e0f92550572f315f3a5cb53495d91374e8dcf90aa1dd15dbddd7ecaf25ef8c15" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:3217-3234" +fingerprint = "sha256:1ca1c0ceadfb5b4a19c0c1e3eb7c79eb99d7bc8b67dbb21a78be366257f9bcd8" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:3813-3830" +fingerprint = "sha256:2688088ae36d141add6a9df40b1bf7ca7fbee9d26a2cf82f2018c73e51662b30" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:4000-4016" +fingerprint = "sha256:149d3e890611e3d186fbd61f80080a4a84a1203a548b30487754e7edfc5e4859" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:5413-5429" +fingerprint = "sha256:cf4523b4f29040e039a6a0984aad382dc234fee5c693c7a6c2c8172c0c2b9769" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:6379-6396" +fingerprint = "sha256:4dafbee693846859ad64102f83ab40a8e350e2fc55bf2962942120b2e99cbdbf" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:6399-6453" +fingerprint = "sha256:38fea9c09b2708c3eefb5ad83583e5cff575421788826302f9d96ecee73b2b56" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:6648-6662" +fingerprint = "sha256:654f3ecf94008b0784eacd2700edf8334eb8e714705739856e54919988b5c6d7" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:6789-6807" +fingerprint = "sha256:7eb73594c0005c6e2a083296f7552e9ecb8dd7ae41ce15f180cadc0927552fcb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:6907-6929" +fingerprint = "sha256:505b1ada602c0f65efeaee6e7bf25fb377db632e1293be470d4a0add8fe36b81" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:7038-7052" +fingerprint = "sha256:06c1b11a643c2798be214eed5dd9e2537f63f6b74c2f423c4ecfcea5a8b75b25" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:7162-7177" +fingerprint = "sha256:b7b720eb277918e887a76d02f8eb80b44f01317a339da775ef91426bb8eee278" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:7544-7559" +fingerprint = "sha256:a5fe013f5d7f9d045ed716da437d3787d41f78cc5e5b895948bf8b685aed4a3b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:8188-8202" +fingerprint = "sha256:356f7da885d89103cfb3b23ec11a02587ba77e49e9067522d491bbbd2efb7558" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:8832-8847" +fingerprint = "sha256:bb82e471b3be3398c936e19f2b4d10239a907a6bfa77fbd1db68da42c45f5fc7" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:9154-9174" +fingerprint = "sha256:77a7ab26ace78a11a0445ffdbe97eaf64686d4f7a6c6be5bfdbc1d5faed9ae43" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:9368-9386" +fingerprint = "sha256:570dd2addfdcff5a66926cb5fdcf6483f27ce83b167b613d1732dc7956dd1188" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:10555-10574" +fingerprint = "sha256:be0bbf114f5ecbc44b0b9922717c8f8f1a0206b7a40c13a3fc3dd5679867fd7b" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:10767-10785" +fingerprint = "sha256:2db9f94ce96558f9e68900f7a097784ca32d992bf16d640df3c363f67aabaafa" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:10903-10921" +fingerprint = "sha256:758775cce2c60899d3d5703f4c2890d073bbb4e1f8838948648b310bc2916abf" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:11039-11056" +fingerprint = "sha256:d64c7b9b553e8af22de660b55cfaacde87520b288be50e9f3ca5748790be7f9c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:12206-12220" +fingerprint = "sha256:ae9bd429985c9a0d56707bf5c84dbd04610d1b0259e09f56628cbacba507d4e5" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:12662-12713" +fingerprint = "sha256:4cb0a64f4e02eddde9b5c14f8ca6cc39e666b222a0d4e7c746e0b835ea0f0863" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13000-13023" +fingerprint = "sha256:f17e500c8c7aa3bc181cf1c21dddf56a8a72de2e26e44b8fbfafc769e6b9bd96" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13120-13135" +fingerprint = "sha256:c6bc1fe54cd87b404e6cb412c5a7571acd02148ff7f1fa7671e757aea75c174f" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13541-13577" +fingerprint = "sha256:cbc2faee82371cfa6e79ab7798d9b2dc0acfa1b9f4ca494d5f3aac7349302065" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13752-13766" +fingerprint = "sha256:133bd6f9af4608253e420d7fe9610af42206ffbc007587840856430672dc8f63" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13860-13875" +fingerprint = "sha256:e6c76eda1da2b3fb1c879e74d027e63a4de96f6db58c3eeaae53d33c9a788761" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:13992-14010" +fingerprint = "sha256:42d8d805029af659b582573254264a984859fcc10a10912599807603f312db12" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:14127-14142" +fingerprint = "sha256:5be1c09a26b4a06839c28916b09f27aa395dd20e7695a15493028cacd2baf3e4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:14321-14341" +fingerprint = "sha256:2e557b88197decc47b422aa791e8ce18091203650e612e005fb0487df99a0a3c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:14483-14528" +fingerprint = "sha256:7e96e6d1b367d9c0424640b9fd8cb06c19ece43b782d42aa556d19fa352310cb" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:14728-14746" +fingerprint = "sha256:3443f0d99d257219ce4bbec9b6cc99b6eae5b986589b538ca0ef11da6fdb363c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:14877-14891" +fingerprint = "sha256:336b578aea2f59a0133d3292ca518146d2d85519806bf7269ed7d924e3c802ac" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:15095-15145" +fingerprint = "sha256:2694ace2efc17f3a911d1b30578cf6dcf5b2b37a0c2bb952e1d0e14f8af81f3e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:16062-16122" +fingerprint = "sha256:f8d1ce0e6ee0673832603be719be12c349dbe024aebabea4976354a3b3be577a" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:16211-16235" +fingerprint = "sha256:3da75e711001da0dd5774b23e39095d721afa5629ee487b3b0b10b4e23888056" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:16704-16720" +fingerprint = "sha256:c7ce130ac9f8e1b8d0b18a614dc5fb253c58b47bca9bf7a289b5ba781b740c89" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:16950-16966" +fingerprint = "sha256:63f27b51d92841f0a00e95506d942662a3055b5ed658c1cee89c46a1caa7b175" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17020-17036" +fingerprint = "sha256:fa4721b0d776e26dbdb11c02e34054a3cfcfb910a1a1e46a22f14c716e9e8904" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17232-17247" +fingerprint = "sha256:e6c76eda1da2b3fb1c879e74d027e63a4de96f6db58c3eeaae53d33c9a788761" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17329-17353" +fingerprint = "sha256:202822ed8ba02989fcb46a0e5d293d574767864ad867c5de4eeae086a8f6e05c" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17449-17474" +fingerprint = "sha256:4bdf856bba7d428bc527b53e38d1f6b1ab6274e0282a7ad5f281112dca6c177e" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17790-17805" +fingerprint = "sha256:91966618b471a758d16b5f7c50705f19a4c893297ae889669ed3966cbe95f886" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:17932-17948" +fingerprint = "sha256:c7ce130ac9f8e1b8d0b18a614dc5fb253c58b47bca9bf7a289b5ba781b740c89" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18195-18211" +fingerprint = "sha256:63f27b51d92841f0a00e95506d942662a3055b5ed658c1cee89c46a1caa7b175" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18295-18311" +fingerprint = "sha256:fa4721b0d776e26dbdb11c02e34054a3cfcfb910a1a1e46a22f14c716e9e8904" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18447-18462" +fingerprint = "sha256:e6c76eda1da2b3fb1c879e74d027e63a4de96f6db58c3eeaae53d33c9a788761" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18626-18642" +fingerprint = "sha256:149d3e890611e3d186fbd61f80080a4a84a1203a548b30487754e7edfc5e4859" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18701-18724" +fingerprint = "sha256:035e1b43f652849e6bfb9547f7e15d6ca2b068b1d2b129208eb423eb3bbc21a4" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:18883-18963" +fingerprint = "sha256:4f72aa6c92090b9716006cb8d3f9d77469beac13f2a02988773e7019cf0e5d87" +disposition = "include" + +[[comments]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +selector = "bytes:19095-19175" +fingerprint = "sha256:6b407476e364e803c07fad8e27b8eb9c6dce885fdfaad902d9fce83d6ccd8363" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:0-68" +fingerprint = "sha256:7f8ab5d7dc1ae5f68630d08d64a2fb578555fe87a498443ee92410a0b51cd502" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:69-137" +fingerprint = "sha256:ac03a4ac2a27dae83195ea3236176a0bb64049fd01390f4f9aa9a2256fc64fb5" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:347-405" +fingerprint = "sha256:8dc85b1b6519b449fcb5ed83d01f98d8a1bae6674c0c8b1739e9c13e524f09db" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:406-476" +fingerprint = "sha256:28efacf0d22dab42445a0077e6be69d559337d1e2b40d5c196a1c29663d5db05" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:643-740" +fingerprint = "sha256:019d9da1a6978bb01377e2e123997d9e5c6ec213a23a2e17693e06e6f33355e3" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:866-912" +fingerprint = "sha256:20f48a16991eccd94689efe7bd8aef912c6b4b4fc033bcfb30600ddd590db761" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:1036-1083" +fingerprint = "sha256:7ad704d1cf51b6b96ae19c618e5e6a6193d448653e7b1078f1d41b21da5dafc6" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:1208-1258" +fingerprint = "sha256:de36288535e4688123253276aca86534f3a73c5541203dc3c474bf65f22d50be" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:1386-1438" +fingerprint = "sha256:bdc2d42f0ad1c300f8d216bd660f223c1e41c74aa63e0879ea24459b68b1389a" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:1732-1778" +fingerprint = "sha256:bc478b36915fa455ba08d6a5e330e635ec1f88df4670f6afc4eec855c6a4b861" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:1934-1998" +fingerprint = "sha256:75e2c280233f25b3cd6271162a5ea6e0338b93cc9e2cf0eb1e5508741baba37f" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:2424-2489" +fingerprint = "sha256:258578ca50e9448d7c111a22a9429697e1a7b4d4115054d553ad625ce9620d1e" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:2498-2572" +fingerprint = "sha256:49ca07bb4cc7976dde1a2ba9722f66d3acce1078bd4296a34552deb7cdf9575e" +disposition = "include" + +[[comments]] +path = "fastly.toml" +selector = "bytes:3281-3344" +fingerprint = "sha256:27b62baeba5b272e935ed0c1d39c681fbc0d2ce831df43d4f4bc63bd90b25754" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:22-93" +fingerprint = "sha256:8c4a5a9bdce39f71c6495f3ef9bca2533fce6de415b286c4084ce2d224e7cbd5" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:94-95" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:96-107" +fingerprint = "sha256:4c96720a812ac48f8573f9cb6fe975e454bcd551b3d4c47a8b1d9e1b14a722fb" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:108-137" +fingerprint = "sha256:dce54d99581baaf6b45990a1bc3098c9be96139617a23ffce8a7e177acc7be8a" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:138-181" +fingerprint = "sha256:bcdb3e7433ea8cf8f39a8d3842a11f02b9455157d29ae06bba0ae253448aad39" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:182-218" +fingerprint = "sha256:63f1a645ee789f84b8c32e118dbbc64c0e55f39ae5cd273e8320a23468b77f27" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:219-243" +fingerprint = "sha256:cccde55c988997b95e39f6c1bd5470666aa662deba17c807162682a31a628f06" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:244-269" +fingerprint = "sha256:91ca2f95c461a547bc8699119298a3a56554ffdf1d9cb45f9dd2d65e239fa43e" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:270-271" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:272-296" +fingerprint = "sha256:537cbd80b6b2d41e0a1c3d8887e571575f6c556470359f3f586cac61d83c381d" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:297-360" +fingerprint = "sha256:42511aa0e1e11d5b25d41b865e8bd91b1bc77fb98bb654d200c20f5eecc533f8" +disposition = "include" + +[[comments]] +path = "scripts/batch-sync.sh" +selector = "bytes:361-362" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:22-60" +fingerprint = "sha256:6e409c40b35c3a72ecabf16a5340a11d6baf676b987676263c4d14ece4d37c12" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:61-62" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:63-125" +fingerprint = "sha256:b1778cf963746626f071c8f93aaa76af3b9768fed895b63bf5fef79fa154f3c1" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:126-199" +fingerprint = "sha256:289c8f75aba659f1d9bd9bf1774b51bce4d0f9d6f64ae6264c2546dc95ddd19f" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:200-201" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:202-218" +fingerprint = "sha256:6f4daf5cb6ba39f2d19321b0ad0e04988ec952fa80d63afbcdb74c00a97f31a2" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:219-262" +fingerprint = "sha256:eaa3c9f6589935476d2a2f6dfb05f40390323f58b5280fd631b3783966dd632f" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:263-300" +fingerprint = "sha256:7950295f1139b175faa87a63919a33cc2d7c965caa1b4db235b33033fff4d99f" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:301-302" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:303-311" +fingerprint = "sha256:71c969f874afd4e5ea8fb16e708c1a09337a4985b1905148d0704537419fe29f" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:312-378" +fingerprint = "sha256:14389aa693e49a3e200827ee9c8f1158d8f204ec12da80c806d6d7fb3f1a68c3" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:379-451" +fingerprint = "sha256:a9d206d0a4f3ee43c32697fa1c185dff319d4e25d7b281d46cb0368088cf20be" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:452-514" +fingerprint = "sha256:970e5ba70b4fcbe6fd183b63d23448746d9e7ffeb9b446834e12b54b156315ac" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:515-596" +fingerprint = "sha256:f8ad8e6f805db145c35caeb952adf8be6a44913fcade6d5af78ce0dd587c608a" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:597-663" +fingerprint = "sha256:af3779168dbc5308e59a9d2de4b00ec3265b46f79c7ed9fe1e2acf162eb1e4c0" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:664-732" +fingerprint = "sha256:d93c4f05946773720fb3910a127622d061bc37a97b6f0e00c450a7783053ee02" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:733-810" +fingerprint = "sha256:852667869c7f7e844f665b5a087d45b1463c6edc22200eb27f6a3c36d6ad3868" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:811-812" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:813-834" +fingerprint = "sha256:c59a322a862d59eb988b13a23ebf0930e95d0d33e7a00ab3bf47309f07150178" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:835-895" +fingerprint = "sha256:581ab587cef535057b98b785dfff6c3db3d9fdcc47e640b7f7485acdf7990ab6" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:896-989" +fingerprint = "sha256:3bbbd53e2ba8a5df921fb9050d728b562362a1d624121457be9d09b9b83564b6" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:990-1042" +fingerprint = "sha256:43e5d41ecb4cbc4cdb1432a2f317a8cf32635faaa79adb779611279e420966f9" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1043-1095" +fingerprint = "sha256:e8596f3c5696eb77a0ca64ace5e8fc65138274a1606b5dc1cdcb0f21b8fd8bb7" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1096-1097" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1098-1127" +fingerprint = "sha256:336822cfa0287ca37a3111914ca55b713a40cd145f0f08c37e24c195680c564b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1128-1187" +fingerprint = "sha256:06ffe106c80f42d403963ac6807c905bffa98f6cf73b3118d9d4d568be51331a" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1188-1226" +fingerprint = "sha256:8aba0c45785746e3ff8fdfbd962ee73f8c4368d1670d74067dccf741533e6229" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1227-1266" +fingerprint = "sha256:21b5a5e382c185b64cd1ce06beac09be42b7b49d2cb1d81d380f93a27edba69e" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1267-1320" +fingerprint = "sha256:58f1674db1b7569da29f222ee1ec0284c5aeaa1ccbf48d875fe10f189e10ea69" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1321-1322" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1323-1400" +fingerprint = "sha256:2981dfd06e9fcde71595a1c3f1887326abf6e803a6651bf76499da65ea40505f" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1421-1444" +fingerprint = "sha256:fde9ca01d6f795a42ba87c7f61cbfec4d05370fafcb700bc26d95c2978624920" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:1837-1874" +fingerprint = "sha256:2e326196c72036e75fe769f3a8ced23df10a889499462736d022004f972c34e1" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:2106-2123" +fingerprint = "sha256:a3304c74369ca242bf366ca399fcf893f30941eb96ff8a0f618cb0be65e47c2a" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:3325-3378" +fingerprint = "sha256:a1df67b30ac1d42909b4fcb74749968613bfe25ede3dbcfff017a9d64ca997eb" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:4043-4078" +fingerprint = "sha256:f4d5027de964240454e0c685659934037ec6cdab5fa3c91bfa05621752a96bfd" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:4412-4431" +fingerprint = "sha256:a9d938713f4611e614f928e8641ef2f390a7396a220e557305d791b5a519470d" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:4763-4789" +fingerprint = "sha256:ac1f8592eccf55abef3da443f545e47bc46bff3742d584bf9ddff005187c2b48" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:6025-6060" +fingerprint = "sha256:643f65778e84004805a81c0f7a7dba8f6daf18c2d26849a559d0d3bc0c68bab1" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:6792-6812" +fingerprint = "sha256:4234eaf26e4ab4cc23ae4a251080767e4ca0b2cb7f27318a095bd9b95c9c1091" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:6924-6934" +fingerprint = "sha256:54475aa3c03d3ddf169a92bed0adfe05627c9888c3e852f3d54aa4233243c429" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:7088-7145" +fingerprint = "sha256:4e032c6ed88ebc58a643b2f6b7c2857a8da47e03d1d07e9fd0126b6d7ec926a6" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:7864-7905" +fingerprint = "sha256:a111c1d54894978a5a3b23d3825b045b46b8686b7eb42ae146d723734372f388" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:8895-8922" +fingerprint = "sha256:f9ded15258cd89df8c05e4ccb821a79ea5ef59a0a0495a8dd15cd3d9d818a46b" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:12886-12903" +fingerprint = "sha256:f09fb4cc010a50c9ca81636e53353cc7fc533059d32ed03cd7cf25b484170681" +disposition = "include" + +[[comments]] +path = "scripts/benchmark.sh" +selector = "bytes:14624-14638" +fingerprint = "sha256:871ae54456aaafaa275996370bc6a98bb88e7fc723e00190b41f4ac9e0942a7f" +disposition = "include" + +[[comments]] +path = "scripts/generate-integration-viceroy-configs.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/generate-integration-viceroy-configs.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/generate-integration-viceroy-configs.sh" +selector = "bytes:22-103" +fingerprint = "sha256:44d6c4b688526d1790b6c2f73aff59cee65dc920da5adf35049f808461e1f878" +disposition = "include" + +[[comments]] +path = "scripts/generate-integration-viceroy-configs.sh" +selector = "bytes:104-137" +fingerprint = "sha256:affa3ecee4d47c085344fb937946ad301dd26eea0181c09751aaf84cc9c40ab4" +disposition = "include" + +[[comments]] +path = "scripts/generate-integration-viceroy-configs.sh" +selector = "bytes:138-139" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:22-77" +fingerprint = "sha256:4a34e7c86cfbe5015e9a2cad83ed6909bcd142b9e05a534b5b1830dff035131a" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:78-79" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:80-151" +fingerprint = "sha256:1c23f135a62c784a9a2f6989acd22c9ff272453541bb0d708a9a8d53660a8e37" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:152-199" +fingerprint = "sha256:2ffc4cbe11fe761c1e6bf3afa16cf1d19dda0824426fc515e12fa937bab78493" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:200-201" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:202-218" +fingerprint = "sha256:6f4daf5cb6ba39f2d19321b0ad0e04988ec952fa80d63afbcdb74c00a97f31a2" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:219-239" +fingerprint = "sha256:ed981bd7fecf9f28fe6021fb2ba212679e802556b4a1344f0d5d47ae685698b6" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:240-320" +fingerprint = "sha256:d84a3a07c8d72d2e79b6d7c4e572a46f5cba5649a39a42f28b8bfd44d6cc453b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:321-380" +fingerprint = "sha256:7e8b288769c8d2b88c33b42c941e8d9073269fbf41d93a6cf0e4f3bd53f2c138" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:381-413" +fingerprint = "sha256:74e39ec02b76e8cf957b0d882d47dd8606a87a80bd6ac7588d8f255eb16bc981" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:414-415" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:835-862" +fingerprint = "sha256:d25836ff787a3e917b20444a92344c4e25adf8ac4b364fc9534ed22037089cf7" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:1869-1898" +fingerprint = "sha256:93a6f5d984aaae3851fbd9f101206d2ca53c01a9841e7619a429a203de286ff1" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:2272-2300" +fingerprint = "sha256:13c4b1cfd5c8f69cb1f2c67ac48ebc2571b7ee689e17a0b26137739ae31585f2" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:2419-2491" +fingerprint = "sha256:bbbf6aa2c2430f32ddb2736bb45720614a90133ca55a74ed9d3eff1045d01f78" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:2648-2693" +fingerprint = "sha256:ad5b6869a0ce08dddfe232893732641ff3fea1944ad5188b08795453449342fb" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:2902-2957" +fingerprint = "sha256:5791e0330139515452343810aa39982e7825ca4938c21187b5ca12138972fac5" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests-browser.sh" +selector = "bytes:3333-3371" +fingerprint = "sha256:993a18fb9cd83dee9b12bf74f839d84263b40574934995be42753a6f35e6024e" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:22-54" +fingerprint = "sha256:b49322bf316a7b27a512469fa324eb918c4b0c0eb44f0dc1c77817f6bfc9eb29" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:55-56" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:57-127" +fingerprint = "sha256:3ebede67bde021c308ab2bf4164dfa317805aa34440ce242036b2a47c2c70705" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:128-188" +fingerprint = "sha256:d177c4fcc9e72ae8bf66460a1d6e6cf6072952d360ac4139f59517899213ad55" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:189-190" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:191-207" +fingerprint = "sha256:6f4daf5cb6ba39f2d19321b0ad0e04988ec952fa80d63afbcdb74c00a97f31a2" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:208-228" +fingerprint = "sha256:ed981bd7fecf9f28fe6021fb2ba212679e802556b4a1344f0d5d47ae685698b6" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:229-309" +fingerprint = "sha256:d84a3a07c8d72d2e79b6d7c4e572a46f5cba5649a39a42f28b8bfd44d6cc453b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:310-369" +fingerprint = "sha256:7e8b288769c8d2b88c33b42c941e8d9073269fbf41d93a6cf0e4f3bd53f2c138" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:370-371" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:454-511" +fingerprint = "sha256:245ac929c72ecfdb98b8eac2fe699ee3d56d61ff1feeb5487b058c7066bb95bf" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:512-577" +fingerprint = "sha256:30bc1dd3c74779fc60b115f7d7ac852ad3f5a144c26fd4e22e590fb171312bb7" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:578-607" +fingerprint = "sha256:af35ddf95314aa29a0b5b7cd49c5fa2d6a09531fae7df2aa3f3c10f6eb19da64" +disposition = "include" + +[[comments]] +path = "scripts/integration-tests.sh" +selector = "bytes:1183-1263" +fingerprint = "sha256:db6c5e87782d7dd617457cbc86c2dc961635dbd94727398b7ff5b8fb1c44469f" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:22-62" +fingerprint = "sha256:aa0d7cc3aeb13356b506d2863f08a02f1328886f092b027232f6b2ffbd30f178" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:63-64" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:65-143" +fingerprint = "sha256:5a32c5d49a7c07e07c6aceb8acc74b52e56625c0f6c9b1c1f01dadb0dc9c72d4" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:144-225" +fingerprint = "sha256:c60758fd20885ef6cbf7b555f835ebdd0fc4db267514c5ef965ec4866a8a3ec4" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:226-261" +fingerprint = "sha256:19364bc7f33ba2c5d44454e4384d36f4f9fff7feedcf44d40da2ace1b33c58d5" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:262-263" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:264-280" +fingerprint = "sha256:6f4daf5cb6ba39f2d19321b0ad0e04988ec952fa80d63afbcdb74c00a97f31a2" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:281-356" +fingerprint = "sha256:acd31cf8448955dbf80cb392bc1d25f11f5f8bcade4c58bdb36418a873366e7a" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:357-421" +fingerprint = "sha256:1c44ede60e5ea3936933148c7429baaf069e697cb46eb986713b5ec35de42dff" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:422-423" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:424-432" +fingerprint = "sha256:71c969f874afd4e5ea8fb16e708c1a09337a4985b1905148d0704537419fe29f" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:433-517" +fingerprint = "sha256:4f492ec98a8ee0ef7eb45b549c65c292e0afd3ad6c3cc0bf37eaa33f5acc1cb9" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:518-564" +fingerprint = "sha256:926aa4bdbb6fe6643ac0e906cb394ab89d33ce5d204967f7a343fcc7e4e86a2b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:565-643" +fingerprint = "sha256:1ace8c6a7e5964740831d4efe5950751fbddd0e04166eb33e13470a636209034" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:644-732" +fingerprint = "sha256:78d11c64132d06a7f0ad9dc07fe836835b3c6822f59c79454978fbcabd0797a5" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:733-819" +fingerprint = "sha256:43aac9b253c9414ba4a3974c9c9d9fa59e34dc2ddb69d77a0fec381303da9362" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:820-907" +fingerprint = "sha256:c5f3c41181458afea7528f0ecdf6dab727a5f8dde0bbe276112fb3757489995a" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:908-909" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:910-919" +fingerprint = "sha256:63253b5a7f0a662c0efc33468aa0c7dd9dacd6231ffdfbd73fee455c605ec244" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:920-984" +fingerprint = "sha256:1d0d4acf713aeefcf8295c600101c6a2af0af6d168abd88ebd98079431109e07" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:985-1039" +fingerprint = "sha256:f8297696f4f09ef2f2000ccb7665ce262b1e6a24b349ea0da6dad4e9714c5142" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1040-1041" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1062-1085" +fingerprint = "sha256:fde9ca01d6f795a42ba87c7f61cbfec4d05370fafcb700bc26d95c2978624920" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1238-1248" +fingerprint = "sha256:b2db644db094a2d75f2f600e4ab73928dd2b8438b38457f5a42a238057563319" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1329-1366" +fingerprint = "sha256:2e326196c72036e75fe769f3a8ced23df10a889499462736d022004f972c34e1" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1578-1595" +fingerprint = "sha256:a3304c74369ca242bf366ca399fcf893f30941eb96ff8a0f618cb0be65e47c2a" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:1875-1923" +fingerprint = "sha256:0115f0c397d7d7825d8d0225cd9a1ce1ec447384576e74f79e975fe1d40d141e" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:2100-2150" +fingerprint = "sha256:f16cb12f100de99e51bc16c3975e39926b70fd7692f6782b95fc64b9d4bc609b" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:2155-2237" +fingerprint = "sha256:f3bf9e1fdf1aca0cf4cd3533e2d84746a8f77f69b5cb89fcd51e84b2342050d9" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:2330-2398" +fingerprint = "sha256:03927570f7e4e8e816f870e33bc58334e4058e27b9581c7272ab163b5aa243b1" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:3212-3237" +fingerprint = "sha256:d7e423e714803eec911a6862ede08e1e07d452518950d5f8118978fbbf2c9dbb" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:3663-3677" +fingerprint = "sha256:871ae54456aaafaa275996370bc6a98bb88e7fc723e00190b41f4ac9e0942a7f" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:3783-3839" +fingerprint = "sha256:df310870e439aa111fac6a4394325937a860de6246e4a6dfa4bd6a3422c813d7" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:4087-4114" +fingerprint = "sha256:1c46ed65a650a529e5202a419f4e9faaf086d0247a593ef596998ac3f79e027f" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:4276-4291" +fingerprint = "sha256:b309bab8c097f56054019bff895068404abf5a7cbc71a2b061bd0cf0c1d1d97f" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:4572-4615" +fingerprint = "sha256:b75bc2d6b9f709e710aa4f878ce6a35c8ec9a710b537a4a7b0e6991c366f7816" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:4831-4860" +fingerprint = "sha256:9e31f5aeeac8ca1e980d49556d5b39841169918e0a28ba0766f8181e14dcca75" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:5321-5344" +fingerprint = "sha256:54b613761d786a4ee3a8f001287b5b7abc60d185b2e0202b70a43036159f974a" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:5849-5899" +fingerprint = "sha256:42a47d7590dfcf23722965bb234ff8bfefe642c657ce7ab85836f6d0151ff138" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:6012-6048" +fingerprint = "sha256:d18186bcae78eb4566d629fcdba1033b746f95221ffac09d9114049b5adf2559" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:6049-6144" +fingerprint = "sha256:0cb7842d490824c60e27c873cbd8ffb653b06c45e5b85d6ba68ac38a04025c03" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:6145-6218" +fingerprint = "sha256:9ae646a8ce118838cb5a56bbcb07f8cf7d3174cd5f6ec8159f2770ab2cde3952" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:6371-6434" +fingerprint = "sha256:4b366b63ace9198f8bedfd143f20162c9ffc01f441ff833496fa48cd50c0731d" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:6738-6793" +fingerprint = "sha256:772ddc9355d1cac83c9bc685497d9bf29f05281e652e7537496f03380749e9f6" +disposition = "include" + +[[comments]] +path = "scripts/profile.sh" +selector = "bytes:7970-8002" +fingerprint = "sha256:8ad3c1be11c6579c68610cf20bffa3527e550306c2d2ece81d3ace5620e3eea4" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:20-21" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:22-74" +fingerprint = "sha256:083c9f6a322b35a1dfadd7005cb725c88d6d47b82b40b0711f06c1c1581aa8ed" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:75-76" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:77-156" +fingerprint = "sha256:928867cfa3f7d87a947b930cd7490b2a4f0e590621611e8e255b84d762b9f690" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:157-228" +fingerprint = "sha256:94fc8932b6fffc049557e973d75d4a4e4a64761b1e5c134d889ddf1be7e435e8" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:229-306" +fingerprint = "sha256:eb7e88b50f766dfd7e8ccd80f845e94e437941c3202365fe2989d90d6efe8a3e" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:307-358" +fingerprint = "sha256:686c3a4d82bfa4d0511cf35a67bb357a70d74bc924d145e9d8bb0ed53a33fe5e" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:359-360" +fingerprint = "sha256:334359b90efed75da5f0ada1d5e6b256f4a6bd0aee7eb39c0f90182a021ffc8b" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:361-369" +fingerprint = "sha256:71c969f874afd4e5ea8fb16e708c1a09337a4985b1905148d0704537419fe29f" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:370-470" +fingerprint = "sha256:b628ab75a466cc454217931dbbf6ea36f2e537f64e323eec0faf2b91cc5e1d8d" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:471-568" +fingerprint = "sha256:e180e8a073ed902c2434d1ed7c3c8092f6ef25d899cfab17d5f507c7655b3b55" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:955-1028" +fingerprint = "sha256:c60764def0406d5d05ff465f41eb80722df26f7ba3bf3724864fed73050882f9" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:1029-1105" +fingerprint = "sha256:ce9c71bc04997d05821ec584a9bb36006b5c7000ddc8f9f3006d786218e25f92" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:1106-1139" +fingerprint = "sha256:3cc1faf7c1c6bc1412ea4c6c3f3d41a1c56186c7a5b2851f56133a1089bf9474" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:1448-1489" +fingerprint = "sha256:1bc3a84b968b3aa336fdccc924570cb1adb0328608d2810ddb8b4ce49a7caac3" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:1776-1847" +fingerprint = "sha256:04f66bd1456237b1347a9eefd94adc2039cba8bb697440fdb303884765f7a5bc" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:2458-2541" +fingerprint = "sha256:38878a2901d80ca03a5be43537df5b69a5cf47116733d12e448f29e9b8ff17bd" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:2542-2624" +fingerprint = "sha256:22fa8d149e66f89b8cd10cb45bc313cefc975c8963833fa557b4012f7df42a62" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:4811-4897" +fingerprint = "sha256:2b92b09b5557afb5129e09fd19dd1274452ea64a776e35c5e2aeb445c5ce32c0" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:4898-4986" +fingerprint = "sha256:c6a350a04e2ea2306295184e7eb3156fffab7a0016b8ec051647e7f93a34a77c" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:4987-5073" +fingerprint = "sha256:ce82448942eb9fa49487886d43a4b12183aab3104f2b01230008624e94de4f97" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:5074-5119" +fingerprint = "sha256:eb2fda5f8f6e75a54b4baa2e6c400399a97cf094a3e3ae919d06c9218d4c4adf" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:6230-6310" +fingerprint = "sha256:a82ce950b777098b42a2081c7d4c8bb6a5b22c41c086172014ec72e8f3bfd97b" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:6319-6393" +fingerprint = "sha256:b4941bff299a8f969b5af6c85f00b34dbb0ce1c2f17c496f7d1abcef9dfe3f5f" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:6402-6482" +fingerprint = "sha256:da2e824cea984ed8463318aebec3ac4fae03a1e7600601092e7256eaccb6a35a" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:6491-6529" +fingerprint = "sha256:b9a9661551bfb3c554f7ceae4352d235447626050b84f16bce667509d2e208cd" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:8767-8840" +fingerprint = "sha256:51dce3e5019585aff4025432c2421bd92b44582f9375d01a9ee4b5cc05cad6df" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:8841-8897" +fingerprint = "sha256:ed17f8b17858dd882a59f5b5f781d5b3f81cbfa76010b26615cd401ef25f637e" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:9163-9240" +fingerprint = "sha256:0cd7d041399ff672d8bc667925969bdcc6265fcfc3e1a96aec8f5ef1074f6e44" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:10492-10584" +fingerprint = "sha256:ec2ee5228e2d593628adda612bd975ba5b86b24fa98fb797096b10d0b77b3481" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:10585-10663" +fingerprint = "sha256:681e72ee43976312e5409b0fa4176faa21576bebe3ae168932085613482d5885" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:10664-10713" +fingerprint = "sha256:4a1a955c4cef3d285f4bc8a5cf2b8868b52a7cf8ed61a160905dd89f2836d594" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11268-11348" +fingerprint = "sha256:9d4767c673d90b07774fb3e63c8f81cd6b6008dada3b5b08982687f6e8fefb16" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11349-11434" +fingerprint = "sha256:675a8d916210bcfdc02198777ec7bdb24cc6868ade62af76eed8b8b4360f4205" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11435-11518" +fingerprint = "sha256:3ab03e1fdf8450b43354985038191c7c38cafaa7fb8b8e915032c222522cd1ed" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11519-11601" +fingerprint = "sha256:6a4c924dfbf235a3fddd1b3cec3712ab55bf597413988c8dba86047af291d859" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11602-11659" +fingerprint = "sha256:e676b82f64ab5d29dce2c20177408d782ec9ab97812866dea7f580a839a6a75b" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11761-11842" +fingerprint = "sha256:163899f0982a15b2594503d39d98d3edc665594ea9476cdc3cd248160e37da94" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:11843-11927" +fingerprint = "sha256:086c3969123f331d396d929cb817a8c2f57a156915b29e04d119aa662f21b927" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:13745-13828" +fingerprint = "sha256:1f27b4d507500beb94901457b5fde96562e474cb7b8745e22a12d49b28067d8c" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:13829-13913" +fingerprint = "sha256:aeaac3b81fe83157436b7a9f116d2026a367adde92053b3a526015588ed2e712" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:13914-14003" +fingerprint = "sha256:d17867106d31f6aa6f9a602e2287d98f37789495daa1dc5d1fcafeedbe81feb4" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:14004-14066" +fingerprint = "sha256:7daf0d47f3398b28573355e7303b2279eb7f86db2d3cc1ddf255b3145cb59c5c" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:14494-14534" +fingerprint = "sha256:d5403cf0383031c8359a14c38ef775f02cffe3ba51fec7f4517db0e02c1ec48d" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:15303-15388" +fingerprint = "sha256:410f477ace93f54b21a7c3a14dba0f70ee2d4a42ed46d5486a1250af30f0f0ef" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:15389-15481" +fingerprint = "sha256:e6df3fe2e08288c4cae28586b5b9d48258fbff88afd073b643b4bf9f3b04e8c2" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:15482-15562" +fingerprint = "sha256:f253f419e49f3b6ae586d3ea11f0dcfac379bb78a9b326c101f9afb80a938128" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:15563-15643" +fingerprint = "sha256:5bf35a603febc1a8ca11441b38674f1193778ff57713b55131dec6894ac04601" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:15644-15699" +fingerprint = "sha256:ca5e8401e5bed3150456d73bf63c0aa74854e9ff983a0604ff715ae03bdc2fee" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16253-16338" +fingerprint = "sha256:e2b159b90081e74a77d628da7e3fefdc68daa1b475d52bc5e6038fe839553a01" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16339-16425" +fingerprint = "sha256:6d1b3d1e09aeb4f08e265b7d195c90189c71996ff46952129dd1c7147f9d4a93" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16426-16495" +fingerprint = "sha256:fa3f1489dfa2695b6537142917b29ceb1cd04b1199287659563cf472e1d52c8e" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16529-16615" +fingerprint = "sha256:f808978a03e1fd27d449ae0535af2214ce966ab92fb5244b55337d764b076751" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16616-16711" +fingerprint = "sha256:98fbe20d6ed700dbc276b2be919acb237af546dcccbaa7e0259ca9a24311c27c" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:16712-16774" +fingerprint = "sha256:94a25d3382067e32018a4952d6c25d9249afc3efb939707791fd35853d262df9" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:17040-17077" +fingerprint = "sha256:b6e6eec0380f2401e4f2ee6045d3072e3c120920b0cd6fb42870cf77393500a2" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:18971-19058" +fingerprint = "sha256:64719567ae929019f037d2c0c5070504312ec1d310b36b4907b8d876f16e8b25" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19061-19146" +fingerprint = "sha256:a08bf6cd2798016a5e7cb6f528e2b9632976c8a476f1135d0551d9202d374e6c" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19149-19219" +fingerprint = "sha256:ec4f2334442e0c92305f88c31ea07dbdc807d9245afe73d5ea33711039b9af60" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19222-19306" +fingerprint = "sha256:ed37ebeef423787d4b307c7e59ba7b35573a9ee77aa7fcc6b68dbcfa5791885d" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19309-19395" +fingerprint = "sha256:f257f2348c55275da3b7a0391150268ea96d6522ce1b7de4a2713c7fd67bf1d2" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19760-19843" +fingerprint = "sha256:5c9c1115c05186bd618c2eb5de128043bf8bb8d1c73eb9be3b46dee03a8c44f4" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19846-19929" +fingerprint = "sha256:a5da0f0229388cd05f4449f8329944c102ea0a5cef3e5dac7131f07facc590e6" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:19932-19986" +fingerprint = "sha256:bdfbde3eb8a123c2a813fc1e9594bbdd5408c1e401c6f7b58f8307ce69e729f8" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:25960-26023" +fingerprint = "sha256:20162e771340545994c4fb0ecf356ab044228641fa519e6e9f1b409a26026168" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:27477-27560" +fingerprint = "sha256:330175b20f58887df7572f80548b654242e076696db1eeb35e1477854c2fbdd0" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:27565-27649" +fingerprint = "sha256:be571a30a34a9bbef722e1a22e78f181b3fce4fbd06258b9325f7a6480734dcc" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:27654-27735" +fingerprint = "sha256:d30ffa9e62f3b7289c10040a6cfac20d89b01add186b8dd0447851267a8c6d27" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:28057-28141" +fingerprint = "sha256:f4796276e8d05235c3c17d26a8827f42d82c1fdcd9bc6f114354e43549fe91db" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:28144-28225" +fingerprint = "sha256:3471885275aa09b912a270cee67c8a49c756ea682fd88feb8f27960e396194a1" +disposition = "include" + +[[comments]] +path = "scripts/template-cache-local-test.sh" +selector = "bytes:28228-28315" +fingerprint = "sha256:582bf97b7efac9897175cabf7a21043ba145ec89b87f3fc0de8f2de1e5493855" +disposition = "include" + +[[comments]] +path = "scripts/test-cli.sh" +selector = "bytes:0-19" +fingerprint = "sha256:e2b37d0fbeebd5358ba88a5ef5469cfab940c91f397b72b95107b9b6515a9ece" +disposition = "include" diff --git a/tools/docs-parity/manifests/orphans.toml b/tools/docs-parity/manifests/orphans.toml new file mode 100644 index 000000000..0a5960a6b --- /dev/null +++ b/tools/docs-parity/manifests/orphans.toml @@ -0,0 +1,9 @@ +version = 1 +reviewed = true + +[[exceptions]] +kind = "manual" +path = "docs/guide/integrations/google_tag_manager.md" +owner = "documentation-maintainers" +reason = "Published integration detail is intentionally retained while navigation ownership is resolved." +expires_at = "2027-03-01T00:00:00Z" diff --git a/tools/docs-parity/manifests/pages.toml b/tools/docs-parity/manifests/pages.toml new file mode 100644 index 000000000..96cb04468 --- /dev/null +++ b/tools/docs-parity/manifests/pages.toml @@ -0,0 +1,256 @@ +version = 1 +reviewed = true +site_root = "docs" +vitepress_config = "docs/.vitepress/config.mts" + +[[pages]] +kind = "live" +path = "docs/guide/ad-serving.md" +route = "/guide/ad-serving" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/api-reference.md" +route = "/guide/api-reference" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/architecture.md" +route = "/guide/architecture" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/asset-routes.md" +route = "/guide/asset-routes" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/auction-orchestration.md" +route = "/guide/auction-orchestration" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/cli.md" +route = "/guide/cli" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/collective-sync.md" +route = "/guide/collective-sync" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/configuration.md" +route = "/guide/configuration" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/creative-processing.md" +route = "/guide/creative-processing" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/ec-setup-guide.md" +route = "/guide/ec-setup-guide" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/edge-cookies.md" +route = "/guide/edge-cookies" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/error-reference.md" +route = "/guide/error-reference" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/fastly.md" +route = "/guide/fastly" +navigation = false + +[[pages]] +kind = "live" +path = "docs/guide/first-party-proxy.md" +route = "/guide/first-party-proxy" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/gdpr-compliance.md" +route = "/guide/gdpr-compliance" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/getting-started.md" +route = "/guide/getting-started" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/index.md" +route = "/guide/" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integration-guide.md" +route = "/guide/integration-guide" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations-overview.md" +route = "/guide/integrations-overview" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/aps.md" +route = "/guide/integrations/aps" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/datadome.md" +route = "/guide/integrations/datadome" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/didomi.md" +route = "/guide/integrations/didomi" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/gam.md" +route = "/guide/integrations/gam" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/google_tag_manager.md" +route = "/guide/integrations/google_tag_manager" +navigation = false + +[[pages]] +kind = "live" +path = "docs/guide/integrations/gpt-diagnostics.md" +route = "/guide/integrations/gpt-diagnostics" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/gpt.md" +route = "/guide/integrations/gpt" +navigation = false + +[[pages]] +kind = "live" +path = "docs/guide/integrations/kargo.md" +route = "/guide/integrations/kargo" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/lockr.md" +route = "/guide/integrations/lockr" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/nextjs.md" +route = "/guide/integrations/nextjs" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/osano.md" +route = "/guide/integrations/osano" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/permutive.md" +route = "/guide/integrations/permutive" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/prebid.md" +route = "/guide/integrations/prebid" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/integrations/sourcepoint.md" +route = "/guide/integrations/sourcepoint" +navigation = false + +[[pages]] +kind = "live" +path = "docs/guide/key-rotation.md" +route = "/guide/key-rotation" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/proxy-signing.md" +route = "/guide/proxy-signing" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/request-signing.md" +route = "/guide/request-signing" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/rsc-hydration.md" +route = "/guide/rsc-hydration" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/testing.md" +route = "/guide/testing" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/ts-dev-proxy.md" +route = "/guide/ts-dev-proxy" +navigation = true + +[[pages]] +kind = "live" +path = "docs/guide/what-is-trusted-server.md" +route = "/guide/what-is-trusted-server" +navigation = true + +[[pages]] +kind = "live" +path = "docs/index.md" +route = "/" +navigation = true + +[[pages]] +kind = "live" +path = "docs/roadmap.md" +route = "/roadmap" +navigation = true diff --git a/tools/docs-parity/manifests/retired-identifiers.toml b/tools/docs-parity/manifests/retired-identifiers.toml new file mode 100644 index 000000000..6ff351411 --- /dev/null +++ b/tools/docs-parity/manifests/retired-identifiers.toml @@ -0,0 +1,82 @@ +version = 1 +reviewed = true + +[[identifiers]] +kind = "identifier" +fingerprint = "sha256:9d155035a90b33ea3c44f8ebfc4bad1c3a806cc5e9236fe342d07d620ca5264a" +normalized_length = 18 +word_count = 1 +case_insensitive = true +whitespace_tolerant = false + +[[identifiers]] +kind = "identifier" +fingerprint = "sha256:a23c8f7a72d4ed48ef48e0d65fcb7e5b3de28b37bce3c18c4a027d38e5b97b69" +normalized_length = 10 +word_count = 1 +case_insensitive = true +whitespace_tolerant = false + +[[identifiers]] +kind = "identifier" +fingerprint = "sha256:47e9ab61971c8228ee3a5a7e4e7f492a8a7d2ed05000612351d2798a1ecfc5d5" +normalized_length = 19 +word_count = 1 +case_insensitive = true +whitespace_tolerant = false + +[[identifiers]] +kind = "identifier" +fingerprint = "sha256:262d2f5569ef006ffeb288d606696f930c70dbeec9986ae066554a1b7ba4348c" +normalized_length = 24 +word_count = 1 +case_insensitive = true +whitespace_tolerant = false + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:d7ead80b23e0925b55d81d235f4ec7789ef76bbc39b64bd4856858607005a45e" +normalized_length = 36 +word_count = 6 +case_insensitive = true +whitespace_tolerant = true + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:fabebfaf9f751578404dade1f6911c5211e55112155cd1eb37742ab5eeaa29f5" +normalized_length = 20 +word_count = 4 +case_insensitive = true +whitespace_tolerant = true + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:c85965885f1663af8d435525074cc6a70c1548b8e310220540502b6a0e35def2" +normalized_length = 48 +word_count = 8 +case_insensitive = true +whitespace_tolerant = true + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:3ced6222be77642263490f3cf2bd0a95b276965f2f85586d1d7a32c7c3219e0c" +normalized_length = 24 +word_count = 4 +case_insensitive = true +whitespace_tolerant = true + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:524b06e6a628b58b984b7e29c803bf378268afd683b9941d11b88c68251cdc58" +normalized_length = 35 +word_count = 6 +case_insensitive = true +whitespace_tolerant = true + +[[identifiers]] +kind = "access_phrase" +fingerprint = "sha256:2c40b81f8f43edb238641a6bd9c8439a028c11c83ffe46e6c5aee6190cc65210" +normalized_length = 24 +word_count = 3 +case_insensitive = true +whitespace_tolerant = true diff --git a/tools/docs-parity/manifests/routes.toml b/tools/docs-parity/manifests/routes.toml new file mode 100644 index 000000000..94996a6e4 --- /dev/null +++ b/tools/docs-parity/manifests/routes.toml @@ -0,0 +1,285 @@ +version = 1 +reviewed = true + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/.well-known/trusted-server.json" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/verify-signature" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/admin/keys/rotate" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["axum", "cloudflare", "spin"] +path = "/_ts/admin/keys/rotate" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "unsupported" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/admin/keys/deactivate" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["axum", "cloudflare", "spin"] +path = "/_ts/admin/keys/deactivate" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "unsupported" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/admin/ec" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["axum", "cloudflare", "spin"] +path = "/_ts/admin/ec" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "unsupported" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/admin/ec/{id}" +methods = ["GET"] +shape = "template" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["axum", "cloudflare", "spin"] +path = "/_ts/admin/ec/{id}" +methods = ["GET"] +shape = "template" +predicate = "always" +status = "unsupported" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/_ts/admin/eids" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/admin/keys/rotate" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "literal" +predicate = "always" +status = "guarded" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/admin/keys/deactivate" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "literal" +predicate = "always" +status = "guarded" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/auction" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/_ts/page-bids" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/_ts/page-bids" +methods = ["OPTIONS"] +shape = "literal" +predicate = "always" +status = "guarded" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/__ts/page-bids" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/__ts/page-bids" +methods = ["OPTIONS"] +shape = "literal" +predicate = "always" +status = "guarded" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/first-party/proxy" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/first-party/click" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/first-party/sign" +methods = ["GET", "POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/first-party/proxy-rebuild" +methods = ["GET", "POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/api/v1/batch-sync" +methods = ["POST"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/api/v1/identify" +methods = ["GET", "OPTIONS"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/set-tester" +methods = ["GET"] +shape = "literal" +predicate = "settings.tester_cookie.enabled" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/clear-tester" +methods = ["GET"] +shape = "literal" +predicate = "settings.tester_cookie.enabled" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "literal" +predicate = "publisher_fallback" +status = "publisher_fallback" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/{*rest}" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "template" +predicate = "publisher_fallback" +status = "publisher_fallback" + +[[routes]] +adapters = ["fastly", "axum", "spin"] +path = "/health" +methods = ["GET"] +shape = "literal" +predicate = "always" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "/_ts/debug/ja4" +methods = ["GET"] +shape = "conditional" +predicate = "settings.debug.ja4_endpoint_enabled" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/static/tsjs=" +methods = ["GET"] +shape = "template" +predicate = "path.starts_with(/static/tsjs=)" +status = "real" + +[[routes]] +adapters = ["fastly"] +path = "{*rest}" +methods = ["GET", "HEAD"] +shape = "config_derived" +predicate = "settings.proxy.asset_routes[]" +status = "real" + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "literal" +predicate = "startup_error" +status = "startup_error" +startup_router = true + +[[routes]] +adapters = ["fastly", "axum", "cloudflare", "spin"] +path = "/{*rest}" +methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"] +shape = "template" +predicate = "startup_error" +status = "startup_error" +startup_router = true + +[[routes]] +adapters = ["fastly", "spin"] +path = "/health" +methods = ["GET"] +shape = "literal" +predicate = "startup_error" +status = "real" +startup_router = true diff --git a/tools/docs-parity/manifests/sensitive-allowlist.toml b/tools/docs-parity/manifests/sensitive-allowlist.toml new file mode 100644 index 000000000..82867d1f9 --- /dev/null +++ b/tools/docs-parity/manifests/sensitive-allowlist.toml @@ -0,0 +1,59457 @@ +version = 1 +reviewed = true + +[[exceptions]] +class = "vendor_url" +path = ".claude/agents/pr-reviewer.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26380-26390" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".claude/agents/pr-reviewer.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318-333" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.dev" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1027-1048" +fingerprint = "sha256:64c766d6470487db22e6c0c86b2e067d743623e2b32a15e0f4fbd5f03fec3cc5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.dev" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:846-861" +fingerprint = "sha256:8c01ee3b9a5e107671b82665f3f1570f6d41d98165df65d47569ae72a6ff8bac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.dev" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:866-887" +fingerprint = "sha256:64c766d6470487db22e6c0c86b2e067d743623e2b32a15e0f4fbd5f03fec3cc5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.dev" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:963-978" +fingerprint = "sha256:8c01ee3b9a5e107671b82665f3f1570f6d41d98165df65d47569ae72a6ff8bac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.example" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1032-1045" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.example" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1092-1112" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.example" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3716-3738" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.example" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3798-3820" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".env.example" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:976-989" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/dependabot.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:227-242" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2207-2222" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2518-2533" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3636-3651" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4225-4240" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:744-749" +fingerprint = "sha256:fcbfa7e04d5ac526c82d5ed12bb421fd9d812a84d695e32939734c0fb785909d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:818-823" +fingerprint = "sha256:fcbfa7e04d5ac526c82d5ed12bb421fd9d812a84d695e32939734c0fb785909d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:883-888" +fingerprint = "sha256:fcbfa7e04d5ac526c82d5ed12bb421fd9d812a84d695e32939734c0fb785909d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = ".github/workflows/codeql.yml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:911-921" +fingerprint = "sha256:6d9f67fd6ba9e185005557243cd8cdc6b05775d8d37e6cb90b450d9162d95d37" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133-151" +fingerprint = "sha256:cb56f863dec1be696560694248269ab7c2090eb6d9e6b0f8fc5377aeea0bd1d4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15315-15325" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15554-15565" +fingerprint = "sha256:26d0ad8f328f1df6341530df36155a589646289178c32704cbe85291504b5369" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17370-17380" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17446-17456" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17524-17534" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17602-17612" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17680-17690" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17758-17768" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17836-17846" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17914-17924" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17992-18002" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18070-18080" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:222-232" +fingerprint = "sha256:046e250702a810f4f8475a6f5b428f40449f0d8f819a86814031cb48e2b55c8b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7934-7944" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CHANGELOG.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8863-8873" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10748-10758" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10816-10826" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2565-2580" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2850-2865" +fingerprint = "sha256:606ddc0e3ccad8ecb95d87b416f8e502e68ad00440e87dd66c3bd341ea289a93" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3421-3435" +fingerprint = "sha256:2abfd76895b85753384cd3ebab9c662ba5d2a2cab75d43a808e40ca6c4872ee2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:379-394" +fingerprint = "sha256:606ddc0e3ccad8ecb95d87b416f8e502e68ad00440e87dd66c3bd341ea289a93" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:484-499" +fingerprint = "sha256:606ddc0e3ccad8ecb95d87b416f8e502e68ad00440e87dd66c3bd341ea289a93" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:917-932" +fingerprint = "sha256:606ddc0e3ccad8ecb95d87b416f8e502e68ad00440e87dd66c3bd341ea289a93" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "CONTRIBUTING.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9939-9946" +fingerprint = "sha256:9fc706a8a180da0b182ea38d6091fd694a16b9fb9186053b34c0604bdaecce20" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100154-100164" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10018-10028" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100377-100387" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100668-100678" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100997-101007" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101289-101299" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101530-101540" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101782-101792" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102276-102286" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10247-10257" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102476-102486" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102749-102759" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102937-102947" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103130-103140" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103358-103368" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103592-103602" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103855-103865" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104120-104130" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104312-104322" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104633-104643" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104916-104926" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105242-105252" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105488-105498" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105889-105899" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106291-106301" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106482-106492" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106731-106741" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107005-107015" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107258-107268" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107492-107502" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107749-107759" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108046-108056" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108294-108304" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108552-108562" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108786-108796" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109047-109057" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109445-109455" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109718-109728" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109949-109959" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110208-110218" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110507-110517" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11058-11068" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110767-110777" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110971-110981" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1110-1120" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111202-111212" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111455-111465" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111649-111659" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111891-111901" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112082-112092" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112279-112289" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112543-112553" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112732-112742" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112925-112935" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113116-113126" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113355-113365" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113549-113559" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11360-11370" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113802-113812" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114131-114141" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114373-114383" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114569-114579" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114887-114897" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115170-115180" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115364-115374" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115648-115658" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115899-115909" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116132-116142" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116392-116402" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116581-116591" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116833-116843" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11700-11710" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117083-117093" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117342-117352" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117575-117585" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117828-117838" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118056-118066" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118347-118357" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118592-118602" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119100-119110" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119339-119349" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119583-119593" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11983-11993" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119843-119853" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120093-120103" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120414-120424" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120610-120620" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120851-120861" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121073-121083" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121315-121325" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121551-121561" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121787-121797" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121977-121987" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12227-12237" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122317-122327" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122575-122585" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122812-122822" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123074-123084" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123367-123377" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123731-123741" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123973-123983" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124213-124223" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12453-12463" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124543-124553" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124872-124882" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125114-125124" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125304-125314" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125812-125822" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126058-126068" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126383-126393" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12645-12655" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126769-126779" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127132-127142" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127329-127339" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127521-127531" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127812-127822" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128070-128080" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12838-12848" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13028-13038" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1306-1316" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:131677-131687" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:131873-131883" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132195-132205" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132387-132397" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13245-13255" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132579-132589" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132767-132777" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133012-133022" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133217-133227" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133414-133424" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133609-133619" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133807-133817" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134048-134058" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134236-134246" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13432-13442" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134550-134560" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134797-134807" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135088-135098" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135277-135287" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135470-135480" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135663-135673" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135856-135866" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136045-136055" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136306-136316" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136630-136640" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136937-136947" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13694-13704" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137134-137144" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137325-137335" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137562-137572" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137806-137816" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138008-138018" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138265-138275" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138559-138569" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138871-138881" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13889-13899" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139122-139132" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139394-139404" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139696-139706" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139931-139941" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140178-140188" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140456-140466" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140753-140763" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14081-14091" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141037-141047" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141276-141286" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141516-141526" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141816-141826" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142052-142062" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142281-142291" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142499-142509" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142792-142802" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142988-142998" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143242-143252" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14338-14348" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143439-143449" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143760-143770" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144023-144033" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144280-144290" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144480-144490" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144753-144763" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144988-144998" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145220-145230" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145462-145472" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145704-145714" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145946-145956" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14612-14622" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146182-146192" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146620-146630" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147091-147101" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147299-147309" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147504-147514" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147709-147719" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147910-147920" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148111-148121" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148316-148326" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148518-148528" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148720-148730" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14892-14902" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148923-148933" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149126-149136" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149333-149343" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149540-149550" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149744-149754" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149948-149958" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150139-150149" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150359-150369" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150585-150595" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150820-150830" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151099-151109" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151354-151364" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151710-151720" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152040-152050" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152421-152431" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152787-152797" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153346-153356" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153690-153700" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153953-153963" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15396-15406" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154149-154159" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1544-1554" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154509-154519" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154743-154753" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155002-155012" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155218-155228" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155484-155494" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155755-155765" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155994-156004" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156247-156257" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156485-156495" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156754-156764" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15687-15697" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156975-156985" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157223-157233" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157482-157492" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157732-157742" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16018-16028" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16253-16263" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16553-16563" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16809-16819" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17004-17014" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17238-17248" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17485-17495" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1753-1763" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:177-187" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17733-17743" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17996-18006" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18258-18268" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18448-18458" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18669-18679" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18860-18870" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19093-19103" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19336-19346" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19610-19620" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1969-1979" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19802-19812" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20187-20197" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20384-20394" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20629-20639" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20895-20905" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21136-21146" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21371-21381" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2161-2171" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21635-21645" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21980-21990" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22235-22245" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22431-22441" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22654-22664" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22875-22885" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23098-23108" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23534-23544" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23774-23784" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23971-23981" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24248-24258" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24511-24521" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24797-24807" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2494-2504" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25089-25099" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25322-25332" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25582-25592" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25945-25955" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26199-26209" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26461-26471" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26727-26737" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2691-2701" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27019-27029" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27305-27315" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27573-27583" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27840-27850" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28029-28039" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28280-28290" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28576-28586" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28804-28814" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29043-29053" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2921-2931" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29346-29356" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29579-29589" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29827-29837" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30113-30123" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30367-30377" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30607-30617" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30916-30926" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31144-31154" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31425-31435" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3162-3172" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31649-31659" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31925-31935" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32178-32188" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32415-32425" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32672-32682" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32896-32906" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33085-33095" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33279-33289" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33496-33506" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33690-33700" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33881-33891" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34121-34131" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3431-3441" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3625-3635" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:365-375" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38036-38046" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3816-3826" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38227-38237" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38426-38436" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38770-38780" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39028-39038" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39252-39262" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39485-39495" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39755-39765" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39952-39962" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40197-40207" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40443-40453" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40678-40688" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41056-41066" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41319-41329" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41530-41540" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4164-4174" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41721-41731" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42217-42227" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42476-42486" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42718-42728" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43009-43019" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43197-43207" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43411-43421" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43656-43666" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43849-43859" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44087-44097" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44282-44292" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4438-4448" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44472-44482" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44708-44718" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44900-44910" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45099-45109" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45331-45341" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45519-45529" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45764-45774" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46107-46117" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46357-46367" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46558-46568" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46823-46833" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4699-4709" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47021-47031" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47279-47289" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47476-47486" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47673-47683" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47870-47880" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48224-48234" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48455-48465" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48708-48718" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48939-48949" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49208-49218" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49495-49505" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49759-49769" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49949-49959" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50193-50203" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5031-5041" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50544-50554" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50793-50803" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51118-51128" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51312-51322" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51535-51545" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51761-51771" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52019-52029" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52252-52262" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52480-52490" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52674-52684" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52861-52871" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53050-53060" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5326-5336" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53276-53286" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53514-53524" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53708-53718" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53955-53965" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54186-54196" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54422-54432" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54705-54715" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54897-54907" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55087-55097" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55488-55498" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55797-55807" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5606-5616" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56120-56130" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56408-56418" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56825-56835" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57136-57146" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57549-57559" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57809-57819" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58164-58174" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58389-58399" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5863-5873" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58688-58698" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58970-58980" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59297-59307" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59495-59505" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59823-59833" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60019-60029" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60326-60336" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60520-60530" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60708-60718" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60967-60977" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:610-620" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61216-61226" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6126-6136" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61471-61481" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61740-61750" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61967-61977" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62163-62173" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62434-62444" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62628-62638" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62852-62862" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63071-63081" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63260-63270" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63569-63579" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63818-63828" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64155-64165" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64440-64450" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64676-64686" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6471-6481" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64915-64925" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65155-65165" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65412-65422" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65633-65643" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65918-65928" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66171-66181" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66420-66430" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66641-66651" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66831-66841" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6701-6711" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67020-67030" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67213-67223" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67440-67450" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67688-67698" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67891-67901" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68089-68099" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68280-68290" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68469-68479" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68662-68672" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68884-68894" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6892-6902" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69079-69089" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69319-69329" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69715-69725" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69902-69912" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70098-70108" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70347-70357" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70599-70609" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70790-70800" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7086-7096" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70981-70991" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71168-71178" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71358-71368" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71547-71557" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71746-71756" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71941-71951" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72175-72185" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72428-72438" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72633-72643" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72827-72837" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73044-73054" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7327-7337" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73281-73291" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73498-73508" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73803-73813" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74051-74061" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74374-74384" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74600-74610" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74794-74804" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75051-75061" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75278-75288" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75535-75545" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75728-75738" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7589-7599" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75959-75969" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76219-76229" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76454-76464" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76678-76688" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76903-76913" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77106-77116" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77299-77309" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77495-77505" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77692-77702" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77886-77896" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78086-78096" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78328-78338" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78570-78580" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78819-78829" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79073-79083" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79357-79367" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79632-79642" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79927-79937" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80114-80124" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80359-80369" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80547-80557" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80785-80795" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81030-81040" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81307-81317" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81543-81553" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81786-81796" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8182-8192" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82037-82047" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82306-82316" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82568-82578" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82832-82842" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83086-83096" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83335-83345" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83638-83648" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83941-83951" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84169-84179" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84398-84408" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84647-84657" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84909-84919" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85098-85108" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85334-85344" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8555-8565" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85565-85575" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85757-85767" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86035-86045" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86239-86249" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86475-86485" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86698-86708" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86893-86903" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87125-87135" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87322-87332" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8746-8756" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87568-87578" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87812-87822" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88058-88068" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:881-891" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88343-88353" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88570-88580" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88813-88823" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89062-89072" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8938-8948" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89452-89462" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89742-89752" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90031-90041" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90263-90273" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90493-90503" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90689-90699" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90922-90932" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9130-9140" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91309-91319" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91717-91727" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92012-92022" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92236-92246" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92425-92435" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92613-92623" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92871-92881" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93121-93131" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9323-9333" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93396-93406" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93645-93655" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93892-93902" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94125-94135" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94358-94368" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94548-94558" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94828-94838" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95054-95064" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95288-95298" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9554-9564" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95555-95565" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95790-95800" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96041-96051" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96323-96333" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96584-96594" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96777-96787" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97496-97506" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9784-9794" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98176-98186" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98468-98478" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98765-98775" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99145-99155" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99482-99492" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99727-99737" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99924-99934" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:34425-34551" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:34653-34779" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:35159-35285" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:35608-35734" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:36141-36267" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:36632-36758" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:37148-37274" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.lock" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:37716-37842" +fingerprint = "sha256:c352ab112dd7fbb392e09b6059e8ddc44e002eccd886df9e4e4ee545e7826027" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1837-1847" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1992-2002" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2143-2153" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2292-2302" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2432-2442" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "Cargo.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2547-2557" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "LICENSE" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11004-11018" +fingerprint = "sha256:a669dc3a1a47e0f139c46b1b9314e66af9a1251c86582afc1819c431fa9881a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "LICENSE" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133-147" +fingerprint = "sha256:a669dc3a1a47e0f139c46b1b9314e66af9a1251c86582afc1819c431fa9881a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1003-1023" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1137-1157" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1275-1295" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1417-1437" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1548-1568" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1717-1737" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:660-680" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "clippy.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36-53" +fingerprint = "sha256:4edbdde8ae95069e20a6f36da64eb12ecfd14210eac49cf550b16164f1e9f8f3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-cloudflare/.gitignore" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53-71" +fingerprint = "sha256:2903f27aa2fa3c07ba9fd0c829665cd72c1558cee6b934c2e2cfffe50f3ac2de" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-cloudflare/build.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:646-664" +fingerprint = "sha256:2903f27aa2fa3c07ba9fd0c829665cd72c1558cee6b934c2e2cfffe50f3ac2de" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-cloudflare/build.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:698-716" +fingerprint = "sha256:2903f27aa2fa3c07ba9fd0c829665cd72c1558cee6b934c2e2cfffe50f3ac2de" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-cloudflare/build.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:749-767" +fingerprint = "sha256:2903f27aa2fa3c07ba9fd0c829665cd72c1558cee6b934c2e2cfffe50f3ac2de" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-adapter-cloudflare/src/app.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:28073-28087" +fingerprint = "sha256:8e70fdbd0400b7a21539fd15fb4ab86c129f7cbd99261dbb0d95c18df8dec177" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-adapter-cloudflare/src/app.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:29926-29940" +fingerprint = "sha256:8e70fdbd0400b7a21539fd15fb4ab86c129f7cbd99261dbb0d95c18df8dec177" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-adapter-cloudflare/src/app.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:31745-31759" +fingerprint = "sha256:8e70fdbd0400b7a21539fd15fb4ab86c129f7cbd99261dbb0d95c18df8dec177" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103025-103043" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104596-104614" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112076-112094" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112180-112205" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120981-120999" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121101-121126" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125728-125746" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125803-125821" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127720-127738" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127824-127849" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61656-61674" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61768-61793" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62744-62759" +fingerprint = "sha256:50b7087bb371bcdca76842c59955d275f99133f7efb2f47ae314b612c95a6511" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64075-64093" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64179-64204" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64925-64940" +fingerprint = "sha256:50b7087bb371bcdca76842c59955d275f99133f7efb2f47ae314b612c95a6511" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85518-85536" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/app.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85622-85647" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/backend.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19269-19286" +fingerprint = "sha256:1b7d72701671b0ac1cbd0ed1a3dd5d68fbccf253947ee7a9fbc334314f61dcfc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20035-20053" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20139-20164" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24358-24376" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24462-24487" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25432-25450" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/management_api.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1123-1137" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/middleware.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12461-12479" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/middleware.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12565-12590" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/platform.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1681-1695" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14037-14064" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14599-14626" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14673-14700" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14865-14892" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14939-14966" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15125-15152" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15229-15256" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16186-16213" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16642-16669" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-spin/.gitignore" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34-46" +fingerprint = "sha256:4dff6d2b3ffc89d50d7ca7b438e0ba065bc2db016080adc1c30abe49a336406a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-adapter-spin/src/app.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:40375-40389" +fingerprint = "sha256:8e70fdbd0400b7a21539fd15fb4ab86c129f7cbd99261dbb0d95c18df8dec177" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-adapter-spin/tests/routes.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27945-27960" +fingerprint = "sha256:828e55c7e3528b6e9011059da54d79827bc21e8bd5ab830544e57da45e3864ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/app_config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1567-1575" +fingerprint = "sha256:7f75361aac296f98fa63d0823e670b46a87444d4e23bf04b118c6562e935b941" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/app_config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:832-840" +fingerprint = "sha256:7f75361aac296f98fa63d0823e670b46a87444d4e23bf04b118c6562e935b941" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19276-19300" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19416-19446" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19523-19545" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19588-19602" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19648-19665" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19711-19726" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20565-20589" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20681-20705" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21507-21537" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21696-21726" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21778-21808" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9540-9564" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9736-9766" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/browser_collector.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25379-25389" +fingerprint = "sha256:c88401ca77418b712df0c57d88ef78fce9154f751b65c70edcbc48fa0234e3f7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26382-26412" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28808-28838" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29332-29362" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29767-29797" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30286-30316" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30735-30765" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3210-3240" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3244-3268" +fingerprint = "sha256:37266a0d0d570a185874f3a86f6b98c20e9be4376d8f1dce6605edfd13c7cb04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36189-36219" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42072-42102" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46976-47006" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47163-47193" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49058-49088" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50799-50829" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54175-54205" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55116-55146" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60166-60190" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60361-60391" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76327-76357" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77935-77959" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78869-78899" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95099-95129" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32895-32920" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32936-32954" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33482-33507" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33523-33541" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33801-33826" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/ca.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12350-12375" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/ca.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12461-12486" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13717-13742" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13777-13795" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13933-13958" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14099-14124" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14217-14235" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14377-14395" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14604-14629" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14746-14764" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14964-14982" +fingerprint = "sha256:9faa902aeaddb57cc97627dfeb92717b68334e37c135b2499c0f085ef7f5556a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15231-15249" +fingerprint = "sha256:9faa902aeaddb57cc97627dfeb92717b68334e37c135b2499c0f085ef7f5556a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15530-15547" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15808-15825" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16113-16130" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16490-16510" +fingerprint = "sha256:075e1a3bb55a2987f34641bbabf675b5322d87c9a32a864d4401874d5c50dc5d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16735-16752" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17578-17595" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18510-18528" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18942-18959" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23274-23291" +fingerprint = "sha256:b6b9c5c23e667aca10cf90fa98c2d649032730a25bf63ce8600cd91d66c00998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12015-12040" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12056-12074" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12286-12311" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12617-12638" +fingerprint = "sha256:c429b6279d46e4342021b10e7617de86df66adc19527fcaea76289ac43dfdc57" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12691-12713" +fingerprint = "sha256:a9ed82da14dfa85a8d767664cdad26afebbc0dea0f16b2900d48924575cbc3e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12925-12946" +fingerprint = "sha256:c429b6279d46e4342021b10e7617de86df66adc19527fcaea76289ac43dfdc57" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13085-13110" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13126-13144" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13239-13264" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13280-13298" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13656-13681" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13887-13905" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14049-14074" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14171-14196" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14406-14431" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14746-14771" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29178-29196" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29377-29402" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31756-31781" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32340-32365" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33710-33728" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34364-34382" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35982-36000" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36532-36557" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36925-36950" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38025-38043" +fingerprint = "sha256:7d9b8cb33158d5d4d2cb5c28e0da61d8a7051403e6981a6e25308378d8e875a1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38987-39012" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/tests/support/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:903-928" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-cli/tests/support/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:964-990" +fingerprint = "sha256:aa6a1b493e764bb56524d1ecd070391f857240126aad1893f6650e879c640cc7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6119-6128" +fingerprint = "sha256:a7d6828426a5f498f8affe1313534781fc78fc06b88e1ea54b0063e419078931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27871-27889" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30056-30074" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35068-35080" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35598-35610" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35811-35829" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39473-39485" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40091-40103" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40638-40650" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40816-40828" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41303-41315" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41524-41536" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41765-41777" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42078-42090" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42202-42214" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43489-43501" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44175-44185" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44693-44705" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44884-44898" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45769-45783" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46454-46466" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46723-46735" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46975-46987" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47407-47419" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47542-47554" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47757-47769" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48012-48024" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48730-48742" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49018-49030" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50737-50745" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52442-52450" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/formats.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2005-2036" +fingerprint = "sha256:a1a5e027d269e4ee6f9f8f3d466acdeab37d6d26de0473a596b69b6a0974f5e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/formats.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29026-29033" +fingerprint = "sha256:70a54da97493ec9bccd475dc4f9149f0f1e4c124ae0e303f78311919b2a1ee3a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/formats.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71268-71286" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162462-162470" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162525-162533" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:177150-177158" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:178346-178354" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/plan.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31326-31339" +fingerprint = "sha256:174b5661fbd14a44f7d009ed11b5eb2f546a4296338bbc069db846c4e7fa6386" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/types.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10682-10700" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/auction/types.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4979-4989" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/auth.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:22377-22397" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/auth.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:22526-22546" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24894-24912" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/config.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29498-29538" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/config.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:35053-35087" +fingerprint = "sha256:2e2eff9578f0f185055cd98fa883f1ad17145dd7c7de71fa1d14b0bc615e4460" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/config_payload.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11651-11691" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/config_payload.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15140-15180" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/consent/gpp.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:863-873" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/consent/gpp.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:965-972" +fingerprint = "sha256:9fc706a8a180da0b182ea38d6091fd694a16b9fb9186053b34c0604bdaecce20" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/consent/tcf.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12686-12705" +fingerprint = "sha256:9599869b136e365d15ba86249b94ea3fd8bda240fa002cea569d7dc25ab6f3e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/consent/tcf.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1443-1453" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/consent/us_privacy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:492-502" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25872-25876" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49223-49241" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49303-49321" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49476-49494" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50363-50381" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51314-51332" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51945-51968" +fingerprint = "sha256:96f3a3f8a7344776ec79d006e203e4465437dab95eee598fb16e5538be49460d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52029-52052" +fingerprint = "sha256:96f3a3f8a7344776ec79d006e203e4465437dab95eee598fb16e5538be49460d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52452-52470" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52536-52554" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84619-84633" +fingerprint = "sha256:067a3ff791863417522f914224a554a89078d33c9a0f890cb6f541439e81c848" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84747-84767" +fingerprint = "sha256:88bb79fa6efc5d55c70ed478e2e48f058c387b77c4e99ad1f73b9a5bfa237d2c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85271-85288" +fingerprint = "sha256:f13b23a928321fc863ef87cb2ed372cc6edb5f852587213c3098d5826f986c31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85325-85342" +fingerprint = "sha256:f13b23a928321fc863ef87cb2ed372cc6edb5f852587213c3098d5826f986c31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87322-87342" +fingerprint = "sha256:2d0f3c337e640d3ae1e7aafbde887dfed9b6078e97fd5f609f27ed528032d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87506-87526" +fingerprint = "sha256:2d0f3c337e640d3ae1e7aafbde887dfed9b6078e97fd5f609f27ed528032d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87853-87873" +fingerprint = "sha256:2d0f3c337e640d3ae1e7aafbde887dfed9b6078e97fd5f609f27ed528032d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/creative_opportunities.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42134-42148" +fingerprint = "sha256:f92701fceb3bc4b0819729f4864c37249833612539cd701ee364bc9b92955a05" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/admin.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55918-55930" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/admin.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56660-56672" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/device.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10909-10923" +fingerprint = "sha256:191347bfe55d0ca9a574db77bc8648275ce258461450e793528e0cc6d2dcf8f5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7020-7032" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7202-7214" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7384-7394" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7632-7644" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7786-7798" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9085-9092" +fingerprint = "sha256:70a54da97493ec9bccd475dc4f9149f0f1e4c124ae0e303f78311919b2a1ee3a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12363-12386" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12437-12459" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12947-12970" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13021-13029" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13520-13543" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13594-13616" +fingerprint = "sha256:801de3a5803e57f1610694573c2d91e69b27832f8bb4b4e79fbecaa92a1b7b37" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14145-14168" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14218-14240" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14734-14757" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15365-15388" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16928-16951" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17978-18001" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19365-19388" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20427-20450" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22488-22511" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23623-23646" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23771-23793" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24541-24563" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25158-25181" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25870-25893" +fingerprint = "sha256:75eea5874c840f0d7cf485cbb9c1a8eb12aaaa831a7d9cd5f18c0f694e409e6f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/identify.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25944-25966" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14408-14420" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14484-14496" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14559-14569" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14909-14921" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15018-15030" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15139-15149" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15493-15505" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16037-16049" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16690-16700" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20050-20062" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20080-20092" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20164-20176" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20245-20257" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20515-20527" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20596-20608" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20753-20765" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21253-21265" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21410-21422" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21751-21763" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21934-21946" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22161-22173" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22346-22358" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22413-22425" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22474-22486" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22748-22760" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22813-22825" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23088-23100" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23130-23142" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23172-23184" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23266-23278" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23347-23359" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23899-23911" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23981-23993" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24087-24099" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24287-24299" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24371-24383" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24874-24886" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25144-25156" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9351-9363" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/ec/registry.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18824-18832" +fingerprint = "sha256:47eb4e79d2ac24477bf3b709fd4142c121eaf9bf9c14c41f26a966debeb4f605" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50107-50132" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50241-50266" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51422-51436" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52159-52173" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52708-52730" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52789-52811" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52876-52898" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53150-53168" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53267-53289" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53362-53395" +fingerprint = "sha256:462f02fae4daefc8d7c5e7b52f11f4bbd2b547c05a96a4fd3760ae94638de4d0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54253-54275" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54331-54364" +fingerprint = "sha256:462f02fae4daefc8d7c5e7b52f11f4bbd2b547c05a96a4fd3760ae94638de4d0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55758-55775" +fingerprint = "sha256:3f3a270b6db6228c95c5382efac0423fba71b4cd77c057cd208008254317d03f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57487-57504" +fingerprint = "sha256:3f3a270b6db6228c95c5382efac0423fba71b4cd77c057cd208008254317d03f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57953-57975" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58476-58498" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58571-58604" +fingerprint = "sha256:462f02fae4daefc8d7c5e7b52f11f4bbd2b547c05a96a4fd3760ae94638de4d0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59614-59636" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59711-59744" +fingerprint = "sha256:462f02fae4daefc8d7c5e7b52f11f4bbd2b547c05a96a4fd3760ae94638de4d0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62471-62493" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62600-62622" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63438-63460" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63533-63566" +fingerprint = "sha256:462f02fae4daefc8d7c5e7b52f11f4bbd2b547c05a96a4fd3760ae94638de4d0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100299-100304" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100353-100363" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10040-10062" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100954-100964" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102276-102298" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102559-102575" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102611-102621" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103066-103071" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103114-103124" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103574-103591" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103629-103639" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105535-105550" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105596-105606" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106217-106230" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106267-106277" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106767-106789" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10678-10700" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107056-107066" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107811-107833" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107970-107992" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108138-108160" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108299-108321" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108460-108482" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108732-108754" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108891-108913" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109059-109081" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109220-109242" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109381-109403" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109569-109591" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109862-109872" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110617-110639" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11069-11091" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110785-110807" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110956-110978" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111129-111151" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1112-1134" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111412-111434" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111580-111602" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111751-111773" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111924-111946" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112123-112145" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112440-112450" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11256-11278" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113195-113217" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113364-113386" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113533-113555" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113827-113849" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113996-114018" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114165-114187" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114670-114680" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11527-11538" +fingerprint = "sha256:3c8b2bbd5af1180dab341c61a990008400c0f4734771d1618913d1a8fa55c929" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115425-115447" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115581-115603" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115746-115768" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115919-115941" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116082-116104" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116354-116376" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116510-116532" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116675-116697" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116848-116870" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117011-117033" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117371-117393" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117797-117810" +fingerprint = "sha256:3a2feedb6df94d72c7ce704c2234df2389dc912a260a1ac27c8c12f4084d0b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117958-117971" +fingerprint = "sha256:3a2feedb6df94d72c7ce704c2234df2389dc912a260a1ac27c8c12f4084d0b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11857-11879" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118677-118698" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118830-118840" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12012-12034" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12161-12176" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12231-12244" +fingerprint = "sha256:b19d30dc7de309bf2781cf9e18471c023a97e6807b11494f67bea0059625ede3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12295-12310" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123336-123346" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1234-1256" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12412-12434" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12551-12573" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12690-12712" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12829-12851" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12968-12990" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13107-13129" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13246-13268" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13514-13529" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1356-1378" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13733-13743" +fingerprint = "sha256:16391d3665ca74772be638be555994fd8fdeaee357eb11c47ff22d4608a82ca2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13793-13815" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13915-13937" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141353-141375" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14201-14223" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142231-142253" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142711-142733" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142960-142982" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143324-143335" +fingerprint = "sha256:3c8b2bbd5af1180dab341c61a990008400c0f4734771d1618913d1a8fa55c929" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14333-14355" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143743-143765" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143929-143951" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144245-144267" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144373-144395" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144677-144699" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144817-144839" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145290-145312" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145377-145399" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145530-145552" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145682-145704" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145858-145880" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145964-145986" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146295-146317" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146480-146502" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146633-146655" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146785-146807" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146961-146983" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147122-147144" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147297-147319" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147349-147371" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14752-14774" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147601-147623" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147704-147726" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147798-147820" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1478-1500" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147903-147925" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148035-148057" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148174-148196" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14833-14855" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148388-148410" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148538-148560" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148695-148717" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148977-148999" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149127-149149" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149284-149306" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149566-149588" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149717-149739" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14982-15004" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149875-149897" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150129-150151" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150254-150276" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150325-150341" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150387-150392" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150433-150445" +fingerprint = "sha256:672230dc716842991d3751279282dedd313bee901c64fb7a7554b9fc57018269" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150534-150556" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150706-150728" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150861-150883" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151023-151045" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15130-15152" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151524-151546" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151676-151698" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151835-151857" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15298-15320" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15400-15422" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154801-154812" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154863-154885" +fingerprint = "sha256:350bce39c08d62c4d993aa176a48f8be52df1f255dd3444eb593f165293c5dd0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154907-154920" +fingerprint = "sha256:3de8bb8ff108923a80a636a35053c00922ca4852859b1583be9f2c8814ce94f2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154964-154983" +fingerprint = "sha256:db27ca04848ee9b247fc69b87eba5d3dbd23f217e19ed345009cddd01a38f3b9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155019-155032" +fingerprint = "sha256:98cc0a4a2dc689a4428fc0f5df0b866c9f9673f7a947068d1ae984f43e14e084" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155069-155083" +fingerprint = "sha256:07a35e40dca4ca74f1b1721ecca0a8b5d4ccfb3f43e0890f1d48a65e21660cd1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155120-155133" +fingerprint = "sha256:98cc0a4a2dc689a4428fc0f5df0b866c9f9673f7a947068d1ae984f43e14e084" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155170-155189" +fingerprint = "sha256:db27ca04848ee9b247fc69b87eba5d3dbd23f217e19ed345009cddd01a38f3b9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155225-155242" +fingerprint = "sha256:8c9f4cbd5ae282241ace635f0bd57fb54bb7ecb4af45312d013a663876650feb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155281-155291" +fingerprint = "sha256:5f2effcb3a0435bf6711a0f781a002ee30ca0a04df418419dbb1fdfe9037f316" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155309-155331" +fingerprint = "sha256:350bce39c08d62c4d993aa176a48f8be52df1f255dd3444eb593f165293c5dd0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155353-155363" +fingerprint = "sha256:ad3d8079679b74616ab951117522421afe454d35c24a7532d167d91978258a01" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155385-155401" +fingerprint = "sha256:3f4daf2b87bc0c9f525650c0c8460c101b3fac75fbc072f5e5ecb1f64e01877d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155425-155436" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155497-155516" +fingerprint = "sha256:081332ca6dfeb06a8b02d89a1e6f52e4683bede3f9d340086f23a8fe8d1f76e7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155540-155551" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155607-155628" +fingerprint = "sha256:550e950809e55fa56aba0df4c24be54bf9c1fb0dcf96c4a6d359b147f69a2256" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155652-155663" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155719-155731" +fingerprint = "sha256:4031bb4ed3875d9ab114c2e3ac5b20e7de770469159eb6ccbdc7a266c4466d8b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155755-155766" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155829-155845" +fingerprint = "sha256:e280058bd30df8b4c3b0bd3d77644d90d8c1eae80ea4295928f7962cbab224a9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155869-155880" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155931-155944" +fingerprint = "sha256:7b5b82afa08b87852ec1368e6242c775ad60f7f7bc0645339ce9666378407209" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155982-156000" +fingerprint = "sha256:7a77deb210109e0fcd366c79012509e5d0afc3b6f2c908a3de6a4ddfcbb785e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156037-156047" +fingerprint = "sha256:36e924317f2a928fea1fad290c8312f0a5e4517a5b28b751292cb7b244af0eb4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156087-156102" +fingerprint = "sha256:5c1b163cc574c7af414b725ad34983d906fd875e694e7191c132bb27d23fedb4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156138-156150" +fingerprint = "sha256:1ddf70d7ca1a0e6efde27a82a38c7f892c9968e3a861609e5a14dbec9e5c78e4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156174-156185" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156249-156265" +fingerprint = "sha256:75d79814fba50072119677b8cb3d02599ee44331dc1638b888bbd48c74c4472c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156289-156311" +fingerprint = "sha256:350bce39c08d62c4d993aa176a48f8be52df1f255dd3444eb593f165293c5dd0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156342-156353" +fingerprint = "sha256:2b1fa945b82656ea722d96423a422f0a58e4c465b76cb8d802a91dd6b414f66e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156394-156412" +fingerprint = "sha256:43a7d6dc22859f889aa230cac11ba527800e619512ff50251da54db883964e8b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156430-156441" +fingerprint = "sha256:555b87f2dc78ae43dd2781bb22523a24fcc5631b21c4f73152820ca247d06166" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156477-156494" +fingerprint = "sha256:8c9f4cbd5ae282241ace635f0bd57fb54bb7ecb4af45312d013a663876650feb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156533-156544" +fingerprint = "sha256:9cb7fad55fae49ec175c09367a4ac75c66a85062094df772d1f6f376b8c17d47" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156607-156619" +fingerprint = "sha256:660bf3831b561b194154309d010c06e3dabae7396a1c1975956d37e59c0d3a55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156638-156653" +fingerprint = "sha256:03af10ebef17619c13d383e28d375daaf402837a74167e4d6e085bec1982a769" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156702-156714" +fingerprint = "sha256:98a2f791967382cb19c5d4a2851825e088375252b3730077da2cfca614ad5c60" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156746-156761" +fingerprint = "sha256:9bc141095a017e56f9d94a6f5494506b0580a9884f712bd6a536085f04fc7167" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156798-156821" +fingerprint = "sha256:c7b25faa45c3971b2c22e3926497cbc5da4dd1dfdb583f3505720b99c7054054" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156855-156866" +fingerprint = "sha256:471aaca7366c22bb317d87a2574c6097f1811efc135d74eddcf5c38e115196ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156883-156893" +fingerprint = "sha256:cf92c6041b13fa0ae6e19771d5c8714c2e021fab3cba1161f176f2009f7c909e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156930-156941" +fingerprint = "sha256:a12a1bfee5a1401ca874092fb3781a6700afec511c073be2a9529e6f84116a5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156992-157011" +fingerprint = "sha256:db27ca04848ee9b247fc69b87eba5d3dbd23f217e19ed345009cddd01a38f3b9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157049-157062" +fingerprint = "sha256:5ad0e6656c3920abb37d49e8bd7983fc6d1c16c0720061397acdcd91e8ac803b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157082-157095" +fingerprint = "sha256:7b5b82afa08b87852ec1368e6242c775ad60f7f7bc0645339ce9666378407209" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157112-157125" +fingerprint = "sha256:b83372a30080e137f666e30527a14de631aeb4ae2da88e95cf3e35b1de5a8bb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15713-15735" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157193-157215" +fingerprint = "sha256:ee7f6959822299f7626d3583540691379250dc9bfdc385a611db2a0b53e26ea9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157240-157253" +fingerprint = "sha256:7b5b82afa08b87852ec1368e6242c775ad60f7f7bc0645339ce9666378407209" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157270-157281" +fingerprint = "sha256:471aaca7366c22bb317d87a2574c6097f1811efc135d74eddcf5c38e115196ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157316-157326" +fingerprint = "sha256:36e924317f2a928fea1fad290c8312f0a5e4517a5b28b751292cb7b244af0eb4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157366-157379" +fingerprint = "sha256:98cc0a4a2dc689a4428fc0f5df0b866c9f9673f7a947068d1ae984f43e14e084" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157416-157434" +fingerprint = "sha256:7a77deb210109e0fcd366c79012509e5d0afc3b6f2c908a3de6a4ddfcbb785e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158159-158174" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158496-158511" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15880-15902" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158987-159009" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159083-159105" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159258-159280" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159354-159376" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159529-159551" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159625-159647" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159800-159822" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159896-159918" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1600-1622" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160071-160093" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160167-160189" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16029-16051" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160342-160364" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160438-160460" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160613-160635" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160709-160731" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161179-161209" +fingerprint = "sha256:80144f40fc8cb3aec5faa49a50f0093b0e9be792802833170fb6bfc694ef3dc1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161334-161364" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161719-161749" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16177-16199" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162095-162109" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16347-16369" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16504-16526" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16671-16693" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16719-16741" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16957-16979" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17048-17070" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17112-17134" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17203-17225" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1722-1744" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17331-17353" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17466-17488" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17664-17686" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17810-17832" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17963-17985" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18225-18247" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18371-18393" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1846-1868" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18524-18546" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18786-18808" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18933-18955" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19087-19109" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19325-19347" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19440-19462" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19507-19523" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19567-19572" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19611-19623" +fingerprint = "sha256:672230dc716842991d3751279282dedd313bee901c64fb7a7554b9fc57018269" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1970-1992" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19702-19724" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19862-19884" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20013-20035" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20171-20193" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20622-20644" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20770-20792" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20925-20947" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2094-2116" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21446-21476" +fingerprint = "sha256:80144f40fc8cb3aec5faa49a50f0093b0e9be792802833170fb6bfc694ef3dc1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21585-21615" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2218-2240" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:229-251" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2426-2448" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24491-24521" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:245653-245669" +fingerprint = "sha256:860e405925f57183a28ab5d3cd8f37bfbba77c45dd85ba715020e74860c77c77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247341-247372" +fingerprint = "sha256:6168503f916b851bba52a35aea9374570a65b92d13a11a8120bc17ec7b29464d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24807-24821" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251449-251471" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251535-251557" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251621-251643" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25166-25190" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251707-251729" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251793-251815" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251879-251901" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251965-251987" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:252580-252601" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:252714-252735" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:254788-254807" +fingerprint = "sha256:93532deacf2e7ce4365ab09b03401c8c0faf7c96190a744ee26128648714fc65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2565-2587" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25707-25717" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:262179-262198" +fingerprint = "sha256:1dc430f6f2002e9066f16767d140477686c437394144d0fec020b9ec3b45b472" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:262475-262499" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263038-263063" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263163-263185" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263481-263506" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263606-263628" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263928-263953" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264053-264075" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264358-264383" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264483-264505" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264803-264828" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264928-264950" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:265251-265276" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:265376-265398" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:265672-265697" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:265793-265815" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:266092-266117" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:266516-266541" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:266646-266668" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:266999-267024" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267129-267151" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267454-267479" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267584-267606" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267906-267931" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268036-268058" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268340-268365" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268470-268492" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268791-268816" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268921-268943" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269241-269266" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269371-269393" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269683-269708" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270138-270163" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270268-270290" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2704-2726" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270592-270617" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270722-270744" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271044-271069" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271174-271196" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271503-271528" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271633-271655" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271966-271991" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272096-272118" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272416-272441" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272546-272568" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272866-272891" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272996-273018" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:273306-273331" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:273721-273746" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27441-27463" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:274540-274562" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:274767-274789" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:276160-276182" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:276689-276711" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27685-27695" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:276930-276952" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:277793-277815" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:278335-278357" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:278583-278605" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280064-280086" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280274-280299" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280397-280413" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280695-280720" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280818-280823" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281116-281141" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281239-281256" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281540-281565" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281663-281678" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281974-281999" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282097-282110" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282506-282528" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282918-282940" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:283326-283348" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:283740-283761" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284153-284174" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2843-2865" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284458-284483" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284583-284605" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284893-284918" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285023-285045" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285336-285361" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285466-285488" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28553-28563" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285788-285813" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285918-285940" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286236-286261" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286366-286388" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286672-286697" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286802-286824" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:287106-287131" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:287231-287253" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:287552-287577" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:287682-287704" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288043-288068" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288173-288195" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288515-288540" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288645-288667" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288976-289001" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289106-289128" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289435-289460" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289560-289582" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289889-289914" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290019-290041" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290349-290374" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290479-290501" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290818-290843" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290948-290970" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291274-291299" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291395-291417" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291709-291734" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291839-291861" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292162-292187" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292292-292314" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292614-292639" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292744-292766" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293074-293099" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293204-293226" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293524-293549" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293654-293676" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294032-294077" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294122-294167" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294301-294323" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294763-294808" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:295224-295269" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:296014-296059" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:296475-296520" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:296922-296944" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:297072-297094" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:297208-297230" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2982-3004" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:298372-298403" +fingerprint = "sha256:6168503f916b851bba52a35aea9374570a65b92d13a11a8120bc17ec7b29464d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299019-299034" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299326-299348" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299420-299442" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299525-299547" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299657-299679" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299796-299818" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300321-300343" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300406-300428" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300496-300518" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300587-300609" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300671-300693" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300756-300778" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300846-300868" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300935-300957" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301023-301045" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301114-301136" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301205-301227" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301294-301316" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301383-301405" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301472-301494" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301547-301569" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30164-30174" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:309103-309148" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:309576-309621" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310013-310038" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310138-310160" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310484-310509" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310609-310631" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310959-310984" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311084-311106" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311417-311442" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311542-311564" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311933-311958" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:312058-312080" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3121-3143" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:312409-312434" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:312534-312556" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:312905-312930" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313035-313057" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313416-313441" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313546-313568" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313899-313924" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314029-314051" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314422-314447" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314552-314574" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314884-314909" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315014-315036" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315363-315388" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315493-315515" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31566-31588" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315841-315866" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315971-315993" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:316351-316376" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317020-317042" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317372-317397" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317502-317524" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317852-317877" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317982-318004" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31815-31825" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318339-318364" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318469-318491" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318830-318855" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318960-318982" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319308-319333" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319475-319497" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319823-319848" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319953-319975" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:320333-320358" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:320848-320870" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:322679-322701" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:323016-323038" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:323291-323313" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:324544-324566" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:324876-324898" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:325190-325212" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3262-3284" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:327136-327158" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:327458-327480" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:327686-327711" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:328209-328234" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:328652-328677" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:328773-328795" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32884-32906" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329206-329231" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329329-329345" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329655-329680" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329778-329783" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330104-330129" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330227-330244" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330556-330581" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330679-330694" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:331018-331043" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:331141-331154" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33124-33146" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:331655-331677" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:332095-332117" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:332531-332553" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:332973-332994" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:333414-333435" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33370-33392" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:333819-333844" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:333949-333971" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:334337-334362" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:334467-334489" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:334822-334847" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:334952-334974" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:335303-335328" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:335433-335455" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:335772-335797" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:335902-335924" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33621-33643" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:336252-336277" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:336377-336399" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:336786-336811" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:336916-336938" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:337310-337335" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:337440-337462" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:337815-337840" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:337945-337967" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:338309-338334" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:338439-338461" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33863-33885" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:338803-338828" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:338928-338950" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:339341-339366" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:339471-339493" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:339834-339859" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:339964-339986" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3403-3425" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:340336-340361" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:340466-340488" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:340848-340873" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:340973-340995" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34117-34139" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:341332-341357" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:341462-341484" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:341861-341886" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:341991-342013" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:342346-342371" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:342476-342498" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:342839-342864" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:342969-342991" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:343322-343347" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:343452-343474" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34365-34387" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:343828-343853" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:343949-343971" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:344636-344661" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:344761-344783" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34483-34493" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:345079-345104" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:345204-345226" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:345526-345551" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:345651-345673" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:345956-345981" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346081-346103" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346401-346426" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346526-346548" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346849-346874" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346974-346996" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:347270-347295" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:347391-347413" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:347690-347715" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:348114-348139" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:348244-348266" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:348597-348622" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:348727-348749" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349052-349077" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349182-349204" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349504-349529" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349634-349656" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349938-349963" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:350068-350090" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:350389-350414" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:350519-350541" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:350839-350864" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:350969-350991" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:351281-351306" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35143-35153" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:351736-351761" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:351866-351888" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:352190-352215" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:352320-352342" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:352642-352667" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:352772-352794" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:353101-353126" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:353231-353253" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:353564-353589" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:353694-353716" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:354014-354039" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:354144-354166" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3544-3566" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:354464-354489" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:354594-354616" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:354904-354929" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:355319-355344" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:356138-356160" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:356365-356387" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:357758-357780" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35789-35811" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:358287-358309" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35849-35871" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:358528-358550" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35907-35929" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:359391-359413" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35963-35985" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:359933-359955" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:360181-360203" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36031-36053" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36089-36111" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36143-36165" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:361662-361684" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:361872-361897" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:361995-362011" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36214-36236" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:362293-362318" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:362416-362421" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:362714-362739" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36278-36300" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:362837-362854" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:363138-363163" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:363261-363276" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36336-36358" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:363572-363597" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:363695-363708" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36398-36420" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:364104-364126" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:364516-364538" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36462-36484" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:364924-364946" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36524-36546" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:365338-365359" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:365751-365772" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36584-36606" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:366056-366081" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:366181-366203" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:366491-366516" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:366621-366643" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:366934-366959" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:367064-367086" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:367386-367411" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:367516-367538" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:367834-367859" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:367964-367986" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:368270-368295" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:368400-368422" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3685-3707" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:368704-368729" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:368829-368851" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:369150-369175" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:369280-369302" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:369641-369666" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:369771-369793" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36986-37008" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:370113-370138" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:370243-370265" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:370574-370599" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:370704-370726" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:371033-371058" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:371158-371180" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:371487-371512" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:371617-371639" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:371947-371972" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372077-372099" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372416-372441" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372546-372568" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372872-372897" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372993-373015" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:373307-373332" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:373437-373459" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:373760-373785" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:373890-373912" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:374212-374237" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:374342-374364" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:374672-374697" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:374802-374824" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:375122-375147" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:375252-375274" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37531-37553" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:375583-375628" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:375673-375718" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:375852-375874" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:376314-376359" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37659-37681" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:376775-376820" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:377565-377610" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37787-37809" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:378026-378071" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:378473-378495" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:378623-378645" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:378759-378781" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37915-37937" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:379923-379954" +fingerprint = "sha256:6168503f916b851bba52a35aea9374570a65b92d13a11a8120bc17ec7b29464d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38043-38065" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:380570-380585" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:381171-381193" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38171-38193" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3826-3848" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38301-38323" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38431-38453" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38561-38583" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:385810-385832" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:385999-386021" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:386248-386263" +fingerprint = "sha256:66463dbff6b4b2bfdf3f0b4e2fc807a4cbe06ee85ffbf2441c57d9ddb901d6d5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38691-38713" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38821-38843" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38951-38973" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:389994-390016" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:390-412" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:390335-390357" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39083-39105" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:391000-391022" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:391233-391255" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39215-39237" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39347-39369" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39479-39501" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39616-39638" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3967-3989" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:399091-399113" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39912-39934" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:399656-399678" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:399823-399845" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40456-40478" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:405469-405491" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:409431-409456" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:409556-409578" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40973-40995" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:409874-409899" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:409999-410021" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:410321-410346" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:410446-410468" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:410751-410776" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:410876-410898" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41096-41118" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4110-4132" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:411196-411221" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:411321-411343" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:411644-411669" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:411769-411791" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:412065-412090" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:412186-412208" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41219-41241" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:412485-412510" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:412909-412934" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:413039-413061" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:413392-413417" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41342-41364" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:413522-413544" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:413847-413872" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:413977-413999" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:414299-414324" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:414429-414451" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41465-41487" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:414733-414758" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:414863-414885" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:415184-415209" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:415314-415336" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:415634-415659" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:415764-415786" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41588-41610" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:416076-416101" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:416531-416556" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:416661-416683" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:416985-417010" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:417115-417137" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41713-41735" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:417437-417462" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:417567-417589" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:417896-417921" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:418026-418048" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:418359-418384" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41838-41860" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:418489-418511" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:418809-418834" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:418939-418961" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:419259-419284" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:419389-419411" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41963-41985" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:419699-419724" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:420114-420139" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42088-42110" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:420933-420955" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:421160-421182" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42213-42235" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:422553-422575" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:423082-423104" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:423323-423345" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42338-42360" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:424186-424208" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42465-42487" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:424728-424750" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:424976-424998" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4253-4275" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42592-42614" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:426457-426479" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:426667-426692" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:426790-426806" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:427088-427113" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42719-42741" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:427211-427216" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:427509-427534" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:427632-427649" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:427933-427958" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:428056-428071" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:428367-428392" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42846-42868" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:428490-428503" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:428899-428921" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:429311-429333" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:429719-429741" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42978-43000" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:430133-430154" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:430546-430567" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:430851-430876" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:430976-430998" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:431286-431311" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:431416-431438" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:431729-431754" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:431859-431881" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:432181-432206" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:432311-432333" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:432629-432654" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43269-43291" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:432759-432781" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:433065-433090" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:433195-433217" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:433499-433524" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:433624-433646" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:433945-433970" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:434075-434097" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:434436-434461" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:434566-434588" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:434908-434933" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:435038-435060" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:435369-435394" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:435499-435521" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:435828-435853" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:435953-435975" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:436282-436307" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:436412-436434" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:436742-436767" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:436872-436894" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:437211-437236" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:437341-437363" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:437667-437692" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:437788-437810" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43810-43832" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:438102-438127" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:438232-438254" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:438555-438580" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:438685-438707" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:439007-439032" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:439137-439159" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:439467-439492" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:439597-439619" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4396-4418" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:439917-439942" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:440047-440069" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:440378-440423" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:440468-440513" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:440647-440669" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:441109-441154" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:441570-441615" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:442360-442405" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:442821-442866" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:443268-443290" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:443418-443440" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:443554-443576" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44364-44386" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:444718-444749" +fingerprint = "sha256:6168503f916b851bba52a35aea9374570a65b92d13a11a8120bc17ec7b29464d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44477-44499" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:445365-445380" +fingerprint = "sha256:ec3e766bb1cf7c11e2720c30c9fcd68f87b53c4b6489b7360bc10d44dc5f1223" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44590-44612" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:445958-445974" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:446064-446075" +fingerprint = "sha256:3c8b2bbd5af1180dab341c61a990008400c0f4734771d1618913d1a8fa55c929" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:446121-446143" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:446392-446414" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:446926-446948" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44703-44725" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:447054-447076" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:447358-447380" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:447498-447520" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:447971-447993" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448058-448080" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44816-44838" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448211-448233" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448363-448385" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448539-448561" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448645-448667" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:448976-448998" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449161-449183" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44929-44951" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449314-449336" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449466-449488" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449642-449664" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449803-449825" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449978-450000" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450030-450052" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450282-450304" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450385-450407" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45044-45066" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450479-450501" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450584-450606" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450716-450738" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:450855-450877" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451069-451091" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451219-451241" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451376-451398" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45159-45181" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451658-451680" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451808-451830" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:451965-451987" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:452247-452269" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:452398-452420" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:452556-452578" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45274-45296" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:452810-452832" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:452935-452957" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453006-453022" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453068-453073" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453114-453126" +fingerprint = "sha256:672230dc716842991d3751279282dedd313bee901c64fb7a7554b9fc57018269" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453215-453237" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453387-453409" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453542-453564" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:453704-453726" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45389-45411" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4539-4561" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:454205-454227" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:454357-454379" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:454516-454538" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45504-45526" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:455362-455384" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45619-45641" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45736-45758" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45853-45875" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45970-45992" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46087-46109" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:461878-461900" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46209-46231" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:462858-462880" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:463144-463166" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:464374-464396" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46490-46512" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:465310-465332" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:466132-466154" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:467073-467095" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:467268-467290" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:467398-467420" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:468493-468515" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47117-47127" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:477928-477950" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:478266-478278" +fingerprint = "sha256:9cce232ff27031170904d7a25c3d46fc2ae4a58476befec78f09054c5b0c7051" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:478435-478457" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:478986-479002" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:479092-479103" +fingerprint = "sha256:3c8b2bbd5af1180dab341c61a990008400c0f4734771d1618913d1a8fa55c929" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:479149-479171" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48761-48771" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:493538-493560" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:493978-494000" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:494592-494614" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50366-50376" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:505783-505805" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:506349-506371" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:506854-506870" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:506960-506971" +fingerprint = "sha256:3c8b2bbd5af1180dab341c61a990008400c0f4734771d1618913d1a8fa55c929" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:507017-507039" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:510-532" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:518923-518945" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:519363-519385" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:520332-520354" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:520543-520565" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:521579-521601" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52210-52232" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:522450-522495" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:522911-522956" +fingerprint = "sha256:67e942014942e9cd3f1d777276e83ce5531eac40cbecd9054b531acd19c5da77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:523442-523467" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:523567-523589" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:523885-523910" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:524010-524032" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52430-52452" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:524332-524357" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:524457-524479" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:524762-524787" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:524887-524909" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:525207-525232" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:525332-525354" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:525655-525680" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:525780-525802" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:526076-526101" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:526197-526219" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:526496-526521" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:526920-526945" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:527050-527072" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:527403-527428" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:527533-527555" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:527858-527883" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:527988-528010" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:528310-528335" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:528440-528462" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:528744-528769" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:528874-528896" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:529195-529220" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:529325-529347" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:529645-529670" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:529775-529797" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:530087-530112" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:530542-530567" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:530672-530694" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:530996-531021" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:531126-531148" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:531448-531473" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:531578-531600" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:531907-531932" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:532037-532059" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:532370-532395" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:532500-532522" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:532820-532845" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:532950-532972" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53323-53345" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:533270-533295" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:533400-533422" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:533710-533735" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:534125-534150" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53443-53465" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:534944-534966" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:535171-535193" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53563-53585" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:536564-536586" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53683-53705" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:537093-537115" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:537334-537356" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53803-53825" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:538197-538219" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:538739-538761" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:538987-539009" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53923-53945" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54045-54067" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:540468-540490" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:540678-540703" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:540801-540817" +fingerprint = "sha256:3e723b591bdb95ce8f5c9b7032dc572ca97351d0da5efc73459c1fbaf438e43b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:541099-541124" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:541222-541227" +fingerprint = "sha256:7f7ed12dfe7af503db4f7d8cfa1a264a4f9610fd6677b8ae297eb9dfafab279d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:541520-541545" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:541643-541660" +fingerprint = "sha256:5ca704affb6babeebdcfcb6497cb892d79d4a02451068071788e1369fe921705" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54167-54189" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:541944-541969" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:542067-542082" +fingerprint = "sha256:6860776e5611f69c611eb6122f3f227e25d01265c0cb2536a4845797476d60a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:542378-542403" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:542501-542514" +fingerprint = "sha256:0265f615a0a7083dafb148223305539b45c85619a623fe2f82dbb2bf62e74544" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54289-54311" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:542910-542932" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:543322-543344" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:543730-543752" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54411-54433" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:544144-544165" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:544557-544578" +fingerprint = "sha256:5bf8e4c44960a63c6caa6de10f32059dcc0c50db218be4dafcae30aa02ccc9d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:544862-544887" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:544987-545009" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:545297-545322" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54533-54555" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:545427-545449" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:545740-545765" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:545870-545892" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:546192-546217" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:546322-546344" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54655-54677" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:546640-546665" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:546770-546792" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:547076-547101" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:547206-547228" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:547510-547535" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:547635-547657" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54779-54801" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:547956-547981" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:548086-548108" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:548447-548472" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:548577-548599" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:548919-548944" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54903-54925" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549049-549071" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549380-549405" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549510-549532" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549839-549864" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549964-549986" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55027-55049" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:550293-550318" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:550423-550445" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:550753-550778" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:550883-550905" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:551222-551247" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:551352-551374" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55151-55173" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:551678-551703" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:551799-551821" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:552113-552138" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:552243-552265" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:552566-552591" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:552696-552718" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55280-55302" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:553018-553043" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:553148-553170" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:553478-553503" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:553608-553630" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:553928-553953" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:554058-554080" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55715-55737" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56124-56146" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56263-56285" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56402-56424" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56541-56563" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56680-56702" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56819-56841" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56960-56982" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57101-57123" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57242-57264" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57383-57405" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57524-57546" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57665-57687" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57808-57830" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57951-57973" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58094-58116" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58237-58259" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58385-58407" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59887-59909" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60337-60359" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60460-60482" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60583-60605" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60706-60728" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60829-60851" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60952-60974" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61077-61099" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61202-61224" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61327-61349" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61452-61474" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61577-61599" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61702-61724" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61829-61851" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61956-61978" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62083-62105" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62210-62232" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62342-62364" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62770-62792" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:630-652" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63623-63645" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64086-64108" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64199-64221" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64312-64334" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64425-64447" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64538-64560" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64651-64673" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64766-64788" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64881-64903" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64996-65018" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65111-65133" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65226-65248" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65341-65363" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65458-65480" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65575-65597" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65692-65714" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65809-65831" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65931-65953" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66349-66371" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67201-67223" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67695-67717" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67838-67860" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67981-68003" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68124-68146" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68267-68289" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68410-68432" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68555-68577" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68700-68722" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68845-68867" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68990-69012" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69135-69157" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69280-69302" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69427-69449" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69574-69596" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69721-69743" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69868-69890" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70020-70042" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70474-70496" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71282-71304" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71744-71766" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71879-71901" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72014-72036" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72149-72171" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72284-72306" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72419-72441" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72556-72578" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72693-72715" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72830-72852" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72967-72989" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73104-73126" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73241-73263" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73380-73402" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73519-73541" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73658-73680" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73797-73819" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73941-73963" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74389-74411" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:750-772" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75458-75468" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76625-76647" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76792-76814" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76996-77011" +fingerprint = "sha256:66463dbff6b4b2bfdf3f0b4e2fc807a4cbe06ee85ffbf2441c57d9ddb901d6d5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77908-77930" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78045-78067" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78182-78204" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78319-78341" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78456-78478" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78593-78615" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78732-78754" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78871-78893" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79010-79032" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79149-79171" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79288-79310" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79427-79449" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79568-79590" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79709-79731" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79850-79872" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79991-80013" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80137-80159" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80585-80595" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82162-82184" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82461-82483" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8250-8280" +fingerprint = "sha256:80144f40fc8cb3aec5faa49a50f0093b0e9be792802833170fb6bfc694ef3dc1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83035-83057" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83246-83268" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8342-8372" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84286-84308" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8434-8464" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84709-84731" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84840-84862" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84971-84993" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85102-85124" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85233-85255" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8527-8541" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85364-85386" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85497-85519" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85630-85652" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85763-85785" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85896-85918" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8598-8622" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86029-86051" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86162-86184" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86297-86319" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86432-86454" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86567-86589" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86702-86724" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86842-86864" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8694-8718" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:870-892" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87278-87300" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8791-8815" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87944-87966" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88457-88479" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88602-88624" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89376-89398" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89673-89695" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89970-89992" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90267-90289" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90564-90586" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90861-90883" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91160-91182" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91459-91481" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91758-91780" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92057-92079" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92356-92378" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92655-92677" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92956-92978" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93257-93279" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93558-93580" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93859-93881" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94165-94187" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94778-94788" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96801-96823" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96921-96943" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97041-97063" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97161-97183" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97281-97303" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97401-97423" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97523-97545" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97645-97667" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97767-97789" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97889-97911" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98011-98033" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98133-98155" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98257-98279" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98381-98403" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98505-98527" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98629-98651" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98758-98780" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:990-1012" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99162-99184" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99448-99464" +fingerprint = "sha256:823fb5b298a0ab38bf099380c7e914794131da7e597872c0cd2fcf1d5cf665b3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/html_processor.test.html" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99518-99528" +fingerprint = "sha256:1a2e36cc692d119df0a1849e97aafb00564af3f638bb5fbe4c63be1cb6b82319" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24788-24811" +fingerprint = "sha256:a9913c90fcb55ed9165c9fa21291b2b35479b58d66b6fe5134f66f7ef9904e92" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24858-24881" +fingerprint = "sha256:a9913c90fcb55ed9165c9fa21291b2b35479b58d66b6fe5134f66f7ef9904e92" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26942-26950" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27016-27024" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28272-28280" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2950-2958" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29976-29986" +fingerprint = "sha256:bea55c6f754282407ce131da710f39c798fb4a320fef5afa6b2f7dfa676254ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3011-3021" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31961-31971" +fingerprint = "sha256:bea55c6f754282407ce131da710f39c798fb4a320fef5afa6b2f7dfa676254ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/http_util.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3880-3901" +fingerprint = "sha256:adaafd8d683312381e0216c0616dd2a31052582acb1d584b9d737be00c513acb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23293-23301" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23356-23364" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29307-29315" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40681-40689" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121972-122002" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14110-14141" +fingerprint = "sha256:6fd10dbd1196e7b31d0b8dde00c45b3b454f8e26bd0a7a09b27ece1309c1df52" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3174-3189" +fingerprint = "sha256:f8b57660dae471f667fa8fd58b559e49d3055c91c3ccbd07d0eceb67c1e211e4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5232-5240" +fingerprint = "sha256:0949b667d65319241c3aa75fce9d1c76df34c90b289c97720f963035c1d075fc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5748-5758" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/aps.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6425-6455" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10769-10783" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10849-10867" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11035-11057" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1187-1201" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1256-1274" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1909-1923" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21245-21263" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21306-21320" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21696-21710" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21729-21747" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21786-21800" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21813-21831" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21862-21876" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21887-21905" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22489-22503" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22509-22527" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22679-22693" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22708-22726" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23030-23044" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23397-23415" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23961-23979" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2415-2429" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27689-27707" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30154-30168" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34195-34209" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37039-37053" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37101-37119" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37521-37535" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37579-37593" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37632-37646" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38494-38508" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38831-38845" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38878-38892" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38927-38941" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38976-38990" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39031-39045" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39086-39100" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39140-39154" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39187-39201" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39225-39239" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40230-40244" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40518-40532" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40582-40596" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41154-41168" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41335-41353" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41449-41467" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41502-41520" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41573-41591" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41638-41652" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41758-41776" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42713-42731" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42880-42894" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43199-43213" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43344-43358" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43598-43616" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43749-43767" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4600-4618" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48428-48450" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4858-4872" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48941-48963" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4899-4917" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48994-49016" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49052-49074" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49117-49139" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4939-4953" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4973-4991" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49945-49967" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5011-5025" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54816-54834" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54851-54869" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54957-54971" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54993-55007" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55297-55311" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55435-55449" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55573-55587" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55784-55798" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55948-55966" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56475-56488" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56554-56574" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56693-56707" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57088-57102" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57794-57807" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57873-57893" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58032-58046" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58395-58409" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58806-58820" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6622-6636" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/datadome.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6853-6871" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12608-12630" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12741-12763" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14110-14132" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15499-15521" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20218-20240" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2802-2824" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/didomi.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2890-2912" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10837-10861" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10866-10890" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10895-10915" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11869-11893" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11985-12009" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1484-1508" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2161-2185" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2210-2234" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2265-2289" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2308-2332" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2359-2379" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2400-2420" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2496-2520" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28360-28384" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28480-28504" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28538-28562" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2860-2880" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28603-28627" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28666-28686" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28722-28742" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29111-29135" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29174-29198" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29250-29270" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29430-29450" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29595-29615" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2966-2986" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29816-29836" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29921-29941" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30452-30485" +fingerprint = "sha256:df9b0b46f51ebc027cf77edf95c024c69b65bf8e886245b462fa59b1dbceecd8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31096-31120" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31317-31341" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31767-31791" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3208-3241" +fingerprint = "sha256:df9b0b46f51ebc027cf77edf95c024c69b65bf8e886245b462fa59b1dbceecd8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32389-32413" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32934-32958" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33557-33581" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34018-34038" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34179-34203" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34567-34587" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34728-34748" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35018-35038" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35278-35287" +fingerprint = "sha256:c6d58b4b377f8cea411e772bea9e5338bdd3259d6ac4a23f82cd676c0b607508" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35814-35838" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36475-36483" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36502-36526" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37375-37399" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38245-38269" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38682-38706" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39549-39573" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39948-39972" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40170-40194" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4074-4098" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41384-41408" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42000-42024" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5435-5455" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5459-5479" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5975-5993" +fingerprint = "sha256:c5f1ab3f1fcb0414ec0af3ecc1baf18d04fb7289872fb063e5ec905f9c376529" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60452-60476" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60516-60540" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60856-60880" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61458-61476" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61538-61563" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62385-62403" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62465-62490" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63379-63403" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63824-63848" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65003-65027" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65531-65555" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66981-67005" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67402-67426" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67672-67696" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68201-68225" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69421-69445" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70132-70156" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73771-73795" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74205-74215" +fingerprint = "sha256:e962def3b974dc51e703ef0be6fb171d0ccdd0835442358cfe190571b81b1f4e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74246-74260" +fingerprint = "sha256:8c67db3a34ff21933786ca663326991fea3a80bc74ee4ba5750b1519db6157e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75634-75654" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76415-76439" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78261-78285" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78664-78674" +fingerprint = "sha256:e962def3b974dc51e703ef0be6fb171d0ccdd0835442358cfe190571b81b1f4e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78705-78719" +fingerprint = "sha256:8c67db3a34ff21933786ca663326991fea3a80bc74ee4ba5750b1519db6157e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82070-82094" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82617-82637" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8623-8643" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8650-8670" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89108-89128" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89181-89201" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89427-89437" +fingerprint = "sha256:e962def3b974dc51e703ef0be6fb171d0ccdd0835442358cfe190571b81b1f4e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9312-9320" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9332-9356" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19998-20028" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22165-22195" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22563-22593" +fingerprint = "sha256:bc104fc563f969e152fed460ae75a4ef7c705a4e233c96d0a509d21faa999746" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22928-22958" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23858-23888" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25041-25071" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26422-26452" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2707-2737" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27636-27666" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30110-30140" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34132-34162" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37011-37041" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38391-38421" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38925-38955" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39372-39402" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40025-40055" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/gpt.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:550-580" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14721-14736" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14799-14809" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16117-16127" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16209-16219" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1624-1639" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16309-16324" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16484-16494" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16555-16565" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16646-16656" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16714-16724" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16805-16820" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16895-16910" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17585-17595" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1776-1786" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18576-18586" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3417-3427" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/lockr.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3449-3464" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/mod.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23973-23989" +fingerprint = "sha256:e4ceaefecdd8b7ebe709e1993708098bbd1a6c04af4a571d91bcd31eccd90afd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17780-17788" +fingerprint = "sha256:5153adc960e26267e93a7cea2e7f328b59fc8c980054057618fb41ef4fd1cf04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17955-17963" +fingerprint = "sha256:5153adc960e26267e93a7cea2e7f328b59fc8c980054057618fb41ef4fd1cf04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19003-19011" +fingerprint = "sha256:5153adc960e26267e93a7cea2e7f328b59fc8c980054057618fb41ef4fd1cf04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19040-19048" +fingerprint = "sha256:5153adc960e26267e93a7cea2e7f328b59fc8c980054057618fb41ef4fd1cf04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19215-19223" +fingerprint = "sha256:5153adc960e26267e93a7cea2e7f328b59fc8c980054057618fb41ef4fd1cf04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22898-22919" +fingerprint = "sha256:34f2800ca709872ecdfdc79cdd68eb5d256d07fa9d107aba152907f320a49c94" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23553-23574" +fingerprint = "sha256:34f2800ca709872ecdfdc79cdd68eb5d256d07fa9d107aba152907f320a49c94" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/script_rewriter.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16948-16968" +fingerprint = "sha256:11460f4cce6ddb5bdf09b3a455cbc981a379a4f214a0dfe842552596fed60a9d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/shared.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11952-11966" +fingerprint = "sha256:01fba85aff9bce6807d88a3c0a33f37f11c4888beed168c19e19765229f7e939" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/shared.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12186-12200" +fingerprint = "sha256:01fba85aff9bce6807d88a3c0a33f37f11c4888beed168c19e19765229f7e939" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/nextjs/shared.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12827-12847" +fingerprint = "sha256:11460f4cce6ddb5bdf09b3a455cbc981a379a4f214a0dfe842552596fed60a9d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12951-12971" +fingerprint = "sha256:fd6f6905b98088187f76956d5cafc37845168c4ff5d7379d942fc36411a5cda9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13273-13291" +fingerprint = "sha256:8d7845fa0b247fa7e41a89bea33c16e8fa197c5311e3469658c9c1c8092b5628" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1330-1354" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13589-13606" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15300-15317" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15396-15424" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16377-16401" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1681-1698" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16995-17013" +fingerprint = "sha256:879c27d04c90787bada334f329516c6dc2d81d83374f81a9adf0e5502b4fc057" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17107-17131" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17191-17208" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17272-17289" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17497-17521" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18390-18414" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1865-1893" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19547-19571" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2995-3019" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3116-3137" +fingerprint = "sha256:2f560a833fb8118c0eb48e32582963f5a11b5e8fdde433cc51f5667897e719a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/permutive.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3448-3465" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140971-140989" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141051-141076" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146079-146093" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146791-146805" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147061-147075" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147159-147173" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149220-149234" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149318-149332" +fingerprint = "sha256:76cac400877b157163af97b24d6fdc28301b144f7763469f6290cc215f5dc553" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152105-152112" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152183-152190" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152276-152283" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:226090-226100" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22643-22661" +fingerprint = "sha256:c76f41607bff72511ea0c5a53bd59b26a80f38a6532a6404bc21ca29ca76b377" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:226518-226528" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:227754-227766" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228035-228047" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228317-228327" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:229246-229258" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:229370-229382" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:229489-229499" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314762-314780" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315437-315455" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/prebid.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63987-64005" +fingerprint = "sha256:c76f41607bff72511ea0c5a53bd59b26a80f38a6532a6404bc21ca29ca76b377" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/registry.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67267-67285" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/registry.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69034-69052" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/registry.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72291-72309" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1040-1060" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124-144" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19067-19087" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2012-2032" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20277-20297" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20421-20441" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21336-21356" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2961-2981" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3375-3395" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3422-3442" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3460-3480" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40647-40667" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44642-44662" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45577-45597" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45616-45636" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45997-46017" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46950-46970" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47031-47051" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5047-5067" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58452-58472" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60016-60032" +fingerprint = "sha256:58ee708eb93286336deb5eb2f247886f863d5f38a933fec99c438416adc82c0f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60098-60118" +fingerprint = "sha256:e8e72a974968db8db57735a89c8267e7d34af1b56c7e4060ac5b2c2ecc373cfa" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61124-61144" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61354-61374" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61769-61792" +fingerprint = "sha256:bc210b79807b611e09a6846f94588774097704d6573d5602f43f7ce18967a474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62008-62028" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62229-62249" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62680-62700" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63134-63154" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63574-63594" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63802-63822" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64017-64037" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68320-68340" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69429-69449" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81263-81283" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81329-81349" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81720-81740" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81778-81798" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82183-82203" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82246-82266" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82679-82699" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83001-83021" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9653-9673" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9746-9766" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/testlight.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10975-10992" +fingerprint = "sha256:3346e6c86c460caa9f1f424d3ecb17e058db677ede1f49e85beb359f10ad98dc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/integrations/testlight.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9985-10002" +fingerprint = "sha256:3346e6c86c460caa9f1f424d3ecb17e058db677ede1f49e85beb359f10ad98dc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/models.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7457-7465" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/models.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8351-8365" +fingerprint = "sha256:70fd25ffa105d1f94feb39cd32b0b56072b60a9438b5feead5481bdcbb876819" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/models.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8682-8696" +fingerprint = "sha256:70fd25ffa105d1f94feb39cd32b0b56072b60a9438b5feead5481bdcbb876819" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/openrtb.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12950-12962" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/openrtb.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13259-13271" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/openrtb.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13736-13746" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/openrtb.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2605-2617" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:179150-179190" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181022-181062" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181876-181916" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:182377-182417" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:195590-195630" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:197657-197697" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:197745-197785" +fingerprint = "sha256:7352f5ffb292cdf87943beab1da656b810d7e244ee2b589f4efe97bade80156e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:212022-212031" +fingerprint = "sha256:c6d58b4b377f8cea411e772bea9e5338bdd3259d6ac4a23f82cd676c0b607508" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:212780-212796" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:214067-214075" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:214303-214311" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:214593-214609" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215656-215664" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215905-215917" +fingerprint = "sha256:30f4de721b91f71385a2a21fc674096961275f6e0173ee85cbc30a38088fe255" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:216872-216880" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219489-219500" +fingerprint = "sha256:adacd8b14da370e8a167f6ca57efb7c1519ec0580c3fcc10fd1dc049c51cc71b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219551-219562" +fingerprint = "sha256:1069a73ba040ccbefbb5dfe3473fec1c54a6806ac5635958f815fb2404f0c7fa" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25198-25208" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/proxy.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42513-42529" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:217231-217235" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280991-281001" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315892-315910" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315965-315983" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318952-318977" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319594-319612" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319749-319774" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:320341-320366" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:320990-321008" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:321146-321171" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:473097-473111" +fingerprint = "sha256:191347bfe55d0ca9a574db77bc8648275ce258461450e793528e0cc6d2dcf8f5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:620811-620836" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:767137-767141" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:779601-779619" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:780504-780522" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:824532-824542" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/publisher.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:844494-844512" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22305-22313" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23798-23806" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25039-25047" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26386-26394" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26806-26814" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28013-28021" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29042-29050" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29690-29698" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31059-31067" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32361-32369" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33544-33552" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34245-34253" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35451-35459" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36055-36063" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37005-37013" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37592-37600" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38535-38543" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41990-41998" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43263-43271" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43953-43961" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/signing.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13601-13614" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/signing.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14458-14467" +fingerprint = "sha256:2f6ca9378d07d21b42a84ca8557d3c798e106b0d22adeb78ecce2205c790c016" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/request_signing/signing.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14687-14696" +fingerprint = "sha256:a32a4aa107568e56c5d8817efebafb7739193fad52f731dd6f0c677c7da7febf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11924-11957" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12224-12257" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12493-12526" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12760-12793" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13026-13059" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9107-9137" +fingerprint = "sha256:8317e2acd73f4116c26b41b42013a822313c0faece3bde42e8ab91a2234702df" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9322-9352" +fingerprint = "sha256:8317e2acd73f4116c26b41b42013a822313c0faece3bde42e8ab91a2234702df" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:10520-10575" +fingerprint = "sha256:8aa614df7857384b57234e930a4c963975f26e80bf095298aa80cb9efbba7ae6" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/s3_sigv4.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:4442-4463" +fingerprint = "sha256:6499375dd6d4c657ded2080185fe5391a2c6cb372364aca05205a01b89cb5e9e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15009-15021" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:186991-187018" +fingerprint = "sha256:3c25dbf94bd51b761a973fc208163a6f8ce045b9780476ace05e5f2df6a88063" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:188820-188838" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:189319-189344" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:205910-205935" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:205977-206002" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:206531-206549" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:206927-206945" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:208241-208251" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:209393-209418" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:209460-209485" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:209990-210015" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:210057-210082" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:211162-211187" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:223578-223603" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228079-228104" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:231052-231077" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:232980-233000" +fingerprint = "sha256:5f5cc586ab21a09689102000fc98a30e56bbd9177a35c4ce981e18707506b671" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:233335-233355" +fingerprint = "sha256:5f5cc586ab21a09689102000fc98a30e56bbd9177a35c4ce981e18707506b671" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:233776-233796" +fingerprint = "sha256:5f5cc586ab21a09689102000fc98a30e56bbd9177a35c4ce981e18707506b671" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:234114-234134" +fingerprint = "sha256:5f5cc586ab21a09689102000fc98a30e56bbd9177a35c4ce981e18707506b671" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247795-247811" +fingerprint = "sha256:f4030b81b7c747e64ec58a4deb0e8610bcbdb19462482b1e72dcd123f1deb89d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247994-248012" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248500-248512" +fingerprint = "sha256:60ce4eeea9077274f2d9f81d971e47a6e94db8794b1ae6deca0de4f2d56a63e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248608-248626" +fingerprint = "sha256:4a9830e9d8878a26311b4c4ff98a0c05647f75a81084d2757aada8ff117751f7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248683-248706" +fingerprint = "sha256:58270d105c2956eb98567cc8df1f5b305e8f339d6a4b6146feebce83eb31390d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248951-248972" +fingerprint = "sha256:a4aa9f62cc33b843de3bb4c12e1883492d98dc412ac65293e59a1bb5598903f3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:249032-249046" +fingerprint = "sha256:ecb538d168816ce83d6aac90f327fc4ead05b45a2a2d1e4bedfeceea34a2f2c8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:253071-253082" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:253243-253254" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:257831-257864" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:259270-259303" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:260124-260157" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:260927-260960" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263980-264013" +fingerprint = "sha256:60a42e5cfb20290b0a7d623cdded69e9279575ad4a3275eb379129122d84e6d7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269852-269885" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:279994-280019" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280693-280701" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280780-280788" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281819-281837" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281923-281948" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/settings.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291603-291628" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:284887-284907" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:285036-285056" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:285800-285820" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:285967-285987" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:287012-287036" +fingerprint = "sha256:ebe1b7da5ae2ffff7e51b759821849343ff183f8eccb3f1a81a5680d807145b3" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:287152-287172" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:287873-287893" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:289030-289050" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:289200-289220" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:290028-290048" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:290169-290189" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:290924-290944" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:291064-291084" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:294114-294136" +fingerprint = "sha256:ee2272a5442514a18a34a99dcf7f4458766eee073b2305cfa5169eba9e497978" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:296992-297014" +fingerprint = "sha256:ee2272a5442514a18a34a99dcf7f4458766eee073b2305cfa5169eba9e497978" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:298150-298172" +fingerprint = "sha256:ee2272a5442514a18a34a99dcf7f4458766eee073b2305cfa5169eba9e497978" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-core/src/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:299397-299419" +fingerprint = "sha256:ee2272a5442514a18a34a99dcf7f4458766eee073b2305cfa5169eba9e497978" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75040-75060" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90790-90798" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91470-91478" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92194-92202" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_processor.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93493-93501" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14999-15009" +fingerprint = "sha256:aebe8c3aae06857efa5497dc6c0923f5b2ae7b4a648aa15621adc496793d1d65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15041-15051" +fingerprint = "sha256:aebe8c3aae06857efa5497dc6c0923f5b2ae7b4a648aa15621adc496793d1d65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15075-15083" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15168-15178" +fingerprint = "sha256:aebe8c3aae06857efa5497dc6c0923f5b2ae7b4a648aa15621adc496793d1d65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15233-15243" +fingerprint = "sha256:aebe8c3aae06857efa5497dc6c0923f5b2ae7b4a648aa15621adc496793d1d65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15351-15359" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15396-15404" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15661-15669" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15681-15689" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15693-15700" +fingerprint = "sha256:b26fb9122bdd98a0f893c1a0691a263391bdc5c1f44ff0a4b1f781cb3bb7a6c4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16908-16915" +fingerprint = "sha256:b26fb9122bdd98a0f893c1a0691a263391bdc5c1f44ff0a4b1f781cb3bb7a6c4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17036-17043" +fingerprint = "sha256:b26fb9122bdd98a0f893c1a0691a263391bdc5c1f44ff0a4b1f781cb3bb7a6c4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17197-17206" +fingerprint = "sha256:251b614e90d8e11dec2d1a341fe6dc494251e65f0b086115850f1fcc40161bcc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17310-17319" +fingerprint = "sha256:251b614e90d8e11dec2d1a341fe6dc494251e65f0b086115850f1fcc40161bcc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17331-17340" +fingerprint = "sha256:251b614e90d8e11dec2d1a341fe6dc494251e65f0b086115850f1fcc40161bcc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17344-17352" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17537-17545" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17715-17723" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18425-18433" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18489-18497" +fingerprint = "sha256:99ab715d84a3bc5e0e92aa50e67a5813637fd1744bd301ab08f87191ddb816e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/streaming_replacer.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9105-9112" +fingerprint = "sha256:0bbdcfb1169ee00bee2947f77caddbbbd957be3eed532fafeaa3b7dc8e781463" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/test_support.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:430-448" +fingerprint = "sha256:7e1d030b9890377bf73d9889238f3481d257d6b9564041cf8abb44ec3c2924eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-core/src/test_support.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:534-559" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133-151" +fingerprint = "sha256:1a08b00c4f81c774dc161e19750fa10ad58ac9bb6add8ffa2761cfc48ce59faa" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:179-193" +fingerprint = "sha256:0ef0e15b19831a3784aca8822948deaafc6fc191f5cf993ff01fd290e7c421be" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10066-10084" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10587-10605" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11156-11174" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11527-11545" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11879-11897" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12294-12312" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12774-12792" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1282-1300" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13173-13191" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13563-13581" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14069-14087" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14622-14640" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15037-15055" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15880-15898" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16296-16314" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1641-1659" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16646-16664" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17072-17090" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17506-17524" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17799-17817" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18162-18180" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18629-18647" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19139-19157" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19515-19533" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19896-19914" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20316-20334" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20682-20700" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21056-21074" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21487-21505" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2160-2178" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21920-21938" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22278-22296" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22574-22592" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22930-22948" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23540-23558" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23901-23919" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24353-24371" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24725-24743" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2524-2542" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25255-25273" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25686-25704" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26183-26201" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26550-26568" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26857-26875" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27292-27310" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27664-27682" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28110-28128" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28676-28694" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29113-29131" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2916-2934" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29501-29519" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29999-30017" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30302-30320" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30733-30751" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31065-31083" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31447-31465" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31823-31841" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32503-32521" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32966-32984" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33369-33387" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3349-3367" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33832-33850" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34195-34213" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34699-34717" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35125-35143" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35574-35592" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36051-36069" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36419-36437" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36854-36872" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37222-37240" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37576-37594" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3763-3781" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37985-38003" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38557-38575" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38900-38918" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39513-39531" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4172-4190" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:421-439" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4703-4721" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5133-5151" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5565-5583" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5873-5891" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6337-6355" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7047-7065" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7412-7430" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7884-7902" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:796-814" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8193-8211" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8550-8568" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8906-8924" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9339-9357" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9639-9657" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:13031-13065" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:19002-19036" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:2011-2057" +fingerprint = "sha256:86c85918a0f4402c2d229710da9e3fc00bd1a88f569dcd286bd43ca159c77267" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:27965-28006" +fingerprint = "sha256:e52c648060bfedd03686ba12c574f6b66f4162fb5204ee7be5a178eecbcd4f07" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:32365-32399" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:35920-35954" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:38416-38460" +fingerprint = "sha256:a8d51acfa34d398dd6278b4878870051dc7aea143abe681e9b43bd7bf474ab9c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:4565-4605" +fingerprint = "sha256:479c9562255ad668d45f79928ea29db82927e484036ce376c8d716bf39ed9a3e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17740-17750" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19148-19158" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219-249" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4144-4154" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4224-4234" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45436-45466" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5237-5247" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5332-5342" +fingerprint = "sha256:69bba9d601e1cc309f526926ff0e46bf200170c07e2ec86f31034dc79d1be872" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "crates/trusted-server-integration-tests/fixtures/configs/trusted-server.integration.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:65-91" +fingerprint = "sha256:913e8a009eac1040a962da8487d17094711a1d592f93c9fb6f3227127f08f1bf" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10155-10173" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11702-11720" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11989-12007" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12817-12835" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1308-1326" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13218-13236" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13668-13686" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14025-14043" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14386-14404" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14710-14728" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15377-15395" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15657-15675" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16114-16132" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1784-1802" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2272-2290" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2759-2777" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3239-3257" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3723-3741" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4212-4230" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4697-4715" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5165-5183" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:534-552" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5462-5480" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5854-5872" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6236-6254" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6557-6575" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6955-6973" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7343-7361" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8015-8033" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8303-8321" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:831-849" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8607-8625" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8898-8916" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9187-9205" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9607-9625" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:12240-12275" +fingerprint = "sha256:6b51830b8ef4e14fce81553b3967c520d3d9730db5ca930ab3816d67b18a776d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:12346-12393" +fingerprint = "sha256:c840bff9f169ab9b63aabc0d53db12df214b40ce9eb79ae091510bf102ad7fa8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:12462-12492" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:7610-7649" +fingerprint = "sha256:43a95e169fa5b21654f105096eead30f3affe1b1b48d23b448a1200351306d18" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:7720-7772" +fingerprint = "sha256:7db3b2289338f3095246989f5c2fd13444ef22e7b59b0efd112343ae0072800f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:7841-7871" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:9848-9878" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100314-100332" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100780-100798" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101249-101267" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101723-101741" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102196-102214" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102662-102680" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103131-103149" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103605-103623" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104078-104096" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104541-104559" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104999-105017" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10538-10556" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105456-105474" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105915-105933" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106391-106409" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106858-106876" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107320-107338" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107778-107796" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108218-108236" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108529-108547" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108991-109009" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109305-109323" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10932-10950" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109714-109732" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110028-110046" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110338-110356" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110777-110795" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111079-111097" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111389-111407" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111771-111789" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112113-112131" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113222-113240" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114185-114203" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11461-11479" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114986-115004" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115677-115695" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116311-116329" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117225-117243" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117772-117790" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118803-118821" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11961-11979" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119713-119731" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120420-120438" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120912-120930" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:121540-121558" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122326-122344" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122798-122816" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123287-123305" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123819-123837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124205-124223" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124696-124714" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125124-125142" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125549-125567" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125938-125956" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12616-12634" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126292-126310" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126886-126904" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127409-127427" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128013-128031" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128323-128341" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128733-128751" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:129251-129269" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1295-1313" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:129603-129621" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:129980-129998" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130289-130307" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130628-130646" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13093-13111" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130984-131002" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:131557-131575" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:131856-131874" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132632-132650" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133398-133416" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134049-134067" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134710-134728" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13491-13509" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135475-135493" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135848-135866" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136204-136222" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136585-136603" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137150-137168" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137766-137784" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138125-138143" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138693-138711" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139212-139230" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139543-139561" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139994-140012" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140367-140385" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140654-140672" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141444-141462" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14145-14163" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141795-141813" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142073-142091" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142555-142573" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142937-142955" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144017-144035" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144438-144456" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144754-144772" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145248-145266" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145552-145570" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146005-146023" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146336-146354" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146981-146999" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147447-147465" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147980-147998" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14826-14844" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148345-148363" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149010-149028" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149352-149370" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149889-149907" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150196-150214" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150683-150701" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151155-151173" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151540-151558" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151972-151990" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152284-152302" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152656-152674" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152966-152984" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153325-153341" +fingerprint = "sha256:a5b91071c21817e0743172c5f6ffee260f9a1f5d3b6d1942933daf5a3c8144aa" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153365-153375" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15366-15384" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153673-153691" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154099-154117" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154453-154471" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154754-154772" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155094-155112" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155393-155411" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155828-155846" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156309-156327" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156603-156621" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157089-157107" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157374-157392" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15762-15780" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157859-157877" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158413-158431" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158906-158924" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159499-159517" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160106-160124" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160693-160711" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161187-161205" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161493-161511" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16168-16186" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:161805-161823" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162402-162420" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163004-163022" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163331-163349" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163700-163718" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163973-163991" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:164394-164412" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:164723-164741" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:165201-165219" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:165498-165516" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16563-16581" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:165808-165826" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:166146-166164" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:166602-166620" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:169117-169135" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:169474-169492" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:169819-169837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:170142-170160" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:170565-170583" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17082-17100" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:171114-171132" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:171558-171576" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:172142-172160" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:172431-172449" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:174011-174029" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:174347-174365" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:174648-174666" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:175110-175128" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17536-17554" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:177070-177088" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:177651-177669" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:178155-178173" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:178519-178537" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:179081-179099" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:179446-179464" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18057-18075" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:180704-180722" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181151-181169" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181538-181556" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181991-182009" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:182359-182377" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183448-183466" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183965-183983" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:184573-184591" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:185819-185837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:186401-186419" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:186918-186936" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18722-18740" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:187365-187383" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1877-1895" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:187871-187889" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:188241-188259" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:188661-188679" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:189289-189307" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:189776-189794" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:190218-190236" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:190645-190663" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:191076-191094" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:191448-191466" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:191826-191844" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:192167-192185" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:192498-192516" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:192868-192886" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19371-19389" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:194348-194366" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:194695-194713" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:194972-194990" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:195432-195450" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:195747-195765" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:196093-196111" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:196411-196429" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:196941-196959" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:197468-197486" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:197909-197927" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:198519-198537" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:198871-198889" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:199141-199159" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:199682-199700" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:200135-200153" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20045-20063" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:200578-200596" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:200878-200896" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:201379-201397" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:201714-201732" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:202055-202073" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:202426-202444" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:202883-202901" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:203243-203261" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:203631-203649" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:204345-204363" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:204761-204779" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:205142-205160" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:205489-205507" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:206291-206309" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:206746-206764" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:207342-207360" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:207767-207785" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:208207-208225" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20826-20844" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:208739-208757" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:209151-209169" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:209443-209461" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:210024-210042" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:210752-210770" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:211123-211141" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:211579-211597" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:211956-211974" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:212287-212305" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:212728-212746" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:213096-213114" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:213583-213601" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:214089-214107" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:214518-214536" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215030-215048" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21522-21540" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215442-215460" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215921-215939" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:216464-216482" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:217116-217134" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:217586-217604" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:218045-218063" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:218387-218405" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:218732-218750" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219141-219159" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219554-219572" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:219907-219925" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:220457-220475" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22066-22084" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:220825-220843" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:221274-221292" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:221562-221580" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:222053-222071" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:222386-222404" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:222717-222735" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:223305-223323" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:223964-223982" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:224475-224493" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:225038-225056" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:225570-225588" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:226018-226036" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22640-22658" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:226511-226529" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:227096-227114" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:227649-227667" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228068-228086" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228444-228462" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:228986-229004" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:229655-229673" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:230072-230090" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:230511-230529" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:230970-230988" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:231529-231547" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:231967-231985" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23200-23218" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:232317-232335" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:232905-232923" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:233350-233368" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:233878-233896" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:234417-234435" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:234995-235013" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:235517-235535" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:235958-235976" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:236463-236481" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:237000-237018" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:237297-237315" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23739-23757" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:237593-237611" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:237932-237950" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:238216-238234" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:238653-238671" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:239038-239056" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:240392-240410" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:240839-240857" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:241222-241240" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:241542-241560" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:241897-241915" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:242254-242272" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2426-2444" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:242631-242649" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:242986-243004" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24300-24318" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:243310-243328" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:243766-243784" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:244136-244154" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:244600-244618" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:245107-245125" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:245395-245413" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:245696-245714" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:246008-246026" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:246386-246404" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:246786-246804" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247137-247155" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247447-247465" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:247798-247816" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248184-248202" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248514-248532" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:248888-248906" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:249226-249244" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24941-24959" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:249630-249648" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:250157-250175" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:250533-250551" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:250803-250821" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251379-251397" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:251697-251715" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:252043-252061" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:252340-252358" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:252786-252804" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:253113-253131" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:253545-253563" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:253911-253929" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:254603-254621" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:255237-255255" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25528-25546" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:255745-255763" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:256357-256375" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:256573-256583" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:256617-256635" +fingerprint = "sha256:6d145e0d6d1e4e2e4081b7fb037dc5db55b52469bdc42538225b6093dfed502d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:256769-256787" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:257174-257192" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:257755-257773" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:258326-258344" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:258828-258846" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:259333-259351" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:259771-259789" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:260178-260196" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:260495-260513" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:260945-260963" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:261284-261302" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:261642-261660" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:261996-262014" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26227-26245" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:262290-262308" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:262583-262601" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:262881-262899" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263169-263187" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:263635-263653" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264143-264161" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264515-264533" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:264905-264923" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:265757-265775" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:266835-266853" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267196-267214" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:267716-267734" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268025-268043" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268458-268476" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:268805-268823" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269288-269306" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26929-26947" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:269632-269650" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270128-270146" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:270725-270743" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271038-271056" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:271342-271360" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272118-272136" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272427-272445" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:272871-272889" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:273259-273277" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:273955-273973" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:274592-274610" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2746-2764" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:274879-274897" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27518-27536" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:275300-275318" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:275654-275672" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:276026-276044" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:276490-276508" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:277121-277139" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:277480-277498" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:279364-279382" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280011-280029" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:280636-280654" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28092-28110" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281184-281202" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:281762-281780" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282050-282068" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282469-282487" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:283117-283135" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:283734-283752" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284193-284211" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284498-284516" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:284902-284920" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:285654-285672" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286017-286035" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286293-286311" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:286804-286822" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28739-28757" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:287437-287455" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288004-288022" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288501-288519" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288803-288821" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289241-289259" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289607-289625" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290259-290277" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:290801-290819" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:291412-291430" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292056-292074" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292358-292376" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:292714-292732" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293097-293115" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293432-293450" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29378-29396" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:293876-293894" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294201-294219" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294498-294516" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:294802-294820" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:295138-295156" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:295454-295472" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:295943-295961" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:296334-296352" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:296637-296655" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:297408-297426" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:298064-298082" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:298675-298693" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299033-299051" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299491-299509" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:299957-299975" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300406-300424" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:300871-300889" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301179-301197" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301561-301579" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30185-30203" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:301851-301869" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:302155-302173" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:302511-302529" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:303052-303070" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:303413-303431" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:303832-303850" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:304150-304168" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:304731-304749" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:305078-305096" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:305503-305521" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:305907-305925" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:306188-306206" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:306628-306646" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:307123-307141" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:307537-307555" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:307962-307980" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30806-30824" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:308404-308422" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:308926-308944" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:309593-309611" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310343-310361" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311048-311066" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311530-311548" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:311913-311931" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:312807-312825" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313114-313132" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:313492-313510" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314113-314131" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31414-31432" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314473-314491" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:314819-314837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315247-315265" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:315815-315833" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:316237-316255" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:316622-316640" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:316968-316986" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317876-317894" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318251-318269" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318549-318567" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:318889-318907" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319227-319245" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319586-319604" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:319957-319975" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32050-32068" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:321819-321837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:324092-324110" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:324545-324563" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:324934-324952" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:325304-325322" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3258-3276" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:325821-325839" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:326303-326321" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32648-32666" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:326976-326994" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:327961-327979" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:328574-328592" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329302-329320" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:329832-329850" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330201-330219" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330581-330599" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:330880-330898" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:331208-331226" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:331492-331510" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33334-33352" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33922-33940" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34593-34611" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35192-35210" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35772-35790" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3613-3631" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36402-36420" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37066-37084" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37630-37648" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38206-38224" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38820-38838" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39415-39433" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40039-40057" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40673-40691" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41397-41415" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42033-42051" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42695-42713" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43274-43292" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43877-43895" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44461-44479" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45252-45270" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45881-45899" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46474-46492" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4711-4729" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47123-47141" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47690-47708" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48343-48361" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49062-49080" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49639-49657" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50209-50227" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5057-5075" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50851-50869" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51431-51449" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52009-52027" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52638-52656" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53211-53229" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53790-53808" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54358-54376" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55170-55188" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55754-55772" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56409-56427" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5651-5669" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57051-57069" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57676-57694" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6119-6137" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62610-62628" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62980-62998" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63552-63570" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64294-64312" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64645-64663" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65141-65159" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65782-65800" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66271-66289" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66724-66742" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67358-67376" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6768-6786" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68122-68140" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69024-69042" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69796-69814" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70414-70432" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71069-71087" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7159-7177" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71701-71719" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72087-72105" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72566-72584" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73053-73071" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73544-73562" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74030-74048" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74517-74535" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75001-75019" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7531-7549" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75492-75510" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75975-75993" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76454-76472" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76938-76956" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77422-77440" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77916-77934" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78410-78428" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78897-78915" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79388-79406" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79871-79889" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80351-80369" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80838-80856" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81322-81340" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81813-81831" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82304-82322" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82805-82823" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83284-83302" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83768-83786" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84248-84266" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8456-8474" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84736-84754" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85398-85416" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85807-85825" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86386-86404" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86837-86855" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87272-87290" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87751-87769" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88220-88238" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8829-8847" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89032-89050" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89478-89496" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89944-89962" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90324-90342" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90748-90766" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91209-91227" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91624-91642" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92122-92140" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92698-92716" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93071-93089" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93570-93588" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94080-94098" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94574-94592" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9501-9519" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95018-95036" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95455-95473" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95829-95847" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96156-96174" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96613-96631" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97078-97096" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97538-97556" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:977-995" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97993-98011" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98445-98463" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9868-9886" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98904-98922" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99365-99383" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99841-99859" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:108837-108877" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:112885-112929" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:113887-113931" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:114740-114784" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:115506-115550" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:116068-116112" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:116937-116981" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:117598-117642" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:118565-118609" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:119418-119462" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:120219-120263" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:120771-120804" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:121399-121432" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:121928-121961" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:122657-122690" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:123144-123177" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:123681-123714" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:124065-124098" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:124563-124596" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:126743-126782" +fingerprint = "sha256:491ca017eebe985f300da035601eb0cc7ae913d048ff35b21721444815e14a13" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:127836-127875" +fingerprint = "sha256:491ca017eebe985f300da035601eb0cc7ae913d048ff35b21721444815e14a13" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:129103-129149" +fingerprint = "sha256:86c85918a0f4402c2d229710da9e3fc00bd1a88f569dcd286bd43ca159c77267" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:131417-131451" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:132476-132510" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:133251-133285" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:133899-133933" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:134556-134590" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:135333-135367" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:136993-137027" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:143198-143237" +fingerprint = "sha256:43a95e169fa5b21654f105096eead30f3affe1b1b48d23b448a1200351306d18" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:143308-143360" +fingerprint = "sha256:8babf71721f9631be04c457064396c8c7b90c33d8a05d3c585d033e22a870269" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:143429-143459" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:145867-145907" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:146831-146865" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:147844-147878" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:148612-148651" +fingerprint = "sha256:43a95e169fa5b21654f105096eead30f3affe1b1b48d23b448a1200351306d18" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:148722-148774" +fingerprint = "sha256:7db3b2289338f3095246989f5c2fd13444ef22e7b59b0efd112343ae0072800f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:148843-148873" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:149745-149785" +fingerprint = "sha256:479c9562255ad668d45f79928ea29db82927e484036ce376c8d716bf39ed9a3e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:150457-150494" +fingerprint = "sha256:105efa793dd4e6109d478d0172766ce828b3e1ecf8c68cac0f81952db367410e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:155686-155720" +fingerprint = "sha256:8f028fafd5b66d5da669e3e1520844b590ea736c2784e6f877eabf0c834b2d5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:156170-156204" +fingerprint = "sha256:8f028fafd5b66d5da669e3e1520844b590ea736c2784e6f877eabf0c834b2d5a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:159351-159385" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:159954-159992" +fingerprint = "sha256:f4d6534608917592a202f86eba7f47efba482dd46bd6d1838f39600ea69736ef" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:160561-160595" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:162258-162292" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:162873-162907" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:166455-166497" +fingerprint = "sha256:30706283460f8a6ca3065fd55558ae90fec49d8c8c133a0dc85d2860a9c32e15" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:168972-169006" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:172004-172038" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:174970-175010" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:176776-176801" +fingerprint = "sha256:8117f0afc7a4dee882e2c90815c49a91b39a1ca8c4fc7eb7786cd8c38845b127" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:177417-177466" +fingerprint = "sha256:f8788f00fb76688c2be68abb9119b83193c2f1de6f074d70eba8b19cf0b973dc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:183799-183832" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:184425-184458" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:185585-185648" +fingerprint = "sha256:1c73139bf1aee6d63357109278b0aa3a3ff3998b1923ee2e307c02da329584cb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:186256-186289" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:186756-186789" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:187719-187752" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:189124-189157" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:189643-189676" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:194195-194229" +fingerprint = "sha256:e1e71f2ab342190424bc83396cfdfad347550a1e3deb30403b632a4b4a12d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:196655-196690" +fingerprint = "sha256:afdace2e648a3b0626954e6eaad06366aed2417a193542f7612004b28f3b3d93" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:196767-196801" +fingerprint = "sha256:24fdbb4e47dad57fd78d966cdfa5ae199387c0e57f62a25ab5a219a205aaa21c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:199535-199575" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:199992-200032" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:201243-201277" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:203481-203515" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:204198-204232" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:204616-204650" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:206155-206189" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:207204-207238" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:208064-208104" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:208608-208642" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:209012-209046" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:212593-212627" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:213447-213481" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:213951-213985" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:214376-214410" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:214897-214931" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:216194-216229" +fingerprint = "sha256:4ec564ba887e241a2ff6649694a18b128b57875d57d5ac97eb33e05abb5cf926" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:216299-216326" +fingerprint = "sha256:e5d57b3786eb9acf9a4c0f03821e19d6348356c69dcd4a8ddc2be0e6f1d64d06" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:216973-217007" +fingerprint = "sha256:e1e71f2ab342190424bc83396cfdfad347550a1e3deb30403b632a4b4a12d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:220313-220353" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:221133-221173" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:223161-223195" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:223828-223862" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:224331-224365" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:224894-224928" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:225426-225466" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:225876-225910" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:226372-226406" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:226955-226989" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:227509-227543" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:228838-228872" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:229521-229555" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:230368-230402" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:230827-230861" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:231387-231421" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:232772-232806" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:233201-233235" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:233742-233776" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:234281-234315" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:234853-234887" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:235380-235414" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:235821-235855" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:236326-236360" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:236866-236900" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:240697-240741" +fingerprint = "sha256:67eaac1bd0b016b1b4fbd727275a27bdc7f7cff7e6a48f490fafeb89b1abf508" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:244966-245006" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:248044-248084" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:250022-250056" +fingerprint = "sha256:a982d1fd702d295e80b70f5f80a40e394a30335d4d72b13d28aae103a2eedcbe" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:250404-250438" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:251063-251093" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:253407-253441" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:254458-254492" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:255096-255130" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:256226-256260" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:258192-258226" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:258687-258727" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:259187-259227" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:260800-260844" +fingerprint = "sha256:67eaac1bd0b016b1b4fbd727275a27bdc7f7cff7e6a48f490fafeb89b1abf508" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:263489-263530" +fingerprint = "sha256:e52c648060bfedd03686ba12c574f6b66f4162fb5204ee7be5a178eecbcd4f07" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:265174-265209" +fingerprint = "sha256:6b51830b8ef4e14fce81553b3967c520d3d9730db5ca930ab3816d67b18a776d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:265280-265327" +fingerprint = "sha256:c840bff9f169ab9b63aabc0d53db12df214b40ce9eb79ae091510bf102ad7fa8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:265396-265426" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:267557-267603" +fingerprint = "sha256:027705490f4622c1ea022eed7ec5bc061b43b652d2849c0d6bf1e58ab5fde76d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:269149-269183" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:271981-272015" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:273816-273850" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:276348-276388" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:276982-277016" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:279873-279907" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:280261-280295" +fingerprint = "sha256:120dc10fcf086b3f0564a885ce86afdafd93d5c647dc5fdd26ad0603e09b9735" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:280365-280395" +fingerprint = "sha256:983417723d0ffdaf7af119463b9fa126aa68c9dc7824b2cf6f80a0ec0d1505b7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:280468-280494" +fingerprint = "sha256:cd08e9f05f33b7cbefd523f24b7772174894a029c5b8821b0d669be7b9bc464b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:281042-281076" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:281623-281657" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:282960-282994" +fingerprint = "sha256:a902ede9ee3d2dd9c13189b9e0cb9cb4d85989e2b1f938071846f3edec6217e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:283564-283603" +fingerprint = "sha256:491ca017eebe985f300da035601eb0cc7ae913d048ff35b21721444815e14a13" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:290115-290149" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:290658-290692" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:291265-291299" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:291922-291956" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:297257-297291" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:297911-297945" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:298539-298573" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:299339-299379" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:299810-299850" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:300733-300767" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:302907-302948" +fingerprint = "sha256:5c2bf743426a4df4c9103796a9d072147843b271fd158355bea948aece1fa336" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:304586-304626" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:309443-309477" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:310198-310232" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:310911-310945" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:312528-312572" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:313979-314013" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:317248-317287" +fingerprint = "sha256:43a95e169fa5b21654f105096eead30f3affe1b1b48d23b448a1200351306d18" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:317358-317410" +fingerprint = "sha256:8babf71721f9631be04c457064396c8c7b90c33d8a05d3c585d033e22a870269" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:317479-317509" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:320548-320588" +fingerprint = "sha256:a3aa0ac68fa658bdcf51f7ddf8b0607e445aa46c3ec741eacd14602c18df2c19" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:322908-322941" +fingerprint = "sha256:4deabb458c5a2be1a36b1254b4b2b3959f67e61d3053262d1886186941eb3867" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:326831-326865" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:327818-327852" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:328429-328463" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:329156-329190" +fingerprint = "sha256:ed094e477db66fc035a740fb418c62daa17c9d6f6886969017bb301030012a83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:331796-331836" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:4555-4587" +fingerprint = "sha256:0e6a2694417372536971a018f95c82af33e475967e0bacae2dd1f8aeb47f93c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:67007-67043" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:67120-67155" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:67631-67667" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:67744-67779" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:68411-68447" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:68524-68559" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:69323-69359" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:69436-69471" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:70114-70150" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:70227-70262" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:70697-70733" +fingerprint = "sha256:4e2ac547d636dbe117d27ce9e41b32c6db8a8a1f0b33017e068384d85293d9e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:70810-70845" +fingerprint = "sha256:a2972e758cab965e7ca90067dc8163ab4479eb3b998f1486ee2d6ff83c136eb9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:85161-85194" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:88860-88893" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:89775-89815" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:91070-91095" +fingerprint = "sha256:8117f0afc7a4dee882e2c90815c49a91b39a1ca8c4fc7eb7786cd8c38845b127" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:93933-93967" +fingerprint = "sha256:3ff9125280122c009f108208bd7530484f28f3b33d6493e4918385809e877ef8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:94423-94457" +fingerprint = "sha256:3ff9125280122c009f108208bd7530484f28f3b33d6493e4918385809e877ef8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/core/styles/normalize.css" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41-51" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/aps/render.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24685-24691" +fingerprint = "sha256:e1babb2cef9114aa657fcff6b1cd6979bb060f7f94d23c392783c8f1374c811c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/aps/render.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:372-402" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/creative/proxy_sign.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1347-1357" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346-360" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:478-492" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:548-562" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1097-1111" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1313-1327" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1369-1383" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1797-1811" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:644-658" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:937-951" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:963-977" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:987-1001" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/didomi/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1086-1108" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1073-1093" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:534-558" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:566-586" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:867-891" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:979-1003" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1352-1376" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1409-1433" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1457-1477" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1495-1519" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1567-1587" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1691-1715" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2619-2643" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2707-2731" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:668-692" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:694-718" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:720-740" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16778-16788" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68132-68136" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/index.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68167-68171" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2211-2241" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3295-3325" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/gpt/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3360-3373" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1012-1027" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1093-1108" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:919-929" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:959-969" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/permutive/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:346-363" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1101-1115" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1127-1140" +fingerprint = "sha256:188b5dea2b7a7fde3a1507ffc6a1da66d887cca6229515ba2b99b9d0c6c1793e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1152-1177" +fingerprint = "sha256:f0886fedd92f1ab1b9dc380098a31bcd9317990ab5a6da6365c39dddf1ceaf5e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1189-1207" +fingerprint = "sha256:747c99c1298615232920bacef02dd1b6fa4722f15fe66869ffbd8a6584875942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1219-1247" +fingerprint = "sha256:6fd7cca8cf5e8179f9e6621461d1dd8c3eb3b7a85a08ccea963d2c52c7c2ae87" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1259-1268" +fingerprint = "sha256:1f750e1c8f96aa309c3c1cb1190046b5d567730ec2e350bd3b3dd5a2303b821c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1280-1292" +fingerprint = "sha256:6b19c3ae8a2fbab51ffab2a556620a8b84561066693aa4e556d1cbb4c53db3ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1304-1324" +fingerprint = "sha256:c7e421cbb4df9c83eebf1fb327dcce2273ba822949f96bede8f5b16e1cb9b6c0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1336-1362" +fingerprint = "sha256:ebea0534e77ad39ee209b57c16d4dfca09e9419d873795ba8a8c0462ba73470d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1374-1383" +fingerprint = "sha256:ec75dbe867c6a8c2544861bd43c46d8338680ac1c5d932d7a9716bc82595ac04" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1395-1418" +fingerprint = "sha256:1e768a481f873950044a852279268d1c726fbb757f29af7e2adefcbcc4301998" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1430-1449" +fingerprint = "sha256:c8865d4b4a5b260fff7ccf6171ae1a556a23113723ff9a1e7a34190629677e92" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1461-1477" +fingerprint = "sha256:c78215b99bbe8c9f0ba65cfcee1d37cd31485c3c0aa91d9867a95b04be1b13f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1489-1510" +fingerprint = "sha256:7e1998d7cc478131ddfda85c5cffc7cf72d4a0c0f7c361564abb55cb0615d6c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1522-1544" +fingerprint = "sha256:c6bf8909bff8da4a23960f29b96e94456be58b91a34cdb97da455ff95c80b5b8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2010-2020" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2386-2396" +fingerprint = "sha256:d21447b45a0cf44448a9e35c1aa029b585e4d9fc515860d41e8e30a53290bc60" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2560-2570" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2740-2752" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:355-364" +fingerprint = "sha256:b33960790a6de22ca95a61c6d1310b3487304529cb0af6f3e9b80d2e5ddf76b8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:533-543" +fingerprint = "sha256:ce12e5de6aa70f697d69acd1bfbaa94b628f656a3fb2c8a99cb6c59790f44100" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:707-719" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:896-908" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1689-1703" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/src/integrations/sourcepoint/script_guard.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94-114" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3168-3180" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3310-3324" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3480-3492" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3602-3616" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/creative/click.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8831-8842" +fingerprint = "sha256:2c6631ee0cabea9afb499cec860aab5fcf40ed956651a0b0ea7b3411e1a31cd9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10053-10067" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10223-10237" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10269-10282" +fingerprint = "sha256:be31c7e89b1562a76efc0c5eee1a3397c0c758b3eb12783ca13d6fc15fa6e41b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1048-1062" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10567-10581" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11062-11076" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11162-11176" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11513-11527" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11613-11627" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1196-1210" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12515-12529" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12992-13006" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1327-1341" +fingerprint = "sha256:4feea94062621e1233ef4eea367f5478a8c406c6c5e10bfdfd26abbf0141f67d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13557-13571" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1404-1418" +fingerprint = "sha256:87b116760aee0300a21dbd72c2b70c914a7adb0fe7e336d34b3fb234fa21e512" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14232-14246" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14402-14416" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14749-14763" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14849-14863" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1551-1566" +fingerprint = "sha256:c143900bd4016348131f9eb33e2d79d7b1f03dfad41b8a6f1dc134656ce23ee4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15755-15769" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16188-16202" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1628-1639" +fingerprint = "sha256:6bc3bb4f4e6681aac9e229baee2c89bdc4cfc399e6be91e31e44b878c3d8f8de" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16924-16938" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17057-17071" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17686-17700" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2304-2318" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2390-2404" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2477-2491" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2718-2732" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2863-2877" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2981-2995" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3170-3184" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3241-3255" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3451-3465" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3711-3725" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3917-3931" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5522-5536" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5696-5710" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5946-5960" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6110-6123" +fingerprint = "sha256:be31c7e89b1562a76efc0c5eee1a3397c0c758b3eb12783ca13d6fc15fa6e41b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6321-6335" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7116-7130" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7492-7506" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7591-7605" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7999-8013" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8624-8638" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8810-8824" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:902-916" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9542-9556" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:971-985" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/didomi/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1332-1354" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10097-10117" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1027-1051" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10349-10373" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10888-10912" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11100-11120" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1116-1140" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11446-11470" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11567-11591" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1206-1230" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12297-12321" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12501-12525" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1277-1301" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12951-12975" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1356-1380" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14269-14293" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1431-1455" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14368-14392" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14602-14622" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14668-14688" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14763-14783" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14993-15013" +fingerprint = "sha256:505bd18b6650e44b39e9594423a4d7fceff7f5372c2f6731a0df86df9b67a476" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15054-15078" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15157-15181" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15376-15396" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15518-15537" +fingerprint = "sha256:2e3b7dc1e1bd1572bde941199660f8066894b78d60420f526b41d39c8bccaaa4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15612-15631" +fingerprint = "sha256:2e3b7dc1e1bd1572bde941199660f8066894b78d60420f526b41d39c8bccaaa4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1564-1588" +fingerprint = "sha256:24f2ffaebad4df234f595ff5a625709f7c57913c64bb5014f799b334832cac17" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15769-15793" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1642-1666" +fingerprint = "sha256:a48d8da88d42610b91ddb3f68a7a026d1f50aa189bb089fe71663c221ee567e5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1784-1804" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1859-1879" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2472-2496" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2550-2574" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2629-2653" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2708-2732" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2787-2811" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2915-2939" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2995-3019" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3076-3100" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3239-3263" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3329-3353" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3533-3557" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3622-3646" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3773-3797" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3864-3888" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4111-4135" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4263-4287" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4392-4416" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4586-4610" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4662-4686" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4863-4887" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5176-5200" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5416-5440" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6987-7011" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7203-7223" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7461-7485" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7659-7679" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:783-807" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8266-8290" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8375-8399" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:854-878" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8747-8771" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9193-9217" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9390-9414" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:944-968" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9474-9494" +fingerprint = "sha256:b04bb21c46b2524c3f1875a41dff75434007e16369315f5b9c5b1923cb74d51a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9869-9893" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10036-10066" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10694-10724" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11427-11457" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12826-12856" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13246-13276" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2810-2840" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4477-4507" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5419-5449" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6241-6271" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6649-6679" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6988-7018" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7397-7427" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7727-7757" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7814-7844" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8167-8197" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8498-8528" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8910-8940" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10203-10213" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10377-10387" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10722-10737" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10901-10916" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10948-10961" +fingerprint = "sha256:be31c7e89b1562a76efc0c5eee1a3397c0c758b3eb12783ca13d6fc15fa6e41b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11243-11253" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11746-11756" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11857-11867" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12216-12226" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12327-12337" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13231-13241" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13729-13739" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14292-14302" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14889-14899" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15693-15703" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16267-16277" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16837-16847" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16981-16991" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17552-17562" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17697-17707" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18270-18280" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18369-18379" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2235-2245" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2413-2423" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2670-2685" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2853-2868" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2900-2913" +fingerprint = "sha256:be31c7e89b1562a76efc0c5eee1a3397c0c758b3eb12783ca13d6fc15fa6e41b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3108-3118" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3918-3928" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4096-4106" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4424-4434" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4602-4612" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4871-4881" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5089-5099" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5325-5335" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5420-5430" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5711-5721" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6178-6188" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6778-6788" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6968-6978" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7687-7697" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7905-7915" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8098-8108" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8267-8282" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8485-8500" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8858-8868" +fingerprint = "sha256:cf9b3901e9a9a7e86a09b0e50ba99a7c2c122eb6d9f5e311c8e8934b5df5c521" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9030-9045" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9246-9261" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9358-9373" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9427-9442" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9660-9675" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9780-9795" +fingerprint = "sha256:f9ca20aa5ee9003018b8ce704661215b67cbc420ebbb240bec916e4d631727d8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11794-11799" +fingerprint = "sha256:ea67d603f127bc4d21da827f7acf91ddf14a809bb73cbadfba62ab3f56fa1a44" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30362-30374" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30464-30476" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30591-30601" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31017-31029" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31119-31131" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31246-31256" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32026-32038" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32163-32177" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32817-32829" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32954-32968" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34426-34440" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49808-49820" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50361-50373" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50702-50714" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1008-1022" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1052-1064" +fingerprint = "sha256:6b19c3ae8a2fbab51ffab2a556620a8b84561066693aa4e556d1cbb4c53db3ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1127-1141" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1171-1191" +fingerprint = "sha256:c7e421cbb4df9c83eebf1fb327dcce2273ba822949f96bede8f5b16e1cb9b6c0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1251-1265" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1295-1321" +fingerprint = "sha256:ebea0534e77ad39ee209b57c16d4dfca09e9419d873795ba8a8c0462ba73470d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1382-1396" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1422-1432" +fingerprint = "sha256:d21447b45a0cf44448a9e35c1aa029b585e4d9fc515860d41e8e30a53290bc60" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1493-1505" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1590-1602" +fingerprint = "sha256:0fadb9ebcbdb151729df24e7dc35cf5f5a9a85012f90dcaf7dad9ae856c8c8e0" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:215-224" +fingerprint = "sha256:b33960790a6de22ca95a61c6d1310b3487304529cb0af6f3e9b80d2e5ddf76b8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2451-2461" +fingerprint = "sha256:d4c9d9027326271a89ce51fcaf328ed673f17be33469ff979e8ab8dd501e664f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:282-292" +fingerprint = "sha256:ce12e5de6aa70f697d69acd1bfbaa94b628f656a3fb2c8a99cb6c59790f44100" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2850-2864" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:349-363" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:428-441" +fingerprint = "sha256:188b5dea2b7a7fde3a1507ffc6a1da66d887cca6229515ba2b99b9d0c6c1793e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:505-519" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:549-574" +fingerprint = "sha256:f0886fedd92f1ab1b9dc380098a31bcd9317990ab5a6da6365c39dddf1ceaf5e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:639-653" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:683-701" +fingerprint = "sha256:747c99c1298615232920bacef02dd1b6fa4722f15fe66869ffbd8a6584875942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:763-777" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:807-835" +fingerprint = "sha256:6fd7cca8cf5e8179f9e6621461d1dd8c3eb3b7a85a08ccea963d2c52c7c2ae87" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:895-909" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:939-948" +fingerprint = "sha256:1f750e1c8f96aa309c3c1cb1190046b5d567730ec2e350bd3b3dd5a2303b821c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1007-1027" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1103-1123" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1193-1213" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1366-1387" +fingerprint = "sha256:43bda9b514708f8e2ba8ef03dc0a3a39d15f97357f604615e2bcd5865fc5d435" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1582-1611" +fingerprint = "sha256:1b5736c87d29a866aad0fb19ff57bc97221941a75efb18dce22b492d8f4ec7aa" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1658-1681" +fingerprint = "sha256:e2dae8dbc25b5c7fd87cea99d60e2c29ff7c9fdf3b37cfdafed7941efa67e56e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1816-1836" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2693-2713" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2942-2962" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:747-767" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:834-854" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:920-940" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/beacon_guard.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5212-5229" +fingerprint = "sha256:a825e7fd79dc8e656d7af8b44febb8ad64dc4a9a38db119dc5d51b9ae22315f2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2520-2530" +fingerprint = "sha256:3ff731af08ed6748f286fa1468a30ac0b2f7d2f8b7d59af49798e0ef606a912a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2760-2777" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3008-3022" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3238-3262" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3587-3617" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10117-10127" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10508-10518" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10703-10713" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10904-10914" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11154-11164" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11387-11397" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11634-11644" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1169-1179" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11905-11915" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12178-12188" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12374-12384" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12606-12616" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12853-12863" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13108-13118" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13449-13459" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1363-1373" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13771-13781" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14138-14148" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14475-14485" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1553-1563" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1789-1799" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183-193" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1984-1994" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2176-2186" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2369-2379" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2634-2644" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2860-2870" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3048-3058" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3240-3250" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3433-3443" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3707-3717" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3926-3936" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:405-415" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4119-4129" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4309-4319" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4507-4517" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4695-4705" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4885-4895" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5078-5088" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5272-5282" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5464-5474" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5709-5719" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5949-5959" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:598-608" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6176-6186" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6418-6428" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6779-6789" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7053-7063" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7272-7282" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7496-7506" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7686-7696" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:788-798" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7968-7978" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8229-8239" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8419-8429" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8695-8705" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8886-8896" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9116-9126" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9350-9360" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9599-9609" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:978-988" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9861-9871" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb-codegen/src/main.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1258-1286" +fingerprint = "sha256:7207458335017fbb6a5195803217bcfc8ea743f1e9459f3c32857de9d06af817" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107-117" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb/generate.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:564-574" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16887-16903" +fingerprint = "sha256:6f1479267d1db505bd97b44871d1f09a7257a740f1dd1f81410fa882c1421a8b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/.vitepress/config.mts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2027-2040" +fingerprint = "sha256:4f9114d56d2efcc52444101ee7f12fd5d0eab4b06753445e7efc5bfc250068bd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/.vitepress/config.mts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6421-6431" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/.vitepress/config.mts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6762-6776" +fingerprint = "sha256:e8b2a5ca05c43c85bad4c6486eed31d26f4a422a7080f67ae337622d4db0d809" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/.vitepress/config.mts" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:999-1012" +fingerprint = "sha256:4f9114d56d2efcc52444101ee7f12fd5d0eab4b06753445e7efc5bfc250068bd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1059-1079" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2357-2376" +fingerprint = "sha256:173af6695b19d3bcb82e3f2a0c6437cb2b3430833cc219812087c274f0488e83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2572-2591" +fingerprint = "sha256:173af6695b19d3bcb82e3f2a0c6437cb2b3430833cc219812087c274f0488e83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2639-2653" +fingerprint = "sha256:ef781db543c5b330e52bd0a6feb7938b53194e48d2b13c10b2721029bdaedc4f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3782-3792" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3849-3862" +fingerprint = "sha256:4f9114d56d2efcc52444101ee7f12fd5d0eab4b06753445e7efc5bfc250068bd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/README.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:859-878" +fingerprint = "sha256:173af6695b19d3bcb82e3f2a0c6437cb2b3430833cc219812087c274f0488e83" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/business-use-cases.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11467-11477" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/epics/revenue-operations-dashboard.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13249-13263" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/epics/revenue-operations-dashboard.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13351-13361" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/epics/revenue-operations-dashboard.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13427-13438" +fingerprint = "sha256:84dc88fce520b35dabff64f64af112cb1f4daee9cc063b299a9ac7647ae47238" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/epics/revenue-operations-dashboard.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13519-13534" +fingerprint = "sha256:73b16e2035ab3ada7fbc88e592164cfedc8e432bdad9c1f8f5e4d1e716d81e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/epics/revenue-operations-dashboard.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4119-4135" +fingerprint = "sha256:98ce6b90acd1891f2e271d2336837317cfcd15911a04614e1c62cc765ed181dc" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20259-20276" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20393-20410" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20493-20521" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20586-20606" +fingerprint = "sha256:fd6f6905b98088187f76956d5cafc37845168c4ff5d7379d942fc36411a5cda9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20688-20706" +fingerprint = "sha256:8d7845fa0b247fa7e41a89bea33c16e8fa197c5311e3469658c9c1c8092b5628" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20786-20803" +fingerprint = "sha256:27bceb452ee254eb890e0e07e090df6a644d8858b329c6cf651b4fb28d4cd942" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5397-5415" +fingerprint = "sha256:ee8cdc867bba487e426dd4d1abe7249a5d96b591e4774eb6ae6e0974578df2d3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5522-5540" +fingerprint = "sha256:ee8cdc867bba487e426dd4d1abe7249a5d96b591e4774eb6ae6e0974578df2d3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6550-6564" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/api-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6630-6644" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/api-reference.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:22220-22234" +fingerprint = "sha256:6d4525c2a21f9be1cca9e41f3aa402e0765ee5fcc3e7fea34a169b1730ae386e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/asset-routes.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2179-2212" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/asset-routes.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5908-5941" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/cli.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5029-5037" +fingerprint = "sha256:7f75361aac296f98fa63d0823e670b46a87444d4e23bf04b118c6562e935b941" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/collective-sync.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2023-2032" +fingerprint = "sha256:63dfa8806f3bd445258476f8f4dfa4bc5cd420cb023e11022859b358026c2ce6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/collective-sync.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2036-2045" +fingerprint = "sha256:cfd1f10ddc1f7da9426987f25fc519a798be579b723ca2548c3ba3f04596fe15" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/collective-sync.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2766-2775" +fingerprint = "sha256:63dfa8806f3bd445258476f8f4dfa4bc5cd420cb023e11022859b358026c2ce6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/collective-sync.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2834-2843" +fingerprint = "sha256:cfd1f10ddc1f7da9426987f25fc519a798be579b723ca2548c3ba3f04596fe15" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/collective-sync.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3983-3992" +fingerprint = "sha256:63dfa8806f3bd445258476f8f4dfa4bc5cd420cb023e11022859b358026c2ce6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10722-10742" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10847-10864" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11099-11119" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11175-11192" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11585-11602" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11619-11632" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11641-11654" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12373-12393" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12410-12430" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12476-12496" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1252-1272" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13046-13063" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13072-13089" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13111-13128" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13137-13154" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32513-32523" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33658-33683" +fingerprint = "sha256:6af19eb2431cafeef631fb8a0dfb639cdd578a9cef1501ddcb09cbf5a8d3936b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34309-34333" +fingerprint = "sha256:948aee1b7efc01ebf519be4487af340db5bfff837dfe56327f0b62bd7ba53d32" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34485-34509" +fingerprint = "sha256:7c3d149f6d7cafa7d177ac6a8f5d99020f984199ade2f0e96a3bff66eaae8e5c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34580-34596" +fingerprint = "sha256:7cf80ccbaeffe1e6e997f75024c1927db1ae74718bb6ddf14ecd5167a9c61f5d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34660-34680" +fingerprint = "sha256:335e075e73e1cf0edd69f3f87b534ddca8ad1806ee04efe760ab1c2d0c823b86" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34684-34704" +fingerprint = "sha256:26684272bb1c52eafb297da4733045d50de46165ec119aeb6c752844a2d9ea1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37962-37978" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41435-41468" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53835-53845" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62685-62702" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62801-62829" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63269-63286" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63323-63351" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6667-6687" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:753-773" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77326-77336" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80294-80304" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89039-89057" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/configuration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90010-90028" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/configuration.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:29190-29204" +fingerprint = "sha256:6d4525c2a21f9be1cca9e41f3aa402e0765ee5fcc3e7fea34a169b1730ae386e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/configuration.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:29292-29315" +fingerprint = "sha256:8db71dc1a90ee84c57719598d63c305922b83e9b743cb0a069c36fc10b15918e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/configuration.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:29391-29411" +fingerprint = "sha256:25e5447ee673684aa084adcc4c29b3dfcf500641da12cdd41fbbab5587488e22" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1090-1101" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11448-11462" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1153-1160" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11556-11570" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1222-1229" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12708-12722" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12815-12829" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16870-16877" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16908-16915" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16946-16953" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17051-17058" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17127-17134" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17203-17210" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17386-17393" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17575-17582" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18147-18154" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18194-18201" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18257-18264" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18327-18334" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18383-18390" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18450-18457" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18504-18511" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18738-18745" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18776-18783" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18889-18896" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18965-18972" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19100-19120" +fingerprint = "sha256:2d0f3c337e640d3ae1e7aafbde887dfed9b6078e97fd5f609f27ed528032d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19203-19223" +fingerprint = "sha256:2d0f3c337e640d3ae1e7aafbde887dfed9b6078e97fd5f609f27ed528032d893" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19749-19773" +fingerprint = "sha256:948aee1b7efc01ebf519be4487af340db5bfff837dfe56327f0b62bd7ba53d32" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19944-19968" +fingerprint = "sha256:7c3d149f6d7cafa7d177ac6a8f5d99020f984199ade2f0e96a3bff66eaae8e5c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20042-20057" +fingerprint = "sha256:d7df26e8126f27fc1226d40841104259ab1059f004e016ce2172233b358877b9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20308-20328" +fingerprint = "sha256:335e075e73e1cf0edd69f3f87b534ddca8ad1806ee04efe760ab1c2d0c823b86" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25468-25479" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7579-7589" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/creative-processing.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8283-8293" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/edge-cookies.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10873-10885" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/edge-cookies.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11049-11061" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/edge-cookies.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8759-8771" +fingerprint = "sha256:a3759420b653e9658f1db94e5da6aaada21d3703c9c3ecf9ca0e4b88ebf331e3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/error-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1243-1268" +fingerprint = "sha256:779ced737d1fa882376c7aa93ebec67be6e411fd3ca7df31fc06a21832c46f7f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/error-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1292-1324" +fingerprint = "sha256:9724afb601b1360fb919ffc1f435c3eba602f4b35cd94c2e2027bee6baa1b508" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/error-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4621-4633" +fingerprint = "sha256:91ad2672e7d5e7420c2778c23ab02edcd766f4b173c78eb63336616fdfcfd492" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/error-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7170-7194" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/error-reference.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7437-7461" +fingerprint = "sha256:eab064c4e215a1f43e24732f87414fea29134a31d833c797a1856a7795d41c4c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144-161" +fingerprint = "sha256:71c7246b6ae8f3ad2a8742e1091717d906c7c9b97eb407c2c6cc59ab65ba16e4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:171-188" +fingerprint = "sha256:71c7246b6ae8f3ad2a8742e1091717d906c7c9b97eb407c2c6cc59ab65ba16e4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1802-1821" +fingerprint = "sha256:e10cd3a3f93f810f07017a35293560b879ffe4bdc8d85341b9d79f9613dbdbe1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3482-3496" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5428-5442" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/fastly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5574-5588" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/fastly.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:13632-13670" +fingerprint = "sha256:1b2e9202035b9f64a38df5b3a57bb75261f9169e846b777b99787dc681990d4f" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10077-10084" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10591-10602" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11403-11410" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11757-11768" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11851-11862" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12045-12058" +fingerprint = "sha256:9ddeeba7fcdf0b69c72abc7bdd4af25e6c0c77523f91b83ee156f9d8f807333d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12094-12107" +fingerprint = "sha256:ec442a4ed1bc6b308e52f3a24f8004b1e8454b85c1e8b45f18797d18b55c73b2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12122-12135" +fingerprint = "sha256:ec442a4ed1bc6b308e52f3a24f8004b1e8454b85c1e8b45f18797d18b55c73b2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12171-12180" +fingerprint = "sha256:2e32be86a874f81c3e562bb555e8f5c14cc35ca2e5f4a97a667cb2ab98ccc839" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12195-12204" +fingerprint = "sha256:2e32be86a874f81c3e562bb555e8f5c14cc35ca2e5f4a97a667cb2ab98ccc839" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12553-12567" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13046-13066" +fingerprint = "sha256:3d288f7234f9e627f151e0d1ffa87a308db1d26ad38ab86ea82821ae91d6ac55" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15087-15103" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16229-16244" +fingerprint = "sha256:3826ab60bd9256c4ec794978aff6ef8261ada6388c677e832afa588cf1dd647f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19608-19616" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20319-20330" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20358-20372" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2588-2599" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2695-2706" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2816-2827" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3025-3039" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3561-3575" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3717-3731" +fingerprint = "sha256:e4313b5de01f422a78e6e30f85e1ad4521595519e898fe952a032340c5fcaeff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:706-717" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:827-838" +fingerprint = "sha256:6ecd96cde186d657ed6c50ef0f2fd8a1080832d4fd36d900961b4b3b4e15cd16" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/first-party-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9980-9987" +fingerprint = "sha256:a4a856d4402ec68afdf2f7350ca654e4f60242b2e11987b6cc03aaa9585f80e6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/getting-started.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:552-562" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integration-guide.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3865-3872" +fingerprint = "sha256:9fc706a8a180da0b182ea38d6091fd694a16b9fb9186053b34c0604bdaecce20" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations-overview.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12325-12345" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations-overview.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4004-4021" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations-overview.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4058-4086" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations-overview.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5239-5259" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/aps.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14060-14090" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/aps.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22508-22538" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/aps.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4093-4123" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1649-1663" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16842-16856" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1687-1705" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16916-16934" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17655-17669" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17727-17741" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17800-17814" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18915-18931" +fingerprint = "sha256:20a8d735ae8dcb6efcc67ef0d80a4916bb3546ecda249f59d1d9bb975ded28a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1950-1972" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3284-3298" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3453-3471" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4298-4320" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/datadome.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7678-7692" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1325-1347" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1981-2003" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2027-2049" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2594-2616" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2710-2732" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2990-3012" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3070-3092" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4471-4493" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4531-4546" +fingerprint = "sha256:f9cb2c648f7679bf5b4b7f9859f17e826aea4057b47423194be25bc91468d44b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5304-5326" +fingerprint = "sha256:24b2cd2257d68ae772e7e50ea11104c31f48efc5ac7e3932605b76d41d2f69f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5355-5370" +fingerprint = "sha256:f9cb2c648f7679bf5b4b7f9859f17e826aea4057b47423194be25bc91468d44b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7106-7116" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7968-7990" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8974-8989" +fingerprint = "sha256:f9cb2c648f7679bf5b4b7f9859f17e826aea4057b47423194be25bc91468d44b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/didomi.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9033-9048" +fingerprint = "sha256:f9cb2c648f7679bf5b4b7f9859f17e826aea4057b47423194be25bc91468d44b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gam.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1412-1422" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gam.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:836-866" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1968-1992" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2791-2815" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3843-3867" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4499-4519" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4558-4573" +fingerprint = "sha256:2773011a68c3cbfca374801ad4da2d045a145edf1fbc4238b4f0a4f4bd668375" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4989-5013" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5374-5398" +fingerprint = "sha256:a599aeb3c7c1dfa552a765a01f7f0a2ab9346a1eccadefd6bf7d0977b5eee259" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5746-5770" +fingerprint = "sha256:e48bfdf4afc947fd00e5059a940cd7f15af6657fb7c07b7bd234e5a121457a31" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8698-8718" +fingerprint = "sha256:a3b98b555d8c9372eaa522dbab4bdec7312588005df018fab6c899e09fdbe03b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/google_tag_manager.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8996-9006" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gpt.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1077-1090" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gpt.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12202-12212" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gpt.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12380-12390" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gpt.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2623-2653" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/gpt.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3512-3542" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/kargo.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1540-1550" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/kargo.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:947-960" +fingerprint = "sha256:d6d9102108d1727f5c077cec928b2d75640182bf7b75015c26828493baaa810c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/lockr.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1764-1776" +fingerprint = "sha256:ab8ffbb50ddea989cd024dd9a8225337d1fa229c6c1dc98e9f0c60809821eb65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/lockr.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2563-2575" +fingerprint = "sha256:ab8ffbb50ddea989cd024dd9a8225337d1fa229c6c1dc98e9f0c60809821eb65" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/lockr.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3393-3401" +fingerprint = "sha256:a9b39f8a947f2a0e82fc56ee0416db58311ffe47746de238e41d7c56f9567bc9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/lockr.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4571-4581" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/nextjs.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2954-2964" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/nextjs.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3149-3159" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/nextjs.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3351-3361" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/permutive.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1918-1928" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/permutive.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:636-653" +fingerprint = "sha256:1451b0c79e4781d47e57975e81770cf1484d8f88225142227c3e35da88cd9273" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/permutive.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:690-718" +fingerprint = "sha256:325edcfae3d3f834a1f167a33b54092f742b5920b00d396767a477dfc64b0656" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24783-24792" +fingerprint = "sha256:b33960790a6de22ca95a61c6d1310b3487304529cb0af6f3e9b80d2e5ddf76b8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24878-24888" +fingerprint = "sha256:ce12e5de6aa70f697d69acd1bfbaa94b628f656a3fb2c8a99cb6c59790f44100" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24973-24987" +fingerprint = "sha256:68922cb1cf1c8ae86618a9b8426a3ac004d00dc4905c5bf959d38ef587e83e6d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24991-25004" +fingerprint = "sha256:188b5dea2b7a7fde3a1507ffc6a1da66d887cca6229515ba2b99b9d0c6c1793e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25008-25017" +fingerprint = "sha256:1f750e1c8f96aa309c3c1cb1190046b5d567730ec2e350bd3b3dd5a2303b821c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25021-25033" +fingerprint = "sha256:6b19c3ae8a2fbab51ffab2a556620a8b84561066693aa4e556d1cbb4c53db3ec" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25070-25080" +fingerprint = "sha256:d21447b45a0cf44448a9e35c1aa029b585e4d9fc515860d41e8e30a53290bc60" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25260-25270" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25355-25367" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25450-25462" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/prebid.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29300-29310" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/sourcepoint.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2336-2356" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/sourcepoint.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3546-3566" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/sourcepoint.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3915-3935" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/sourcepoint.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5278-5299" +fingerprint = "sha256:43bda9b514708f8e2ba8ef03dc0a3a39d15f97357f604615e2bcd5865fc5d435" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/integrations/sourcepoint.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:838-858" +fingerprint = "sha256:b7350de1f4f3b345531a55b485686b6db74b0595bbf51907ac8274c3e20ce062" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/key-rotation.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3067-3084" +fingerprint = "sha256:71c7246b6ae8f3ad2a8742e1091717d906c7c9b97eb407c2c6cc59ab65ba16e4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/guide/key-rotation.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:3601-3624" +fingerprint = "sha256:bc576e6a44a74cac88d98d8fcf72d727b0e1471b8bc2291e68e89bc4f2177ac4" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11157-11195" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2438-2476" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:288-313" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3363-3401" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3779-3817" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8800-8824" +fingerprint = "sha256:7f119ae7a171a79220c421d6516063b0e1ef32de55927f5facc70083114b10ea" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8839-8863" +fingerprint = "sha256:7f119ae7a171a79220c421d6516063b0e1ef32de55927f5facc70083114b10ea" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/guide/ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8950-8974" +fingerprint = "sha256:7f119ae7a171a79220c421d6516063b0e1ef32de55927f5facc70083114b10ea" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/index.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:580-590" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/EDGEZERO_MIGRATION.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116-126" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/EDGEZERO_MIGRATION.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:186-196" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/EDGEZERO_MIGRATION.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3057-3067" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/internal/audits/documentation-refresh-decisions.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5027-5049" +fingerprint = "sha256:c5c88b1c0fd72489bc2352a680544204f898392cfe43655f761e8e21ae26bddf" +owner = "aram356" +rationale = "Preserve the approved audit's exact record of the deleted placeholder CNAME." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-decisions.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6021-6031" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-decisions.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6301-6311" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10078-10088" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115425-115443" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115455-115465" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115477-115499" +fingerprint = "sha256:382b64c253e77b6b8d2e2fd00b8923a272dcbf87c5f4dfad215cd063b80645a2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115509-115534" +fingerprint = "sha256:35de8f15256ee8343a6c1085445ac78c3e57056f0643511b644d2c35fd35f4eb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19624-19634" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20223-20233" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25806-25812" +fingerprint = "sha256:e8628e178e732a24ef1b14910480ba5fe90b7ed9b4532878eb4bb76bf7bd1eb2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25829-25835" +fingerprint = "sha256:e8628e178e732a24ef1b14910480ba5fe90b7ed9b4532878eb4bb76bf7bd1eb2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25893-25903" +fingerprint = "sha256:c88401ca77418b712df0c57d88ef78fce9154f751b65c70edcbc48fa0234e3f7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31385-31396" +fingerprint = "sha256:e19d202851fb09964bf027cf1f153c7b2584f5375f49b5a6ff89d85f7adc3483" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31616-31627" +fingerprint = "sha256:e19d202851fb09964bf027cf1f153c7b2584f5375f49b5a6ff89d85f7adc3483" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31696-31707" +fingerprint = "sha256:e19d202851fb09964bf027cf1f153c7b2584f5375f49b5a6ff89d85f7adc3483" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31779-31790" +fingerprint = "sha256:e19d202851fb09964bf027cf1f153c7b2584f5375f49b5a6ff89d85f7adc3483" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32674-32692" +fingerprint = "sha256:ba170d32608964cdce6423375848bc03a236952bf52fc5546d8f7caabb6e449c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32954-32972" +fingerprint = "sha256:ba170d32608964cdce6423375848bc03a236952bf52fc5546d8f7caabb6e449c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38005-38015" +fingerprint = "sha256:c88401ca77418b712df0c57d88ef78fce9154f751b65c70edcbc48fa0234e3f7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6846-6856" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69140-69157" +fingerprint = "sha256:f72f9c8ffe5a78770c4548c42c1f84fee439b37de72e968525c118a503afa303" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9261-9271" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/audits/documentation-refresh-evidence.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9866-9876" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/onboarding.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1643-1653" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/onboarding.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1982-1992" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/internal/onboarding.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:710-720" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100099-100117" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100450-100468" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:100989-101007" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101402-101420" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:101757-101775" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102179-102197" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102600-102618" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:102958-102976" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:103400-103418" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10351-10369" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104222-104240" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104582-104600" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:104994-105012" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105473-105491" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:105826-105844" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106244-106262" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:106611-106629" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107036-107054" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107389-107407" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:107749-107767" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108109-108127" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10827-10845" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108466-108484" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:108895-108913" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109292-109310" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:109624-109642" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110015-110033" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110319-110337" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:110884-110902" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111357-111375" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:111738-111756" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112151-112169" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112569-112587" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:112994-113012" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113352-113370" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11349-11367" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:113968-113986" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114517-114535" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:114914-114932" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115209-115227" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:115718-115736" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116020-116038" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116395-116413" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:116741-116759" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117206-117224" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117618-117636" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11764-11782" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:117932-117950" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:118384-118402" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:119841-119859" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:120303-120321" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12172-12190" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122118-122136" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:122770-122788" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123254-123272" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1233-1251" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:123847-123865" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124274-124292" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:124705-124723" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125077-125095" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125388-125406" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:125759-125777" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126093-126111" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126439-126457" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12668-12686" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:126753-126771" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127280-127298" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:127716-127734" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128253-128271" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128696-128714" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:128998-129016" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:129386-129404" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:129864-129882" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130293-130311" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130612-130630" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:131506-131524" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13180-13198" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132011-132029" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132323-132341" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:132753-132771" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133188-133206" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133540-133558" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133904-133922" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134261-134279" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:134621-134639" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135039-135057" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13517-13535" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135469-135487" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135768-135786" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136088-136106" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136443-136461" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:136802-136820" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137022-137040" +fingerprint = "sha256:6d145e0d6d1e4e2e4081b7fb037dc5db55b52469bdc42538225b6093dfed502d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137066-137076" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137349-137367" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:137701-137719" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138057-138075" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138330-138348" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:138953-138971" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139257-139275" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:139705-139723" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13995-14013" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140215-140233" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140527-140545" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:140920-140938" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141220-141238" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:141640-141658" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:142437-142455" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:143493-143511" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144210-144228" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14430-14448" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:144810-144828" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:145580-145598" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146173-146191" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:146754-146772" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147283-147301" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147585-147603" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14772-14790" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:147875-147893" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148306-148324" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:148595-148613" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149171-149189" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149507-149525" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:149880-149898" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150330-150348" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:150910-150928" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15098-15116" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151412-151430" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:151928-151946" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152270-152288" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152591-152609" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:152949-152967" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153298-153316" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153602-153620" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:153922-153940" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15420-15438" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154229-154247" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:154692-154710" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155117-155135" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155439-155457" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:155857-155875" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:156706-156724" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157121-157139" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15728-15746" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:157482-157500" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158002-158020" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158434-158452" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:158783-158801" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159155-159173" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159547-159565" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:159859-159877" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160162-160180" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:160487-160505" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16135-16153" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162361-162379" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:162832-162850" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163135-163153" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163453-163471" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:163788-163806" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:164202-164220" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:164640-164658" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:164999-165017" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:165645-165663" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:166035-166053" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:166475-166493" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:166858-166876" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:167409-167427" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:167708-167726" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:168126-168144" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:168428-168446" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:168784-168802" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:169324-169342" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:169740-169758" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:170174-170192" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:170533-170551" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:170960-170978" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:171442-171460" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17154-17172" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:172323-172341" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:172620-172638" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:172936-172954" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:173439-173457" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:173964-173982" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:174496-174514" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1750-1768" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:175091-175109" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:175638-175656" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:176004-176022" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:176221-176231" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:176267-176277" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17633-17651" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:176475-176493" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:176991-177009" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:177531-177549" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:179027-179045" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:180371-180389" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:180915-180933" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18120-18138" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181297-181315" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:181827-181845" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:182317-182335" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:182692-182710" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183035-183053" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183337-183355" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:184035-184053" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:184505-184523" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:184867-184885" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:185310-185328" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18611-18629" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19097-19115" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19584-19602" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20068-20086" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20559-20577" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21042-21060" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21521-21539" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22005-22023" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22489-22507" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22983-23001" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2304-2322" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23477-23495" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23964-23982" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24455-24473" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24938-24956" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25416-25434" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25898-25916" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26381-26399" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26860-26878" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27344-27362" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27824-27842" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28312-28330" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2884-2902" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29011-29029" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29518-29536" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29927-29945" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30476-30494" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30950-30968" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31410-31428" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32031-32049" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32443-32461" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32937-32955" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33310-33328" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3363-3381" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33809-33827" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34319-34337" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34816-34834" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35214-35232" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35525-35543" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35983-36001" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36330-36348" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37030-37048" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37385-37403" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37780-37798" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38245-38263" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38705-38723" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39160-39178" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39612-39630" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3989-4007" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40071-40089" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40532-40550" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41008-41026" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41481-41499" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41947-41965" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42416-42434" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42890-42908" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43363-43381" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43829-43847" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44298-44316" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:44772-44790" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45245-45263" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:45708-45726" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4612-4630" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46166-46184" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46623-46641" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47082-47100" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47558-47576" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48025-48043" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48487-48505" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:48945-48963" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49388-49406" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:49988-50006" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5007-5025" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50485-50503" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50932-50950" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51311-51329" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51698-51716" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52124-52142" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52558-52576" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52885-52903" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54221-54239" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54536-54554" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54918-54936" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55302-55320" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55618-55636" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55936-55954" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56354-56372" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5637-5655" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56679-56697" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57000-57018" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57380-57398" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:57691-57709" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58005-58023" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58384-58402" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58702-58720" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59018-59036" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59397-59415" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:59727-59745" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60118-60136" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60434-60452" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60757-60775" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61080-61098" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61398-61416" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61787-61805" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:620-638" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62128-62146" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62453-62471" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6283-6301" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62831-62849" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63151-63169" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63479-63497" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:63800-63818" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64193-64211" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64614-64632" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64930-64948" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65245-65263" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65559-65577" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:65932-65950" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66257-66275" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66581-66599" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66998-67016" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67366-67384" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:67674-67692" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68076-68094" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68423-68441" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68739-68757" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69084-69102" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6922-6940" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70219-70237" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70586-70604" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71549-71567" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:72350-72368" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73041-73059" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:73675-73693" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74589-74607" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:75136-75154" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7555-7573" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76167-76185" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77077-77095" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77743-77761" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78076-78094" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78504-78522" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:78993-79011" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79522-79540" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79953-79971" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:80633-80651" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81062-81080" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81457-81475" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8161-8179" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82044-82062" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82431-82449" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:82818-82836" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83245-83263" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:83742-83760" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84233-84251" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:84542-84560" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85112-85130" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:86797-86815" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87194-87212" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:87636-87654" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8768-8786" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88061-88079" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88444-88462" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89041-89059" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90113-90131" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90487-90505" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90869-90887" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91314-91332" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91734-91752" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92191-92209" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92636-92654" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93252-93270" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93722-93740" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9385-9403" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94159-94177" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94514-94532" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94819-94837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95326-95344" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95698-95716" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96182-96200" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96484-96502" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96876-96894" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97343-97361" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97819-97837" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98220-98238" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:98522-98540" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9872-9890" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:99685-99703" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:11195-11228" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:117070-117104" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:118241-118283" +fingerprint = "sha256:30706283460f8a6ca3065fd55558ae90fec49d8c8c133a0dc85d2860a9c32e15" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:120163-120203" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:121835-121860" +fingerprint = "sha256:8117f0afc7a4dee882e2c90815c49a91b39a1ca8c4fc7eb7786cd8c38845b127" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:122625-122658" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:123121-123154" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:123714-123747" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:128110-128150" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:131359-131393" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:131876-131910" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:132616-132650" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:135335-135371" +fingerprint = "sha256:b78ffafdaef881ac5f8b2c83d708a438ec4bc0a912c54b69a52d05fce4d4b108" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:140071-140111" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:142301-142335" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:143797-143834" +fingerprint = "sha256:810609c5a11da29b1d8efd396a8f7aafd19bfa1e4d4e9401a42a3f7827966b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:143911-143945" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:144508-144545" +fingerprint = "sha256:810609c5a11da29b1d8efd396a8f7aafd19bfa1e4d4e9401a42a3f7827966b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:144622-144656" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:145120-145157" +fingerprint = "sha256:810609c5a11da29b1d8efd396a8f7aafd19bfa1e4d4e9401a42a3f7827966b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:145234-145268" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:145878-145915" +fingerprint = "sha256:810609c5a11da29b1d8efd396a8f7aafd19bfa1e4d4e9401a42a3f7827966b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:145992-146026" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:146469-146506" +fingerprint = "sha256:810609c5a11da29b1d8efd396a8f7aafd19bfa1e4d4e9401a42a3f7827966b98" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:146583-146617" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:147146-147180" +fingerprint = "sha256:a982d1fd702d295e80b70f5f80a40e394a30335d4d72b13d28aae103a2eedcbe" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:148855-148885" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:151271-151311" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:151771-151811" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:154549-154590" +fingerprint = "sha256:e52c648060bfedd03686ba12c574f6b66f4162fb5204ee7be5a178eecbcd4f07" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:156126-156161" +fingerprint = "sha256:6b51830b8ef4e14fce81553b3967c520d3d9730db5ca930ab3816d67b18a776d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:156232-156279" +fingerprint = "sha256:c840bff9f169ab9b63aabc0d53db12df214b40ce9eb79ae091510bf102ad7fa8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:156348-156378" +fingerprint = "sha256:125add47d3e7dbc97080725e6e51af92c5078f9f1f74de1ab0c88b9c28831a6b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:156985-157018" +fingerprint = "sha256:4c0cdfa0f2e23cd76321ce18c5e75c58704b438fdb0770a8dede64ed5dbda6bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:157843-157889" +fingerprint = "sha256:027705490f4622c1ea022eed7ec5bc061b43b652d2849c0d6bf1e58ab5fde76d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:158299-158333" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:166336-166370" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:167276-167310" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:169180-169221" +fingerprint = "sha256:5c2bf743426a4df4c9103796a9d072147843b271fd158355bea948aece1fa336" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:169601-169635" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:172057-172101" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:173293-173327" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:173808-173842" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:174353-174387" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:174940-174974" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:175505-175539" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:176851-176885" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:177399-177433" +fingerprint = "sha256:dc42f43c4ab6a4077223061f6ee48651c3e393ee28ac363272efbcee12bd2eca" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:178032-178072" +fingerprint = "sha256:a3aa0ac68fa658bdcf51f7ddf8b0607e445aa46c3ec741eacd14602c18df2c19" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:185171-185211" +fingerprint = "sha256:6f2c2f4d948907558d01f0353172481a13894ceb70ae02d785dbbcdedefeaf1b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:185579-185613" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:28737-28770" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:29366-29399" +fingerprint = "sha256:441a2cbb0be25fdb1afd25eff9f941c32a10c7187a85701a2df81df0b8d4098a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:31729-31754" +fingerprint = "sha256:8117f0afc7a4dee882e2c90815c49a91b39a1ca8c4fc7eb7786cd8c38845b127" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:34172-34206" +fingerprint = "sha256:3ff9125280122c009f108208bd7530484f28f3b33d6493e4918385809e877ef8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:34662-34696" +fingerprint = "sha256:3ff9125280122c009f108208bd7530484f28f3b33d6493e4918385809e877ef8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:69856-69900" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:71251-71295" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:72104-72148" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:72870-72914" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:73432-73476" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:74301-74345" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:74962-75006" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:75929-75973" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:76782-76826" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:77583-77627" +fingerprint = "sha256:21c73cfa39c40338acaa6bc69c1ec010cb291ef7cdb6bd6afadbbfb4a6886119" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:84965-84998" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:85504-85537" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:87053-87086" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:87504-87537" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:88895-88934" +fingerprint = "sha256:491ca017eebe985f300da035601eb0cc7ae913d048ff35b21721444815e14a13" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:90728-90761" +fingerprint = "sha256:12f4d6ac018634640391560ed8940b8ddbdab98440ed041a06b3f31809108023" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:91583-91617" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:92039-92073" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:92498-92532" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:94023-94057" +fingerprint = "sha256:11a70fe82eb93bf7b7a977dda1a92cc8d16146e09b8acca5690b65fc6179f235" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/package-lock.json" +detector = "lockfile_field" +scope = "exact-occurrence" +selector = "bytes:95188-95224" +fingerprint = "sha256:b78ffafdaef881ac5f8b2c83d708a438ec4bc0a912c54b69a52d05fce4d4b108" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:1674-1682" +fingerprint = "sha256:dfe9b36dc55c1b8a5142f527d6cedc33e79f739afc583c406fb9b4793ae76287" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:1720-1738" +fingerprint = "sha256:0ac6c33f18dee86427dec353673b527262d704446e947f1f3cebd99eb735b4b3" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:2619-2637" +fingerprint = "sha256:0ac6c33f18dee86427dec353673b527262d704446e947f1f3cebd99eb735b4b3" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:2659-2667" +fingerprint = "sha256:dfe9b36dc55c1b8a5142f527d6cedc33e79f739afc583c406fb9b4793ae76287" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:3336-3344" +fingerprint = "sha256:dfe9b36dc55c1b8a5142f527d6cedc33e79f739afc583c406fb9b4793ae76287" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:3382-3400" +fingerprint = "sha256:0ac6c33f18dee86427dec353673b527262d704446e947f1f3cebd99eb735b4b3" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:4829-4837" +fingerprint = "sha256:dfe9b36dc55c1b8a5142f527d6cedc33e79f739afc583c406fb9b4793ae76287" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:5668-5682" +fingerprint = "sha256:73f8abc24f74e8a54b2c810eb67d31c0e286ee5a3b04922f5438559eebdbefd0" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:5952-5963" +fingerprint = "sha256:ce1215ef1565ea4cc248cb91979cf1aea35a27eec686826acc430b94bafcd049" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:752-770" +fingerprint = "sha256:0ac6c33f18dee86427dec353673b527262d704446e947f1f3cebd99eb735b4b3" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:792-800" +fingerprint = "sha256:dfe9b36dc55c1b8a5142f527d6cedc33e79f739afc583c406fb9b4793ae76287" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/public/images/hero-graphic.jpeg" +detector = "binary_string" +scope = "exact-occurrence" +selector = "bytes:877-954" +fingerprint = "sha256:42f3f2b88864d6314696828b6364691dcbbb5cbdfd9c559d05244b3f5ae7d09a" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/roadmap.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6658-6668" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/roadmap.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7007-7017" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/roadmap.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7142-7152" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-19-sequence-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2136-2149" +fingerprint = "sha256:33c46a125657805ef34845dd5a7bbee2caa668f97867fc272b881bd075a9d0ff" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26473-26493" +fingerprint = "sha256:be8b94d6f8fda8788015cbdb41fa1a1750f13a837367ca08feb8566361534112" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4863-4871" +fingerprint = "sha256:083083e736c2cc23b40151dcd016f452b287b0c5bd20406393ad3d3b15f3475d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5224-5232" +fingerprint = "sha256:083083e736c2cc23b40151dcd016f452b287b0c5bd20406393ad3d3b15f3475d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5720-5728" +fingerprint = "sha256:083083e736c2cc23b40151dcd016f452b287b0c5bd20406393ad3d3b15f3475d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:737-745" +fingerprint = "sha256:083083e736c2cc23b40151dcd016f452b287b0c5bd20406393ad3d3b15f3475d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-publisher-ids-audit-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:310-340" +fingerprint = "sha256:a552b937eecf21c7070aa6c8588ee1e91af15763ea95844f8614284c12ab131d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-publisher-ids-audit-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:416-446" +fingerprint = "sha256:9df39017cc2ca6908d818bcf4d57ca1cd5142ca6996fa2f3a230a751e61e0252" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-03-24-publisher-ids-audit-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:698-723" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-08-08-esi-cacheable-root-validation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5559-5569" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/archive/2026-08-10-1009-esi-validation-spike.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50643-50653" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-25-streaming-response.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34385-34398" +fingerprint = "sha256:8df0e125f2e4789edbc1fdffc971cb3b7e50f87b0b16171330e2e5ea93714e6e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-30-pr7-geo-client-info.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34258-34280" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-30-pr7-geo-client-info.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34991-35013" +fingerprint = "sha256:36a1b11d3befaee42a697f0c5d3fa97bf09fccda75b27d392f12dc429a3f9931" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1856-1870" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47561-47570" +fingerprint = "sha256:2f6ca9378d07d21b42a84ca8557d3c798e106b0d22adeb78ecce2205c790c016" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:47790-47799" +fingerprint = "sha256:a32a4aa107568e56c5d8817efebafb7739193fad52f731dd6f0c677c7da7febf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:780-794" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8922-8936" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:14885-14897" +fingerprint = "sha256:28dd40f834818f2e63827ddd50a1d50198b8e5233b9e21956ccedccc1be8a35e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-04-14-edgezero-pr15-remove-fastly-core.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1266-1276" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-04-17-pr17-cloudflare-adapter.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26576-26594" +fingerprint = "sha256:f21dcc0278537904903a531855f8d4399cad482e55baae95e63efedb555692a3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-04-17-pr17-cloudflare-adapter.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4729-4739" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27991-28001" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28092-28102" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46479-46504" +fingerprint = "sha256:8b025a9de6105744eb9c952ea9019ecdcbe8e5f9b6026ada1626302570d764f4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:46718-46742" +fingerprint = "sha256:a16087c356309547bcd1c1e13e51f772c08d0f92edd673b18bb1db8c182a49cf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50629-50645" +fingerprint = "sha256:8a35d2ef7cda983fdede35914bdf634fdc54526b4bfa16df6c61ab03adcd366b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50683-50698" +fingerprint = "sha256:dcc4cf7379442a5dc1b635c096a07ec0815c83ebb31309e1af22189c107c3a85" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51045-51061" +fingerprint = "sha256:8a35d2ef7cda983fdede35914bdf634fdc54526b4bfa16df6c61ab03adcd366b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51095-51111" +fingerprint = "sha256:8a35d2ef7cda983fdede35914bdf634fdc54526b4bfa16df6c61ab03adcd366b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:51172-51188" +fingerprint = "sha256:8a35d2ef7cda983fdede35914bdf634fdc54526b4bfa16df6c61ab03adcd366b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1371-1381" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1439-1449" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18833-18843" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18903-18913" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25374-25384" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16155-16165" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16583-16593" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16738-16748" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16889-16899" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17038-17048" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17179-17189" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17916-17926" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18052-18062" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23695-23725" +fingerprint = "sha256:663e092895a9f1a03ced9482320d8c6b79d844baa9a61ee018c3fd2e463b4f1a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16680-16698" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17348-17366" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3158-3176" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7925-7943" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8564-8582" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-audit-implementation-plan.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19276-19286" +fingerprint = "sha256:b22dddd116ae76cbd2c0c4c6453e1df74096b9cb4169451927c95084f5d204b9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-audit-implementation-plan.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19340-19352" +fingerprint = "sha256:27926c0f747ffde0367945472789e06ba61f9eb8b6013eb7bc002b997213f953" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-audit-implementation-plan.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19419-19430" +fingerprint = "sha256:51c4495b8ed1e188343c5c80ee3d3eeb9964929c6ebc92d81816f75d6b789b56" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-22-ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19989-20010" +fingerprint = "sha256:c429b6279d46e4342021b10e7617de86df66adc19527fcaea76289ac43dfdc57" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-22-ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20063-20085" +fingerprint = "sha256:a9ed82da14dfa85a8d767664cdad26afebbc0dea0f16b2900d48924575cbc3e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-22-ts-dev-proxy.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20204-20225" +fingerprint = "sha256:c429b6279d46e4342021b10e7617de86df66adc19527fcaea76289ac43dfdc57" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-06-26-server-side-ad-template-cli.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54919-54927" +fingerprint = "sha256:99d407c213910b1729482fecc4ccde310699ad6225103c20d6df80aedd278e70" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-07-06-cache-control-header-implementation-plan.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2967-2977" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-07-15-gam-ts-cohort-attribution.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1065-1075" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-07-20-ssat-debug-comment-config.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7086-7115" +fingerprint = "sha256:a6ba44487b6f236097383d41683f0cffeb1374795d38a6be88ac4c57a4b56133" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-07-23-per-section-gam-unit-path.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1281-1291" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-07-28-gpt-runtime-diagnostics-overlay.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18998-19013" +fingerprint = "sha256:52bb20cf785fe672f080aa4cd30efaa2911d62a048c0d24ef20d8ee353083ca8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-08-10-1009-esi-validation-spike.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50627-50637" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-08-11-config-first-auction-provider-architecture-implementation-plan.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2859-2877" +fingerprint = "sha256:c76f41607bff72511ea0c5a53bd59b26a80f38a6532a6404bc21ca29ca76b377" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-08-14-1009-esi-parser-assembly.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3115-3125" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/superpowers/plans/2026-08-18-admin-diagnostics-review-fixes.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:2572-2592" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/superpowers/plans/2026-08-18-admin-diagnostics-review-fixes.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:2673-2693" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "docs/superpowers/plans/2026-08-19-pr928-comprehensive-review-resolution.md" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:5146-5166" +fingerprint = "sha256:a59231e11c7a3dc87516dac4b94974ff6997292af72843e8870ce19a1ad7a85c" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/plans/2026-08-26-first-party-sign-allowlist-enforcement.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:567-577" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16791-16805" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16990-17015" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17187-17201" +fingerprint = "sha256:e2131a6362588db51dab6590913936b86c933f761f8b9ed09c7ecf2fd1abc5a7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20595-20605" +fingerprint = "sha256:f479260848e3a685dc16aade1f528da16b274e370146865360f4ce4e769251a5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21823-21833" +fingerprint = "sha256:81d062b068954e713b1d4cddff293f678322dec0b600519690899066e99b2a1f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22009-22016" +fingerprint = "sha256:55f0ba822c028e18a0977c35eeffba83ce8ee068f2fe504511af9db8aa1bd0ad" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22364-22399" +fingerprint = "sha256:5643173ebc9b6bab4cdd6f0162f169f26dba53747686a8c1a4fdf669a048a82a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22442-22452" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34669-34679" +fingerprint = "sha256:81d062b068954e713b1d4cddff293f678322dec0b600519690899066e99b2a1f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34848-34855" +fingerprint = "sha256:55f0ba822c028e18a0977c35eeffba83ce8ee068f2fe504511af9db8aa1bd0ad" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41864-41874" +fingerprint = "sha256:81d062b068954e713b1d4cddff293f678322dec0b600519690899066e99b2a1f" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:41918-41925" +fingerprint = "sha256:55f0ba822c028e18a0977c35eeffba83ce8ee068f2fe504511af9db8aa1bd0ad" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:42498-42513" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:43969-43979" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:52831-52846" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53018-53033" +fingerprint = "sha256:26ca8550a0510ee25f6f318a48769702ddd022669ff1755ea940e4b649ac1474" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53187-53197" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53262-53272" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53349-53364" +fingerprint = "sha256:e61445c568460be9735eb5c0b4b3ed1702c3e069c0de3a6550ddd6ce916b3e6e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53469-53478" +fingerprint = "sha256:1e7b5582c920722ca2b77cca0980145fc983504829b7f89c4a39d6f70cb918b4" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53564-53578" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53675-53700" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53760-53785" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53868-53882" +fingerprint = "sha256:e2131a6362588db51dab6590913936b86c933f761f8b9ed09c7ecf2fd1abc5a7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53930-53940" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-11-production-readiness-report-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10445-10453" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-11-production-readiness-report-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10513-10521" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10193-10203" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:135-145" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15477-15487" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15592-15602" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15758-15768" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15873-15883" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16517-16527" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17565-17575" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18634-18644" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19498-19508" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20769-20779" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21583-21593" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21888-21898" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22178-22188" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23571-23581" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23711-23721" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24017-24027" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24139-24149" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24467-24477" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24607-24617" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:58135-58149" +fingerprint = "sha256:0bc886d4d3f35fdc9bb74ed71a0802bc9030615945948cb4f7a88941d8e53d1d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6501-6511" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7073-7083" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7357-7367" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7474-7484" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7639-7649" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7925-7935" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8042-8052" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8209-8219" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8491-8501" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8777-8787" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88017-88027" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88090-88100" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88456-88466" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88591-88601" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:88726-88736" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89020-89030" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:89146-89156" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91588-91598" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91762-91772" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91923-91933" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92097-92107" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92258-92268" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92593-92603" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:92928-92938" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:93265-93275" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94276-94286" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94609-94619" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94946-94956" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95281-95291" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95614-95624" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95716-95726" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95947-95957" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96009-96019" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96284-96294" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:96386-96396" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10128-10144" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14030-14047" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1941-1957" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19682-19692" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20339-20355" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35527-35543" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38770-38790" +fingerprint = "sha256:2938579cb36f2d919877e25bb70cd014ce35646a67edbf840e229d57894c91c3" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38808-38830" +fingerprint = "sha256:06d99e9881378c455f8670da83568a462ae67bec48a6c5f667d9f251cffad141" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39763-39775" +fingerprint = "sha256:7abad72772831b5bca360455e473fcb8b4da1170cbb0a2f05b0c3b18c34fa026" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:50351-50370" +fingerprint = "sha256:3cf7de5b01196d41cb889aa28109f904fb314ff98cdb4135eb1ca229bf63faee" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54678-54694" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:54879-54895" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:55001-55012" +fingerprint = "sha256:05412cb91bc98fcdb2e0713767b06a7f9841044652ff21bd149c66f2fef65ae1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56845-56855" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:56919-56931" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60847-60859" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60947-60959" +fingerprint = "sha256:9afefe8c08eeb8c770d1265e1bc04236be64183ba1d6f6a73b070fe45a29797d" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61048-61058" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:61438-61450" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6429-6445" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7317-7333" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9166-9183" +fingerprint = "sha256:47a37658f32ddb63fb23876bd8279eecc9ca39dabe15e10adb7a975c2f1390c2" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9554-9569" +fingerprint = "sha256:0a273c2e333edd03dcf40b95c1883572ed76a315864de94f94e28afe567c01c5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9936-9952" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2377-2387" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62859-62869" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:62941-62953" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:64148-64158" +fingerprint = "sha256:0ef1da3411875a6ab9a4a0aeef69511406aed864089b287fd5c233a9167c5b06" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:74653-74669" +fingerprint = "sha256:b021e9141a1ae89642499b53935d9ad0f2a8e5bb117e64ea921d0452217f37e1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:76381-76393" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79277-79285" +fingerprint = "sha256:1867b49abe26b512d11cb45294e41afa6f728697705714911c5c001179f7f2bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79295-79309" +fingerprint = "sha256:ecb538d168816ce83d6aac90f327fc4ead05b45a2a2d1e4bedfeceea34a2f2c8" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:81175-81186" +fingerprint = "sha256:432d13e9a05984b84508704f9b773bb205003d4d2df669251422f9bf21310aaf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85150-85162" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:85250-85260" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90633-90645" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90799-90815" +fingerprint = "sha256:bcd429116b589d1c7880ec2e381fb97c260164a9274714f49b78b79d955d3e08" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:90855-90871" +fingerprint = "sha256:bcd429116b589d1c7880ec2e381fb97c260164a9274714f49b78b79d955d3e08" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:91029-91039" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95572-95584" +fingerprint = "sha256:29c97d827950f3cd7ffee0a83448a5bde67cc49c9b35ec2353af04ad9d5907b5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95720-95736" +fingerprint = "sha256:bcd429116b589d1c7880ec2e381fb97c260164a9274714f49b78b79d955d3e08" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95776-95792" +fingerprint = "sha256:bcd429116b589d1c7880ec2e381fb97c260164a9274714f49b78b79d955d3e08" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:95898-95908" +fingerprint = "sha256:cecd6ae8fad1129e24b14951e487430c6545f18675294fbf38f2bf117a26d7f6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-25-streaming-response-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18416-18429" +fingerprint = "sha256:8df0e125f2e4789edbc1fdffc971cb3b7e50f87b0b16171330e2e5ea93714e6e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-25-streaming-response-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18614-18627" +fingerprint = "sha256:8df0e125f2e4789edbc1fdffc971cb3b7e50f87b0b16171330e2e5ea93714e6e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-30-pr7-geo-client-info-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:130-140" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-03-30-pr7-geo-client-info-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:205-215" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-15-server-side-ad-templates-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35512-35528" +fingerprint = "sha256:528fb65464a4031dfd196e3eda5b535c79583b42a9573c9964eb0a87c373510c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-15-server-side-ad-templates-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38463-38479" +fingerprint = "sha256:528fb65464a4031dfd196e3eda5b535c79583b42a9573c9964eb0a87c373510c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-15-server-side-ad-templates-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40993-41009" +fingerprint = "sha256:528fb65464a4031dfd196e3eda5b535c79583b42a9573c9964eb0a87c373510c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10578-10601" +fingerprint = "sha256:2c6ef816644a960c8b8fe5420a80f0628854c2e977085269f3375b62917bfdd6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10682-10705" +fingerprint = "sha256:2c6ef816644a960c8b8fe5420a80f0628854c2e977085269f3375b62917bfdd6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:399-422" +fingerprint = "sha256:2c6ef816644a960c8b8fe5420a80f0628854c2e977085269f3375b62917bfdd6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:449-472" +fingerprint = "sha256:2c6ef816644a960c8b8fe5420a80f0628854c2e977085269f3375b62917bfdd6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6159-6182" +fingerprint = "sha256:2c6ef816644a960c8b8fe5420a80f0628854c2e977085269f3375b62917bfdd6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-19-asset-s3-auth-fastly-io-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2553-2586" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-19-asset-s3-auth-fastly-io-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3366-3399" +fingerprint = "sha256:da38c61f6f91a73d9b64b7240e3afd2717cb1b90a07e5154e18dac26e6e459bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-19-asset-s3-auth-fastly-io-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8968-9004" +fingerprint = "sha256:0d35dc6dd3730e79af0c3a319f8779d3c140d3b709e7ff279582f1b0bdbfbff5" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-28-edgezero-image-optimizer-primitive-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4371-4396" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-28-edgezero-image-optimizer-primitive-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4468-4493" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-28-edgezero-image-optimizer-primitive-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4536-4561" +fingerprint = "sha256:d8ae8c564f298f3651023100c19366bca6e075f43fbd66b3a65bacab85421972" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10802-10820" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1151-1169" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2443-2461" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5874-5892" +fingerprint = "sha256:6af5774a840b3fa69aa7b8acbeef2bb9bab60e54940718d86019edde3d79fee7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7455-7471" +fingerprint = "sha256:edf7dcad352dc8cbe0020ec23a3b6a9789cc3a881a66ed8f3b2a8917515ca357" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-11-datadome-server-side-protection-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10579-10593" +fingerprint = "sha256:1612dbe9caebccc30f3a330069b32a33b2ca442448a4df0772d6371bd8c0ae24" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-11-datadome-server-side-protection-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10617-10635" +fingerprint = "sha256:db764e18a0825de71b2244ccbc7dd7af859ebeee70316298b59954442fe890d6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-11-datadome-server-side-protection-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10877-10899" +fingerprint = "sha256:f9c640bbc6d44108b10d923aa742b33cf9c342cce88dfad57769f67946b4645a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-17-osano-consent-mirror-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:405-420" +fingerprint = "sha256:8c8efd3925ebe5d63aecf507611c3c31527771252ff3f477f6b2e0408b7af0ae" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-auction-prebid-metrics-tinybird-grafana-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11756-11771" +fingerprint = "sha256:c3f8f58771561b77603ba00b7a77ff0373991d98e1482b44a8a8265e59f45505" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-auction-prebid-metrics-tinybird-grafana-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9205-9220" +fingerprint = "sha256:c3f8f58771561b77603ba00b7a77ff0373991d98e1482b44a8a8265e59f45505" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-auction-prebid-metrics-tinybird-grafana-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9334-9349" +fingerprint = "sha256:aaf89f8e081e72a0a95c4c6ff249fd3c77ff7c32982469187f2edfd86669bf25" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14743-14781" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14902-14940" +fingerprint = "sha256:caa8d23ee872dfccc19c6e265c1db7c1d1980fa8bf445158a7a4b8588455176c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15514-15525" +fingerprint = "sha256:38198617b8aeff6b006ad6e6e0254df33c0c1b02ae5afbf4b00245870c19e62a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15545-15556" +fingerprint = "sha256:38198617b8aeff6b006ad6e6e0254df33c0c1b02ae5afbf4b00245870c19e62a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15703-15714" +fingerprint = "sha256:38198617b8aeff6b006ad6e6e0254df33c0c1b02ae5afbf4b00245870c19e62a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15753-15764" +fingerprint = "sha256:38198617b8aeff6b006ad6e6e0254df33c0c1b02ae5afbf4b00245870c19e62a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15889-15900" +fingerprint = "sha256:38198617b8aeff6b006ad6e6e0254df33c0c1b02ae5afbf4b00245870c19e62a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1604-1629" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2748-2773" +fingerprint = "sha256:47ef2f82ce9db54fa76f2a9b78471484afc3eec1587b2cd1d4d60846bdfd63f1" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-06-cache-control-header-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2613-2623" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-13-ssat-render-inline-creative-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:733-737" +fingerprint = "sha256:b54f7080c981b6f0d0605d8a405dcfc3acfa6581d22fe47bcd56b0c09f15b9c6" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12927-12936" +fingerprint = "sha256:063ed9e6665ef6fdf2a8eb0ae23aff6136ca3ae7988412b1322e41526223ad06" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13043-13057" +fingerprint = "sha256:93c094ba35e25143ad3be710e9fe7d6521b77972ea9be8c7dc0e384fe91481af" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23940-23970" +fingerprint = "sha256:995c8f5385ebb76a6cecbd72dc42f2c251310be45091899b88d3d42f51ac69c9" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:289-299" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4517-4527" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4686-4696" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4825-4835" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4969-4979" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5126-5136" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5307-5317" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13426-13447" +fingerprint = "sha256:1a7d7b45412e4f31870a99bea0c551c7a64bc95901975cd78e4f1a45d3595793" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14222-14243" +fingerprint = "sha256:1a7d7b45412e4f31870a99bea0c551c7a64bc95901975cd78e4f1a45d3595793" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30125-30146" +fingerprint = "sha256:1a7d7b45412e4f31870a99bea0c551c7a64bc95901975cd78e4f1a45d3595793" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30973-30991" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31061-31079" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33418-33436" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33502-33520" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36778-36796" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38622-38640" +fingerprint = "sha256:d5b195c7bbccbe2d50f222e0d62120950cc02ab3b36939b085889900221c4a0a" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-20-ssat-debug-comment-config-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:175-185" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-23-per-section-gam-unit-path-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:133-143" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-23-per-section-gam-unit-path-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7999-8011" +fingerprint = "sha256:c9d968254b5a40a88a5476198d2577b4e683d73734e24cacbd06ec89e30a76bb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-07-28-gpt-runtime-diagnostics-overlay-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36912-36922" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-08-08-esi-cacheable-root-validation-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5589-5599" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-08-18-ssat-debug-comment-format-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:171-181" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3892-3914" +fingerprint = "sha256:c5c88b1c0fd72489bc2352a680544204f898392cfe43655f761e8e21ae26bddf" +owner = "aram356" +rationale = "Preserve the approved audit's exact record of the deleted placeholder CNAME." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-08-26-first-party-sign-allowlist-enforcement-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2811-2827" +fingerprint = "sha256:58a17dd3eec213b59b21ff0780a349080ec566a207417f0d75636c51ee4e6b77" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "docs/superpowers/specs/2026-08-26-first-party-sign-allowlist-enforcement-design.md" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:97-107" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "fastly.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:175-185" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "fastly.toml" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:79-93" +fingerprint = "sha256:9add7b194557cb47f08214e4edb91a996de6fcb836bb78e05d2111e0553c6991" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "service_id" +path = "fastly.toml" +detector = "service_id" +scope = "exact-occurrence" +selector = "bytes:491-513" +fingerprint = "sha256:c4774901fec483c592c92eb3215ffe5398e9ce5fa1d803a42bf0cae21eea2179" +owner = "aram356" +rationale = "Preserve the existing Fastly service binding during this refresh; removal is independent." +expires_at = "2026-09-30T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/benchmark.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3195-3205" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/profile.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1018-1038" +fingerprint = "sha256:be8b94d6f8fda8788015cbdb41fa1a1750f13a837367ca08feb8566361534112" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/profile.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:317-337" +fingerprint = "sha256:045b0182aa51414b8f3f8b9db376510ba31ebb0dbe70d2330349481cfd1edcdd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/profile.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7602-7622" +fingerprint = "sha256:be8b94d6f8fda8788015cbdb41fa1a1750f13a837367ca08feb8566361534112" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/profile.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8146-8166" +fingerprint = "sha256:be8b94d6f8fda8788015cbdb41fa1a1750f13a837367ca08feb8566361534112" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/template-cache-local-test.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22628-22638" +fingerprint = "sha256:17c4ce5d626dbdb162d7c24619248bef0e7419773e128ead1b1a6f00542935fb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/template-cache-local-test.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24994-25002" +fingerprint = "sha256:253202dc76743f2c5b6d76891a9502e89764ccc75705783990f9cc7ec3e71d50" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/template-cache-local-test.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26791-26799" +fingerprint = "sha256:253202dc76743f2c5b6d76891a9502e89764ccc75705783990f9cc7ec3e71d50" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/template-cache-local-test.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4107-4116" +fingerprint = "sha256:eba573819f31ca814254c08ef63a03ad60f88322556a2da1cd19e69792da6bbf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "scripts/template-cache-local-test.sh" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8102-8111" +fingerprint = "sha256:eba573819f31ca814254c08ef63a03ad60f88322556a2da1cd19e69792da6bbf" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10183-10193" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10482-10492" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:10764-10774" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11091-11101" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11289-11299" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11632-11642" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1165-1175" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:11828-11838" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12131-12141" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12390-12400" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12640-12650" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12893-12903" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13082-13092" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13272-13282" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13466-13476" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13664-13674" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:13855-13865" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1399-1409" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14048-14058" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14270-14280" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14457-14467" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14653-14663" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14902-14912" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15153-15163" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15358-15368" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15552-15562" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15755-15765" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:15951-15961" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16205-16215" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16492-16502" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1661-1671" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16680-16690" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:16925-16935" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17175-17185" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17413-17423" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17702-17712" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:17932-17942" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18163-18173" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:183-193" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18360-18370" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:1854-1864" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18586-18596" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:18813-18823" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19012-19022" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19311-19321" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19501-19511" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19725-19735" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19913-19923" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20139-20149" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20337-20347" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2051-2061" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20559-20569" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:20841-20851" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21102-21112" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21299-21309" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21519-21529" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21792-21802" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21986-21996" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22178-22188" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22491-22501" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2281-2291" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:22861-22871" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23052-23062" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23299-23309" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23533-23543" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:23788-23798" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24058-24068" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24285-24295" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24516-24526" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2471-2481" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24766-24776" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:24959-24969" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25161-25171" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25357-25367" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25668-25678" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:25937-25947" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26126-26136" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26376-26386" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2659-2669" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26636-26646" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26890-26900" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27168-27178" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27405-27415" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27643-27653" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27879-27889" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28079-28089" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28420-28430" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28660-28670" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:28966-28976" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:2907-2917" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29208-29218" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29400-29410" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29591-29601" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29789-29799" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29995-30005" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30231-30241" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30428-30438" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30623-30633" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:30810-30820" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31078-31088" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31271-31281" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31464-31474" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31661-31671" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3170-3180" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:31854-31864" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32135-32145" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32331-32341" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32558-32568" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32778-32788" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:32971-32981" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33166-33176" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33428-33438" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33694-33704" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:33964-33974" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34202-34212" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3430-3440" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34472-34482" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34720-34730" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:34979-34989" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:35227-35237" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3625-3635" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:3822-3832" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:405-415" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4062-4072" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4287-4297" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4530-4540" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:4815-4825" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5055-5065" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5295-5305" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5598-5608" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:5846-5856" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6409-6419" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6603-6613" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:6824-6834" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7018-7028" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7208-7218" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:738-748" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7447-7457" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7687-7697" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:7886-7896" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8114-8124" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8357-8367" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8588-8598" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:8829-8839" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9059-9069" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9306-9316" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:935-945" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9543-9553" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9731-9741" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/Cargo.lock" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9925-9935" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:14712-14726" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:14872-14886" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15038-15052" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15208-15222" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15371-15385" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15555-15569" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15744-15758" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:15948-15962" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:16126-16140" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:16308-16322" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:16486-16500" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:16668-16687" +fingerprint = "sha256:a9dbd2995c87bce54bf155e2def0f2a7560e29049d0a1315836a6bfd7b51c7d1" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "settings_schema_identifier" +path = "tools/docs-parity/manifests/settings-companions.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:16863-16881" +fingerprint = "sha256:caa23dc41c9fa6b0f60158382c1356541dd8d0065179ca062e48c7d69e32b8be" +owner = "aram356" +rationale = "Reviewed exact non-value settings disposition identifier." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/src/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53290-53300" +fingerprint = "sha256:3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/src/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:53367-53385" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "tools/docs-parity/src/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77554-77568" +fingerprint = "sha256:38f6a6eb4c4b568643a92ffcd9bb714ba1dc44a1dbd6aa6e51719dcda6aa5f84" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "tools/docs-parity/src/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:77572-77592" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/src/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:94506-94524" +fingerprint = "sha256:0dc11026ac75c015aaa1deafff4a7a54ef6d0cf6b3c7f9b1d2c8f3502929aa9e" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:12017-12038" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:14091-14108" +fingerprint = "sha256:6b505f35356d18a0b451627a42c2ad9bedfb8362bacc663b31dfa1e8e7812932" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:19728-19745" +fingerprint = "sha256:6b505f35356d18a0b451627a42c2ad9bedfb8362bacc663b31dfa1e8e7812932" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:21350-21367" +fingerprint = "sha256:6b505f35356d18a0b451627a42c2ad9bedfb8362bacc663b31dfa1e8e7812932" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:26873-26894" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:27539-27560" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:29740-29755" +fingerprint = "sha256:48a1b2a995be42b87249c690fbf498f5349f262b13439c3b0357a98cf8a63086" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36582-36603" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36669-36690" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:36754-36775" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37064-37089" +fingerprint = "sha256:4436bf8883803ad59dfa20f6479431645eedb2e44d91f6878ffddbe49c6f54e7" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37111-37136" +fingerprint = "sha256:e07ea125f683edb5d1cf171563d272a275b632739fa61053751d86694b759845" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:37840-37861" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38493-38514" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38583-38604" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:38684-38705" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:39682-39703" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40379-40400" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:40438-40459" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:60452-60479" +fingerprint = "sha256:b51e04bf5d5ad35f96bb81e37391fe70d9d081042151fc5d79611fdab942217c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:66217-66238" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:68191-68212" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:69328-69349" +fingerprint = "sha256:87490e03efb182fc921b585e23ed3491b9dc34026dcceec1286b0a01f01d62ac" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70584-70594" +fingerprint = "sha256:eef2d88ac3ce45e201042c1ebf881e619aa361309c71a56d5edc0d71b43e5cdd" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "project_owned_public_domain" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:70640-70660" +fingerprint = "sha256:a2c8db41528cbfecb326bd8ae3696beaf1b1930d6e1afc1270de669b7030ab3a" +owner = "aram356" +rationale = "Reviewed exact project-owned public domain reference." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:71823-71843" +fingerprint = "sha256:a993e754c4a8841f0f7e24fced03fa8d4d2f905b265f02c291da607e5326066b" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9027-9045" +fingerprint = "sha256:a72c7141343aa939fde9a3ce7b351becf870dca1fd7a5301c939a744b51d5641" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9057-9070" +fingerprint = "sha256:d0fdfd77b5bfd8daf7668ea8ccf717347954dd623747cbde45dfada96d43f83c" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "vendor_url" +path = "tools/docs-parity/tests/scanner.rs" +detector = "domain" +scope = "exact-occurrence" +selector = "bytes:9082-9095" +fingerprint = "sha256:87feb88319ff4708805ce8eca0233478663de6511c7d5ce7e210db7191cb1beb" +owner = "aram356" +rationale = "Reviewed exact public vendor reference required by repository content." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "tools/docs-parity/tests/scanner.rs" +detector = "email" +scope = "exact-occurrence" +selector = "bytes:41717-41745" +fingerprint = "sha256:60a0c7d895777dbb3206205a932557134c63283c4f73dce19e5b1fc2e225bb2a" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "tools/docs-parity/tests/scanner.rs" +detector = "email" +scope = "exact-occurrence" +selector = "bytes:43810-43838" +fingerprint = "sha256:360d72075fa5baa70019e10f18af70ffb5a94e7de3b19162f29938993a389478" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "tools/docs-parity/tests/scanner.rs" +detector = "email" +scope = "exact-occurrence" +selector = "bytes:44125-44153" +fingerprint = "sha256:360d72075fa5baa70019e10f18af70ffb5a94e7de3b19162f29938993a389478" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "historical_example" +path = "tools/docs-parity/tests/scanner.rs" +detector = "email" +scope = "exact-occurrence" +selector = "bytes:44498-44526" +fingerprint = "sha256:360d72075fa5baa70019e10f18af70ffb5a94e7de3b19162f29938993a389478" +owner = "aram356" +rationale = "Reviewed exact historical repository record." +expires_at = "2027-08-31T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "tools/docs-parity/tests/scanner.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:33706-33731" +fingerprint = "sha256:46995ba50217a5618ade545344ee62d6575432a06063a6f80dcd69bbac49e40b" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "tools/docs-parity/tests/scanner.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:73893-73909" +fingerprint = "sha256:f39dac6cbaba535e2c207cd0cd8f154974223c848f727f98b3564cea569b41cf" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "tools/docs-parity/tests/scanner.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:78526-78551" +fingerprint = "sha256:46995ba50217a5618ade545344ee62d6575432a06063a6f80dcd69bbac49e40b" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "tools/docs-parity/tests/settings.rs" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:29205-29219" +fingerprint = "sha256:85766c2580c995de7924581a1a615f50791689cf58dc4ef64ac84f6aa44cd912" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "trusted-server.example.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:2335-2351" +fingerprint = "sha256:fa08496c93489cde56bef34a9316af277a33159481c2b730a8c7ef05d88c0d7a" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" + +[[exceptions]] +class = "hash_pinned_fake_credential_fixture" +path = "trusted-server.example.toml" +detector = "credential_shape" +scope = "exact-occurrence" +selector = "bytes:2558-2581" +fingerprint = "sha256:8db71dc1a90ee84c57719598d63c305922b83e9b743cb0a069c36fc10b15918e" +owner = "aram356" +rationale = "Reviewed exact hash-pinned synthetic credential fixture." +expires_at = "2027-09-01T00:00:00Z" diff --git a/tools/docs-parity/manifests/settings-companions.toml b/tools/docs-parity/manifests/settings-companions.toml new file mode 100644 index 000000000..e26e953d8 --- /dev/null +++ b/tools/docs-parity/manifests/settings-companions.toml @@ -0,0 +1,481 @@ +version = 1 +reviewed = true + +[template] +source = "trusted-server.example.toml" +placeholder_paths = ["publisher.cookie_domain", "publisher.domain", "publisher.origin_url"] +integration_ids = ["adserver_mock", "aps", "datadome", "didomi", "google_tag_manager", "gpt", "gpt_diagnostics", "lockr", "nextjs", "osano", "permutive", "prebid", "sourcepoint", "testlight"] +profile_ids = ["aps", "prebid-server", "standard"] +consumer_literals = ["ec_passphrase", "handler_password", "publisher_proxy_secret"] +expected_failure_diagnostic = "unmodified template rejects publisher.cookie_domain, publisher.domain, publisher.origin_url" + +[[consumers]] +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +mode = "literal_substitution" + +[[consumers]] +path = "crates/trusted-server-cli/src/commands/audit/generate/validate.rs" +mode = "literal_substitution" + +[[consumers]] +path = "crates/trusted-server-cli/src/commands/config/ad_templates.rs" +mode = "literal_substitution" + +[[consumers]] +path = "crates/trusted-server-cli/src/commands/config/init.rs" +mode = "include_only" + +[[consumers]] +path = "crates/trusted-server-core/src/config.rs" +mode = "literal_substitution" + +[[consumers]] +path = "scripts/template-cache-local-test.sh" +mode = "literal_substitution" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_max_buffered_body_bytes" +kind = "default" +value = "16777216" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_max_buffered_body_bytes_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_max_buffered_body_bytes_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "from_value_or_str" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_from_value_or_str_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_from_value_or_str_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "vec_from_seq_or_map" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_vec_from_seq_or_map_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_vec_from_seq_or_map_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "map_from_obj_or_str" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_map_from_obj_or_str_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_map_from_obj_or_str_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "bool_from_bool_or_str" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_bool_from_bool_or_str_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_bool_from_bool_or_str_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_publisher_domain" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_publisher_domain_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_publisher_domain_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_cookie_domain" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_cookie_domain_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_cookie_domain_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_no_trailing_slash" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_no_trailing_slash_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_no_trailing_slash_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_host_header_override" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_host_header_override_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_host_header_override_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_redacted_not_empty" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_redacted_not_empty_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_redacted_not_empty_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "EcPartner::validate_source_domain" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_validate_source_domain_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_validate_source_domain_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "Ec::validate_passphrase" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_validate_passphrase_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_validate_passphrase_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_path" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_path_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_path_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "validate_trusted_client_ip" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_trusted_client_ip_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_validate_trusted_client_ip_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "EcPartner::default_openrtb_atype" +kind = "default" +value = "3" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_openrtb_atype_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_openrtb_atype_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "EcPartner::default_batch_rate_limit" +kind = "default" +value = "60" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_batch_rate_limit_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_batch_rate_limit_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "EcPartner::default_pull_sync_ttl_sec" +kind = "default" +value = "86400" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_ttl_sec_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_ttl_sec_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "EcPartner::default_pull_sync_rate_limit" +kind = "default" +value = "10" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_rate_limit_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ecpartner_default_pull_sync_rate_limit_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "Ec::default_pull_sync_concurrency" +kind = "default" +value = "3" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_pull_sync_concurrency_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_pull_sync_concurrency_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "Ec::default_cluster_trust_threshold" +kind = "default" +value = "10" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_trust_threshold_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_trust_threshold_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "Ec::default_cluster_recheck_secs" +kind = "default" +value = "3600" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_recheck_secs_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_ec_default_cluster_recheck_secs_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_s3_access_key_id" +kind = "default" +value = "access_key_id" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_s3_access_key_id_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_s3_access_key_id_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_s3_secret_access_key" +kind = "default" +value = "secret_access_key" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_s3_secret_access_key_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_s3_secret_access_key_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_profile_param" +kind = "default" +value = "profile" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_profile_param_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_profile_param_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_aspect_ratio_param" +kind = "default" +value = "ar" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_aspect_ratio_param_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_aspect_ratio_param_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_debug_param" +kind = "default" +value = "_io_debug" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_debug_param_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_debug_param_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_default_profile" +kind = "default" +value = "default" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_default_profile_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_default_profile_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_crop_offset_x_param" +kind = "default" +value = "x" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_x_param_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_x_param_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_crop_offset_y_param" +kind = "default" +value = "y" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_y_param_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_y_param_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_crop_offset_buckets" +kind = "default" +value = "[10,30,50,70,90]" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_buckets_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_crop_offset_buckets_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_tinybird_auction_dataset" +kind = "default" +value = "auction_events_raw" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_auction_dataset_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_auction_dataset_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_tinybird_access_dataset" +kind = "default" +value = "access_logs_raw" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_access_dataset_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_access_dataset_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_tinybird_max_body_bytes" +kind = "default" +value = "1048576" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_max_body_bytes_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_tinybird_max_body_bytes_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/settings.rs" +symbol = "default_auction_debug_metadata_keys" +kind = "default" +value = "[error_type,http_status,message]" +positive_probe = "task7_crates_trusted_server_core_src_settings_rs_default_auction_debug_metadata_keys_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_settings_rs_default_auction_debug_metadata_keys_default_negative" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/aps.rs" +symbol = "deserialize_account_id" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_integrations_aps_rs_deserialize_account_id_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_aps_rs_deserialize_account_id_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/prebid.rs" +symbol = "default_script_patterns" +kind = "default" +value = "[/prebid.js,/prebid.min.js,/prebidjs.js,/prebidjs.min.js]" +positive_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_default_script_patterns_default_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_default_script_patterns_default_negative" + +[[fields]] +path = "Publisher.proxy_secret" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "Ec.passphrase" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "EcPartner.api_token" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "EcPartner.ts_pull_token" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "Handler.password" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "TinybirdSettings.auction_token_secret" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "DataDomeConfig.server_side_key_secret_name" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "DataDomeProtectionTestBypassConfig.credential_secret_name" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "S3SigV4AuthConfig.access_key_id" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "S3SigV4AuthConfig.secret_access_key" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "S3SigV4AuthConfig.session_token" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "store_resolved" + +[[fields]] +path = "TrustedClientIpConfig.shared_secret" +lifecycle = "canonical" +key_identity = "canonical" +serialization = "serialized" +runtime = "active" +secret = "deliberately_inline" + +[[fields]] +path = "TinybirdSettings.access_token_secret" +lifecycle = "deprecated" +key_identity = "canonical" +serialization = "skipped" +runtime = "normalized_away" +secret = "accepted_discarded" + +[[fields]] +path = "S3SigV4AuthConfig.secret_store" +lifecycle = "deprecated" +key_identity = "canonical" +serialization = "skipped" +runtime = "normalized_away" +secret = "none" + +[[fields]] +path = "TinybirdSettings.secret_store" +lifecycle = "deprecated" +key_identity = "canonical" +serialization = "skipped" +runtime = "normalized_away" +secret = "none" + +[[fields]] +path = "DataDomeConfig.server_side_key_secret_store" +lifecycle = "deprecated" +key_identity = "canonical" +serialization = "skipped" +runtime = "normalized_away" +secret = "none" + +[[fields]] +path = "DataDomeProtectionTestBypassConfig.credential_secret_store" +lifecycle = "deprecated" +key_identity = "canonical" +serialization = "skipped" +runtime = "normalized_away" +secret = "none" + +[[fields]] +path = "AssetOriginAuth.s3_sig_v4" +lifecycle = "deprecated" +key_identity = "alias" +alias_of = "AssetOriginAuth.s3_sigv4" +serialization = "skipped" +runtime = "deserialization_only" +secret = "none" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/prebid.rs" +symbol = "crate::settings::vec_from_seq_or_map" +kind = "deserializer" +positive_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_crate_settings_vec_from_seq_or_map_deserializer_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_crate_settings_vec_from_seq_or_map_deserializer_negative" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/prebid.rs" +symbol = "validate_external_bundle_url" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_url_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_url_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/prebid.rs" +symbol = "validate_external_bundle_sri" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_sri_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_external_bundle_sri_validator_negative" + +[[companions]] +source = "crates/trusted-server-core/src/integrations/prebid.rs" +symbol = "validate_excluded_gam_ad_unit_path_suffixes" +kind = "validator" +positive_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_excluded_gam_ad_unit_path_suffixes_validator_positive" +negative_probe = "task7_crates_trusted_server_core_src_integrations_prebid_rs_validate_excluded_gam_ad_unit_path_suffixes_validator_negative" diff --git a/tools/docs-parity/manifests/tracked-files.toml b/tools/docs-parity/manifests/tracked-files.toml new file mode 100644 index 000000000..e0c6b9b24 --- /dev/null +++ b/tools/docs-parity/manifests/tracked-files.toml @@ -0,0 +1,2887 @@ +version = 1 +max_text_bytes = 4194304 +reviewed = true + +[[files]] +path = ".cargo/config.toml" +kind = "text" + +[[files]] +path = ".claude/agents/build-validator.md" +kind = "text" + +[[files]] +path = ".claude/agents/code-architect.md" +kind = "text" + +[[files]] +path = ".claude/agents/code-simplifier.md" +kind = "text" + +[[files]] +path = ".claude/agents/issue-creator.md" +kind = "text" + +[[files]] +path = ".claude/agents/pr-creator.md" +kind = "text" + +[[files]] +path = ".claude/agents/pr-reviewer.md" +kind = "text" + +[[files]] +path = ".claude/agents/repo-explorer.md" +kind = "text" + +[[files]] +path = ".claude/agents/verify-app.md" +kind = "text" + +[[files]] +path = ".claude/commands/check-ci.md" +kind = "text" + +[[files]] +path = ".claude/commands/review-changes.md" +kind = "text" + +[[files]] +path = ".claude/commands/test-all.md" +kind = "text" + +[[files]] +path = ".claude/commands/test-crate.md" +kind = "text" + +[[files]] +path = ".claude/commands/verify.md" +kind = "text" + +[[files]] +path = ".claude/settings.json" +kind = "text" + +[[files]] +path = ".claude/skills/deploying-trusted-server-to-fastly/SKILL.md" +kind = "text" + +[[files]] +path = ".env.dev" +kind = "text" + +[[files]] +path = ".env.example" +kind = "text" + +[[files]] +path = ".github/ISSUE_TEMPLATE/bug_report.yml" +kind = "text" + +[[files]] +path = ".github/ISSUE_TEMPLATE/config.yml" +kind = "text" + +[[files]] +path = ".github/ISSUE_TEMPLATE/story.yml" +kind = "text" + +[[files]] +path = ".github/ISSUE_TEMPLATE/task.yml" +kind = "text" + +[[files]] +path = ".github/actions/setup-integration-test-env/action.yml" +kind = "text" + +[[files]] +path = ".github/dependabot.yml" +kind = "text" + +[[files]] +path = ".github/pull_request_template.md" +kind = "text" + +[[files]] +path = ".github/workflows/codeql.yml" +kind = "text" + +[[files]] +path = ".github/workflows/deploy-docs.yml" +kind = "text" + +[[files]] +path = ".github/workflows/format.yml" +kind = "text" + +[[files]] +path = ".github/workflows/integration-tests.yml" +kind = "text" + +[[files]] +path = ".github/workflows/test.yml" +kind = "text" + +[[files]] +path = ".gitignore" +kind = "text" + +[[files]] +path = ".tool-versions" +kind = "text" + +[[files]] +path = "AGENTS.md" +kind = "text" + +[[files]] +path = "CHANGELOG.md" +kind = "text" + +[[files]] +path = "CLAUDE.md" +kind = "text" + +[[files]] +path = "CONTRIBUTING.md" +kind = "text" + +[[files]] +path = "Cargo.lock" +kind = "text" + +[[files]] +path = "Cargo.toml" +kind = "text" + +[[files]] +path = "FAQ_POC.md" +kind = "text" + +[[files]] +path = "LICENSE" +kind = "text" + +[[files]] +path = "ProjectGovernance.md" +kind = "text" + +[[files]] +path = "README.md" +kind = "text" + +[[files]] +path = "TESTING.md" +kind = "text" + +[[files]] +path = "clippy.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/axum.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/src/app.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/src/main.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/src/middleware.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/src/platform.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-axum/tests/routes.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/.gitignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/build.sh" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/cloudflare.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/src/app.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/src/middleware.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/src/platform.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/tests/routes.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.ci.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-cloudflare/wrangler.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/app.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/backend.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/compat.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/ec_kv.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/esi_assembly.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/logging.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/main.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/management_api.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/middleware.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/platform.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/rate_limiter.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/template_cache.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/src/tinybird.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/tests/kv_store/counter_store.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-fastly/tests/kv_store/opid_store.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/.gitignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/spin.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/src/app.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/src/middleware.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/src/platform.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-adapter-spin/tests/routes.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/ad_templates/compare.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/ad_templates/expected.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/ad_templates/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/ad_templates/output.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/app_config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/ad_template_collector.js" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/ad_templates.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/browser.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/browser_scroll.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/collector.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/consent_stub.js" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/analyzer.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/browser_collector.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/collector.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/crawl_plan.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/evidence.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/gpt_slots.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/page_patterns.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/slot_toml.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/unit_template.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/generate/validate.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/audit/page.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/config/ad_templates.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/config/init.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/config/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/browser.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/ca.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/metrics.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/prefixed_io.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/rewrite.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/server.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/body.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/connect.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/dns.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/key.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/manager.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/dev/proxy/upstream/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/commands/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/error.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/main.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/output.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/prebid_bundle.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/src/run.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/tests/config_env_overlay.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/tests/proxy_e2e.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/tests/proxy_perf.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-cli/tests/support/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/README.md" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/benches/consent_decode.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/benches/html_processor_bench.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/build.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/asset_image_optimizer.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/README.md" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/context.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/endpoints.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/formats.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/openrtb.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/openrtb/test_executor.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/openrtb/tests.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/orchestrator.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/plan.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/profile.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/provider.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/routing.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/telemetry.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/test_support.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction/types.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auction_config_types.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/auth.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/cache_policy.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/config_payload.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/extraction.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/gpp.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/jurisdiction.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/tcf.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/types.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent/us_privacy.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/consent_config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/constants.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/cookies.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/creative.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/creative_opportunities.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/admin.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/auth.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/batch_sync.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/consent.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/cookies.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/device.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/eids.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/finalize.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/generation.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/identify.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/kv.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/kv_backend.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/kv_types.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/partner.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/prebid_eids.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/pull_sync.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/rate_limiter.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/ec/registry.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/edge_cookie.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/error.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/geo.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/host_header.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/host_rewrite.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/html_processor.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/html_processor.test.html" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/http_util.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/adserver_mock.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/aps.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/datadome.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/datadome/protection.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/datadome/protection_scope.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/didomi.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/google_tag_manager.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/gpt.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/gpt_bootstrap.js" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/gpt_diagnostics.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/lockr.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/fixtures/inlined-data-escaped.html" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/fixtures/inlined-data-nonce.html" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/html_post_process.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/rsc.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/rsc_placeholders.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/script_rewriter.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/nextjs/shared.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/osano.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/permutive.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/prebid.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/registry.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/sourcepoint.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/integrations/testlight.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/migration_guards.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/models.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/openrtb.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/backend_naming.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/error.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/http.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/image_optimizer.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/kv.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/template_assembly.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/template_cache.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/test_support.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/traits.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/platform/types.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/price_bucket.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/proxy.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/publisher.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/redacted.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/discovery.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/endpoints.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/jwks.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/rotation.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/request_signing/signing.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/response_privacy.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/rsc_flight.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/s3_sigv4.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/secret_resolution.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/settings.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/settings_data.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/storage/kv_store.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/storage/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/streaming_processor.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/streaming_replacer.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/test_support.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/tester_cookie.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-core/src/tsjs.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/.dockerignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/README.md" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/global-setup.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/global-teardown.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/helpers/gpt-stub.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/helpers/infra.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/helpers/state.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/helpers/wait-for-ready.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/package-lock.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/package.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/playwright.config.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/api-passthrough.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/form-rewriting.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/gpt-diagnostics.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/nextjs/navigation.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/aps-renderer.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/creative-sandbox.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/script-bundle.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/shared/script-injection.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tests/wordpress/admin-injection.spec.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/browser/tsconfig.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/configs/trusted-server.integration.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/configs/viceroy-template.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/Dockerfile" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/about/page.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/api/data/route.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/api/hello/route.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/components/Navigation.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/components/RouteScript.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/contact/page.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/dashboard/page.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/gpt-diagnostics/page.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/layout.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/app/page.tsx" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/next.config.mjs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package-lock.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/Dockerfile" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/theme/index.php" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/fixtures/frameworks/wordpress/theme/wp-admin/index.php" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/src/bin/generate-viceroy-config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/common/assertions.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/common/config.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/common/ec.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/common/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/common/runtime.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/environments/axum.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/environments/cloudflare.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/environments/fastly.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/environments/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/frameworks/mod.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/frameworks/nextjs.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/frameworks/scenarios.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/frameworks/wordpress.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/integration.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-integration-tests/tests/parity.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/.gitignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/build.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/.gitignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/.prettierignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/.prettierrc.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/build-all.mjs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/build-prebid-external.mjs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/eslint.config.js" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/package-lock.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/package.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/auction.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/config.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/context.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/first_impression.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/global.d.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/log.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/queue.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/registry.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/render.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/request.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/slot_element.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/styles/normalize.css" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/templates/iframe.html" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/types.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/core/util.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/aps/render.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/click.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/dynamic_src_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/iframe.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/image.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/creative/proxy_sign.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/datadome/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/datadome/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/didomi/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/google_tag_manager/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/api.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/badges.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/binding.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/exhaustive.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/observer.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/overlay.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/presentation_helpers.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/slot_size_observer.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/store.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/lockr/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/lockr/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/osano/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/permutive/segments.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/prebid_modules/aliases.d.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/prebid_modules/liveIntentIdSystem.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/prebid/user_id_modules.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/sourcepoint/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/sourcepoint/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/integrations/testlight/index.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/async.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/beacon_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/dom_insertion_dispatcher.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/globals.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/origin.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/scheduler.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/src/shared/script_guard.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/build-prebid-external.test.mjs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/auction.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/config.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/context.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/registry.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/render.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/core/request.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/fixtures/aps-renderer-v1.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/aps/render.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/creative/click.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/creative/helpers.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/creative/iframe.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/creative/image.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/creative/proxy_sign.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/datadome/script_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/didomi/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/google_tag_manager/script_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/ad_init.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/gpt_bootstrap.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/schedule_initial_ad_init.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/script_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt/spa_hook.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/api.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/badges.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/binding.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/observer.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/overlay.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/slot_size_observer.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/store.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/gpt_diagnostics/types.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/lockr/script_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/osano/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/permutive/segments.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/prebid/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/prebid/user_id_modules.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/index.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/integrations/sourcepoint/script_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/prebid-artifact-integration.test.mjs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/shared/async.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/shared/beacon_guard.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/shared/dom_insertion_dispatcher.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/shared/origin.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/test/shared/scheduler.test.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/tsconfig.json" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/vite.config.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/lib/vitest.config.ts" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/src/bundle.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-js/src/lib.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb-codegen/.gitignore" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb-codegen/Cargo.lock" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb-codegen/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb-codegen/src/main.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/Cargo.toml" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/README.md" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/generate.sh" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/proto/openrtb.proto" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/src/codegen.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/src/generated.rs" +kind = "text" + +[[files]] +path = "crates/trusted-server-openrtb/src/lib.rs" +kind = "text" + +[[files]] +path = "docs/.gitignore" +kind = "text" + +[[files]] +path = "docs/.prettierignore" +kind = "text" + +[[files]] +path = "docs/.prettierrc" +kind = "text" + +[[files]] +path = "docs/.vitepress/config.mts" +kind = "text" + +[[files]] +path = "docs/.vitepress/theme/custom.css" +kind = "text" + +[[files]] +path = "docs/.vitepress/theme/index.ts" +kind = "text" + +[[files]] +path = "docs/README.md" +kind = "text" + +[[files]] +path = "docs/business-use-cases.md" +kind = "text" + +[[files]] +path = "docs/epics/revenue-operations-dashboard.md" +kind = "text" + +[[files]] +path = "docs/eslint.config.js" +kind = "text" + +[[files]] +path = "docs/guide/ad-serving.md" +kind = "text" + +[[files]] +path = "docs/guide/api-reference.md" +kind = "text" + +[[files]] +path = "docs/guide/architecture.md" +kind = "text" + +[[files]] +path = "docs/guide/asset-routes.md" +kind = "text" + +[[files]] +path = "docs/guide/auction-orchestration.md" +kind = "text" + +[[files]] +path = "docs/guide/cli.md" +kind = "text" + +[[files]] +path = "docs/guide/collective-sync.md" +kind = "text" + +[[files]] +path = "docs/guide/configuration.md" +kind = "text" + +[[files]] +path = "docs/guide/creative-processing.md" +kind = "text" + +[[files]] +path = "docs/guide/ec-setup-guide.md" +kind = "text" + +[[files]] +path = "docs/guide/edge-cookies.md" +kind = "text" + +[[files]] +path = "docs/guide/error-reference.md" +kind = "text" + +[[files]] +path = "docs/guide/fastly.md" +kind = "text" + +[[files]] +path = "docs/guide/first-party-proxy.md" +kind = "text" + +[[files]] +path = "docs/guide/gdpr-compliance.md" +kind = "text" + +[[files]] +path = "docs/guide/getting-started.md" +kind = "text" + +[[files]] +path = "docs/guide/index.md" +kind = "text" + +[[files]] +path = "docs/guide/integration-guide.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations-overview.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/aps.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/datadome.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/didomi.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/gam.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/google_tag_manager.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/gpt-diagnostics.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/gpt.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/kargo.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/lockr.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/nextjs.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/osano.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/permutive.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/prebid.md" +kind = "text" + +[[files]] +path = "docs/guide/integrations/sourcepoint.md" +kind = "text" + +[[files]] +path = "docs/guide/key-rotation.md" +kind = "text" + +[[files]] +path = "docs/guide/proxy-signing.md" +kind = "text" + +[[files]] +path = "docs/guide/request-signing.md" +kind = "text" + +[[files]] +path = "docs/guide/rsc-hydration.md" +kind = "text" + +[[files]] +path = "docs/guide/testing.md" +kind = "text" + +[[files]] +path = "docs/guide/ts-dev-proxy.md" +kind = "text" + +[[files]] +path = "docs/guide/what-is-trusted-server.md" +kind = "text" + +[[files]] +path = "docs/index.md" +kind = "text" + +[[files]] +path = "docs/internal/EDGEZERO_MIGRATION.md" +kind = "text" + +[[files]] +path = "docs/internal/audits/documentation-refresh-decisions.md" +kind = "text" + +[[files]] +path = "docs/internal/audits/documentation-refresh-evidence.md" +kind = "text" + +[[files]] +path = "docs/internal/onboarding.md" +kind = "text" + +[[files]] +path = "docs/package-lock.json" +kind = "text" + +[[files]] +path = "docs/package.json" +kind = "text" + +[[files]] +path = "docs/public/images/hero-graphic.jpeg" +kind = "binary" + +[[files]] +path = "docs/roadmap.md" +kind = "text" + +[[files]] +path = "docs/superpowers/archive/2026-03-19-sequence-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/archive/2026-03-24-optimization-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/archive/2026-03-24-publisher-ids-audit-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/archive/2026-08-08-esi-cacheable-root-validation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/archive/2026-08-10-1009-esi-validation-spike.md" +kind = "text" + +[[files]] +path = "docs/superpowers/implementation-notes/2026-07-10-dev-proxy-performance.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-03-25-streaming-response.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-03-30-pr7-geo-client-info.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-03-31-pr8-content-rewriting-verification.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-03-31-pr9-wire-signing-to-store-primitives.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-02-pr10-logging-initialization.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-08-prebid-generic-bid-param-override-rules.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-14-edgezero-pr15-remove-fastly-core.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-15-sourcepoint-gpp-consent.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-17-pr17-cloudflare-adapter.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-04-30-server-side-ad-templates.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-20-pr18-phase5-verification.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-21-pr19-cutover-canary-rollout.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-22-spin-adapter-integration.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-27-pr20-legacy-cleanup.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-29-pr680-reviewer-findings.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-05-29-prebid-creative-rendering-fix.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-audit-implementation-plan.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-16-edgezero-based-ts-cli-implementation-plan.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-16-trusted-server-cli-respec-context.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-22-ts-dev-proxy.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-23-auction-telemetry-direct-tinybird.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-23-integration-viceroy-config-generation-plan.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-06-26-server-side-ad-template-cli.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-06-cache-control-header-implementation-plan.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-08-true-origin-streaming-fastly.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-10-dev-proxy-performance.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-12-dev-proxy-review-backfill.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-13-ssat-render-inline-creative.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-14-dev-proxy-pr-feedback.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-15-aps-openrtb-first-class-integration.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-15-gam-ts-cohort-attribution.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-20-ssat-debug-comment-config.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-22-ssat-root-document-304-prevention.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-23-per-section-gam-unit-path.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-24-prebid-refresh-gam-path-opt-out.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-24-prevent-duplicate-gpt-slot-requests.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-07-28-gpt-runtime-diagnostics-overlay.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-03-datadome-ip-excluded-client-tag.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-04-gpt-delivery-evidence-and-auction-competition.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-06-gpt-refresh-diagnostics-port.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-06-server-side-ad-templates-cache-control.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-08-1009-measurement-and-stage-0.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-08-1009-measurement-findings.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-10-1009-esi-validation-spike.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-11-config-first-auction-provider-architecture-implementation-plan.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-12-1009-esi-merge-hardening.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-14-1009-esi-parser-assembly.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-18-admin-diagnostics-review-fixes.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-18-contiguous-generated-slot-tables.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-18-pr-823-review-resolution.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-18-pre-navigation-cookie-install.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-18-ssat-debug-comment-format.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-ad-template-generation-progress.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-gam-attribution-review-resolution.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-pr-1013-review-remediation.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-pr928-comprehensive-review-resolution.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-refuse-volatile-div-collisions.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-template-cache-terminology.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-19-trusted-client-ip-header.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-20-pr-1013-round-3-review-remediation.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-21-pr-823-round-5-review-resolution.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-24-ad-template-div-id-reconciliation.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-24-ad-template-generate-scroll-staleness.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-26-first-party-sign-allowlist-enforcement.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-27-pr-1079-review-remediation.md" +kind = "text" + +[[files]] +path = "docs/superpowers/plans/2026-08-30-documentation-refresh.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-01-15-attestation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-11-production-readiness-report-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-19-auction-orchestration-flow-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-19-edgezero-migration-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-24-ssc-prd-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-24-ssc-technical-spec-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-25-streaming-response-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-03-30-pr7-geo-client-info-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-04-02-pr10-logging-initialization-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-04-08-prebid-generic-bid-param-override-rules-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-04-15-server-side-ad-templates-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-04-15-sourcepoint-gpp-consent-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-04-28-multi-backend-asset-proxy-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-05-19-asset-s3-auth-fastly-io-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-05-28-edgezero-image-optimizer-primitive-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-05-28-external-prebid-first-party-proxy-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-05-29-prebid-creative-rendering-fix.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-11-datadome-server-side-protection-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-16-edgezero-based-ts-audit-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-16-edgezero-based-ts-cli-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-17-osano-consent-mirror-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-17-prebid-bundle-cli-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-22-auction-prebid-metrics-tinybird-grafana-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-22-ts-dev-proxy-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-06-26-server-side-ad-template-cli-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-06-cache-control-header-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-10-dev-proxy-performance-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-13-ssat-render-inline-creative-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-15-aps-openrtb-first-class-integration-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-15-gam-ts-cohort-attribution-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-20-ssat-debug-comment-config-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-22-ssat-root-document-304-prevention-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-23-per-section-gam-unit-path-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-24-prebid-refresh-gam-path-opt-out-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-24-prevent-duplicate-gpt-slot-requests-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-07-28-gpt-runtime-diagnostics-overlay-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-03-datadome-ip-excluded-client-tag-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-04-gpt-delivery-evidence-and-auction-competition-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-05-gpt-refresh-source-and-replacement-diagnostics-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-08-esi-cacheable-root-validation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-10-config-first-auction-provider-architecture-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-11-1009-streaming-assembly-architecture.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-12-1009-esi-merge-hardening-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-14-1009-esi-parser-assembly-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-18-admin-diagnostics-review-fixes-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-18-contiguous-generated-slot-tables-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-18-pr-823-review-resolution-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-18-pre-navigation-cookie-install-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-18-ssat-debug-comment-format-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-ad-template-generation-progress-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-gam-attribution-review-resolution-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-pr-1013-review-remediation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-pr928-comprehensive-review-resolution-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-refuse-volatile-div-collisions-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-template-cache-terminology-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-19-trusted-client-ip-header-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-20-pr-1013-round-3-review-remediation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-21-pr-823-round-5-review-resolution-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-24-ad-template-div-id-reconciliation-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-24-ad-template-generate-scroll-staleness-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-26-first-party-sign-allowlist-enforcement-design.md" +kind = "text" + +[[files]] +path = "docs/superpowers/specs/2026-08-27-pr-1079-review-remediation-design.md" +kind = "text" + +[[files]] +path = "docs/tsconfig.json" +kind = "text" + +[[files]] +path = "edgezero.toml" +kind = "text" + +[[files]] +path = "fastly.toml" +kind = "text" + +[[files]] +path = "rust-toolchain.toml" +kind = "text" + +[[files]] +path = "scripts/batch-sync.sh" +kind = "text" + +[[files]] +path = "scripts/benchmark.sh" +kind = "text" + +[[files]] +path = "scripts/generate-integration-viceroy-configs.sh" +kind = "text" + +[[files]] +path = "scripts/integration-tests-browser.sh" +kind = "text" + +[[files]] +path = "scripts/integration-tests.sh" +kind = "text" + +[[files]] +path = "scripts/profile.sh" +kind = "text" + +[[files]] +path = "scripts/template-cache-local-test.sh" +kind = "text" + +[[files]] +path = "scripts/test-cli.sh" +kind = "text" + +[[files]] +path = "tinybird/datasources/access_logs_raw.datasource" +kind = "text" + +[[files]] +path = "tinybird/datasources/auction_bid_stats_rollup.datasource" +kind = "text" + +[[files]] +path = "tinybird/datasources/auction_events_raw.datasource" +kind = "text" + +[[files]] +path = "tinybird/datasources/auction_overview_rollup.datasource" +kind = "text" + +[[files]] +path = "tinybird/datasources/auction_provider_stats_rollup.datasource" +kind = "text" + +[[files]] +path = "tinybird/fixtures/auction_events_raw.ndjson" +kind = "text" + +[[files]] +path = "tinybird/pipes/auction_bid_stats_mv.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/auction_overview_mv.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/auction_provider_stats_mv.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/auction_summary.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/ingestion_freshness.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/provider_health.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/provider_latency.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/quarantine_counts.pipe" +kind = "text" + +[[files]] +path = "tinybird/pipes/seat_yield.pipe" +kind = "text" + +[[files]] +path = "tinybird/tests/auction_summary.yaml" +kind = "text" + +[[files]] +path = "tinybird/tests/provider_health.yaml" +kind = "text" + +[[files]] +path = "tinybird/tests/seat_yield.yaml" +kind = "text" + +[[files]] +path = "tools/docs-parity/Cargo.lock" +kind = "text" + +[[files]] +path = "tools/docs-parity/Cargo.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/README.md" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/adapter-support.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/diagrams.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/integrations.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/maintained-sources.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/orphans.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/pages.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/retired-identifiers.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/routes.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/sensitive-allowlist.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/settings-companions.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/manifests/tracked-files.toml" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/classification.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/integrations.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/lib.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/main.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/markdown.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/model.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/repository.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/routes.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/scanner.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/src/settings.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/classification.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/cli.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/integrations.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/links.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/markdown.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/routes.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/scanner.rs" +kind = "text" + +[[files]] +path = "tools/docs-parity/tests/settings.rs" +kind = "text" + +[[files]] +path = "trusted-server.example.toml" +kind = "text" diff --git a/tools/docs-parity/src/classification.rs b/tools/docs-parity/src/classification.rs new file mode 100644 index 000000000..8cf3d7718 --- /dev/null +++ b/tools/docs-parity/src/classification.rs @@ -0,0 +1,1606 @@ +//! Closed-universe classification for every Git-tracked repository path. + +use std::collections::{BTreeMap, BTreeSet}; +use std::path::Path; + +use error_stack::{Report, ResultExt as _}; +use serde::{Deserialize, Serialize}; +use sha2::{Digest as _, Sha256}; + +use crate::repository::{NormalizedRelativePath, Repository}; + +const TRACKED_MANIFEST: &str = "tools/docs-parity/manifests/tracked-files.toml"; +const MAINTAINED_MANIFEST: &str = "tools/docs-parity/manifests/maintained-sources.toml"; +const MANIFEST_VERSION: u32 = 1; +const DEFAULT_MAXIMUM_TEXT_BYTES: usize = 4 * 1024 * 1024; +const MAXIMUM_CONFIGURED_TEXT_BYTES: usize = 16 * 1024 * 1024; + +/// Failure while checking or updating source classification records. +#[derive(Debug, derive_more::Display)] +pub enum ClassificationError { + /// A classification manifest cannot be read safely. + #[display("cannot read a classification manifest")] + ReadManifest, + /// A classification manifest is malformed or internally inconsistent. + #[display("invalid classification manifest")] + InvalidManifest, + /// A tracked path lacks a complete, current classification. + #[display("tracked-file classification is incomplete")] + Incomplete, + /// A manifest update cannot be committed atomically. + #[display("cannot update classification manifests")] + Update, +} + +impl core::error::Error for ClassificationError {} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct TrackedManifest { + version: u32, + max_text_bytes: usize, + reviewed: bool, + #[serde(default)] + files: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct TrackedFile { + path: String, + kind: FileKind, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +pub(crate) enum FileKind { + Text, + Binary, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct MaintainedManifest { + version: u32, + reviewed: bool, + #[serde(default)] + sources: Vec, + #[serde(default)] + comments: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct SourceRecord { + path: String, + mode: SourceMode, + #[serde(skip_serializing_if = "Option::is_none")] + disposition: Option, + #[serde(skip_serializing_if = "Option::is_none")] + exclude_kind: Option, + #[serde(skip_serializing_if = "Option::is_none")] + grammar: Option, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +enum SourceMode { + Whole, + Comments, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +enum Disposition { + Include, + Exclude, + ReviewRequired, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +enum ExcludeKind { + Generated, + Historical, + MachineData, + NonDocumentation, + SourceCode, + TestFixture, + Vendored, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct CommentRecord { + path: String, + selector: String, + fingerprint: String, + disposition: Disposition, + #[serde(skip_serializing_if = "Option::is_none")] + exclude_kind: Option, +} + +#[derive(Clone, Debug)] +struct CommentSpan { + start: usize, + end: usize, + contents: String, +} + +impl CommentSpan { + fn selector(&self) -> String { + format!("bytes:{}-{}", self.start, self.end) + } +} + +pub(crate) struct ClassifiedFile { + pub(crate) path: String, + pub(crate) kind: FileKind, +} + +pub(crate) struct MarkdownClassification { + pub(crate) included_paths: BTreeSet, + pub(crate) excluded_paths: BTreeSet, + pub(crate) known_paths: BTreeSet, +} + +/// Validate that every tracked path and expected text surface is classified. +/// +/// # Errors +/// +/// Returns an error for unsafe repository entries, malformed or stale +/// manifests, unclassified paths or comments, invalid UTF-8, and oversized +/// expected text. +pub(crate) fn check(repository: &Repository) -> Result<(), Report> { + checked_files(repository).map(|_files| ()) +} + +pub(crate) fn checked_files( + repository: &Repository, +) -> Result, Report> { + let tracked_manifest: TrackedManifest = read_manifest(repository, TRACKED_MANIFEST)?; + let maintained_manifest: MaintainedManifest = read_manifest(repository, MAINTAINED_MANIFEST)?; + validate(repository, &tracked_manifest, &maintained_manifest)?; + Ok(tracked_manifest + .files + .into_iter() + .map(|record| ClassifiedFile { + path: record.path, + kind: record.kind, + }) + .collect()) +} + +pub(crate) fn checked_markdown_sources( + repository: &Repository, +) -> Result> { + let tracked_manifest: TrackedManifest = read_manifest(repository, TRACKED_MANIFEST)?; + let maintained_manifest: MaintainedManifest = read_manifest(repository, MAINTAINED_MANIFEST)?; + validate(repository, &tracked_manifest, &maintained_manifest)?; + let known_paths = tracked_manifest + .files + .iter() + .map(|record| record.path.clone()) + .collect::>(); + let text_paths = tracked_manifest + .files + .into_iter() + .filter(|record| record.kind == FileKind::Text && record.path.ends_with(".md")) + .map(|record| record.path) + .collect::>(); + let included_paths = maintained_manifest + .sources + .into_iter() + .filter(|record| { + record.mode == SourceMode::Whole + && record.disposition == Some(Disposition::Include) + && record.path.ends_with(".md") + }) + .map(|record| record.path) + .collect::>(); + let excluded_paths = text_paths.difference(&included_paths).cloned().collect(); + Ok(MarkdownClassification { + included_paths, + excluded_paths, + known_paths, + }) +} + +/// Refresh deterministic classification candidates while preserving reviewed records. +/// +/// A changed candidate set clears the manifest-level review attestation; check +/// mode refuses candidates until a reviewer verifies every explicit record. +/// +/// # Errors +/// +/// Returns an error when repository paths cannot be enumerated or read, an +/// existing manifest is invalid, or either manifest cannot be replaced safely. +pub(crate) fn update(repository: &Repository) -> Result<(), Report> { + let previous_tracked = read_manifest_optional::(repository, TRACKED_MANIFEST)?; + let previous_maintained = + read_manifest_optional::(repository, MAINTAINED_MANIFEST)?; + validate_previous_manifests(previous_tracked.as_ref(), previous_maintained.as_ref())?; + let previous_kinds = previous_tracked + .as_ref() + .map(|manifest| { + manifest + .files + .iter() + .map(|record| (record.path.clone(), record.kind)) + .collect::>() + }) + .unwrap_or_default(); + let previous_path_set = previous_kinds.keys().cloned().collect::>(); + let previous_sources = previous_maintained + .as_ref() + .filter(|manifest| manifest.reviewed) + .map(|manifest| { + manifest + .sources + .iter() + .cloned() + .map(|record| (record.path.clone(), record)) + .collect::>() + }) + .unwrap_or_default(); + let previous_comments = previous_maintained + .as_ref() + .filter(|manifest| manifest.reviewed) + .map(|manifest| manifest.comments.clone()) + .unwrap_or_default(); + + let paths = repository + .tracked_paths() + .change_context(ClassificationError::Update)?; + let mut files = Vec::with_capacity(paths.len()); + let mut contents_by_path = BTreeMap::new(); + for path in paths { + let path_text = path + .as_utf8() + .change_context(ClassificationError::Update)? + .to_owned(); + let contents = repository + .read_tracked(&path) + .change_context(ClassificationError::Update)?; + let kind = previous_kinds.get(&path_text).copied().unwrap_or_else(|| { + if contents.len() <= DEFAULT_MAXIMUM_TEXT_BYTES + && core::str::from_utf8(&contents).is_ok() + { + FileKind::Text + } else { + FileKind::Binary + } + }); + files.push(TrackedFile { + path: path_text.clone(), + kind, + }); + contents_by_path.insert(path_text, contents); + } + files.sort_by(|left, right| left.path.cmp(&right.path)); + let current_path_set = files + .iter() + .map(|record| record.path.clone()) + .collect::>(); + + let tracked = TrackedManifest { + version: MANIFEST_VERSION, + max_text_bytes: previous_tracked_maximum(repository)?, + reviewed: previous_tracked + .as_ref() + .is_some_and(|manifest| manifest.reviewed) + && previous_path_set == current_path_set, + files, + }; + let mut sources = Vec::new(); + let mut comments = Vec::new(); + let mut maintained_changed = false; + for record in &tracked.files { + if record.kind == FileKind::Binary { + continue; + } + if let Some(previous) = previous_sources.get(&record.path) { + sources.push(previous.clone()); + if previous.mode == SourceMode::Comments { + let grammar = previous.grammar.as_deref().ok_or_else(|| { + Report::new(ClassificationError::InvalidManifest) + .attach(format!("comment source has no grammar: {}", record.path)) + })?; + let contents = core::str::from_utf8( + contents_by_path + .get(&record.path) + .expect("tracked text contents should exist"), + ) + .change_context(ClassificationError::Update)?; + let previous_by_selector = previous_comments + .iter() + .filter(|comment| comment.path == record.path) + .filter_map(|comment| { + parse_selector(&comment.selector) + .ok() + .map(|selector| (selector, comment)) + }) + .collect::>(); + for span in extract_comments(contents, grammar)? { + let expected_fingerprint = fingerprint(span.contents.as_bytes()); + if let Some(existing) = previous_by_selector + .get(&(span.start, span.end)) + .filter(|record| record.fingerprint == expected_fingerprint) + { + comments.push((*existing).clone()); + } else { + maintained_changed = true; + comments.push(CommentRecord { + path: record.path.clone(), + selector: span.selector(), + fingerprint: expected_fingerprint, + disposition: Disposition::Include, + exclude_kind: None, + }); + } + } + } + continue; + } + + maintained_changed = true; + + let grammar = operational_comment_grammar(&record.path); + if github_operational_path(&record.path) && grammar.is_none() { + return Err(Report::new(ClassificationError::Update).attach(format!( + "unsupported GitHub operational format requires review: {}", + record.path + ))); + } + if let Some(grammar) = grammar { + sources.push(SourceRecord { + path: record.path.clone(), + mode: SourceMode::Comments, + disposition: None, + exclude_kind: None, + grammar: Some(grammar.to_owned()), + }); + let contents = core::str::from_utf8( + contents_by_path + .get(&record.path) + .expect("tracked text contents should exist"), + ) + .expect("candidate text should be valid UTF-8"); + for span in extract_comments(contents, grammar) + .expect("bootstrap grammar should always have an extractor") + { + comments.push(CommentRecord { + path: record.path.clone(), + selector: span.selector(), + fingerprint: fingerprint(span.contents.as_bytes()), + disposition: Disposition::Include, + exclude_kind: None, + }); + } + } else { + let (disposition, exclude_kind) = whole_file_disposition(&record.path); + sources.push(SourceRecord { + path: record.path.clone(), + mode: SourceMode::Whole, + disposition: Some(disposition), + exclude_kind, + grammar: None, + }); + } + } + sources.sort_by(|left, right| left.path.cmp(&right.path)); + comments.sort_by(|left, right| { + (&left.path, selector_line(&left.selector)) + .cmp(&(&right.path, selector_line(&right.selector))) + }); + let current_comment_keys = comments + .iter() + .map(|record| { + ( + record.path.as_str(), + record.selector.as_str(), + record.fingerprint.as_str(), + ) + }) + .collect::>(); + let previous_comment_keys = previous_comments + .iter() + .map(|record| { + ( + record.path.as_str(), + record.selector.as_str(), + record.fingerprint.as_str(), + ) + }) + .collect::>(); + maintained_changed |= + sources.len() != previous_sources.len() || current_comment_keys != previous_comment_keys; + let maintained = MaintainedManifest { + version: MANIFEST_VERSION, + reviewed: previous_maintained + .as_ref() + .is_some_and(|manifest| manifest.reviewed) + && !maintained_changed, + sources, + comments, + }; + + write_manifest(repository, TRACKED_MANIFEST, &tracked)?; + write_manifest(repository, MAINTAINED_MANIFEST, &maintained) +} + +fn validate_previous_manifests( + tracked: Option<&TrackedManifest>, + maintained: Option<&MaintainedManifest>, +) -> Result<(), Report> { + if let Some(tracked) = tracked { + if tracked.version != MANIFEST_VERSION + || tracked.max_text_bytes == 0 + || tracked.max_text_bytes > MAXIMUM_CONFIGURED_TEXT_BYTES + { + return Err(Report::new(ClassificationError::InvalidManifest) + .attach("existing tracked manifest has invalid version or size bound")); + } + unique_files(&tracked.files)?; + } + if let Some(maintained) = maintained { + if maintained.version != MANIFEST_VERSION { + return Err(Report::new(ClassificationError::InvalidManifest) + .attach("existing maintained manifest has invalid version")); + } + let sources = unique_sources(&maintained.sources)?; + let mut comments = BTreeSet::new(); + for record in &maintained.comments { + validate_manifest_path(&record.path)?; + parse_selector(&record.selector)?; + validate_fingerprint(&record.fingerprint)?; + validate_disposition( + Some(record.disposition), + record.exclude_kind, + &format!("comment span: {}:{}", record.path, record.selector), + )?; + if !comments.insert((record.path.clone(), record.selector.clone())) { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "duplicate comment selector: {}:{}", + record.path, record.selector + )), + ); + } + if sources + .get(&record.path) + .is_none_or(|source| source.mode != SourceMode::Comments) + { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "comment record conflicts with source: {}", + record.path + )), + ); + } + } + } + Ok(()) +} + +fn validate( + repository: &Repository, + tracked_manifest: &TrackedManifest, + maintained_manifest: &MaintainedManifest, +) -> Result<(), Report> { + validate_versions(tracked_manifest, maintained_manifest)?; + let tracked_paths = repository + .tracked_paths() + .change_context(ClassificationError::Incomplete)?; + let actual_paths = tracked_paths + .iter() + .map(|path| { + path.as_utf8() + .map(str::to_owned) + .change_context(ClassificationError::Incomplete) + }) + .collect::, _>>()?; + let declared_files = unique_files(&tracked_manifest.files)?; + let declared_paths = declared_files.keys().cloned().collect(); + if let Some(path) = actual_paths.difference(&declared_paths).next() { + return Err(Report::new(ClassificationError::Incomplete) + .attach(format!("unclassified tracked path: {path}"))); + } + for path in declared_files.keys() { + if !actual_paths.contains(path) { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "classification references an untracked path: {path}" + )), + ); + } + } + + let sources = unique_sources(&maintained_manifest.sources)?; + let text_paths = declared_files + .iter() + .filter(|(_path, kind)| **kind == FileKind::Text) + .map(|(path, _kind)| path.clone()) + .collect::>(); + let source_paths = sources.keys().cloned().collect(); + if let Some(path) = text_paths.difference(&source_paths).next() { + return Err(Report::new(ClassificationError::Incomplete).attach(format!( + "expected text has no maintained-source disposition: {path}" + ))); + } + for path in sources.keys() { + if !text_paths.contains(path) { + return Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("maintained source is not expected text: {path}"))); + } + } + for comment in &maintained_manifest.comments { + let Some(source) = sources.get(&comment.path) else { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "comment record references an unknown text source: {}", + comment.path + )), + ); + }; + if source.mode != SourceMode::Comments { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "comment record references a non-comment source: {}", + comment.path + )), + ); + } + } + + for path in tracked_paths { + let path_text = path + .as_utf8() + .change_context(ClassificationError::Incomplete)?; + let kind = declared_files + .get(path_text) + .expect("set equality should provide a classification"); + let contents = repository + .read_tracked(&path) + .change_context(ClassificationError::Incomplete)?; + if *kind == FileKind::Text { + if contents.len() > tracked_manifest.max_text_bytes { + return Err(Report::new(ClassificationError::Incomplete).attach(format!( + "expected text exceeds {} bytes: {path_text}", + tracked_manifest.max_text_bytes + ))); + } + let text = core::str::from_utf8(&contents).map_err(|_error| { + Report::new(ClassificationError::Incomplete) + .attach(format!("expected text is not valid UTF-8: {path_text}")) + })?; + validate_source( + path_text, + text, + sources + .get(path_text) + .expect("text path should have a source record"), + &maintained_manifest.comments, + )?; + } + } + Ok(()) +} + +fn validate_versions( + tracked: &TrackedManifest, + maintained: &MaintainedManifest, +) -> Result<(), Report> { + if tracked.version != MANIFEST_VERSION || maintained.version != MANIFEST_VERSION { + return Err(Report::new(ClassificationError::InvalidManifest) + .attach("classification manifest version must be 1")); + } + if !tracked.reviewed { + return Err(Report::new(ClassificationError::Incomplete) + .attach("tracked-file candidates require review")); + } + if !maintained.reviewed { + return Err(Report::new(ClassificationError::Incomplete) + .attach("maintained-source candidates require review")); + } + if tracked.max_text_bytes == 0 || tracked.max_text_bytes > MAXIMUM_CONFIGURED_TEXT_BYTES { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "max_text_bytes must be between 1 and {MAXIMUM_CONFIGURED_TEXT_BYTES}" + )), + ); + } + Ok(()) +} + +fn unique_files( + records: &[TrackedFile], +) -> Result, Report> { + let mut result = BTreeMap::new(); + for record in records { + validate_manifest_path(&record.path)?; + if result.insert(record.path.clone(), record.kind).is_some() { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "duplicate tracked-file classification: {}", + record.path + )), + ); + } + } + Ok(result) +} + +fn unique_sources( + records: &[SourceRecord], +) -> Result, Report> { + let mut result = BTreeMap::new(); + for record in records { + validate_manifest_path(&record.path)?; + validate_source_shape(record)?; + if result.insert(record.path.clone(), record.clone()).is_some() { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "duplicate maintained-source record: {}", + record.path + )), + ); + } + } + Ok(result) +} + +fn validate_source_shape(record: &SourceRecord) -> Result<(), Report> { + if github_operational_path(&record.path) { + let expected = operational_comment_grammar(&record.path).ok_or_else(|| { + Report::new(ClassificationError::InvalidManifest).attach(format!( + "unsupported GitHub operational format requires review: {}", + record.path + )) + })?; + if record.mode != SourceMode::Comments || record.grammar.as_deref() != Some(expected) { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "GitHub operational source requires comment grammar {expected}: {}", + record.path + )), + ); + } + } + match record.mode { + SourceMode::Whole if record.grammar.is_some() => Err(Report::new( + ClassificationError::InvalidManifest, + ) + .attach(format!( + "whole-file source cannot declare a grammar: {}", + record.path + ))), + SourceMode::Whole => validate_disposition( + record.disposition, + record.exclude_kind, + &format!("whole-file source: {}", record.path), + ), + SourceMode::Comments if record.disposition.is_some() || record.exclude_kind.is_some() => { + Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "comment source dispositions belong to extracted spans: {}", + record.path + )), + ) + } + SourceMode::Comments if record.grammar.is_none() => { + Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("comment source has no grammar: {}", record.path))) + } + SourceMode::Comments => Ok(()), + } +} + +fn validate_disposition( + disposition: Option, + exclude_kind: Option, + context: &str, +) -> Result<(), Report> { + match (disposition, exclude_kind) { + (Some(Disposition::Include), None) => Ok(()), + (Some(Disposition::Exclude), Some(_kind)) => Ok(()), + (Some(Disposition::ReviewRequired), _) => Err(Report::new(ClassificationError::Incomplete) + .attach(format!("review-required disposition: {context}"))), + _ => Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("invalid disposition shape: {context}"))), + } +} + +fn validate_source( + path: &str, + text: &str, + source: &SourceRecord, + comment_records: &[CommentRecord], +) -> Result<(), Report> { + if source.mode == SourceMode::Whole { + if comment_records.iter().any(|comment| comment.path == path) { + return Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("whole-file source has comment selectors: {path}"))); + } + return Ok(()); + } + + let grammar = source + .grammar + .as_deref() + .expect("comment source shape should require a grammar"); + let spans = extract_comments(text, grammar)?; + let mut records = BTreeMap::new(); + for record in comment_records.iter().filter(|record| record.path == path) { + validate_manifest_path(&record.path)?; + let selector = parse_selector(&record.selector)?; + validate_fingerprint(&record.fingerprint)?; + validate_disposition( + Some(record.disposition), + record.exclude_kind, + &format!("comment span: {path}:{}", record.selector), + )?; + if records.insert(selector, record).is_some() { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "duplicate comment selector: {path}:{}", + record.selector + )), + ); + } + } + for span in spans { + let selector = (span.start, span.end); + let Some(record) = records.remove(&selector) else { + return Err(Report::new(ClassificationError::Incomplete).attach(format!( + "unclassified comment span: {path}:{}", + span.selector() + ))); + }; + if record.fingerprint != fingerprint(span.contents.as_bytes()) { + return Err(Report::new(ClassificationError::Incomplete).attach(format!( + "comment fingerprint mismatch: {path}:{}", + span.selector() + ))); + } + } + if let Some((selector, _record)) = records.first_key_value() { + return Err( + Report::new(ClassificationError::InvalidManifest).attach(format!( + "comment selector has no extracted span: {path}:bytes:{}-{}", + selector.0, selector.1 + )), + ); + } + Ok(()) +} + +fn extract_comments( + text: &str, + grammar: &str, +) -> Result, Report> { + match grammar { + "shell" => scan_hash_comments(text, true, true), + "python" | "dockerfile" => scan_hash_comments(text, false, false), + "toml" => scan_toml_comments(text), + "yaml" => scan_yaml_comments(text), + "rust" => scan_rust_comments(text), + "javascript" => scan_javascript_comments(text), + "protobuf" => scan_c_style_comments(text), + "markdown" => scan_markdown_comments(text), + _ => Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("unsupported comment grammar: {grammar}"))), + } +} + +fn scan_hash_comments( + text: &str, + preserve_quotes_across_lines: bool, + require_comment_boundary: bool, +) -> Result, Report> { + let bytes = text.as_bytes(); + let mut spans = Vec::new(); + let mut quote = None; + let mut escaped = false; + let mut index = 0; + while index < bytes.len() { + let byte = bytes[index]; + if byte == b'\n' { + if quote.is_some() && !preserve_quotes_across_lines { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated hash-comment grammar quote")); + } + escaped = false; + index += 1; + continue; + } + if escaped { + escaped = false; + index += 1; + continue; + } + if byte == b'\\' && (quote == Some(b'"') || quote.is_none()) { + escaped = true; + index += 1; + continue; + } + if byte == b'\'' || byte == b'"' { + if quote == Some(byte) { + quote = None; + } else if quote.is_none() { + quote = Some(byte); + } + index += 1; + continue; + } + if byte == b'#' + && quote.is_none() + && (!require_comment_boundary || index == 0 || bytes[index - 1].is_ascii_whitespace()) + { + let end = bytes[index..] + .iter() + .position(|b| *b == b'\n') + .map_or(bytes.len(), |n| index + n); + spans.push(CommentSpan { + start: index, + end, + contents: text[index..end].to_owned(), + }); + index = end; + continue; + } + index += 1; + } + if quote.is_some() || escaped { + Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated hash-comment grammar lexical state")) + } else { + Ok(spans) + } +} + +fn scan_toml_comments(text: &str) -> Result, Report> { + let bytes = text.as_bytes(); + let mut spans = Vec::new(); + let mut i = 0; + let mut quote: Option<(u8, bool)> = None; + let mut escaped = false; + while i < bytes.len() { + if let Some((delimiter, multiline)) = quote { + if escaped { + escaped = false; + i += 1; + continue; + } + if delimiter == b'"' && bytes[i] == b'\\' { + escaped = true; + i += 1; + continue; + } + if !multiline && bytes[i] == b'\n' { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated single-line TOML string")); + } + let quote_run = bytes[i..] + .iter() + .take_while(|byte| **byte == delimiter) + .count(); + if multiline && quote_run >= 3 { + quote = None; + i += quote_run.min(5); + } else if !multiline && bytes[i] == delimiter { + quote = None; + i += 1; + } else { + i += 1; + } + continue; + } + if matches!(bytes[i], b'"' | b'\'') { + let multiline = i + 2 < bytes.len() && bytes[i..i + 3] == [bytes[i]; 3]; + quote = Some((bytes[i], multiline)); + i += if multiline { 3 } else { 1 }; + continue; + } + if bytes[i] == b'#' { + let end = bytes[i..] + .iter() + .position(|b| *b == b'\n') + .map_or(bytes.len(), |n| i + n); + spans.push(CommentSpan { + start: i, + end, + contents: text[i..end].to_owned(), + }); + i = end; + continue; + } + i += 1; + } + if quote.is_some() || escaped { + Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated TOML string lexical state")) + } else { + Ok(spans) + } +} + +fn scan_yaml_comments(text: &str) -> Result, Report> { + let mut spans = Vec::new(); + let mut offset = 0; + let mut block_indent = None; + let mut quote = None; + let mut escaped = false; + for line in text.split_inclusive('\n') { + let body = line.strip_suffix('\n').unwrap_or(line); + let indent = body.len() - body.trim_start().len(); + if block_indent.is_some_and(|required| body.trim().is_empty() || indent >= required) { + offset += line.len(); + continue; + } + block_indent = None; + let bytes = body.as_bytes(); + let mut i = 0; + let mut comment_start = None; + while i < bytes.len() { + if escaped { + escaped = false; + i += 1; + continue; + } + if quote == Some(b'"') && bytes[i] == b'\\' { + escaped = true; + i += 1; + continue; + } + if matches!(bytes[i], b'"' | b'\'') { + if quote == Some(bytes[i]) { + quote = None + } else if quote.is_none() { + quote = Some(bytes[i]) + }; + i += 1; + continue; + } + if bytes[i] == b'#' && quote.is_none() && (i == 0 || bytes[i - 1].is_ascii_whitespace()) + { + comment_start = Some(i); + break; + } + i += 1 + } + if let Some(start) = comment_start { + spans.push(CommentSpan { + start: offset + start, + end: offset + body.len(), + contents: body[start..].to_owned(), + }); + } + let plain = comment_start + .map_or(body, |start| &body[..start]) + .trim_end(); + if matches!( + plain.split_whitespace().last(), + Some("|" | ">" | "|-" | "|+" | ">-" | ">+") + ) { + block_indent = Some(indent + 1); + } + offset += line.len(); + } + if quote.is_some() { + Err(Report::new(ClassificationError::Incomplete).attach("unterminated YAML quoted scalar")) + } else { + Ok(spans) + } +} + +fn scan_c_style_comments(text: &str) -> Result, Report> { + let bytes = text.as_bytes(); + let mut spans = Vec::new(); + let mut i = 0; + let mut quote = None; + let mut escaped = false; + while i < bytes.len() { + let b = bytes[i]; + if escaped { + escaped = false; + i += 1; + continue; + } + if quote.is_some() && b == b'\\' { + escaped = true; + i += 1; + continue; + } + if quote.is_some() && b == b'\n' { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated C-style quoted string")); + } + if matches!(b, b'\'' | b'"') { + if quote == Some(b) { + quote = None; + } else if quote.is_none() { + quote = Some(b) + }; + i += 1; + continue; + } + if quote.is_none() && i + 1 < bytes.len() && &bytes[i..i + 2] == b"//" { + let end = bytes[i..] + .iter() + .position(|b| *b == b'\n') + .map_or(bytes.len(), |n| i + n); + spans.push(CommentSpan { + start: i, + end, + contents: text[i..end].to_owned(), + }); + i = end; + continue; + } + if quote.is_none() && i + 1 < bytes.len() && &bytes[i..i + 2] == b"/*" { + let Some(length) = text[i + 2..].find("*/") else { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated C-style block comment")); + }; + let end = i + 2 + length + 2; + spans.push(CommentSpan { + start: i, + end, + contents: text[i..end].to_owned(), + }); + i = end; + continue; + } + i += 1; + } + if quote.is_some() || escaped { + Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated C-style lexical state")) + } else { + Ok(spans) + } +} + +fn scan_rust_comments(text: &str) -> Result, Report> { + let bytes = text.as_bytes(); + let mut spans = Vec::new(); + let mut index = 0; + while index < bytes.len() { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"//" { + let end = bytes[index..] + .iter() + .position(|byte| *byte == b'\n') + .map_or(bytes.len(), |length| index + length); + spans.push(CommentSpan { + start: index, + end, + contents: text[index..end].to_owned(), + }); + index = end; + continue; + } + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"/*" { + let start = index; + let mut depth = 1usize; + index += 2; + while index < bytes.len() && depth > 0 { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"/*" { + depth += 1; + index += 2; + } else if index + 1 < bytes.len() && &bytes[index..index + 2] == b"*/" { + depth -= 1; + index += 2; + } else { + index += 1; + } + } + if depth > 0 { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated Rust block comment")); + } + spans.push(CommentSpan { + start, + end: index, + contents: text[start..index].to_owned(), + }); + continue; + } + if let Some((content_start, hashes)) = rust_raw_string_start(bytes, index) { + let terminator = format!("\"{}", "#".repeat(hashes)); + let Some(length) = text[content_start..].find(&terminator) else { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated Rust raw string")); + }; + index = content_start + length + terminator.len(); + continue; + } + if bytes[index] == b'"' { + index = quoted_code_end(bytes, index, b'"', true).ok_or_else(|| { + Report::new(ClassificationError::Incomplete).attach("unterminated Rust string") + })?; + continue; + } + if bytes[index] == b'\'' + && let Some(end) = quoted_code_end(bytes, index, b'\'', false) + { + index = end; + continue; + } + index += 1; + } + Ok(spans) +} + +fn rust_raw_string_start(bytes: &[u8], start: usize) -> Option<(usize, usize)> { + let mut index = start; + if bytes.get(index) == Some(&b'b') { + index += 1; + } + if bytes.get(index) != Some(&b'r') { + return None; + } + index += 1; + let hash_start = index; + while bytes.get(index) == Some(&b'#') { + index += 1; + } + (bytes.get(index) == Some(&b'"')).then_some((index + 1, index - hash_start)) +} + +fn quoted_code_end(bytes: &[u8], start: usize, delimiter: u8, multiline: bool) -> Option { + let mut index = start + 1; + let mut escaped = false; + while index < bytes.len() { + if escaped { + escaped = false; + } else if bytes[index] == b'\\' { + escaped = true; + } else if bytes[index] == delimiter { + return Some(index + 1); + } else if bytes[index] == b'\n' && !multiline { + return None; + } + index += 1; + } + None +} + +#[derive(Clone, Copy, Eq, PartialEq)] +enum JavascriptCommentMode { + Code, + SingleQuoted, + DoubleQuoted, + Template, + LineComment, + BlockComment, + RegularExpression, +} + +fn scan_javascript_comments(text: &str) -> Result, Report> { + let bytes = text.as_bytes(); + let mut spans = Vec::new(); + let mut mode = JavascriptCommentMode::Code; + let mut comment_start = 0; + let mut escaped = false; + let mut regex_character_class = false; + let mut interpolation_depths = Vec::new(); + let mut previous_code_byte = None; + let mut index = 0; + while index < bytes.len() { + let byte = bytes[index]; + match mode { + JavascriptCommentMode::Code => { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"//" { + comment_start = index; + mode = JavascriptCommentMode::LineComment; + index += 2; + } else if index + 1 < bytes.len() && &bytes[index..index + 2] == b"/*" { + comment_start = index; + mode = JavascriptCommentMode::BlockComment; + index += 2; + } else if matches!(byte, b'\'' | b'"') { + mode = if byte == b'\'' { + JavascriptCommentMode::SingleQuoted + } else { + JavascriptCommentMode::DoubleQuoted + }; + index += 1; + } else if byte == b'`' { + mode = JavascriptCommentMode::Template; + index += 1; + } else if byte == b'/' + && javascript_regex_can_start(text, index, previous_code_byte) + { + mode = JavascriptCommentMode::RegularExpression; + regex_character_class = false; + index += 1; + } else { + if let Some(depth) = interpolation_depths.last_mut() { + if byte == b'{' { + *depth += 1; + } else if byte == b'}' { + *depth -= 1; + if *depth == 0 { + interpolation_depths.pop(); + mode = JavascriptCommentMode::Template; + index += 1; + continue; + } + } + } + if !byte.is_ascii_whitespace() { + previous_code_byte = Some(byte); + } + index += 1; + } + } + JavascriptCommentMode::SingleQuoted | JavascriptCommentMode::DoubleQuoted => { + if escaped { + escaped = false; + } else if byte == b'\\' { + escaped = true; + } else if (mode == JavascriptCommentMode::SingleQuoted && byte == b'\'') + || (mode == JavascriptCommentMode::DoubleQuoted && byte == b'"') + { + mode = JavascriptCommentMode::Code; + } else if byte == b'\n' { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated JavaScript quoted string")); + } + index += 1; + } + JavascriptCommentMode::Template => { + if escaped { + escaped = false; + index += 1; + } else if byte == b'\\' { + escaped = true; + index += 1; + } else if index + 1 < bytes.len() && &bytes[index..index + 2] == b"${" { + interpolation_depths.push(1); + previous_code_byte = Some(b'{'); + mode = JavascriptCommentMode::Code; + index += 2; + } else if byte == b'`' { + mode = JavascriptCommentMode::Code; + previous_code_byte = Some(b'`'); + index += 1; + } else { + index += 1; + } + } + JavascriptCommentMode::LineComment => { + if byte == b'\n' { + spans.push(CommentSpan { + start: comment_start, + end: index, + contents: text[comment_start..index].to_owned(), + }); + mode = JavascriptCommentMode::Code; + } + index += 1; + } + JavascriptCommentMode::BlockComment => { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"*/" { + let end = index + 2; + spans.push(CommentSpan { + start: comment_start, + end, + contents: text[comment_start..end].to_owned(), + }); + mode = JavascriptCommentMode::Code; + index = end; + } else { + index += 1; + } + } + JavascriptCommentMode::RegularExpression => { + if escaped { + escaped = false; + } else if byte == b'\\' { + escaped = true; + } else if byte == b'[' { + regex_character_class = true; + } else if byte == b']' { + regex_character_class = false; + } else if byte == b'/' && !regex_character_class { + mode = JavascriptCommentMode::Code; + previous_code_byte = Some(b'/'); + } else if byte == b'\n' { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated JavaScript regular expression")); + } + index += 1; + } + } + } + if mode == JavascriptCommentMode::LineComment { + spans.push(CommentSpan { + start: comment_start, + end: bytes.len(), + contents: text[comment_start..].to_owned(), + }); + mode = JavascriptCommentMode::Code; + } + if mode != JavascriptCommentMode::Code || !interpolation_depths.is_empty() || escaped { + Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated JavaScript lexical state")) + } else { + Ok(spans) + } +} + +fn javascript_regex_can_start(text: &str, slash: usize, previous: Option) -> bool { + previous.is_none_or(|byte| b"=(:,![{;?+-*%&|^~<>".contains(&byte)) + || javascript_preceding_keyword(text, slash).is_some_and(|keyword| { + matches!( + keyword, + "return" + | "throw" + | "case" + | "delete" + | "void" + | "typeof" + | "yield" + | "await" + | "new" + | "in" + | "of" + | "instanceof" + ) + }) +} + +fn javascript_preceding_keyword(text: &str, offset: usize) -> Option<&str> { + let prefix = text.get(..offset)?.trim_end(); + let start = prefix + .rfind(|character: char| !(character.is_ascii_alphanumeric() || character == '_')) + .map_or(0, |index| index + 1); + prefix.get(start..) +} + +fn scan_markdown_comments(text: &str) -> Result, Report> { + let mut spans = Vec::new(); + let mut remaining = text; + let mut consumed = 0; + while let Some(start) = remaining.find("") else { + return Err(Report::new(ClassificationError::Incomplete) + .attach("unterminated Markdown comment")); + }; + let contents = &after_start[..end + 3]; + spans.push(CommentSpan { + start: absolute_start, + end: absolute_start + contents.len(), + contents: contents.to_owned(), + }); + consumed = absolute_start + contents.len(); + remaining = &after_start[end + 3..]; + } + Ok(spans) +} + +fn operational_comment_grammar(path: &str) -> Option<&'static str> { + let file_name = Path::new(path).file_name()?.to_str()?; + if github_operational_path(path) { + return match Path::new(path).extension().and_then(|value| value.to_str()) { + Some("yml" | "yaml") => Some("yaml"), + Some("sh") => Some("shell"), + Some("toml") => Some("toml"), + Some("js" | "mjs") => Some("javascript"), + Some("proto") => Some("protobuf"), + _ if file_name == "Dockerfile" => Some("dockerfile"), + _ => None, + }; + } + if path == ".cargo/config.toml" + || path.ends_with(".sh") + || matches!( + file_name, + "fastly.toml" + | "wrangler.toml" + | "wrangler.ci.toml" + | "spin.toml" + | "axum.toml" + | "cloudflare.toml" + | "Dockerfile" + ) + { + return Some(if file_name == "Dockerfile" { + "dockerfile" + } else if path.ends_with(".toml") { + "toml" + } else if path.ends_with(".yml") || path.ends_with(".yaml") { + "yaml" + } else { + "shell" + }); + } + if path.ends_with(".mjs") { + return Some("javascript"); + } + if path.ends_with(".proto") { + return Some("protobuf"); + } + None +} + +fn github_operational_path(path: &str) -> bool { + path.starts_with(".github/workflows/") + || path.starts_with(".github/actions/") + || path.starts_with(".github/ISSUE_TEMPLATE/") +} + +fn whole_file_disposition(path: &str) -> (Disposition, Option) { + if path.starts_with("docs/superpowers/") { + return (Disposition::Exclude, Some(ExcludeKind::Historical)); + } + if path.contains("/fixtures/") { + return (Disposition::Exclude, Some(ExcludeKind::TestFixture)); + } + if path.ends_with("Cargo.lock") || path.ends_with("package-lock.json") { + return (Disposition::Exclude, Some(ExcludeKind::MachineData)); + } + if maintained_document(path) { + return (Disposition::Include, None); + } + if path.contains("/dist/") || path.contains("/generated/") { + return (Disposition::Exclude, Some(ExcludeKind::Generated)); + } + if source_code(path) { + return (Disposition::Exclude, Some(ExcludeKind::SourceCode)); + } + if path.contains("/vendor/") || path.contains("/vendored/") { + return (Disposition::Exclude, Some(ExcludeKind::Vendored)); + } + (Disposition::Exclude, Some(ExcludeKind::NonDocumentation)) +} + +fn maintained_document(path: &str) -> bool { + let file_name = Path::new(path) + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or_default(); + let root_markdown = !path.contains('/') && path.ends_with(".md"); + let docs_markdown = path.starts_with("docs/") && path.ends_with(".md"); + let maintained_markdown = file_name.eq_ignore_ascii_case("README.md") + || path.starts_with(".claude/commands/") + || path.starts_with(".claude/agents/") + || path.starts_with(".claude/skills/") + || path == ".github/pull_request_template.md"; + root_markdown + || docs_markdown + || maintained_markdown + || matches!( + path, + ".env.example" | ".env.dev" | "edgezero.toml" | "trusted-server.example.toml" + ) +} + +fn source_code(path: &str) -> bool { + matches!( + Path::new(path) + .extension() + .and_then(|extension| extension.to_str()), + Some( + "c" | "css" + | "html" + | "js" + | "json" + | "jsx" + | "mts" + | "py" + | "rs" + | "scss" + | "ts" + | "tsx" + | "vcl" + | "vue" + | "wasm" + ) + ) +} + +fn parse_selector(selector: &str) -> Result<(usize, usize), Report> { + selector + .strip_prefix("bytes:") + .and_then(|value| value.split_once('-')) + .and_then(|(start, end)| Some((start.parse().ok()?, end.parse().ok()?))) + .filter(|(start, end)| start < end) + .ok_or_else(|| { + Report::new(ClassificationError::InvalidManifest) + .attach(format!("invalid comment selector: {selector}")) + }) +} + +fn selector_line(selector: &str) -> usize { + parse_selector(selector).map_or(usize::MAX, |value| value.0) +} + +fn validate_manifest_path(path: &str) -> Result<(), Report> { + NormalizedRelativePath::new(Path::new(path)) + .change_context(ClassificationError::InvalidManifest)?; + Ok(()) +} + +fn validate_fingerprint(value: &str) -> Result<(), Report> { + let valid = value.len() == 71 + && value.starts_with("sha256:") + && value[7..].bytes().all(|byte| byte.is_ascii_hexdigit()); + if valid { + Ok(()) + } else { + Err(Report::new(ClassificationError::InvalidManifest) + .attach(format!("invalid SHA-256 fingerprint: {value}"))) + } +} + +fn fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +fn read_manifest(repository: &Repository, path: &str) -> Result> +where + T: for<'de> Deserialize<'de>, +{ + read_manifest_optional(repository, path)?.ok_or_else(|| { + Report::new(ClassificationError::ReadManifest).attach(format!("missing manifest: {path}")) + }) +} + +fn read_manifest_optional( + repository: &Repository, + path: &str, +) -> Result, Report> +where + T: for<'de> Deserialize<'de>, +{ + let path = NormalizedRelativePath::new(Path::new(path)) + .change_context(ClassificationError::ReadManifest)?; + let Some(contents) = repository + .read_optional(&path) + .change_context(ClassificationError::ReadManifest)? + else { + return Ok(None); + }; + let text = core::str::from_utf8(&contents).change_context(ClassificationError::ReadManifest)?; + toml::from_str(text) + .map(Some) + .change_context(ClassificationError::InvalidManifest) +} + +fn write_manifest( + repository: &Repository, + path: &str, + manifest: &T, +) -> Result<(), Report> +where + T: Serialize, +{ + let mut contents = toml::to_string_pretty(manifest) + .change_context(ClassificationError::Update)? + .into_bytes(); + if !contents.ends_with(b"\n") { + contents.push(b'\n'); + } + let path = + NormalizedRelativePath::new(Path::new(path)).change_context(ClassificationError::Update)?; + let original = repository + .read_optional(&path) + .change_context(ClassificationError::Update)?; + repository + .replace_atomically_after_precommit_validation(&path, original.as_deref(), &contents) + .change_context(ClassificationError::Update) +} + +fn previous_tracked_maximum(repository: &Repository) -> Result> { + Ok( + read_manifest_optional::(repository, TRACKED_MANIFEST)? + .map_or(DEFAULT_MAXIMUM_TEXT_BYTES, |manifest| { + manifest.max_text_bytes + }), + ) +} diff --git a/tools/docs-parity/src/integrations.rs b/tools/docs-parity/src/integrations.rs new file mode 100644 index 000000000..a2696da15 --- /dev/null +++ b/tools/docs-parity/src/integrations.rs @@ -0,0 +1,2704 @@ +//! Closed integration inventory records and exact parity comparison. + +use std::collections::{BTreeMap, BTreeSet}; + +use error_stack::Report; +use serde::Deserialize; +use serde::de::Error as _; +use syn::parse::Parser as _; +use syn::punctuated::Punctuated; +use syn::visit::{self, Visit as _}; +use syn::{Attribute, Expr, ExprCall, ExprLit, ImplItem, Item, Lit, Member, Token, Type}; + +use crate::repository::{NormalizedRelativePath, Repository}; + +const MAX_INVENTORY_INPUT_BYTES: usize = 4 * 1024 * 1024; +const MAX_INVENTORY_ENTRIES: usize = 4096; +const MAX_INVENTORY_STRING_BYTES: usize = 16 * 1024; + +/// Integration inventory validation failure. +#[derive(Debug, derive_more::Display)] +pub enum IntegrationError { + /// The checked manifest cannot be parsed or violates its closed schema. + #[display("invalid integration manifest: {detail}")] + InvalidManifest { + /// Stable diagnostic detail. + detail: String, + }, + /// One observed source or behavior set differs from the reviewed record. + #[display("integration {axis} inventory differs")] + InventoryDrift { + /// Name of the mismatched inventory axis. + axis: &'static str, + }, +} + +impl core::error::Error for IntegrationError {} + +/// Browser loading behavior for one integration module. +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(rename_all = "snake_case")] +pub enum LoadingMode { + /// Included in the synchronous aggregate bundle. + Bundled, + /// Served as an independent deferred script. + Deferred, + /// Served by a dedicated standalone-tag decision path. + Standalone, +} + +/// One exact integration behavior observation under a named predicate. +#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(deny_unknown_fields)] +pub struct CapabilityRecord { + /// Stable integration identifier. + pub id: String, + /// Exact configuration predicate for this observation. + pub predicate: String, + /// Observed method-and-route entries. + #[serde(default, deserialize_with = "deserialize_unique_proxy_routes")] + pub proxy_routes: BTreeSet, + /// Observed attribute rewriter identities. + #[serde(default, deserialize_with = "deserialize_unique_attribute_rewriters")] + pub attribute_rewriters: BTreeSet, + /// Observed script rewriter selectors. + #[serde(default, deserialize_with = "deserialize_unique_script_rewriters")] + pub script_rewriters: BTreeSet, + /// Observed head injector identities. + #[serde(default, deserialize_with = "deserialize_unique_head_injectors")] + pub head_injectors: BTreeSet, + /// Observed HTML post-processor identities. + #[serde(default, deserialize_with = "deserialize_unique_post_processors")] + pub post_processors: BTreeSet, + /// Observed request filter identities. + #[serde(default, deserialize_with = "deserialize_unique_request_filters")] + pub request_filters: BTreeSet, + /// Observed auction-provider identities for mediator-only integrations. + #[serde(default, deserialize_with = "deserialize_unique_providers")] + pub providers: BTreeSet, + /// Exact JS loading disposition. + pub js_mode: String, +} + +impl CapabilityRecord { + /// Construct a capability record from exact iterable observations. + #[allow(clippy::too_many_arguments)] + #[must_use] + pub fn new( + id: &str, + predicate: &str, + proxy_routes: P, + attribute_rewriters: A, + script_rewriters: S, + head_injectors: H, + post_processors: O, + request_filters: F, + providers: V, + js_mode: &str, + ) -> Self + where + P: IntoIterator, + P::Item: AsRef, + A: IntoIterator, + A::Item: AsRef, + S: IntoIterator, + S::Item: AsRef, + H: IntoIterator, + H::Item: AsRef, + O: IntoIterator, + O::Item: AsRef, + F: IntoIterator, + F::Item: AsRef, + V: IntoIterator, + V::Item: AsRef, + { + Self { + id: id.to_owned(), + predicate: predicate.to_owned(), + proxy_routes: strings(proxy_routes), + attribute_rewriters: strings(attribute_rewriters), + script_rewriters: strings(script_rewriters), + head_injectors: strings(head_injectors), + post_processors: strings(post_processors), + request_filters: strings(request_filters), + providers: strings(providers), + js_mode: js_mode.to_owned(), + } + } +} + +/// Complete checked integration inventory. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct IntegrationInventory { + /// IDs accepted by deploy validation. + pub deploy_ids: BTreeSet, + /// IDs registered through settings-only builders. + pub builder_ids: BTreeSet, + /// IDs registered from a compiled auction plan. + pub plan_registration_ids: BTreeSet, + /// Compile-time provider profile IDs. + pub profile_ids: BTreeSet, + /// Integration-like mediator IDs outside the integration registry. + pub mediator_ids: BTreeSet, + /// Browser integration source module IDs. + pub js_source_module_ids: BTreeSet, + /// Emitted JS bundle IDs, including core. + pub js_bundle_ids: BTreeSet, + /// Loading disposition for each browser-served integration. + pub loading_modes: BTreeMap, + /// Exact behavior observations across the predicate matrix. + pub capabilities: BTreeSet, + /// Manually owned integration release/operational status records. + pub operational: BTreeSet, +} + +/// One manually reviewed integration release/operational status. +#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(deny_unknown_fields)] +pub struct OperationalRecord { + /// Stable integration identifier. + pub id: String, + /// Manual maturity label; never inferred from source registration. + pub status: String, + /// Responsible reviewer. + pub owner: String, + /// Review date in `YYYY-MM-DD` form. + pub reviewed_at: String, +} + +/// Production source documents that define the static integration inventory. +pub struct InventorySources<'a> { + /// Configuration entrypoints that invoke deploy and runtime validation. + pub validation_entrypoints: &'a str, + /// Deploy validation function source. + pub deploy_validation: &'a str, + /// Settings-only integration builder registry source. + pub builders: &'a str, + /// Plan-backed integration registry source. + pub plan_registrations: &'a str, + /// Provider profile registry source. + pub profiles: &'a str, + /// Auction mediator registration source. + pub mediator: &'a str, + /// Complete tracked repository path list. + pub tracked_paths: &'a [&'a str], +} + +/// Static inventory extracted from its authoritative production sources. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct SourceInventory { + /// IDs exercised by deploy validation. + pub deploy_ids: BTreeSet, + /// IDs in the settings-only builder table. + pub builder_ids: BTreeSet, + /// IDs registered from an auction plan. + pub plan_registration_ids: BTreeSet, + /// IDs in the provider profile registry. + pub profile_ids: BTreeSet, + /// IDs registered as auction mediators outside the integration registry. + pub mediator_ids: BTreeSet, + /// IDs with an integration `index.ts` source module. + pub js_source_module_ids: BTreeSet, + /// IDs emitted by the JS bundle build, including core. + pub js_bundle_ids: BTreeSet, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Manifest { + version: u32, + reviewed: bool, + deploy_ids: Vec, + builder_ids: Vec, + plan_registration_ids: Vec, + profile_ids: Vec, + mediator_ids: Vec, + js_source_module_ids: Vec, + js_bundle_ids: Vec, + #[serde(default)] + loading_modes: Vec, + #[serde(default)] + capabilities: Vec, + #[serde(default)] + operational: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct LoadingRecord { + id: String, + mode: LoadingMode, +} + +macro_rules! unique_set_deserializer { + ($function:ident, $axis:literal) => { + fn $function<'de, D>(deserializer: D) -> Result, D::Error> + where + D: serde::Deserializer<'de>, + { + let values = Vec::::deserialize(deserializer)?; + if values.len() > MAX_INVENTORY_ENTRIES { + return Err(D::Error::custom(concat!( + "capability ", + $axis, + " exceeds cardinality limit" + ))); + } + if values + .iter() + .any(|value| value.len() > MAX_INVENTORY_STRING_BYTES) + { + return Err(D::Error::custom(concat!( + "capability ", + $axis, + " contains an oversized string" + ))); + } + let count = values.len(); + let unique = values.into_iter().collect::>(); + if unique.len() != count { + return Err(D::Error::custom(concat!("duplicate capability ", $axis))); + } + Ok(unique) + } + }; +} + +unique_set_deserializer!(deserialize_unique_proxy_routes, "proxy_routes"); +unique_set_deserializer!( + deserialize_unique_attribute_rewriters, + "attribute_rewriters" +); +unique_set_deserializer!(deserialize_unique_script_rewriters, "script_rewriters"); +unique_set_deserializer!(deserialize_unique_head_injectors, "head_injectors"); +unique_set_deserializer!(deserialize_unique_post_processors, "post_processors"); +unique_set_deserializer!(deserialize_unique_request_filters, "request_filters"); +unique_set_deserializer!(deserialize_unique_providers, "providers"); + +impl IntegrationInventory { + /// Parse a reviewed closed-schema inventory. + /// + /// # Errors + /// + /// Returns an error for malformed TOML, unknown fields, an unsupported + /// version, missing review attestation, or duplicate keyed rows. + pub fn parse(source: &str) -> Result> { + ensure_input_bound("integration manifest", source)?; + let manifest = toml::from_str::(source).map_err(|error| { + invalid_manifest(format!("malformed TOML or unknown field: {error}")) + })?; + if manifest.version != 1 { + return Err(invalid_manifest("version must equal 1")); + } + if !manifest.reviewed { + return Err(invalid_manifest("reviewed must be true")); + } + if manifest.loading_modes.len() > MAX_INVENTORY_ENTRIES + || manifest.capabilities.len() > MAX_INVENTORY_ENTRIES + || manifest.operational.len() > MAX_INVENTORY_ENTRIES + { + return Err(invalid_manifest("manifest row cardinality limit exceeded")); + } + let deploy_ids = unique_values(manifest.deploy_ids, "deploy_ids")?; + let builder_ids = unique_values(manifest.builder_ids, "builder_ids")?; + let plan_registration_ids = + unique_values(manifest.plan_registration_ids, "plan_registration_ids")?; + let profile_ids = unique_values(manifest.profile_ids, "profile_ids")?; + let mediator_ids = unique_values(manifest.mediator_ids, "mediator_ids")?; + let js_source_module_ids = + unique_values(manifest.js_source_module_ids, "js_source_module_ids")?; + let js_bundle_ids = unique_values(manifest.js_bundle_ids, "js_bundle_ids")?; + let mut loading_modes = BTreeMap::new(); + for record in manifest.loading_modes { + ensure_manifest_strings("loading mode", [&record.id])?; + if loading_modes + .insert(record.id.clone(), record.mode) + .is_some() + { + return Err(invalid_manifest(format!( + "duplicate loading mode row: {}", + record.id + ))); + } + } + let mut capability_keys = BTreeSet::new(); + let mut capabilities = BTreeSet::new(); + for record in manifest.capabilities { + ensure_manifest_strings( + "capability", + [&record.id, &record.predicate, &record.js_mode], + )?; + if !capability_keys.insert((record.id.clone(), record.predicate.clone())) { + return Err(invalid_manifest(format!( + "duplicate capability key: {}/{}", + record.id, record.predicate + ))); + } + if !capabilities.insert(record) { + return Err(invalid_manifest("duplicate capability row")); + } + } + let operational_count = manifest.operational.len(); + let operational = manifest.operational.into_iter().collect::>(); + if operational.len() != operational_count { + return Err(invalid_manifest("duplicate operational row")); + } + let mut operational_ids = BTreeSet::new(); + for record in &operational { + ensure_manifest_strings( + "operational", + [ + &record.id, + &record.status, + &record.owner, + &record.reviewed_at, + ], + )?; + if !operational_ids.insert(&record.id) { + return Err(invalid_manifest(format!( + "duplicate operational integration ID: {}", + record.id + ))); + } + if !matches!(record.status.as_str(), "production" | "development") + || record.owner.trim().is_empty() + || !is_review_date(&record.reviewed_at) + { + return Err(invalid_manifest(format!( + "invalid manual operational record: {}", + record.id + ))); + } + } + Ok(Self { + deploy_ids, + builder_ids, + plan_registration_ids, + profile_ids, + mediator_ids, + js_source_module_ids, + js_bundle_ids, + loading_modes, + capabilities, + operational, + }) + } +} + +/// Extract the static integration inventory from closed production-source shapes. +/// +/// # Errors +/// +/// Returns an error when Rust syntax is invalid, an authoritative symbol is +/// missing, or a registry contains an unsupported expression shape. +pub fn extract_source_inventory( + sources: &InventorySources<'_>, +) -> Result> { + let entrypoint_file = parse_source("validation entrypoints", sources.validation_entrypoints)?; + let deploy_file = parse_source("deploy validation", sources.deploy_validation)?; + let builders_file = parse_source("builder", sources.builders)?; + let plan_file = parse_source("plan registration", sources.plan_registrations)?; + let profiles_file = parse_source("profile", sources.profiles)?; + let mediator_file = parse_source("mediator", sources.mediator)?; + + validate_validation_entrypoints(&entrypoint_file.items)?; + + let deploy = exact_top_level_function( + &deploy_file.items, + "validate_enabled_integrations", + "deploy validation", + )?; + validate_closed_registration_grammar(deploy, "deploy", &[])?; + validate_deploy_helper_bodies(&deploy_file.items)?; + let mut deploy_visitor = DeployVisitor::default(); + deploy_visitor.visit_block(deploy); + if let Some(detail) = deploy_visitor.error { + return Err(invalid_manifest(detail)); + } + + let builder_ids = extract_builder_ids(&builders_file.items)?; + let plan = exact_impl_function( + &plan_file.items, + "IntegrationRegistry", + "with_plan", + "plan registration", + )?; + let mut plan_visitor = PlanRegistrationVisitor::default(); + plan_visitor.visit_block(plan); + if let Some(detail) = plan_visitor.error { + return Err(invalid_manifest(detail)); + } + validate_closed_registration_grammar( + plan, + "plan", + &["debug_assert_eq", "format", "log::warn", "log::debug"], + )?; + + let profile_ids = extract_profile_ids(&profiles_file.items)?; + let mediator = exact_top_level_function( + &mediator_file.items, + "build_orchestrator_with_plan", + "mediator registration", + )?; + let mut mediator_visitor = MediatorVisitor::default(); + mediator_visitor.visit_block(mediator); + if let Some(detail) = mediator_visitor.error { + return Err(invalid_manifest(detail)); + } + validate_closed_registration_grammar(mediator, "mediator", &["log::info", "format"])?; + + let mut js_source_module_ids = BTreeSet::new(); + for id in sources + .tracked_paths + .iter() + .filter_map(|path| js_module_id(path)) + { + if !js_source_module_ids.insert(id.clone()) { + return Err(invalid_manifest(format!( + "duplicate JavaScript source module ID: {id}" + ))); + } + } + let mut js_bundle_ids = js_source_module_ids.clone(); + if !js_bundle_ids.insert("core".to_owned()) { + return Err(invalid_manifest("duplicate JavaScript bundle ID: core")); + } + + Ok(SourceInventory { + deploy_ids: deploy_visitor.ids, + builder_ids, + plan_registration_ids: plan_visitor.ids, + profile_ids, + mediator_ids: mediator_visitor.ids, + js_source_module_ids, + js_bundle_ids, + }) +} + +fn validate_deploy_helper_bodies(items: &[Item]) -> Result<(), Report> { + let integration = items + .iter() + .filter_map(|item| match item { + Item::Fn(function) if function.sig.ident == "validate_integration" => Some(function), + _ => None, + }) + .collect::>(); + if !integration.is_empty() + && (!matches!(integration.as_slice(), [function] if exact_validate_integration_body(function))) + { + return Err(invalid_manifest( + "validate_integration helper differs from the authoritative body", + )); + } + + let prebid = items + .iter() + .filter_map(|item| match item { + Item::Fn(function) if function.sig.ident == "validate_prebid" => Some(function), + _ => None, + }) + .collect::>(); + if !prebid.is_empty() + && (!matches!(prebid.as_slice(), [function] if exact_validate_prebid_body(function))) + { + return Err(invalid_manifest( + "validate_prebid helper differs from the authoritative body", + )); + } + Ok(()) +} + +fn exact_validate_integration_body(function: &syn::ItemFn) -> bool { + let [syn::Stmt::Expr(Expr::MethodCall(map), None)] = function.block.stmts.as_slice() else { + return false; + }; + let Expr::MethodCall(config) = strip_expression_parens(&map.receiver) else { + return false; + }; + let exact_config = config.method == "integration_config" + && is_ident_path(&config.receiver, "settings") + && config.args.len() == 1 + && config + .args + .first() + .is_some_and(|argument| is_ident_path(argument, "integration_id")) + && config.turbofish.as_ref().is_some_and(|arguments| { + matches!(arguments.args.iter().collect::>().as_slice(), + [syn::GenericArgument::Type(Type::Path(value))] + if value.qself.is_none() && value.path.is_ident("T")) + }); + let exact_map = map.method == "map" + && map.args.len() == 1 + && matches!(map.args.first().map(strip_expression_parens), Some(Expr::Closure(closure)) + if matches!(closure.inputs.iter().collect::>().as_slice(), + [syn::Pat::Ident(binding)] if binding.ident == "config" && binding.subpat.is_none()) + && matches!(strip_expression_parens(&closure.body), Expr::MethodCall(is_some) + if is_some.method == "is_some" + && is_some.args.is_empty() + && is_ident_path(&is_some.receiver, "config"))); + exact_config && exact_map +} + +fn exact_validate_prebid_body(function: &syn::ItemFn) -> bool { + let [ + syn::Stmt::Local(config), + browser, + syn::Stmt::Expr(Expr::Call(ownership), None), + ] = function.block.stmts.as_slice() + else { + return false; + }; + let exact_pattern = matches!(&config.pat, syn::Pat::TupleStruct(pattern) + if pattern.path.is_ident("Some") + && matches!(pattern.elems.iter().collect::>().as_slice(), + [syn::Pat::Ident(binding)] if binding.ident == "config" && binding.subpat.is_none())); + let exact_initializer = config.init.as_ref().is_some_and(|init| { + let Expr::Try(attempt) = strip_expression_parens(&init.expr) else { + return false; + }; + let Expr::MethodCall(call) = strip_expression_parens(&attempt.expr) else { + return false; + }; + let exact_call = call.method == "integration_config" + && is_ident_path(&call.receiver, "settings") + && call.args.len() == 1 + && call.args.first().and_then(literal_string).as_deref() == Some("prebid") + && call.turbofish.as_ref().is_some_and(|arguments| { + matches!(arguments.args.iter().collect::>().as_slice(), + [syn::GenericArgument::Type(Type::Path(value))] + if value.qself.is_none() + && path_segments_equal(&value.path, &["prebid", "PrebidIntegrationConfig"])) + }); + let exact_diverge = init.diverge.as_ref().is_some_and(|(_, expression)| { + matches!(strip_expression_parens(expression), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [syn::Stmt::Expr(Expr::Return(value), _)] + if matches!(value.expr.as_deref().map(strip_expression_parens), Some(Expr::Call(ok)) + if matches!(ok.func.as_ref(), Expr::Path(path) if path.path.is_ident("Ok")) + && matches!(ok.args.iter().collect::>().as_slice(), + [Expr::Tuple(tuple)] if tuple.elems.is_empty())))) + }); + exact_call && exact_diverge + }); + let exact_browser = matches!(browser, syn::Stmt::Expr(Expr::Try(attempt), Some(_)) + if matches!(strip_expression_parens(&attempt.expr), Expr::Call(call) + if matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path_segments_equal(&path.path, &["prebid", "validate_browser_config_for_startup"])) + && call.args.len() == 2 + && matches!(call.args.first().map(strip_expression_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident_path(&reference.expr, "config")) + && matches!(call.args.iter().nth(1).map(strip_expression_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && matches!(strip_expression_parens(&reference.expr), Expr::Field(allowed) + if matches!(&allowed.member, syn::Member::Named(member) if member == "allowed_domains") + && matches!(strip_expression_parens(&allowed.base), Expr::Field(proxy) + if is_ident_path(&proxy.base, "settings") + && matches!(&proxy.member, syn::Member::Named(member) if member == "proxy")))))); + let exact_ownership = matches!(ownership.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path_segments_equal(&path.path, &["prebid", "validate_browser_bidder_ownership"])) + && ownership.args.len() == 2 + && matches!(ownership.args.first().map(strip_expression_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident_path(&reference.expr, "config")) + && ownership + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident_path(argument, "plan")); + exact_pattern && exact_initializer && exact_browser && exact_ownership +} + +/// Check the reviewed integration inventory against authoritative repository +/// sources. Behavioral capability receipts remain compiled in core tests. +/// +/// # Errors +/// +/// Returns an error for repository access, unsupported source grammar, static +/// inventory drift, or an incoherent capability/loading/ownership domain. +pub(crate) fn check_repository(repository: &Repository) -> Result<(), Report> { + let expected = IntegrationInventory::parse(&read_utf8( + repository, + "tools/docs-parity/manifests/integrations.toml", + )?)?; + let tracked = repository + .tracked_paths() + .map_err(|error| invalid_manifest(format!("cannot list tracked paths: {error:?}")))?; + let tracked_strings = tracked + .iter() + .map(|path| { + path.as_utf8() + .map(str::to_owned) + .map_err(|error| invalid_manifest(format!("non-UTF-8 tracked path: {error:?}"))) + }) + .collect::, _>>()?; + let tracked_refs = tracked_strings + .iter() + .map(String::as_str) + .collect::>(); + let deploy = read_utf8(repository, "crates/trusted-server-core/src/config.rs")?; + let builders = read_utf8( + repository, + "crates/trusted-server-core/src/integrations/mod.rs", + )?; + let plan = read_utf8( + repository, + "crates/trusted-server-core/src/integrations/registry.rs", + )?; + let profiles = read_utf8( + repository, + "crates/trusted-server-core/src/auction/profile.rs", + )?; + let mediator = read_utf8(repository, "crates/trusted-server-core/src/auction/mod.rs")?; + let source = extract_source_inventory(&InventorySources { + validation_entrypoints: &deploy, + deploy_validation: &deploy, + builders: &builders, + plan_registrations: &plan, + profiles: &profiles, + mediator: &mediator, + tracked_paths: &tracked_refs, + })?; + let observed = IntegrationInventory { + deploy_ids: source.deploy_ids, + builder_ids: source.builder_ids, + plan_registration_ids: source.plan_registration_ids, + profile_ids: source.profile_ids, + mediator_ids: source.mediator_ids, + js_source_module_ids: source.js_source_module_ids, + js_bundle_ids: source.js_bundle_ids, + loading_modes: expected.loading_modes.clone(), + capabilities: expected.capabilities.clone(), + operational: expected.operational.clone(), + }; + validate_inventory(&expected, &observed)?; + validate_domains(&expected) +} + +fn validate_domains(inventory: &IntegrationInventory) -> Result<(), Report> { + let mut expected_bundle_ids = inventory.js_source_module_ids.clone(); + expected_bundle_ids.insert("core".to_owned()); + if inventory.js_bundle_ids != expected_bundle_ids { + return Err(Report::new(IntegrationError::InventoryDrift { + axis: "js bundle domain", + })); + } + let loading_ids = inventory + .loading_modes + .keys() + .cloned() + .collect::>(); + if loading_ids != inventory.js_source_module_ids { + return Err(Report::new(IntegrationError::InventoryDrift { + axis: "loading domain", + })); + } + let capability_ids = inventory + .capabilities + .iter() + .map(|record| record.id.clone()) + .collect::>(); + let mut expected_capability_ids = inventory.deploy_ids.clone(); + expected_capability_ids.insert("creative".to_owned()); + if capability_ids != expected_capability_ids { + return Err(Report::new(IntegrationError::InventoryDrift { + axis: "capability domain", + })); + } + let operational_ids = inventory + .operational + .iter() + .map(|record| record.id.clone()) + .collect::>(); + if operational_ids != capability_ids { + return Err(Report::new(IntegrationError::InventoryDrift { + axis: "operational domain", + })); + } + for capability in &inventory.capabilities { + let expected = match inventory.loading_modes.get(&capability.id) { + Some(LoadingMode::Bundled) => "bundled", + Some(LoadingMode::Deferred) => "deferred", + Some(LoadingMode::Standalone) => "standalone", + None => "none", + }; + if capability.js_mode != expected { + return Err(Report::new(IntegrationError::InventoryDrift { + axis: "capability loading", + })); + } + } + Ok(()) +} + +fn read_utf8(repository: &Repository, path: &str) -> Result> { + let path = NormalizedRelativePath::new(std::path::Path::new(path)) + .map_err(|error| invalid_manifest(format!("invalid inventory path: {error:?}")))?; + let bytes = repository + .read_tracked_bounded(&path, MAX_INVENTORY_INPUT_BYTES) + .map_err(|error| invalid_manifest(format!("cannot read inventory source: {error:?}")))?; + String::from_utf8(bytes) + .map_err(|error| invalid_manifest(format!("inventory source is not UTF-8: {error}"))) +} + +fn parse_source(label: &str, source: &str) -> Result> { + ensure_input_bound(label, source)?; + syn::parse_file(source) + .map_err(|error| invalid_manifest(format!("invalid {label} Rust source: {error}"))) +} + +fn exact_top_level_function<'a>( + items: &'a [Item], + name: &str, + label: &str, +) -> Result<&'a syn::Block, Report> { + let mut found: Option<&syn::Block> = None; + for item in items { + let Item::Fn(function) = item else { continue }; + if function.sig.ident != name || !is_production_item(&function.attrs, label)? { + continue; + } + if found.replace(function.block.as_ref()).is_some() { + return Err(invalid_manifest(format!( + "duplicate production {label} function" + ))); + } + } + found.ok_or_else(|| invalid_manifest(format!("missing production {label} function"))) +} + +fn exact_impl_function<'a>( + items: &'a [Item], + owner: &str, + name: &str, + label: &str, +) -> Result<&'a syn::Block, Report> { + let mut found: Option<&syn::Block> = None; + for item in items { + let Item::Impl(item_impl) = item else { + continue; + }; + let Type::Path(self_type) = item_impl.self_ty.as_ref() else { + continue; + }; + if item_impl.trait_.is_some() + || self_type.path.segments.len() != 1 + || self_type.path.segments[0].ident != owner + || !is_production_item(&item_impl.attrs, label)? + { + continue; + } + for item in &item_impl.items { + let ImplItem::Fn(function) = item else { + continue; + }; + if function.sig.ident != name || !is_production_item(&function.attrs, label)? { + continue; + } + if found.replace(&function.block).is_some() { + return Err(invalid_manifest(format!( + "duplicate production {label} method" + ))); + } + } + } + found.ok_or_else(|| invalid_manifest(format!("missing production {label} method"))) +} + +fn is_production_item( + attributes: &[Attribute], + label: &str, +) -> Result> { + let mut cfg_test = false; + for attribute in attributes { + if attribute.path().is_ident("cfg_attr") { + return Err(invalid_manifest(format!( + "unsupported conditional attribute on {label}" + ))); + } + if !attribute.path().is_ident("cfg") { + continue; + } + let syn::Meta::List(list) = &attribute.meta else { + return Err(invalid_manifest(format!("invalid cfg on {label}"))); + }; + if list.tokens.to_string() == "test" && !cfg_test { + cfg_test = true; + } else { + return Err(invalid_manifest(format!( + "unsupported production cfg on {label}" + ))); + } + } + Ok(!cfg_test) +} + +fn validate_validation_entrypoints(items: &[Item]) -> Result<(), Report> { + exact_top_level_function( + items, + "validate_enabled_integrations", + "validation entrypoints", + )?; + for (name, resolved_secrets) in [ + ("validate_settings_for_deploy", false), + ("validate_settings_for_runtime", true), + ] { + let block = exact_top_level_function(items, name, name)?; + validate_exact_validator_call(block, name, resolved_secrets)?; + } + Ok(()) +} + +fn validate_exact_validator_call( + block: &syn::Block, + owner: &str, + resolved_secrets: bool, +) -> Result<(), Report> { + #[derive(Default)] + struct CallCount(usize); + + impl<'ast> syn::visit::Visit<'ast> for CallCount { + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + if matches!(call.func.as_ref(), Expr::Path(path) + if path.path.segments.last().is_some_and(|segment| segment.ident == "validate_enabled_integrations")) + { + self.0 += 1; + } + visit::visit_expr_call(self, call); + } + } + + let mut calls = CallCount::default(); + calls.visit_block(block); + let direct = block + .stmts + .iter() + .filter(|statement| exact_validator_call_statement(statement, resolved_secrets)) + .count(); + let direct_index = block + .stmts + .iter() + .position(|statement| exact_validator_call_statement(statement, resolved_secrets)); + if calls.0 != 1 + || direct != 1 + || direct_index.is_none_or(|index| { + !validator_call_prefix_is_linear(&block.stmts[..index]) + || block_shadows_validator_name(block) + }) + { + return Err(invalid_manifest(format!( + "{owner} must contain exactly one direct validate_enabled_integrations call" + ))); + } + Ok(()) +} + +fn validator_call_prefix_is_linear(statements: &[syn::Stmt]) -> bool { + #[derive(Default)] + struct ControlFlow { + invalid: bool, + } + + impl<'ast> syn::visit::Visit<'ast> for ControlFlow { + fn visit_expr(&mut self, expression: &'ast Expr) { + if matches!( + expression, + Expr::If(_) + | Expr::Match(_) + | Expr::ForLoop(_) + | Expr::While(_) + | Expr::Loop(_) + | Expr::Return(_) + | Expr::Break(_) + | Expr::Continue(_) + | Expr::Macro(_) + ) { + self.invalid = true; + return; + } + visit::visit_expr(self, expression); + } + } + + let mut flow = ControlFlow::default(); + for statement in statements { + flow.visit_stmt(statement); + } + !flow.invalid +} + +fn block_shadows_validator_name(block: &syn::Block) -> bool { + #[derive(Default)] + struct Shadows { + found: bool, + } + + impl<'ast> syn::visit::Visit<'ast> for Shadows { + fn visit_item(&mut self, item: &'ast Item) { + let shadows = match item { + Item::Fn(value) => value.sig.ident == "validate_enabled_integrations", + Item::Const(value) => value.ident == "validate_enabled_integrations", + Item::Static(value) => value.ident == "validate_enabled_integrations", + Item::Struct(value) => value.ident == "validate_enabled_integrations", + Item::Use(value) => { + use_tree_binds_name(&value.tree, "validate_enabled_integrations") + } + _ => false, + }; + if shadows { + self.found = true; + return; + } + visit::visit_item(self, item); + } + + fn visit_pat_ident(&mut self, pattern: &'ast syn::PatIdent) { + if pattern.ident == "validate_enabled_integrations" { + self.found = true; + return; + } + visit::visit_pat_ident(self, pattern); + } + } + + let mut shadows = Shadows::default(); + shadows.visit_block(block); + shadows.found +} + +fn use_tree_binds_name(tree: &syn::UseTree, name: &str) -> bool { + match tree { + syn::UseTree::Name(value) => value.ident == name, + syn::UseTree::Rename(value) => value.rename == name, + syn::UseTree::Path(value) => use_tree_binds_name(&value.tree, name), + syn::UseTree::Group(value) => value + .items + .iter() + .any(|item| use_tree_binds_name(item, name)), + syn::UseTree::Glob(_) => true, + } +} + +fn exact_validator_call_statement(statement: &syn::Stmt, resolved_secrets: bool) -> bool { + let syn::Stmt::Expr(Expr::Try(attempt), Some(_)) = statement else { + return false; + }; + let Expr::Call(call) = strip_expression_parens(&attempt.expr) else { + return false; + }; + matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path.path.is_ident("validate_enabled_integrations") + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) + && call.args.len() == 3 + && call + .args + .first() + .is_some_and(|argument| is_ident_path(argument, "settings")) + && matches!(call.args.iter().nth(1).map(strip_expression_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident_path(&reference.expr, "plan")) + && matches!(call.args.iter().nth(2).map(strip_expression_parens), Some(Expr::Lit(ExprLit { lit: Lit::Bool(value), .. })) + if value.value == resolved_secrets) +} + +fn validate_closed_registration_grammar( + block: &syn::Block, + label: &'static str, + allowed_macros: &[&str], +) -> Result<(), Report> { + struct Guard<'a> { + label: &'static str, + allowed_macros: &'a [&'a str], + error: Option, + } + impl<'ast> syn::visit::Visit<'ast> for Guard<'_> { + fn visit_attribute(&mut self, attribute: &'ast Attribute) { + if attribute.path().is_ident("cfg") || attribute.path().is_ident("cfg_attr") { + self.error = Some(format!( + "unsupported conditional statement in {} grammar", + self.label + )); + } + } + + fn visit_macro(&mut self, item: &'ast syn::Macro) { + let name = item + .path + .segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::>() + .join("::"); + if !self.allowed_macros.contains(&name.as_str()) + || !safe_registration_macro(self.label, &name, item) + { + self.error = Some(format!( + "unsupported macro `{name}` in {} grammar", + self.label + )); + } + } + + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + if let Expr::Path(path) = call.func.as_ref() + && let Some(name) = path + .path + .segments + .last() + .map(|segment| segment.ident.to_string()) + && name.contains("register") + && !matches!( + (self.label, name.as_str()), + ("plan", "register_for_plan") | ("mediator", "register_providers") + ) + { + self.error = Some(format!( + "unsupported indirect registration call `{name}` in {} grammar", + self.label + )); + } + visit::visit_expr_call(self, call); + } + + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + let name = call.method.to_string(); + if name.contains("register") { + self.error = Some(format!( + "unsupported registration method `{name}` in {} grammar", + self.label + )); + } + visit::visit_expr_method_call(self, call); + } + } + let mut guard = Guard { + label, + allowed_macros, + error: None, + }; + guard.visit_block(block); + if let Some(detail) = guard.error { + return Err(invalid_manifest(detail)); + } + + for statement in &block.stmts { + let count = statement_registration_count(statement, label); + if count == 0 { + if !accepted_nonregistration_statement(statement, label, allowed_macros) { + return Err(invalid_manifest(format!( + "unsupported {label}{} statement", + if label == "deploy" { + " validator" + } else { + " grammar" + } + ))); + } + continue; + } + let accepted = match (label, statement) { + ("deploy", syn::Stmt::Expr(Expr::Try(expression), _)) => { + matches!(expression.expr.as_ref(), Expr::Call(call) if deploy_direct_call(call)) + } + ("deploy", syn::Stmt::Expr(Expr::If(expression), _)) => { + deploy_datadome_branch_is_bound(expression) + } + ("plan", syn::Stmt::Expr(Expr::If(expression), _)) => { + plan_registration_is_bound(expression) + } + ("mediator", syn::Stmt::Local(local)) => mediator_registration_is_bound(local), + _ => false, + }; + if count > 1 { + return Err(invalid_manifest(format!("duplicate {label} registration"))); + } + if !accepted { + return Err(invalid_manifest(format!( + "unsupported hidden registration in {label} grammar" + ))); + } + } + if label == "plan" { + validate_plan_production_dataflow(block)?; + } else if label == "mediator" { + validate_mediator_production_dataflow(block)?; + } + Ok(()) +} + +fn safe_registration_macro(label: &str, name: &str, item: &syn::Macro) -> bool { + let parser = Punctuated::::parse_terminated; + let Ok(arguments) = parser.parse2(item.tokens.clone()) else { + return false; + }; + let arguments = arguments.iter().collect::>(); + match (label, name, arguments.as_slice()) { + ("plan", "debug_assert_eq", [left, right]) => { + exact_field(left, "registration", "integration_id") + && exact_field(right, "builder", "id") + } + ("plan", "format", [message, path]) + if literal_string(message).as_deref() == Some("{}/{{*rest}}") => + { + exact_matchit_path_expression(path) + } + ("plan", "format", [message, method, path, error]) => { + literal_string(message).as_deref() + == Some("Integration route registration failed for {} {}: {:?}") + && exact_field(method, "route", "method") + && exact_field(path, "route", "path") + && is_ident_path(error, "e") + } + ("plan", "log::warn", [message, method, path]) => { + literal_string(message).as_deref() == Some("Unsupported HTTP method {} for route {}") + && exact_field(method, "route", "method") + && exact_field(path, "route", "path") + } + ("mediator", "log::info", [message]) => { + literal_string(message).as_deref() == Some("Building plan-backed auction orchestrator") + } + ("mediator", "log::info", [message, count]) => { + literal_string(message).as_deref() + == Some("Auction orchestrator built with {} bidder providers") + && matches!(strip_expression_parens(count), Expr::MethodCall(call) + if call.method == "provider_count" && call.args.is_empty() && is_ident_path(&call.receiver, "orchestrator")) + } + ("mediator", "format", [message]) => { + literal_string(message).as_deref() + == Some( + "auction mediator `{expected_id}` must reference a separately registered enabled integration with the exact same ID", + ) + } + _ => false, + } +} + +fn exact_field(expression: &Expr, base: &str, member: &str) -> bool { + matches!(strip_expression_parens(expression), Expr::Field(field) + if is_ident_path(&field.base, base) + && matches!(&field.member, Member::Named(name) if name == member)) +} + +fn exact_matchit_path_expression(expression: &Expr) -> bool { + let Expr::MethodCall(expect) = strip_expression_parens(expression) else { + return false; + }; + if expect.method != "expect" + || expect.args.len() != 1 + || expect.args.first().and_then(literal_string).as_deref() + != Some("path should end with '/*'") + { + return false; + } + matches!(strip_expression_parens(&expect.receiver), Expr::MethodCall(strip) + if strip.method == "strip_suffix" + && exact_field(&strip.receiver, "route", "path") + && strip.args.len() == 1 + && strip.args.first().and_then(literal_string).as_deref() == Some("/*")) +} + +fn deploy_datadome_branch_is_bound(expression: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_expression_parens(&expression.cond) else { + return false; + }; + let syn::Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + if pattern + .path + .segments + .last() + .is_none_or(|segment| segment.ident != "Some") + || pattern.elems.len() != 1 + || !matches!(pattern.elems.first(), Some(syn::Pat::Ident(binding)) if binding.ident == "config") + { + return false; + } + let Expr::Try(lookup) = strip_expression_parens(&condition.expr) else { + return false; + }; + let Expr::MethodCall(lookup) = strip_expression_parens(&lookup.expr) else { + return false; + }; + if lookup.method != "integration_config" + || !is_ident_path(&lookup.receiver, "settings") + || !exact_method_type_argument(lookup, &["DataDomeConfig"]) + || lookup.args.len() != 1 + || lookup.args.first().and_then(literal_string).as_deref() != Some("datadome") + || expression.else_branch.is_some() + || expression.then_branch.stmts.len() != 1 + { + return false; + } + let Some(syn::Stmt::Expr(Expr::If(validation), _)) = expression.then_branch.stmts.first() + else { + return false; + }; + is_ident_path(&validation.cond, "resolved_secrets") + && validation.then_branch.stmts.len() == 1 + && validation + .then_branch + .stmts + .first() + .is_some_and(|statement| { + exact_try_call_statement(statement, "validate_config_for_startup", "config") + }) + && validation.else_branch.as_ref().is_some_and(|(_, branch)| { + matches!(strip_expression_parens(branch), Expr::Block(block) + if block.block.stmts.len() == 1 + && block.block.stmts.first().is_some_and(|statement| exact_try_call_statement(statement, "validate_config_for_deploy", "config"))) + }) +} + +fn exact_try_call_statement(statement: &syn::Stmt, function: &str, argument: &str) -> bool { + let syn::Stmt::Expr(Expr::Try(value), _) = statement else { + return false; + }; + let Expr::Call(call) = strip_expression_parens(&value.expr) else { + return false; + }; + let expected = match function { + "validate_config_for_startup" => &[ + "crate", + "integrations", + "datadome", + "DataDomeIntegration", + "validate_config_for_startup", + ][..], + "validate_config_for_deploy" => &[ + "crate", + "integrations", + "datadome", + "DataDomeIntegration", + "validate_config_for_deploy", + ][..], + _ => return false, + }; + matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() && path_segments_equal(&path.path, expected)) + && call.args.len() == 1 + && call + .args + .first() + .is_some_and(|value| is_ident_path(value, argument)) +} + +fn validate_plan_production_dataflow(block: &syn::Block) -> Result<(), Report> { + if block.stmts.is_empty() { + return Ok(()); + } + if block.stmts.len() < 5 + || !exact_named_local( + &block.stmts[0], + "inner", + &["IntegrationRegistryInner", "default"], + ) + || !exact_named_local(&block.stmts[1], "registrations", &["Vec", "new"]) + { + return Err(invalid_manifest( + "plan registration production dataflow differs from the closed shape", + )); + } + let registration_end = block.stmts.len() - 3; + if !block.stmts[2..registration_end].iter().all(|statement| { + matches!(statement, syn::Stmt::Expr(Expr::If(value), _) if plan_registration_is_bound(value)) + }) || !matches!(&block.stmts[registration_end], syn::Stmt::Expr(Expr::ForLoop(value), _) if exact_builder_registration_loop(value)) + || !matches!(&block.stmts[registration_end + 1], syn::Stmt::Expr(Expr::ForLoop(value), _) if exact_registration_consumption_loop(value)) + || !exact_plan_return(&block.stmts[registration_end + 2]) + { + return Err(invalid_manifest( + "plan registration production dataflow differs from the closed shape", + )); + } + Ok(()) +} + +fn exact_named_local(statement: &syn::Stmt, name: &str, initializer: &[&str]) -> bool { + let syn::Stmt::Local(local) = statement else { + return false; + }; + local.attrs.is_empty() + && matches!(&local.pat, syn::Pat::Ident(binding) + if binding.ident == name && binding.by_ref.is_none() && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_expression_parens(&init.expr), Expr::Call(call) + if matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path_segments_equal(&path.path, initializer) + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) + && call.args.is_empty()) + }) +} + +fn exact_builder_registration_loop(expression: &syn::ExprForLoop) -> bool { + matches!(expression.pat.as_ref(), syn::Pat::Ident(binding) if binding.ident == "builder") + && matches!(strip_expression_parens(&expression.expr), Expr::Call(call) + if exact_plain_call(call, &["crate", "integrations", "builders"], &[])) + && expression.body.stmts.len() == 1 + && matches!(expression.body.stmts.first(), Some(syn::Stmt::Expr(Expr::If(branch), _)) + if plan_builder_branch_is_bound(branch)) +} + +fn plan_builder_branch_is_bound(expression: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_expression_parens(&expression.cond) else { + return false; + }; + let syn::Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + let binding_ok = pattern + .path + .segments + .last() + .is_some_and(|segment| segment.ident == "Some") + && matches!(pattern.elems.first(), Some(syn::Pat::Ident(binding)) if binding.ident == "registration"); + let Expr::Try(call) = strip_expression_parens(&condition.expr) else { + return false; + }; + let Expr::Call(call) = strip_expression_parens(&call.expr) else { + return false; + }; + let builder_call = matches!(strip_expression_parens(&call.func), Expr::Field(field) + if is_ident_path(&field.base, "builder") && matches!(&field.member, Member::Named(name) if name == "build")) + && call.args.len() == 1 + && call + .args + .first() + .is_some_and(|value| is_ident_path(value, "settings")); + binding_ok + && builder_call + && expression.else_branch.is_none() + && expression.then_branch.stmts.len() == 2 + && matches!(expression.then_branch.stmts.first(), Some(syn::Stmt::Macro(statement)) + if statement.mac.path.is_ident("debug_assert_eq") && !statement.mac.tokens.to_string().contains("register")) + && expression + .then_branch + .stmts + .get(1) + .is_some_and(exact_registration_push) +} + +fn exact_registration_push(statement: &syn::Stmt) -> bool { + matches!(statement, syn::Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "push" + && is_ident_path(&call.receiver, "registrations") + && call.args.len() == 1 + && call.args.first().is_some_and(|value| is_ident_path(value, "registration"))) +} + +fn exact_registration_consumption_loop(expression: &syn::ExprForLoop) -> bool { + if !matches!(expression.pat.as_ref(), syn::Pat::Ident(binding) if binding.ident == "registration") + || !is_ident_path(&expression.expr, "registrations") + || expression.body.stmts.len() != 8 + { + return false; + } + exact_inner_push( + &expression.body.stmts[0], + "enabled_integration_ids", + "integration_id", + ) && exact_proxy_registration_loop(&expression.body.stmts[1]) + && exact_inner_extend( + &expression.body.stmts[2], + "html_rewriters", + "attribute_rewriters", + ) + && exact_inner_extend( + &expression.body.stmts[3], + "script_rewriters", + "script_rewriters", + ) + && exact_inner_extend( + &expression.body.stmts[4], + "html_post_processors", + "html_post_processors", + ) + && exact_inner_extend( + &expression.body.stmts[5], + "head_injectors", + "head_injectors", + ) + && exact_inner_extend( + &expression.body.stmts[6], + "request_filters", + "request_filters", + ) + && exact_js_disposition_branch(&expression.body.stmts[7]) +} + +fn exact_inner_push(statement: &syn::Stmt, target: &str, source: &str) -> bool { + matches!(statement, syn::Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "push" + && matches!(strip_expression_parens(&call.receiver), Expr::Field(field) + if is_ident_path(&field.base, "inner") && matches!(&field.member, Member::Named(name) if name == target)) + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| matches!(strip_expression_parens(argument), Expr::Field(field) + if is_ident_path(&field.base, "registration") && matches!(&field.member, Member::Named(name) if name == source)))) +} + +fn exact_inner_extend(statement: &syn::Stmt, target: &str, source: &str) -> bool { + matches!(statement, syn::Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "extend" + && matches!(strip_expression_parens(&call.receiver), Expr::Field(field) + if is_ident_path(&field.base, "inner") && matches!(&field.member, Member::Named(name) if name == target)) + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| matches!(strip_expression_parens(argument), Expr::Field(field) + if is_ident_path(&field.base, "registration") && matches!(&field.member, Member::Named(name) if name == source)))) +} + +fn exact_proxy_registration_loop(statement: &syn::Stmt) -> bool { + let syn::Stmt::Expr(Expr::ForLoop(proxy), _) = statement else { + return false; + }; + if !matches!(proxy.pat.as_ref(), syn::Pat::Ident(binding) if binding.ident == "proxy") + || !matches!(strip_expression_parens(&proxy.expr), Expr::Field(field) + if is_ident_path(&field.base, "registration") && matches!(&field.member, Member::Named(name) if name == "proxies")) + || proxy.body.stmts.len() != 1 + { + return false; + } + let Some(syn::Stmt::Expr(Expr::ForLoop(routes), _)) = proxy.body.stmts.first() else { + return false; + }; + matches!(routes.pat.as_ref(), syn::Pat::Ident(binding) if binding.ident == "route") + && matches!(strip_expression_parens(&routes.expr), Expr::MethodCall(call) + if call.method == "routes" && call.args.is_empty() && is_ident_path(&call.receiver, "proxy")) + && routes.body.stmts.len() == 5 + && exact_proxy_value_local(&routes.body.stmts[0]) + && exact_matchit_path_local(&routes.body.stmts[1]) + && exact_proxy_router_local(&routes.body.stmts[2]) + && exact_proxy_insert_branch(&routes.body.stmts[3]) + && exact_registered_route_push(&routes.body.stmts[4]) +} + +fn exact_local_initializer<'a>(statement: &'a syn::Stmt, name: &str) -> Option<&'a Expr> { + let syn::Stmt::Local(local) = statement else { + return None; + }; + if local.attrs.is_empty() + && matches!(&local.pat, syn::Pat::Ident(binding) + if binding.ident == name && binding.subpat.is_none()) + && local + .init + .as_ref() + .is_some_and(|init| init.diverge.is_none()) + { + local.init.as_ref().map(|init| init.expr.as_ref()) + } else { + None + } +} + +fn exact_proxy_value_local(statement: &syn::Stmt) -> bool { + let Some(Expr::Tuple(value)) = + exact_local_initializer(statement, "value").map(strip_expression_parens) + else { + return false; + }; + value.elems.len() == 2 + && matches!(value.elems.first().map(strip_expression_parens), Some(Expr::MethodCall(call)) + if call.method == "clone" && call.args.is_empty() && is_ident_path(&call.receiver, "proxy")) + && value + .elems + .iter() + .nth(1) + .is_some_and(|value| exact_field(value, "registration", "integration_id")) +} + +fn exact_matchit_path_local(statement: &syn::Stmt) -> bool { + let Some(Expr::If(branch)) = + exact_local_initializer(statement, "matchit_path").map(strip_expression_parens) + else { + return false; + }; + let exact_condition = matches!(strip_expression_parens(&branch.cond), Expr::MethodCall(call) + if call.method == "ends_with" + && exact_field(&call.receiver, "route", "path") + && call.args.len() == 1 + && call.args.first().and_then(literal_string).as_deref() == Some("/*")); + let exact_then = branch + .then_branch + .stmts + .as_slice() + .first() + .filter(|_| branch.then_branch.stmts.len() == 1) + .and_then(statement_macro) + .is_some_and(|item| { + item.path.is_ident("format") && safe_registration_macro("plan", "format", item) + }); + let exact_else = branch.else_branch.as_ref().is_some_and(|(_, alternative)| { + matches!(strip_expression_parens(alternative), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [syn::Stmt::Expr(Expr::MethodCall(call), None)] + if call.method == "clone" + && call.args.is_empty() + && exact_field(&call.receiver, "route", "path"))) + }); + exact_condition && exact_then && exact_else +} + +fn exact_proxy_router_local(statement: &syn::Stmt) -> bool { + let Some(Expr::Match(selection)) = + exact_local_initializer(statement, "router").map(strip_expression_parens) + else { + return false; + }; + if !exact_field(&selection.expr, "route", "method") || selection.arms.len() != 8 { + return false; + } + let expected = [ + ("GET", "get_router"), + ("POST", "post_router"), + ("PUT", "put_router"), + ("DELETE", "delete_router"), + ("PATCH", "patch_router"), + ("HEAD", "head_router"), + ("OPTIONS", "options_router"), + ]; + selection.arms[..7] + .iter() + .zip(expected) + .all(|(arm, (method, router))| exact_router_arm(arm, method, router)) + && exact_unsupported_method_arm(&selection.arms[7]) +} + +fn statement_macro(statement: &syn::Stmt) -> Option<&syn::Macro> { + match statement { + syn::Stmt::Macro(statement) => Some(&statement.mac), + syn::Stmt::Expr(Expr::Macro(expression), None) => Some(&expression.mac), + _ => None, + } +} + +fn exact_router_arm(arm: &syn::Arm, method: &str, router: &str) -> bool { + let exact_pattern = matches!(&arm.pat, syn::Pat::Path(pattern) if { + let segments = pattern.path.segments.iter().collect::>(); + segments.len() == 2 && segments[0].ident == "Method" && segments[1].ident == method + }); + exact_pattern + && arm.attrs.is_empty() + && arm.guard.is_none() + && matches!(strip_expression_parens(&arm.body), Expr::Reference(reference) + if reference.mutability.is_some() + && matches!(strip_expression_parens(&reference.expr), Expr::Field(field) + if is_ident_path(&field.base, "inner") + && matches!(&field.member, Member::Named(name) if name == router))) +} + +fn exact_unsupported_method_arm(arm: &syn::Arm) -> bool { + matches!(&arm.pat, syn::Pat::Wild(_)) + && arm.attrs.is_empty() + && arm.guard.is_none() + && matches!(strip_expression_parens(&arm.body), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), + [syn::Stmt::Macro(statement), syn::Stmt::Expr(Expr::Continue(_), Some(_))] + if statement.mac.path.segments.iter().map(|segment| segment.ident.to_string()).collect::>().join("::") == "log::warn" + && safe_registration_macro("plan", "log::warn", &statement.mac))) +} + +fn exact_proxy_insert_branch(statement: &syn::Stmt) -> bool { + let syn::Stmt::Expr(Expr::If(branch), _) = statement else { + return false; + }; + let Expr::Let(condition) = strip_expression_parens(&branch.cond) else { + return false; + }; + let exact_pattern = matches!(condition.pat.as_ref(), syn::Pat::TupleStruct(pattern) + if pattern.path.segments.last().is_some_and(|segment| segment.ident == "Err") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(syn::Pat::Ident(binding)) if binding.ident == "e")); + let exact_insert = matches!(strip_expression_parens(&condition.expr), Expr::MethodCall(call) + if call.method == "insert" + && is_ident_path(&call.receiver, "router") + && call.args.len() == 2 + && matches!(call.args.first().map(strip_expression_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident_path(&reference.expr, "matchit_path")) + && call.args.iter().nth(1).is_some_and(|value| is_ident_path(value, "value"))); + exact_pattern + && exact_insert + && branch.else_branch.is_none() + && matches!(branch.then_branch.stmts.as_slice(), [statement] + if exact_proxy_insert_error(statement)) +} + +fn exact_proxy_insert_error(statement: &syn::Stmt) -> bool { + let syn::Stmt::Expr(Expr::Return(value), _) = statement else { + return false; + }; + let Some(Expr::Call(error)) = value.expr.as_deref().map(strip_expression_parens) else { + return false; + }; + if !call_named(error, "Err") || error.args.len() != 1 { + return false; + } + let Some(Expr::Call(report)) = error.args.first().map(strip_expression_parens) else { + return false; + }; + if !matches!(report.func.as_ref(), Expr::Path(path) if path.path.segments.iter().map(|segment| segment.ident.to_string()).collect::>().as_slice() == ["Report", "new"]) + || report.args.len() != 1 + { + return false; + } + let Some(Expr::Struct(configuration)) = report.args.first().map(strip_expression_parens) else { + return false; + }; + configuration + .path + .segments + .last() + .is_some_and(|segment| segment.ident == "Configuration") + && configuration.rest.is_none() + && matches!(configuration.fields.iter().collect::>().as_slice(), [field] + if member_is(&field.member, "message") + && matches!(strip_expression_parens(&field.expr), Expr::Macro(value) + if value.mac.path.is_ident("format") + && safe_registration_macro("plan", "format", &value.mac))) +} + +fn exact_registered_route_push(statement: &syn::Stmt) -> bool { + matches!(statement, syn::Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "push" + && matches!(strip_expression_parens(&call.receiver), Expr::Field(field) + if is_ident_path(&field.base, "inner") + && matches!(&field.member, Member::Named(name) if name == "routes")) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_expression_parens), Some(Expr::Tuple(tuple)) + if tuple.elems.len() == 2 + && tuple.elems.first().is_some_and(|value| is_ident_path(value, "route")) + && tuple.elems.iter().nth(1).is_some_and(|value| exact_field(value, "registration", "integration_id")))) +} + +fn exact_js_disposition_branch(statement: &syn::Stmt) -> bool { + let syn::Stmt::Expr(Expr::If(disabled), _) = statement else { + return false; + }; + matches!(strip_expression_parens(&disabled.cond), Expr::Field(field) + if is_ident_path(&field.base, "registration") && matches!(&field.member, Member::Named(name) if name == "js_disabled")) + && disabled.then_branch.stmts.len() == 1 + && exact_inner_push(&disabled.then_branch.stmts[0], "disabled_js_ids", "integration_id") + && disabled.else_branch.as_ref().is_some_and(|(_, branch)| { + matches!(strip_expression_parens(branch), Expr::If(deferred) + if matches!(strip_expression_parens(&deferred.cond), Expr::Field(field) + if is_ident_path(&field.base, "registration") && matches!(&field.member, Member::Named(name) if name == "js_deferred")) + && deferred.then_branch.stmts.len() == 1 + && exact_inner_push(&deferred.then_branch.stmts[0], "deferred_js_ids", "integration_id") + && deferred.else_branch.is_none()) + }) +} + +fn exact_plan_return(statement: &syn::Stmt) -> bool { + let syn::Stmt::Expr(Expr::Call(call), None) = statement else { + return false; + }; + if !exact_call_path(call, &["Ok"]) || call.args.len() != 1 { + return false; + } + let Some(Expr::Struct(record)) = call.args.first() else { + return false; + }; + record.path.leading_colon.is_none() + && path_segments_equal(&record.path, &["Self"]) + && record + .path + .segments + .iter() + .all(|segment| matches!(segment.arguments, syn::PathArguments::None)) + && record.rest.is_none() + && record.fields.len() == 2 + && record.fields.iter().any(|field| { + member_is(&field.member, "inner") + && matches!(strip_expression_parens(&field.expr), Expr::Call(value) + if exact_call_path(value, &["Arc", "new"]) + && value.args.len() == 1 + && value.args.first().is_some_and(|argument| is_ident_path(argument, "inner"))) + }) + && record.fields.iter().any(|field| { + member_is(&field.member, "plan") + && matches!(strip_expression_parens(&field.expr), Expr::Call(value) + if exact_call_path(value, &["Some"]) + && value.args.len() == 1 + && value.args.first().is_some_and(|argument| is_ident_path(argument, "plan"))) + }) +} + +fn exact_call_path(call: &ExprCall, expected: &[&str]) -> bool { + matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path_segments_equal(&path.path, expected) + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) +} + +fn plan_registration_is_bound(expression: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_expression_parens(&expression.cond) else { + return false; + }; + let syn::Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + if pattern + .path + .segments + .last() + .is_none_or(|segment| segment.ident != "Some") + || pattern.elems.len() != 1 + { + return false; + } + let Some(syn::Pat::Ident(binding)) = pattern.elems.first() else { + return false; + }; + let Expr::Try(call) = strip_expression_parens(&condition.expr) else { + return false; + }; + let Expr::Call(call) = strip_expression_parens(&call.expr) else { + return false; + }; + let exact_registration = matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && matches!(path.path.segments.iter().map(|segment| segment.ident.to_string()).collect::>().as_slice(), + [root, integrations, module, function] + if root == "crate" + && integrations == "integrations" + && matches!(module.as_str(), "prebid" | "aps") + && function == "register_for_plan") + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))); + if !exact_registration + || call.args.len() != 2 + || call + .args + .first() + .is_none_or(|argument| !is_ident_path(argument, "settings")) + || call.args.iter().nth(1).is_none_or(|argument| { + !matches!(strip_expression_parens(argument), Expr::Reference(reference) + if reference.mutability.is_none() && is_ident_path(&reference.expr, "plan")) + }) + { + return false; + } + expression.then_branch.stmts.len() == 1 + && expression.then_branch.stmts.first().is_some_and(|statement| { + matches!(statement, syn::Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "push" + && is_ident_path(&call.receiver, "registrations") + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| is_ident_path(argument, &binding.ident.to_string()))) + }) + && expression.else_branch.is_none() +} + +fn mediator_registration_is_bound(local: &syn::Local) -> bool { + if !matches!(&local.pat, syn::Pat::Ident(binding) if binding.ident == "mediator") { + return false; + } + let Some(init) = &local.init else { + return false; + }; + let Expr::If(expression) = strip_expression_parens(&init.expr) else { + return false; + }; + let Expr::Let(condition) = strip_expression_parens(&expression.cond) else { + return false; + }; + let syn::Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + if pattern + .path + .segments + .last() + .is_none_or(|segment| segment.ident != "Some") + || !matches!(pattern.elems.first(), Some(syn::Pat::Ident(binding)) if binding.ident == "expected_id" || binding.ident == "expected") + || !matches!(strip_expression_parens(&condition.expr), Expr::MethodCall(call) + if call.method == "mediator" && call.args.is_empty() && is_ident_path(&call.receiver, "plan")) + || expression.then_branch.stmts.len() != 2 + { + return false; + } + let provider = expression.then_branch.stmts.iter().find_map(|statement| { + let syn::Stmt::Local(provider) = statement else { + return None; + }; + let syn::Pat::Ident(binding) = &provider.pat else { + return None; + }; + let init = provider.init.as_ref()?; + exact_mediator_provider_initializer(&init.expr).then_some(&binding.ident) + }); + let Some(provider) = provider else { + return false; + }; + let Some(syn::Stmt::Expr(Expr::Call(some), None)) = expression.then_branch.stmts.last() else { + return false; + }; + call_named(some, "Some") + && some.args.len() == 1 + && some.args.first().is_some_and(|argument| matches!(strip_expression_parens(argument), Expr::Path(path) if path.path.is_ident(provider))) + && expression.else_branch.as_ref().is_some_and(|(_, alternative)| { + matches!(strip_expression_parens(alternative), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [syn::Stmt::Expr(Expr::Path(path), None)] + if path.qself.is_none() && path.path.is_ident("None"))) + }) +} + +fn exact_mediator_provider_initializer(expression: &Expr) -> bool { + let Expr::Try(required) = strip_expression_parens(expression) else { + return false; + }; + let Expr::MethodCall(required) = strip_expression_parens(&required.expr) else { + return false; + }; + if required.method != "ok_or_else" || required.args.len() != 1 { + return false; + } + let Expr::Closure(error) = required + .args + .first() + .map(strip_expression_parens) + .unwrap_or(&required.receiver) + else { + return false; + }; + if !exact_mediator_error_closure(error) { + return false; + } + let Expr::MethodCall(find) = strip_expression_parens(&required.receiver) else { + return false; + }; + if find.method != "find" || find.args.len() != 1 { + return false; + } + let Some(Expr::Closure(predicate)) = find.args.first().map(strip_expression_parens) else { + return false; + }; + if !matches!(predicate.inputs.first(), Some(syn::Pat::Ident(binding)) if binding.ident == "provider") + || !matches!(strip_expression_parens(&predicate.body), Expr::Binary(equal) + if matches!(equal.op, syn::BinOp::Eq(_)) + && matches!(strip_expression_parens(&equal.left), Expr::MethodCall(call) + if call.method == "provider_name" && call.args.is_empty() && is_ident_path(&call.receiver, "provider")) + && is_ident_path(&equal.right, "expected_id")) + { + return false; + } + let Expr::MethodCall(iter) = strip_expression_parens(&find.receiver) else { + return false; + }; + if iter.method != "into_iter" || !iter.args.is_empty() { + return false; + } + let Expr::Try(register) = strip_expression_parens(&iter.receiver) else { + return false; + }; + let Expr::Call(register) = strip_expression_parens(®ister.expr) else { + return false; + }; + exact_plain_call( + register, + &[ + "crate", + "integrations", + "adserver_mock", + "register_providers", + ], + &["settings"], + ) +} + +fn exact_mediator_error_closure(closure: &syn::ExprClosure) -> bool { + if !closure.attrs.is_empty() + || closure.asyncness.is_some() + || closure.capture.is_some() + || closure.constness.is_some() + || !closure.inputs.is_empty() + || !matches!(closure.output, syn::ReturnType::Default) + { + return false; + } + let Expr::Block(block) = strip_expression_parens(&closure.body) else { + return false; + }; + let [syn::Stmt::Expr(Expr::Call(report), None)] = block.block.stmts.as_slice() else { + return false; + }; + if !exact_call_path(report, &["Report", "new"]) || report.args.len() != 1 { + return false; + } + let Some(Expr::Struct(configuration)) = report.args.first().map(strip_expression_parens) else { + return false; + }; + configuration.path.leading_colon.is_none() + && path_segments_equal( + &configuration.path, + &["TrustedServerError", "Configuration"], + ) + && configuration + .path + .segments + .iter() + .all(|segment| matches!(segment.arguments, syn::PathArguments::None)) + && configuration.rest.is_none() + && matches!(configuration.fields.iter().collect::>().as_slice(), [field] + if field.attrs.is_empty() + && member_is(&field.member, "message") + && matches!(strip_expression_parens(&field.expr), Expr::Macro(message) + if message.attrs.is_empty() + && message.mac.path.is_ident("format") + && safe_registration_macro("mediator", "format", &message.mac))) +} + +fn validate_mediator_production_dataflow( + block: &syn::Block, +) -> Result<(), Report> { + if block.stmts.is_empty() { + return Ok(()); + } + let exact = block.stmts.len() == 5 + && matches!(&block.stmts[0], syn::Stmt::Macro(statement) + if safe_registration_macro("mediator", "log::info", &statement.mac)) + && matches!(&block.stmts[1], syn::Stmt::Local(local) if mediator_registration_is_bound(local)) + && matches!(&block.stmts[2], syn::Stmt::Local(local) + if matches!(&local.pat, syn::Pat::Ident(binding) if binding.ident == "orchestrator") + && local.init.as_ref().is_some_and(|init| matches!(strip_expression_parens(&init.expr), Expr::Call(call) + if matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path_segments_equal(&path.path, &["AuctionOrchestrator", "from_plan"]) + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) + && call.args.len() == 2 + && call.args.first().is_some_and(|argument| is_ident_path(argument, "plan")) + && call.args.iter().nth(1).is_some_and(|argument| is_ident_path(argument, "mediator"))))) + && matches!(&block.stmts[3], syn::Stmt::Macro(statement) + if safe_registration_macro("mediator", "log::info", &statement.mac)) + && matches!(&block.stmts[4], syn::Stmt::Expr(Expr::Call(call), None) + if call_named(call, "Ok") + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| is_ident_path(argument, "orchestrator"))); + if !exact { + return Err(invalid_manifest( + "mediator registration production dataflow differs from the closed shape", + )); + } + Ok(()) +} + +fn is_ident_path(expression: &Expr, expected: &str) -> bool { + matches!(strip_expression_parens(expression), Expr::Path(path) if path.path.is_ident(expected)) +} + +fn strip_expression_parens(expression: &Expr) -> &Expr { + match expression { + Expr::Paren(paren) => strip_expression_parens(&paren.expr), + Expr::Group(group) => strip_expression_parens(&group.expr), + _ => expression, + } +} + +fn accepted_nonregistration_statement( + statement: &syn::Stmt, + label: &str, + allowed_macros: &[&str], +) -> bool { + match (label, statement) { + ("deploy", syn::Stmt::Expr(Expr::Call(call), None)) => call_named(call, "Ok"), + ("plan", syn::Stmt::Local(local)) => matches!( + &local.pat, + syn::Pat::Ident(binding) if binding.ident == "inner" || binding.ident == "registrations" + ), + ("plan", syn::Stmt::Expr(Expr::ForLoop(expression), _)) => { + matches!(expression.expr.as_ref(), Expr::Path(path) if path.path.is_ident("registrations")) + || matches!(expression.expr.as_ref(), Expr::Call(call) if call_named(call, "builders")) + } + ("plan", syn::Stmt::Expr(Expr::Call(call), None)) => call_named(call, "Ok"), + ("mediator", syn::Stmt::Local(local)) => matches!( + &local.pat, + syn::Pat::Ident(binding) if binding.ident == "orchestrator" + ), + ("mediator", syn::Stmt::Expr(Expr::Call(call), None)) => call_named(call, "Ok"), + (_, syn::Stmt::Macro(statement)) => { + let name = statement + .mac + .path + .segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::>() + .join("::"); + allowed_macros.contains(&name.as_str()) + } + _ => false, + } +} + +fn statement_registration_count(statement: &syn::Stmt, label: &str) -> usize { + struct Finder<'a> { + label: &'a str, + count: usize, + } + impl<'ast> syn::visit::Visit<'ast> for Finder<'_> { + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + if let Expr::Path(path) = call.func.as_ref() + && let Some(name) = path + .path + .segments + .last() + .map(|segment| segment.ident.to_string()) + { + self.count += usize::from(match self.label { + "deploy" => name == "validate_prebid" || name == "validate_integration", + "plan" => name == "register_for_plan", + "mediator" => name == "register_providers", + _ => false, + }); + } + visit::visit_expr_call(self, call); + } + + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + if self.label == "deploy" && call.method == "integration_config" { + self.count += 1; + } + visit::visit_expr_method_call(self, call); + } + } + let mut finder = Finder { label, count: 0 }; + finder.visit_stmt(statement); + finder.count +} + +fn deploy_direct_call(call: &ExprCall) -> bool { + let Expr::Path(function) = call.func.as_ref() else { + return false; + }; + if function.qself.is_some() || function.path.segments.len() != 1 { + return false; + } + let segment = &function.path.segments[0]; + if segment.ident == "validate_prebid" { + return matches!(segment.arguments, syn::PathArguments::None) + && call.args.len() == 2 + && call + .args + .first() + .is_some_and(|argument| is_ident_path(argument, "settings")) + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident_path(argument, "plan")); + } + if segment.ident != "validate_integration" || call.args.len() != 2 { + return false; + } + let Some(id) = call.args.iter().nth(1).and_then(literal_string) else { + return false; + }; + let expected_type = match id.as_str() { + "aps" => "ApsConfig", + "adserver_mock" => "AdServerMockConfig", + "testlight" => "TestlightConfig", + "nextjs" => "NextJsIntegrationConfig", + "permutive" => "PermutiveConfig", + "lockr" => "LockrConfig", + "didomi" => "DidomiIntegrationConfig", + "sourcepoint" => "SourcepointConfig", + "osano" => "OsanoConfig", + "google_tag_manager" => "GoogleTagManagerConfig", + "gpt" => "GptConfig", + "gpt_diagnostics" => "GptDiagnosticsConfig", + _ => return false, + }; + is_ident_path( + call.args + .first() + .expect("validated deploy call should have settings"), + "settings", + ) && exact_path_type_argument(segment, &[expected_type]) +} + +fn exact_plain_call(call: &ExprCall, path: &[&str], arguments: &[&str]) -> bool { + matches!(call.func.as_ref(), Expr::Path(function) + if function.qself.is_none() + && path_segments_equal(&function.path, path) + && function.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) + && call.args.len() == arguments.len() + && call + .args + .iter() + .zip(arguments) + .all(|(argument, expected)| is_ident_path(argument, expected)) +} + +fn exact_method_type_argument(call: &syn::ExprMethodCall, expected: &[&str]) -> bool { + call.turbofish + .as_ref() + .is_some_and(|arguments| exact_generic_type_arguments(&arguments.args, expected)) +} + +fn exact_path_type_argument(segment: &syn::PathSegment, expected: &[&str]) -> bool { + let syn::PathArguments::AngleBracketed(arguments) = &segment.arguments else { + return false; + }; + exact_generic_type_arguments(&arguments.args, expected) +} + +fn exact_generic_type_arguments( + arguments: &Punctuated, + expected: &[&str], +) -> bool { + matches!(arguments.iter().collect::>().as_slice(), [syn::GenericArgument::Type(Type::Path(value))] + if value.qself.is_none() && path_segments_equal(&value.path, expected)) +} + +fn path_segments_equal(path: &syn::Path, expected: &[&str]) -> bool { + path.segments.len() == expected.len() + && path + .segments + .iter() + .zip(expected) + .all(|(segment, expected)| segment.ident == expected) +} + +fn call_named(call: &ExprCall, expected: &str) -> bool { + matches!(call.func.as_ref(), Expr::Path(path) if path.path.segments.last().is_some_and(|segment| segment.ident == expected)) +} + +fn ensure_input_bound(label: &str, source: &str) -> Result<(), Report> { + if source.len() > MAX_INVENTORY_INPUT_BYTES { + Err(invalid_manifest(format!( + "{label} exceeds the 4 MiB input limit" + ))) + } else { + Ok(()) + } +} + +#[derive(Default)] +struct DeployVisitor { + ids: BTreeSet, + error: Option, +} + +impl<'ast> syn::visit::Visit<'ast> for DeployVisitor { + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + let Expr::Path(function) = call.func.as_ref() else { + visit::visit_expr_call(self, call); + return; + }; + let Some(name) = function + .path + .segments + .last() + .map(|segment| segment.ident.to_string()) + else { + visit::visit_expr_call(self, call); + return; + }; + if name == "validate_prebid" { + self.insert("prebid"); + } else if name == "validate_integration" { + match call.args.iter().nth(1).and_then(literal_string) { + Some(id) => self.insert(&id), + None => { + self.error = Some("deploy validator ID must be a string literal".to_owned()) + } + } + } else if !matches!( + name.as_str(), + "validate_config_for_startup" + | "validate_config_for_deploy" + | "validate_datadome" + | "Some" + | "Ok" + ) { + self.error = Some(format!("unsupported deploy validator call: {name}")); + } + visit::visit_expr_call(self, call); + } + + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + if call.method == "integration_config" { + match call.args.first().and_then(literal_string) { + Some(id) => self.insert(&id), + None => { + self.error = + Some("deploy integration_config ID must be a string literal".to_owned()); + } + } + } + visit::visit_expr_method_call(self, call); + } +} + +impl DeployVisitor { + fn insert(&mut self, id: &str) { + if !self.ids.insert(id.to_owned()) && self.error.is_none() { + self.error = Some(format!("duplicate deploy integration ID: {id}")); + } + } +} + +#[derive(Default)] +struct PlanRegistrationVisitor { + ids: BTreeSet, + error: Option, +} + +impl<'ast> syn::visit::Visit<'ast> for PlanRegistrationVisitor { + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + if let Expr::Path(function) = call.func.as_ref() { + let segments = function.path.segments.iter().collect::>(); + if segments + .last() + .is_some_and(|segment| segment.ident == "register_for_plan") + && let Some(module) = segments.iter().rev().nth(1) + && !self.ids.insert(module.ident.to_string()) + { + self.error = Some(format!("duplicate plan registration ID: {}", module.ident)); + } + } + visit::visit_expr_call(self, call); + } +} + +#[derive(Default)] +struct MediatorVisitor { + ids: BTreeSet, + error: Option, +} + +impl<'ast> syn::visit::Visit<'ast> for MediatorVisitor { + fn visit_expr_call(&mut self, call: &'ast ExprCall) { + if let Expr::Path(function) = call.func.as_ref() { + let segments = function.path.segments.iter().collect::>(); + if segments + .last() + .is_some_and(|segment| segment.ident == "register_providers") + && let Some(module) = segments.iter().rev().nth(1) + && !self.ids.insert(module.ident.to_string()) + { + self.error = Some(format!("duplicate mediator ID: {}", module.ident)); + } + } + visit::visit_expr_call(self, call); + } +} + +fn extract_builder_ids(items: &[Item]) -> Result, Report> { + let block = exact_top_level_function(items, "builders", "builder registry")?; + let Some(syn::Stmt::Expr(expression, None)) = block.stmts.last() else { + return Err(invalid_manifest( + "builder registry must end with an array expression", + )); + }; + let Expr::Reference(reference) = expression else { + return Err(invalid_manifest( + "builder registry must return a borrowed array", + )); + }; + let Expr::Array(array) = reference.expr.as_ref() else { + return Err(invalid_manifest( + "builder registry must return a borrowed array", + )); + }; + let mut ids = BTreeSet::new(); + for expression in &array.elems { + let Expr::Struct(record) = expression else { + return Err(invalid_manifest("unknown builder registry expression")); + }; + if record + .path + .segments + .last() + .is_none_or(|segment| segment.ident != "IntegrationBuilder") + || record.rest.is_some() + || record.fields.len() != 2 + { + return Err(invalid_manifest("unknown builder record shape")); + } + let Some(id) = record + .fields + .iter() + .find(|field| member_is(&field.member, "id")) + .and_then(|field| literal_string(&field.expr)) + else { + return Err(invalid_manifest("builder ID must be a string literal")); + }; + if !ids.insert(id.clone()) { + return Err(invalid_manifest(format!("duplicate builder ID: {id}"))); + } + } + Ok(ids) +} + +fn extract_profile_ids(items: &[Item]) -> Result, Report> { + let mut constants = BTreeMap::new(); + let mut registration = None; + for item in items { + let Item::Const(constant) = item else { + continue; + }; + if !is_production_item(&constant.attrs, "profile registry")? { + continue; + } + if let Some(value) = literal_string(&constant.expr) + && constants + .insert(constant.ident.to_string(), value) + .is_some() + { + return Err(invalid_manifest(format!( + "duplicate profile string constant: {}", + constant.ident + ))); + } + if constant.ident == "PROFILE_REGISTRATIONS" && registration.replace(constant).is_some() { + return Err(invalid_manifest("duplicate profile registry constant")); + } + } + let registration = + registration.ok_or_else(|| invalid_manifest("missing profile registry constant"))?; + let Expr::Array(array) = registration.expr.as_ref() else { + return Err(invalid_manifest("profile registry must be an array")); + }; + let mut ids = BTreeSet::new(); + for expression in &array.elems { + let Expr::Struct(record) = expression else { + return Err(invalid_manifest("unknown profile registry expression")); + }; + let Some(id_expression) = record + .fields + .iter() + .find(|field| member_is(&field.member, "id")) + .map(|field| &field.expr) + else { + return Err(invalid_manifest("profile record is missing id")); + }; + let id = literal_string(id_expression).or_else(|| { + let Expr::Path(path) = id_expression else { + return None; + }; + path.path + .get_ident() + .and_then(|identifier| constants.get(&identifier.to_string()).cloned()) + }); + let Some(id) = id else { + return Err(invalid_manifest( + "profile ID must resolve to a string constant", + )); + }; + if !ids.insert(id.clone()) { + return Err(invalid_manifest(format!("duplicate profile ID: {id}"))); + } + } + Ok(ids) +} + +fn literal_string(expression: &Expr) -> Option { + let Expr::Lit(ExprLit { + lit: Lit::Str(value), + .. + }) = expression + else { + return None; + }; + Some(value.value()) +} + +fn member_is(member: &Member, expected: &str) -> bool { + matches!(member, Member::Named(identifier) if identifier == expected) +} + +fn js_module_id(path: &str) -> Option { + const PREFIX: &str = "crates/trusted-server-js/lib/src/integrations/"; + let remainder = path.strip_prefix(PREFIX)?; + let id = remainder.strip_suffix("/index.ts")?; + (!id.is_empty() && !id.contains('/')).then(|| id.to_owned()) +} + +/// Require exact equality on every integration inventory axis. +/// +/// # Errors +/// +/// Returns the first stable axis whose observed set differs from the checked +/// inventory. +pub fn validate_inventory( + expected: &IntegrationInventory, + observed: &IntegrationInventory, +) -> Result<(), Report> { + compare("deploy", &expected.deploy_ids, &observed.deploy_ids)?; + compare("builder", &expected.builder_ids, &observed.builder_ids)?; + compare( + "plan", + &expected.plan_registration_ids, + &observed.plan_registration_ids, + )?; + compare("profile", &expected.profile_ids, &observed.profile_ids)?; + compare("mediator", &expected.mediator_ids, &observed.mediator_ids)?; + compare( + "js source", + &expected.js_source_module_ids, + &observed.js_source_module_ids, + )?; + compare( + "js bundle", + &expected.js_bundle_ids, + &observed.js_bundle_ids, + )?; + compare("loading", &expected.loading_modes, &observed.loading_modes)?; + compare("capability", &expected.capabilities, &observed.capabilities)?; + compare("operational", &expected.operational, &observed.operational) +} + +fn is_review_date(value: &str) -> bool { + if !(value.len() == 10 + && value.as_bytes()[4] == b'-' + && value.as_bytes()[7] == b'-' + && value + .bytes() + .enumerate() + .all(|(index, byte)| matches!(index, 4 | 7) || byte.is_ascii_digit())) + { + return false; + } + let year = value[0..4].parse::().unwrap_or(0); + let month = value[5..7].parse::().unwrap_or(0); + let day = value[8..10].parse::().unwrap_or(0); + valid_calendar_date(year, month, day) +} + +fn valid_calendar_date(year: u32, month: u32, day: u32) -> bool { + let leap = year.is_multiple_of(4) && (!year.is_multiple_of(100) || year.is_multiple_of(400)); + let maximum = match month { + 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, + 4 | 6 | 9 | 11 => 30, + 2 if leap => 29, + 2 => 28, + _ => return false, + }; + year > 0 && (1..=maximum).contains(&day) +} + +fn compare( + axis: &'static str, + expected: &T, + observed: &T, +) -> Result<(), Report> { + if expected == observed { + Ok(()) + } else { + Err(Report::new(IntegrationError::InventoryDrift { axis })) + } +} + +fn unique_values( + values: Vec, + axis: &'static str, +) -> Result, Report> { + if values.len() > MAX_INVENTORY_ENTRIES { + return Err(invalid_manifest(format!( + "{axis} cardinality limit exceeded" + ))); + } + if values + .iter() + .any(|value| value.len() > MAX_INVENTORY_STRING_BYTES) + { + return Err(invalid_manifest(format!( + "{axis} contains an oversized string" + ))); + } + let count = values.len(); + let unique = values.into_iter().collect::>(); + if unique.len() != count { + Err(invalid_manifest(format!("duplicate {axis} value"))) + } else { + Ok(unique) + } +} + +fn strings(values: I) -> BTreeSet +where + I: IntoIterator, + I::Item: AsRef, +{ + values + .into_iter() + .map(|value| value.as_ref().to_owned()) + .collect() +} + +fn invalid_manifest(detail: impl Into) -> Report { + Report::new(IntegrationError::InvalidManifest { + detail: detail.into(), + }) +} + +fn ensure_manifest_strings<'a>( + axis: &str, + values: impl IntoIterator, +) -> Result<(), Report> { + if values + .into_iter() + .any(|value| value.len() > MAX_INVENTORY_STRING_BYTES) + { + Err(invalid_manifest(format!( + "{axis} contains an oversized string" + ))) + } else { + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const PROXY_LOOP: &str = r#" + for proxy in registration.proxies { + for route in proxy.routes() { + let value = (proxy.clone(), registration.integration_id); + let matchit_path = if route.path.ends_with("/*") { + format!( + "{}/{{*rest}}", + route.path.strip_suffix("/*").expect("path should end with '/*'") + ) + } else { + route.path.clone() + }; + let router = match route.method { + Method::GET => &mut inner.get_router, + Method::POST => &mut inner.post_router, + Method::PUT => &mut inner.put_router, + Method::DELETE => &mut inner.delete_router, + Method::PATCH => &mut inner.patch_router, + Method::HEAD => &mut inner.head_router, + Method::OPTIONS => &mut inner.options_router, + _ => { + log::warn!( + "Unsupported HTTP method {} for route {}", + route.method, + route.path + ); + continue; + } + }; + if let Err(e) = router.insert(&matchit_path, value) { + return Err(Report::new(TrustedServerError::Configuration { + message: format!( + "Integration route registration failed for {} {}: {:?}", + route.method, route.path, e + ), + })); + } + inner.routes.push((route, registration.integration_id)); + } + } + "#; + + fn proxy_loop(source: &str) -> syn::ExprForLoop { + let expression = syn::parse_str::(source).expect("proxy loop fixture should parse"); + let Expr::ForLoop(expression) = expression else { + panic!("proxy loop fixture should be a for expression"); + }; + expression + } + + #[test] + fn proxy_registration_loop_binds_every_nested_dataflow_step() { + let proxy = proxy_loop(PROXY_LOOP); + let Some(syn::Stmt::Expr(Expr::ForLoop(routes), _)) = proxy.body.stmts.first() else { + panic!("proxy fixture should contain the route loop"); + }; + assert!(exact_proxy_value_local(&routes.body.stmts[0]), "value"); + let Some(Expr::If(path)) = exact_local_initializer(&routes.body.stmts[1], "matchit_path") + .map(strip_expression_parens) + else { + panic!("path fixture should be an if expression"); + }; + assert!( + matches!(strip_expression_parens(&path.cond), Expr::MethodCall(call) + if call.method == "ends_with" + && exact_field(&call.receiver, "route", "path") + && call.args.len() == 1 + && call.args.first().and_then(literal_string).as_deref() == Some("/*")), + "path condition" + ); + let Some(wildcard) = path + .then_branch + .stmts + .as_slice() + .first() + .filter(|_| path.then_branch.stmts.len() == 1) + .and_then(statement_macro) + else { + panic!("path wildcard should be a macro"); + }; + let parser = Punctuated::::parse_terminated; + let arguments = parser + .parse2(wildcard.tokens.clone()) + .expect("path wildcard macro should parse"); + assert_eq!(arguments.len(), 2, "path wildcard arguments"); + assert_eq!( + arguments.first().and_then(literal_string).as_deref(), + Some("{}/{{*rest}}"), + "path wildcard format" + ); + assert!( + arguments + .iter() + .nth(1) + .is_some_and(exact_matchit_path_expression), + "path wildcard expression" + ); + assert!( + safe_registration_macro("plan", "format", wildcard), + "path wildcard" + ); + assert!( + path.else_branch.as_ref().is_some_and(|(_, alternative)| { + matches!(strip_expression_parens(alternative), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [syn::Stmt::Expr(Expr::MethodCall(call), None)] + if call.method == "clone" + && call.args.is_empty() + && exact_field(&call.receiver, "route", "path"))) + }), + "path literal" + ); + assert!(exact_matchit_path_local(&routes.body.stmts[1]), "path"); + assert!(exact_proxy_router_local(&routes.body.stmts[2]), "router"); + assert!(exact_proxy_insert_branch(&routes.body.stmts[3]), "insert"); + assert!(exact_registered_route_push(&routes.body.stmts[4]), "record"); + assert!(exact_proxy_registration_loop(&syn::Stmt::Expr( + Expr::ForLoop(proxy), + None, + ))); + + for (original, replacement) in [ + ( + "let value = (proxy.clone(), registration.integration_id);", + "let value = ();", + ), + ( + "let matchit_path = if route.path.ends_with(\"/*\") {", + "let matchit_path = if false {", + ), + ( + "let router = match route.method {", + "let router = match Method::GET {", + ), + ( + "if let Err(e) = router.insert(&matchit_path, value) {", + "if false {", + ), + ( + "inner.routes.push((route, registration.integration_id));", + "inner.routes.push((route, \"decoy\"));", + ), + ] { + let changed = PROXY_LOOP.replacen(original, replacement, 1); + assert_ne!(changed, PROXY_LOOP, "fixture must change"); + assert!( + !exact_proxy_registration_loop(&syn::Stmt::Expr( + Expr::ForLoop(proxy_loop(&changed)), + None, + )), + "nested replacement must fail: {replacement}" + ); + } + } +} diff --git a/tools/docs-parity/src/lib.rs b/tools/docs-parity/src/lib.rs new file mode 100644 index 000000000..7cc07f2ec --- /dev/null +++ b/tools/docs-parity/src/lib.rs @@ -0,0 +1,360 @@ +//! Checked documentation records and repository-safe generation. + +#[cfg(not(any(target_os = "linux", target_os = "macos")))] +compile_error!("docs-parity supports only Linux and macOS hosts"); + +use std::env; +use std::path::PathBuf; + +use clap::{Args, Parser, Subcommand}; +use error_stack::{Report, ResultExt as _}; + +use crate::repository::{NormalizedRelativePath, Repository}; + +pub mod classification; +pub mod integrations; +pub mod markdown; +pub mod model; +mod repository; +pub mod routes; +pub mod scanner; +pub mod settings; + +/// Process exit code for a successful check or update. +pub const EXIT_SUCCESS: i32 = 0; + +/// Process exit code for generated-record drift. +pub const EXIT_DRIFT: i32 = 1; + +/// Process exit code for invalid input or an operational failure. +pub const EXIT_ERROR: i32 = 2; + +#[derive(Debug, derive_more::Display)] +pub enum DocsParityError { + #[display("cannot access the repository")] + Repository, + #[display("cannot read the current directory")] + CurrentDirectory, + #[display("documentation source classification failed")] + Classification, + #[display("documentation sensitive-data scan failed")] + Scanner, + #[display("documentation generation or link validation failed")] + Markdown, + #[display("configuration documentation semantics failed")] + Settings, + #[display("integration documentation semantics failed")] + Integrations, + #[display("adapter route documentation semantics failed")] + Routes, +} + +impl core::error::Error for DocsParityError {} + +#[derive(Debug, Parser)] +#[command( + name = "docs-parity", + version, + about = "Check and update deterministic documentation records" +)] +struct Cli { + #[command(subcommand)] + command: Command, +} + +#[derive(Debug, Subcommand)] +enum Command { + /// Check repository safety and generated tracked-path records without writing. + Check(CheckArguments), + /// Atomically update a generated tracked-path record. + Update(UpdateArguments), + /// Check or update the closed tracked-file classification universe. + Classify(ClassifyArguments), + /// Check sensitive data or bootstrap exact review candidates. + Scan(ScanArguments), + /// Check or atomically update named generated Markdown regions. + Generate(GenerateArguments), + /// Check local or explicitly requested external Markdown links. + Links(LinksArguments), + /// Check extracted settings semantics and the source-template contract. + Settings(SettingsArguments), + /// Check integration inventories and behavioral receipt domains. + Integrations(IntegrationsArguments), + /// Check adapter route and support inventories. + Routes(RoutesArguments), +} + +#[derive(Args, Debug)] +struct SettingsArguments { + /// Validate settings records without changing repository bytes. + #[arg(long, required = true)] + check: bool, +} + +#[derive(Args, Debug)] +struct IntegrationsArguments { + /// Validate integration records without changing repository bytes. + #[arg(long, required = true)] + check: bool, +} + +#[derive(Args, Debug)] +struct RoutesArguments { + /// Validate route records without changing repository bytes. + #[arg(long, required = true)] + check: bool, +} + +#[derive(Args, Debug)] +struct GenerateArguments { + /// Validate generated bytes without changing repository files. + #[arg(long, conflicts_with = "update", required_unless_present = "update")] + check: bool, + /// Atomically replace drifted generated region bodies. + #[arg(long, conflicts_with = "check", required_unless_present = "check")] + update: bool, +} + +#[derive(Args, Debug)] +struct LinksArguments { + /// Validate relative files, routes, anchors, and publication inventories. + #[arg( + long, + conflicts_with = "external", + required_unless_present = "external" + )] + local: bool, + /// Perform the scheduled/manual bounded external network check. + #[arg(long, conflicts_with = "local", required_unless_present = "local")] + external: bool, + /// Validate without changing repository bytes. + #[arg(long, required = true)] + check: bool, +} + +#[derive(Args, Debug)] +struct ClassifyArguments { + /// Validate manifests without changing repository bytes. + #[arg(long, conflicts_with = "update", required_unless_present = "update")] + check: bool, + /// Bootstrap or refresh deterministic candidate manifests. + #[arg(long, conflicts_with = "check", required_unless_present = "check")] + update: bool, +} + +#[derive(Args, Debug)] +struct ScanArguments { + /// Validate all tracked files without changing repository bytes. + #[arg( + long, + conflicts_with = "bootstrap", + required_unless_present = "bootstrap" + )] + check: bool, + /// Replace the allowlist with deterministic, unreviewed finding candidates. + #[arg(long, conflicts_with = "check", required_unless_present = "check")] + bootstrap: bool, +} + +#[derive(Args, Debug)] +struct CheckArguments { + /// Repository-relative generated record to compare. + #[arg(long)] + tracked_paths_record: Option, +} + +#[derive(Args, Debug)] +struct UpdateArguments { + /// Repository-relative generated record to replace atomically. + #[arg(long)] + tracked_paths_record: PathBuf, +} + +/// Result of a documentation parity invocation. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum Outcome { + /// All requested checks passed. + Clean, + /// A generated record differs from its deterministic source. + Drift, + /// The requested record was updated successfully. + Updated, +} + +impl Outcome { + /// Return the stable process exit code for this outcome. + #[must_use] + pub const fn exit_code(self) -> i32 { + match self { + Self::Clean | Self::Updated => EXIT_SUCCESS, + Self::Drift => EXIT_DRIFT, + } + } +} + +/// Parse process arguments and run the selected subcommand. +/// +/// Clap handles help, version, and invalid command lines before this function +/// returns. Repository failures are returned as [`Report`]. +/// +/// # Errors +/// +/// Returns an error when the current directory or repository cannot be read, +/// when a path crosses the repository boundary, or when an update cannot be +/// committed atomically. +pub fn run_from_env() -> Result> { + let cli = Cli::parse(); + let current_directory = env::current_dir().change_context(DocsParityError::CurrentDirectory)?; + let repository = + Repository::discover(¤t_directory).change_context(DocsParityError::Repository)?; + + match cli.command { + Command::Check(arguments) => check(&repository, arguments), + Command::Update(arguments) => update(&repository, &arguments), + Command::Classify(arguments) => classify(&repository, &arguments), + Command::Scan(arguments) => scan(&repository, &arguments), + Command::Generate(arguments) => generate(&repository, &arguments), + Command::Links(arguments) => links(&repository, &arguments), + Command::Settings(arguments) => settings(&repository, &arguments), + Command::Integrations(arguments) => integrations(&repository, &arguments), + Command::Routes(arguments) => routes(&repository, &arguments), + } +} + +fn integrations( + repository: &Repository, + arguments: &IntegrationsArguments, +) -> Result> { + debug_assert!( + arguments.check, + "clap should require integration check mode" + ); + integrations::check_repository(repository).change_context(DocsParityError::Integrations)?; + Ok(Outcome::Clean) +} + +fn routes( + repository: &Repository, + arguments: &RoutesArguments, +) -> Result> { + debug_assert!(arguments.check, "clap should require route check mode"); + routes::check_repository(repository).change_context(DocsParityError::Routes)?; + Ok(Outcome::Clean) +} + +fn settings( + repository: &Repository, + arguments: &SettingsArguments, +) -> Result> { + debug_assert!(arguments.check, "clap should require settings check mode"); + settings::check_repository(repository).change_context(DocsParityError::Settings)?; + Ok(Outcome::Clean) +} + +fn links( + repository: &Repository, + arguments: &LinksArguments, +) -> Result> { + debug_assert!(arguments.check, "clap should require link check mode"); + if arguments.local { + markdown::check_local_repository(repository).change_context(DocsParityError::Markdown)?; + } else { + debug_assert!( + arguments.external, + "clap should require one link-check scope" + ); + markdown::check_external_repository(repository) + .change_context(DocsParityError::Markdown)?; + } + Ok(Outcome::Clean) +} + +fn generate( + repository: &Repository, + arguments: &GenerateArguments, +) -> Result> { + let drift = markdown::generate(repository, arguments.update) + .change_context(DocsParityError::Markdown)?; + if arguments.check && drift { + Ok(Outcome::Drift) + } else { + Ok(if arguments.update { + Outcome::Updated + } else { + Outcome::Clean + }) + } +} + +fn scan( + repository: &Repository, + arguments: &ScanArguments, +) -> Result> { + if arguments.check { + scanner::check(repository).change_context(DocsParityError::Scanner)?; + Ok(Outcome::Clean) + } else { + debug_assert!(arguments.bootstrap, "clap should require one scanner mode"); + scanner::bootstrap(repository).change_context(DocsParityError::Scanner)?; + Ok(Outcome::Updated) + } +} + +fn classify( + repository: &Repository, + arguments: &ClassifyArguments, +) -> Result> { + if arguments.check { + classification::check(repository).change_context(DocsParityError::Classification)?; + Ok(Outcome::Clean) + } else { + debug_assert!( + arguments.update, + "clap should require one classification mode" + ); + classification::update(repository).change_context(DocsParityError::Classification)?; + Ok(Outcome::Updated) + } +} + +fn check( + repository: &Repository, + arguments: CheckArguments, +) -> Result> { + let expected = repository + .tracked_paths_record() + .change_context(DocsParityError::Repository)?; + + let Some(record) = arguments.tracked_paths_record else { + return Ok(Outcome::Clean); + }; + let record = + NormalizedRelativePath::new(&record).change_context(DocsParityError::Repository)?; + let actual = repository + .read_optional(&record) + .change_context(DocsParityError::Repository)?; + + if actual.as_deref() == Some(expected.as_slice()) { + Ok(Outcome::Clean) + } else { + Ok(Outcome::Drift) + } +} + +fn update( + repository: &Repository, + arguments: &UpdateArguments, +) -> Result> { + let record = NormalizedRelativePath::new(&arguments.tracked_paths_record) + .change_context(DocsParityError::Repository)?; + let original = repository + .read_optional(&record) + .change_context(DocsParityError::Repository)?; + let expected = repository + .tracked_paths_record() + .change_context(DocsParityError::Repository)?; + repository + .replace_atomically_after_precommit_validation(&record, original.as_deref(), &expected) + .change_context(DocsParityError::Repository)?; + Ok(Outcome::Updated) +} diff --git a/tools/docs-parity/src/main.rs b/tools/docs-parity/src/main.rs new file mode 100644 index 000000000..8318c4f82 --- /dev/null +++ b/tools/docs-parity/src/main.rs @@ -0,0 +1,16 @@ +use std::io::{self, Write as _}; +use std::process; + +fn main() { + match docs_parity::run_from_env() { + Ok(outcome) if outcome.exit_code() != docs_parity::EXIT_SUCCESS => { + process::exit(outcome.exit_code()); + } + Ok(_) => {} + Err(report) => { + let mut standard_error = io::stderr().lock(); + let _ = writeln!(standard_error, "docs-parity: {report:?}"); + process::exit(docs_parity::EXIT_ERROR); + } + } +} diff --git a/tools/docs-parity/src/markdown.rs b/tools/docs-parity/src/markdown.rs new file mode 100644 index 000000000..814ffa908 --- /dev/null +++ b/tools/docs-parity/src/markdown.rs @@ -0,0 +1,4120 @@ +//! Deterministic generated regions and semantic Markdown link validation. + +use std::collections::{BTreeMap, BTreeSet, VecDeque}; +use std::io::Read; +use std::path::Path; +use std::process::{Command, Stdio}; +use std::sync::{ + LazyLock, + mpsc::{self, TryRecvError}, +}; +use std::thread; +use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; + +use error_stack::{Report, ResultExt as _}; +use github_slugger::Slugger as GithubSlugger; +use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag, TagEnd}; +use regex::Regex; +use scraper::{Html, Selector}; +use serde::Deserialize; +use serde_yaml::Value as YamlValue; +use sha2::{Digest as _, Sha256}; +use unicode_normalization::UnicodeNormalization as _; +use url::Url; + +use crate::repository::{NormalizedRelativePath, Repository}; + +const MAXIMUM_DOCUMENT_BYTES: usize = 4 * 1024 * 1024; +const MAXIMUM_FRONTMATTER_BYTES: usize = 64 * 1024; +const MAXIMUM_LINK_BYTES: usize = 8 * 1024; +const MAXIMUM_REDIRECTS: usize = 5; +const MAXIMUM_RETRY_ATTEMPTS: usize = 3; +const MAXIMUM_RESPONSE_HEADER_BYTES: usize = 64 * 1024; +const MAXIMUM_RESPONSE_BODY_BYTES: usize = 64 * 1024; +const MAXIMUM_RESPONSE_HEADERS: usize = 128; +const MAXIMUM_HEADER_NAME_BYTES: usize = 256; +const MAXIMUM_HEADER_VALUE_BYTES: usize = 8 * 1024; +const MAXIMUM_HEADER_LINE_BYTES: usize = 8 * 1024; +const CURL_TRAILER_BYTES: usize = 128; +const CURL_WRITE_OUT: &str = "\nDOCS_PARITY_COUNTS:%{size_header}:%{size_download}\n"; +const CURL_EXECUTABLE: &str = "/usr/bin/curl"; +const PROCESS_POLL_INTERVAL: Duration = Duration::from_millis(10); +const PAGES_MANIFEST: &str = "tools/docs-parity/manifests/pages.toml"; +const ORPHANS_MANIFEST: &str = "tools/docs-parity/manifests/orphans.toml"; +const DIAGRAMS_MANIFEST: &str = "tools/docs-parity/manifests/diagrams.toml"; +const MANIFEST_VERSION: u32 = 1; + +/// Failure while parsing or validating generated Markdown records. +#[derive(Debug, derive_more::Display)] +pub enum MarkdownError { + /// A generated marker does not follow the closed grammar. + #[display("invalid generated marker: {detail}")] + Marker { + /// Stable diagnostic detail. + detail: String, + }, + /// A generated record is malformed or not bound exactly once. + #[display("invalid generated record: {detail}")] + GeneratedRecord { + /// Stable diagnostic detail. + detail: String, + }, + /// Markdown input is malformed or violates a local-link contract. + #[display("invalid Markdown link: {detail}")] + LocalLink { + /// Stable diagnostic detail. + detail: String, + }, + /// An external link violates its bounded transport contract. + #[display("invalid external link: {detail}")] + ExternalLink { + /// Stable diagnostic detail. + detail: String, + }, +} + +impl core::error::Error for MarkdownError {} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct PagesManifest { + version: u32, + reviewed: bool, + site_root: String, + vitepress_config: String, + #[serde(default)] + pages: Vec, + #[serde(default)] + regions: Vec, + #[serde(default)] + ownership: Vec, + #[serde(default)] + external_exceptions: Vec, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)] +enum PageRecord { + Live { + path: String, + route: String, + navigation: bool, + }, + Tombstone { + route: String, + replacement: String, + }, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct RegionRecord { + name: String, + path: String, + columns: Vec, + #[serde(default)] + rows: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct GeneratedRowRecord { + key: String, + cells: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct OwnershipManifestRecord { + name: String, + path: String, + owner: String, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct ExternalExceptionRecord { + url: String, + owner: String, + reason: String, + expires_at: String, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct OrphansManifest { + version: u32, + reviewed: bool, + #[serde(default)] + exceptions: Vec, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +enum OrphanKind { + Manual, + Tombstone, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct OrphanRecord { + kind: OrphanKind, + #[serde(default)] + path: Option, + #[serde(default)] + route: Option, + #[serde(default)] + replacement: Option, + owner: String, + reason: String, + expires_at: String, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct DiagramsManifest { + version: u32, + reviewed: bool, + #[serde(default)] + diagrams: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct DiagramRecord { + path: String, + selector: String, + fingerprint: String, + prose_anchor: String, + owner: String, +} + +fn read_pages_manifest(repository: &Repository) -> Result> { + let path = NormalizedRelativePath::new(Path::new(PAGES_MANIFEST)).change_context( + MarkdownError::GeneratedRecord { + detail: "pages manifest path is invalid".to_owned(), + }, + )?; + let bytes = repository + .read_optional(&path) + .change_context(MarkdownError::GeneratedRecord { + detail: "cannot read pages manifest".to_owned(), + })? + .ok_or_else(|| generated_error("pages manifest is missing"))?; + if bytes.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(generated_error(format!( + "pages manifest exceeds {MAXIMUM_DOCUMENT_BYTES} bytes" + ))); + } + let text = core::str::from_utf8(&bytes) + .map_err(|_error| generated_error("pages manifest is not valid UTF-8"))?; + let manifest: PagesManifest = toml::from_str(text) + .map_err(|error| generated_error(format!("pages manifest is malformed: {error}")))?; + validate_pages_header(&manifest)?; + Ok(manifest) +} + +fn validate_pages_header(manifest: &PagesManifest) -> Result<(), Report> { + if manifest.version != MANIFEST_VERSION { + return Err(generated_error(format!( + "pages manifest version must be {MANIFEST_VERSION}" + ))); + } + if !manifest.reviewed { + return Err(generated_error( + "pages manifest must be explicitly reviewed", + )); + } + validate_repo_path(&manifest.site_root)?; + validate_repo_path(&manifest.vitepress_config)?; + Ok(()) +} + +fn read_toml_manifest Deserialize<'de>>( + repository: &Repository, + manifest_path: &str, +) -> Result> { + let path = NormalizedRelativePath::new(Path::new(manifest_path)).change_context( + MarkdownError::LocalLink { + detail: format!("unsafe manifest path: {manifest_path}"), + }, + )?; + let bytes = repository + .read_optional(&path) + .change_context(MarkdownError::LocalLink { + detail: format!("cannot read manifest: {manifest_path}"), + })? + .ok_or_else(|| local_error(format!("manifest is missing: {manifest_path}")))?; + if bytes.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(local_error(format!( + "manifest exceeds {MAXIMUM_DOCUMENT_BYTES} bytes: {manifest_path}" + ))); + } + let text = core::str::from_utf8(&bytes) + .map_err(|_error| local_error(format!("manifest is not UTF-8: {manifest_path}")))?; + toml::from_str(text) + .map_err(|error| local_error(format!("malformed manifest {manifest_path}: {error}"))) +} + +/// Check or atomically update every generated region declared in `pages.toml`. +/// +/// The function validates and renders all documents before the first write. +/// In check mode it never writes and returns `true` when any document drifts. +/// +/// # Errors +/// +/// Returns an error for malformed governance, unsafe repository paths or +/// entries, missing target documents, invalid markers, and atomic write +/// failures. +pub(crate) fn generate( + repository: &Repository, + update: bool, +) -> Result> { + let manifest = read_pages_manifest(repository)?; + let mut regions_by_path = BTreeMap::>::new(); + for record in manifest.regions { + validate_repo_path(&record.path)?; + regions_by_path + .entry(record.path) + .or_default() + .push(GeneratedRegion { + name: record.name, + columns: record.columns, + rows: record + .rows + .into_iter() + .map(|row| GeneratedRow { + key: row.key, + cells: row.cells, + }) + .collect(), + }); + } + let mut ownership_by_path = BTreeMap::>::new(); + for record in manifest.ownership { + validate_repo_path(&record.path)?; + ownership_by_path + .entry(record.path) + .or_default() + .push(OwnershipRecord { + name: record.name, + owner: record.owner, + }); + } + let target_paths = regions_by_path + .keys() + .chain(ownership_by_path.keys()) + .cloned() + .collect::>(); + let mut updates = Vec::new(); + for path_text in target_paths { + let path = NormalizedRelativePath::new(Path::new(&path_text)).change_context( + MarkdownError::GeneratedRecord { + detail: format!("unsafe generated target: {path_text}"), + }, + )?; + let original = repository + .read_optional(&path) + .change_context(MarkdownError::GeneratedRecord { + detail: format!("cannot safely read generated target: {path_text}"), + })? + .ok_or_else(|| generated_error(format!("generated target is missing: {path_text}")))?; + let empty_regions = Vec::new(); + let empty_ownership = Vec::new(); + let rendered = render_generated_document( + &original, + regions_by_path.get(&path_text).unwrap_or(&empty_regions), + ownership_by_path + .get(&path_text) + .unwrap_or(&empty_ownership), + )?; + if rendered != original { + updates.push((path, original, rendered)); + } + } + let drift = !updates.is_empty(); + if update { + for (path, original, contents) in updates { + repository + .replace_atomically_after_precommit_validation(&path, Some(&original), &contents) + .change_context(MarkdownError::GeneratedRecord { + detail: format!( + "cannot atomically update generated target: {}", + path.as_path().display() + ), + })?; + } + } + Ok(drift) +} + +/// One deterministic row within a generated Markdown table. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct GeneratedRow { + /// Stable, unique ordering key. The key itself is not rendered. + pub key: String, + /// Cells rendered in the region's declared column order. + pub cells: Vec, +} + +/// A named, deterministic Markdown table region. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct GeneratedRegion { + /// Marker name using lowercase letters, digits, and hyphens. + pub name: String, + /// Non-empty table headings. + pub columns: Vec, + /// Rows sorted by [`GeneratedRow::key`] before rendering. + pub rows: Vec, +} + +/// Required ownership marker for adjacent manually maintained prose. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct OwnershipRecord { + /// Unique ownership marker name. + pub name: String, + /// Non-empty owner identity rendered in the marker. + pub owner: String, +} + +#[derive(Clone, Debug)] +struct RegionSpan { + name: String, + content_start: usize, + content_end: usize, + newline: &'static str, +} + +#[derive(Clone, Debug)] +struct OpenRegion { + name: String, + content_start: usize, + newline: &'static str, +} + +type MarkerParse = (Vec, BTreeSet<(String, String)>); + +/// Render every named region while preserving all bytes outside region bodies. +/// +/// Marker lines use the exact closed grammar +/// `` and +/// ``. Ownership markers use +/// ``. +/// +/// # Errors +/// +/// Returns an error for invalid UTF-8, oversized input, malformed or unsafe +/// markers, duplicate/missing/nested regions, unknown names, invalid rows, or +/// missing ownership attestations. +pub fn render_generated_document( + source: &[u8], + regions: &[GeneratedRegion], + ownership: &[OwnershipRecord], +) -> Result, Report> { + if source.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(generated_error("document exceeds 4194304 bytes")); + } + let text = core::str::from_utf8(source) + .map_err(|_error| generated_error("document is not valid UTF-8"))?; + let region_map = validate_regions(regions)?; + let ownership_map = validate_ownership(ownership)?; + let (mut spans, found_ownership) = parse_markers(text, ®ion_map, &ownership_map)?; + + for name in region_map.keys() { + let count = spans.iter().filter(|span| &span.name == name).count(); + if count != 1 { + return Err(generated_error(format!( + "record {name} must have exactly one marker pair; found {count}" + ))); + } + } + for (name, owner) in &ownership_map { + if !found_ownership.contains(&(name.clone(), owner.clone())) { + return Err(generated_error(format!( + "ownership marker {name} with owner {owner} is missing" + ))); + } + } + + spans.sort_by_key(|span| span.content_start); + let mut rendered = source.to_vec(); + for span in spans.into_iter().rev() { + let region = region_map + .get(&span.name) + .ok_or_else(|| generated_error(format!("unknown generated region: {}", span.name)))?; + let body = render_table(region, span.newline)?; + rendered.splice(span.content_start..span.content_end, body.bytes()); + if rendered.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(generated_error(format!( + "rendered document exceeds {MAXIMUM_DOCUMENT_BYTES} bytes" + ))); + } + } + Ok(rendered) +} + +fn validate_regions( + regions: &[GeneratedRegion], +) -> Result, Report> { + let mut result = BTreeMap::new(); + for region in regions { + validate_marker_component(®ion.name, "region name")?; + if region.columns.is_empty() { + return Err(generated_error(format!( + "region {} has no columns", + region.name + ))); + } + if result.insert(region.name.clone(), region.clone()).is_some() { + return Err(generated_error(format!( + "duplicate generated record: {}", + region.name + ))); + } + let mut keys = BTreeSet::new(); + for row in ®ion.rows { + if row.key.trim().is_empty() { + return Err(generated_error(format!( + "region {} has a blank row key", + region.name + ))); + } + if !keys.insert(row.key.as_str()) { + return Err(generated_error(format!( + "region {} has duplicate row key {}", + region.name, row.key + ))); + } + if row.cells.len() != region.columns.len() { + return Err(generated_error(format!( + "region {} row {} has {} cells; expected {}", + region.name, + row.key, + row.cells.len(), + region.columns.len() + ))); + } + } + } + Ok(result) +} + +fn validate_ownership( + records: &[OwnershipRecord], +) -> Result, Report> { + let mut result = BTreeMap::new(); + for record in records { + validate_marker_component(&record.name, "ownership name")?; + validate_marker_component(&record.owner, "owner")?; + if result + .insert(record.name.clone(), record.owner.clone()) + .is_some() + { + return Err(generated_error(format!( + "duplicate ownership record: {}", + record.name + ))); + } + } + Ok(result) +} + +fn validate_marker_component(value: &str, field: &str) -> Result<(), Report> { + let valid = !value.is_empty() + && value.len() <= 64 + && value.as_bytes()[0].is_ascii_lowercase() + && value + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'-'); + if valid { + Ok(()) + } else { + Err(generated_error(format!("invalid {field}: {value}"))) + } +} + +fn parse_markers( + text: &str, + regions: &BTreeMap, + ownership: &BTreeMap, +) -> Result> { + let mut spans = Vec::new(); + let mut found_ownership = BTreeSet::new(); + let mut open: Option = None; + let mut offset = 0; + while offset < text.len() { + let remaining = &text[offset..]; + let line_length = remaining + .find('\n') + .map_or(remaining.len(), |index| index + 1); + let raw_line = &remaining[..line_length]; + let (line, newline) = if let Some(line) = raw_line.strip_suffix("\r\n") { + (line, "\r\n") + } else if let Some(line) = raw_line.strip_suffix('\n') { + (line, "\n") + } else { + (raw_line, "") + }; + + if line.contains("docs-parity:") { + if let Some(name) = marker_name(line, "") { + validate_marker_component(name, "region name")?; + if newline.is_empty() { + return Err(marker_error("start marker must end its own line")); + } + if !regions.contains_key(name) { + return Err(marker_error(format!("unknown start marker: {name}"))); + } + if open.is_some() { + return Err(marker_error(format!("nested start marker: {name}"))); + } + if spans.iter().any(|span: &RegionSpan| span.name == name) { + return Err(marker_error(format!("duplicate marker pair: {name}"))); + } + open = Some(OpenRegion { + name: name.to_owned(), + content_start: offset + line_length, + newline: if newline == "\r\n" { "\r\n" } else { "\n" }, + }); + } else if let Some(name) = marker_name(line, "") { + validate_marker_component(name, "region name")?; + let Some(start) = open.take() else { + return Err(marker_error(format!("end marker without start: {name}"))); + }; + if start.name != name { + return Err(marker_error(format!( + "mismatched end marker {name}; expected {}", + start.name + ))); + } + spans.push(RegionSpan { + name: name.to_owned(), + content_start: start.content_start, + content_end: offset, + newline: start.newline, + }); + } else if let Some(inner) = marker_name(line, "") { + let Some((name, owner)) = inner.split_once(" owner=") else { + return Err(marker_error("malformed ownership marker")); + }; + validate_marker_component(name, "ownership name")?; + validate_marker_component(owner, "owner")?; + match ownership.get(name) { + Some(expected) if expected == owner => {} + Some(expected) => { + return Err(marker_error(format!( + "ownership marker {name} has owner {owner}; expected {expected}" + ))); + } + None => { + return Err(marker_error(format!("unknown ownership marker: {name}"))); + } + } + if !found_ownership.insert((name.to_owned(), owner.to_owned())) { + return Err(marker_error(format!("duplicate ownership marker: {name}"))); + } + } else { + return Err(marker_error(format!( + "unsafe marker placement or unknown marker: {line}" + ))); + } + } + offset += line_length; + } + if let Some(start) = open { + return Err(marker_error(format!("missing end marker: {}", start.name))); + } + Ok((spans, found_ownership)) +} + +fn marker_name<'a>(line: &'a str, prefix: &str, suffix: &str) -> Option<&'a str> { + line.strip_prefix(prefix)?.strip_suffix(suffix) +} + +fn render_table(region: &GeneratedRegion, newline: &str) -> Result> { + let mut rows = region.rows.clone(); + rows.sort_by(|left, right| left.key.cmp(&right.key)); + let mut output = String::new(); + output.push_str(&render_cells(®ion.columns)?); + output.push_str(newline); + output.push('|'); + for _column in ®ion.columns { + output.push_str(" --- |"); + } + output.push_str(newline); + for row in rows { + output.push_str(&render_cells(&row.cells)?); + output.push_str(newline); + } + Ok(output) +} + +fn render_cells(cells: &[String]) -> Result> { + let mut line = String::from("|"); + for cell in cells { + if cell.contains(['\r', '\n']) { + return Err(generated_error("generated cells cannot contain newlines")); + } + line.push(' '); + line.push_str(&cell.replace('\\', "\\\\").replace('|', "\\|")); + line.push_str(" |"); + } + Ok(line) +} + +fn marker_error(detail: impl Into) -> Report { + Report::new(MarkdownError::Marker { + detail: detail.into(), + }) +} + +fn generated_error(detail: impl Into) -> Report { + Report::new(MarkdownError::GeneratedRecord { + detail: detail.into(), + }) +} + +/// Logical Markdown source set governed by the link checker. +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub enum LinkSourceSet { + /// Maintained public `VitePress` source. + Public, + /// Maintained internal documentation under `docs/internal`. + MaintainedInternal, + /// Other maintained repository documentation. + Repository, +} + +/// One checked Markdown source and its exact contents. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct LinkSource { + /// Normalized repository-relative path. + pub path: String, + /// Governed source set. + pub set: LinkSourceSet, + /// UTF-8 Markdown bytes. + pub markdown: String, +} + +#[derive(Clone, Debug)] +struct ParsedMarkdown { + anchors: BTreeSet, + heading_anchors: BTreeSet, + links: Vec, + mermaid_diagrams: Vec, +} + +#[derive(Clone, Debug)] +struct ParsedDiagram { + selector: String, + fingerprint: String, +} + +#[derive(Clone, Debug)] +struct ParsedLink { + destination: String, + start: usize, + end: usize, +} + +struct LinkIndex<'a> { + source_by_path: &'a BTreeMap, + parsed_by_path: &'a BTreeMap, + route_to_path: &'a BTreeMap, + tombstones: &'a BTreeSet, + known_excluded_paths: &'a BTreeSet, + known_paths: &'a BTreeSet, + public_directory: Option<&'a str>, + safe_public_assets: &'a BTreeSet, +} + +/// Validate local Markdown links and intended public-page membership. +/// +/// # Errors +/// +/// Returns an error for malformed Markdown destinations, missing files or +/// anchors, links from public pages to non-public sources, tombstone links, +/// or public pages absent from the intended page inventory. +pub fn check_local_links( + sources: &[LinkSource], + intended_public_pages: &[String], + tombstone_routes: &[String], +) -> Result<(), Report> { + let known_paths = sources + .iter() + .map(|source| source.path.clone()) + .collect::>(); + check_local_links_with_known( + sources, + intended_public_pages, + tombstone_routes, + &BTreeSet::new(), + &known_paths, + None, + &BTreeSet::new(), + ) +} + +fn check_local_links_with_known( + sources: &[LinkSource], + intended_public_pages: &[String], + tombstone_routes: &[String], + known_excluded_paths: &BTreeSet, + known_paths: &BTreeSet, + public_directory: Option<&str>, + safe_public_assets: &BTreeSet, +) -> Result<(), Report> { + let mut source_by_path = BTreeMap::new(); + let mut parsed_by_path = BTreeMap::new(); + let mut route_to_path = BTreeMap::new(); + for source in sources { + validate_repo_path(&source.path)?; + if source.markdown.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(local_error(format!( + "{} exceeds {} bytes", + source.path, MAXIMUM_DOCUMENT_BYTES + ))); + } + if source_by_path.insert(source.path.clone(), source).is_some() { + return Err(local_error(format!( + "duplicate Markdown source: {}", + source.path + ))); + } + let parsed = parse_markdown(&source.path, source.set, &source.markdown)?; + parsed_by_path.insert(source.path.clone(), parsed); + if source.set == LinkSourceSet::Public { + let route = public_route(&source.path)?; + if route_to_path + .insert(route.clone(), source.path.clone()) + .is_some() + { + return Err(local_error(format!("duplicate public route: {route}"))); + } + } + } + + if !intended_public_pages.is_empty() { + let intended = intended_public_pages + .iter() + .cloned() + .collect::>(); + let actual = sources + .iter() + .filter(|source| source.set == LinkSourceSet::Public) + .map(|source| source.path.clone()) + .collect::>(); + if intended != actual { + let missing = actual.difference(&intended).next(); + let stale = intended.difference(&actual).next(); + return Err(local_error(format!( + "public page inventory mismatch; unlisted orphan={missing:?}, stale page={stale:?}" + ))); + } + } + + let tombstones = tombstone_routes.iter().cloned().collect::>(); + let index = LinkIndex { + source_by_path: &source_by_path, + parsed_by_path: &parsed_by_path, + route_to_path: &route_to_path, + tombstones: &tombstones, + known_excluded_paths, + known_paths, + public_directory, + safe_public_assets, + }; + for source in sources { + let parsed = parsed_by_path + .get(&source.path) + .ok_or_else(|| local_error(format!("parsed source missing for {}", source.path)))?; + for destination in &parsed.links { + check_local_destination(source, destination, &index)?; + } + } + Ok(()) +} + +fn check_local_destination( + source: &LinkSource, + link: &ParsedLink, + index: &LinkIndex<'_>, +) -> Result<(), Report> { + let destination = link.destination.as_str(); + if destination.len() > MAXIMUM_LINK_BYTES { + return Err(local_error(format!( + "{} has an oversized destination at bytes {}-{}", + source.path, link.start, link.end + ))); + } + if destination + .chars() + .any(|character| character.is_control() || character == '\\') + { + return Err(local_error(format!( + "{} has an unsafe destination: {destination}", + source.path + ))); + } + if is_external_or_non_file(destination) { + return Ok(()); + } + + let (without_fragment, raw_fragment) = destination + .split_once('#') + .map_or((destination, None), |(path, fragment)| { + (path, Some(fragment)) + }); + let (raw_path, raw_query) = without_fragment + .split_once('?') + .map_or((without_fragment, None), |(path, query)| { + (path, Some(query)) + }); + let path = strict_percent_decode(raw_path, &source.path)?; + raw_query + .map(|query| strict_percent_decode(query, &source.path)) + .transpose()?; + let fragment = raw_fragment + .map(|value| strict_percent_decode(value, &source.path)) + .transpose()?; + + let (target_path, target_route) = if path.is_empty() { + ( + source.path.clone(), + (source.set == LinkSourceSet::Public) + .then(|| public_route(&source.path)) + .transpose()?, + ) + } else if path.starts_with('/') { + if source.set == LinkSourceSet::Public { + let route = normalize_route(&path)?; + if let Some(excluded) = + excluded_public_target(&path, &route, index.known_excluded_paths) + { + return Err(local_error(format!( + "{} links to excluded source {excluded}", + source.path + ))); + } + if index.tombstones.contains(&route) { + return Err(local_error(format!( + "{} links to tombstone route {route}", + source.path + ))); + } + let Some(target) = index.route_to_path.get(&route).cloned() else { + if fragment.is_none() + && let Some(public_directory) = index.public_directory + { + let asset = format!("{public_directory}/{}", path.trim_start_matches('/')); + validate_repo_path(&asset)?; + if index.safe_public_assets.contains(&asset) { + return Ok(()); + } + if index.known_paths.contains(&asset) { + return Err(local_error(format!( + "{} links to unsafe public asset {asset}", + source.path + ))); + } + } + return Err(local_error(format!( + "{} has missing VitePress route or public asset {route}", + source.path + ))); + }; + (target, Some(route)) + } else { + let route = normalize_route(&path)?; + if let Some(target) = index.route_to_path.get(&route) { + return validate_target_anchor( + source, + target, + fragment.as_deref(), + index.source_by_path, + index.parsed_by_path, + ); + } + let target = path.trim_start_matches('/').to_owned(); + validate_repo_path(&target)?; + if !index.source_by_path.contains_key(&target) { + if index.known_excluded_paths.contains(&target) { + return Err(local_error(format!( + "{} links to excluded source {target}", + source.path + ))); + } + if index.known_paths.contains(&target) && fragment.is_none() { + return Ok(()); + } + return Err(local_error(format!( + "{} has missing repository-root file {target}", + source.path + ))); + } + (target, None) + } + } else { + let target = resolve_relative_path(&source.path, &path)?; + if let Some(found) = index.source_by_path.get(&target) { + let route = (found.set == LinkSourceSet::Public) + .then(|| public_route(&target)) + .transpose()?; + (target, route) + } else if index.known_excluded_paths.contains(&target) { + return Err(local_error(format!( + "{} links to excluded source {target}", + source.path + ))); + } else if index.known_paths.contains(&target) { + if fragment.is_some() { + return Err(local_error(format!( + "{} uses an anchor on non-Markdown target {target}", + source.path + ))); + } + return Ok(()); + } else { + let route_candidate = route_for_relative_target(&target)?; + if let Some(found) = index.route_to_path.get(&route_candidate) { + (found.clone(), Some(route_candidate)) + } else if index.known_excluded_paths.contains(&target) { + return Err(local_error(format!( + "{} links to excluded source {target}", + source.path + ))); + } else { + return Err(local_error(format!( + "{} has missing relative file {destination}", + source.path + ))); + } + } + }; + + if let Some(route) = target_route.as_ref() + && index.tombstones.contains(route) + { + return Err(local_error(format!( + "{} links to tombstone route {route}", + source.path + ))); + } + let target_source = index.source_by_path.get(&target_path).ok_or_else(|| { + local_error(format!( + "{} resolves to an unchecked target {target_path}", + source.path + )) + })?; + if source.set == LinkSourceSet::Public && target_source.set != LinkSourceSet::Public { + return Err(local_error(format!( + "public page {} links to excluded source {target_path}", + source.path + ))); + } + if let Some(fragment) = fragment { + if fragment.is_empty() { + return Ok(()); + } + let target = index + .parsed_by_path + .get(&target_path) + .ok_or_else(|| local_error(format!("target was not parsed: {target_path}")))?; + if !target.anchors.contains(&fragment) { + return Err(local_error(format!( + "{} has missing anchor #{fragment} in {target_path}", + source.path + ))); + } + } + Ok(()) +} + +fn validate_target_anchor( + source: &LinkSource, + target_path: &str, + fragment: Option<&str>, + source_by_path: &BTreeMap, + parsed_by_path: &BTreeMap, +) -> Result<(), Report> { + let target_source = source_by_path.get(target_path).ok_or_else(|| { + local_error(format!( + "{} resolves to an unchecked target {target_path}", + source.path + )) + })?; + if source.set == LinkSourceSet::Public && target_source.set != LinkSourceSet::Public { + return Err(local_error(format!( + "public page {} links to excluded source {target_path}", + source.path + ))); + } + if let Some(fragment) = fragment { + if fragment.is_empty() { + return Ok(()); + } + let target = parsed_by_path + .get(target_path) + .ok_or_else(|| local_error(format!("target was not parsed: {target_path}")))?; + if !target.anchors.contains(fragment) { + return Err(local_error(format!( + "{} has missing anchor #{fragment} in {target_path}", + source.path + ))); + } + } + Ok(()) +} + +fn parse_markdown( + path: &str, + set: LinkSourceSet, + markdown: &str, +) -> Result> { + let frontmatter = if set == LinkSourceSet::Public { + parse_public_frontmatter(path, markdown)? + } else { + ParsedFrontmatter::default() + }; + let markdown_body = markdown + .get(frontmatter.body_start..) + .ok_or_else(|| local_error(format!("{path} has invalid frontmatter offsets")))?; + let mut options = Options::ENABLE_TABLES + | Options::ENABLE_STRIKETHROUGH + | Options::ENABLE_TASKLISTS + | Options::ENABLE_FOOTNOTES; + if set == LinkSourceSet::Public { + options |= Options::ENABLE_HEADING_ATTRIBUTES; + } + let parser = Parser::new_ext(markdown_body, options).into_offset_iter(); + let mut anchors = BTreeSet::new(); + let mut heading_anchors = BTreeSet::new(); + let mut links = frontmatter.links; + let mut mermaid_diagrams = Vec::new(); + let mut heading: Option = None; + let mut slugs = HeadingSlugs::new(set); + let mut fence: Option = None; + + for (event, range) in parser { + let range = (range.start + frontmatter.body_start)..(range.end + frontmatter.body_start); + match event { + Event::Start(Tag::Heading { + id, classes, attrs, .. + }) => { + if heading.is_some() { + return Err(local_error(format!("{path} has nested headings"))); + } + if set == LinkSourceSet::Public && (!classes.is_empty() || !attrs.is_empty()) { + return Err(local_error(format!( + "{path} has an invalid explicit heading id or unsupported heading attributes" + ))); + } + heading = Some(HeadingState { + text: String::new(), + explicit_id: id.map(pulldown_cmark::CowStr::into_string), + image_depth: 0, + }); + } + Event::End(TagEnd::Heading(_level)) => { + let current = heading + .take() + .ok_or_else(|| local_error(format!("{path} closes an unopened heading")))?; + if current.image_depth != 0 { + return Err(local_error(format!( + "{path} closes a heading inside an image" + ))); + } + let slug = slugs.slug(path, ¤t.text, current.explicit_id.as_deref())?; + anchors.insert(slug.clone()); + heading_anchors.insert(slug); + } + Event::Text(value) | Event::Code(value) + if heading.as_ref().is_some_and(|current| { + set != LinkSourceSet::Public || current.image_depth == 0 + }) => + { + heading + .as_mut() + .expect("heading should be present") + .text + .push_str(&value); + } + Event::SoftBreak | Event::HardBreak + if set != LinkSourceSet::Public && heading.is_some() => + { + heading + .as_mut() + .expect("heading should be present") + .text + .push(' '); + } + Event::Start(Tag::Link { dest_url, .. }) => { + links.push(ParsedLink { + destination: dest_url.into_string(), + start: range.start, + end: range.end, + }); + } + Event::Start(Tag::Image { dest_url, .. }) => { + links.push(ParsedLink { + destination: dest_url.into_string(), + start: range.start, + end: range.end, + }); + if set == LinkSourceSet::Public + && let Some(current) = &mut heading + { + current.image_depth += 1; + } + } + Event::End(TagEnd::Image) if set == LinkSourceSet::Public && heading.is_some() => { + let current = heading.as_mut().expect("heading should be present"); + current.image_depth = current.image_depth.checked_sub(1).ok_or_else(|| { + local_error(format!("{path} closes an unopened heading image")) + })?; + } + Event::Html(value) | Event::InlineHtml(value) => { + parse_html_fragment( + path, + &value, + range.start, + range.end, + &mut anchors, + &mut links, + )?; + } + Event::Start(Tag::CodeBlock(CodeBlockKind::Fenced(info))) => { + let mut opening = parse_opening_fence(path, markdown, range.start, &info)?; + if opening.mermaid { + opening.selector = Some(format!("mermaid:{}", mermaid_diagrams.len() + 1)); + } + fence = Some(opening); + } + Event::Start(Tag::CodeBlock(CodeBlockKind::Indented)) => { + fence = None; + } + Event::End(TagEnd::CodeBlock) => { + if let Some(opening) = fence.take() { + validate_closing_fence(path, markdown, &opening, range.start, range.end)?; + if let Some(selector) = opening.selector { + mermaid_diagrams.push(ParsedDiagram { + selector, + fingerprint: content_fingerprint(&opening.contents), + }); + } + } + } + Event::Text(value) if fence.as_ref().is_some_and(|opening| opening.mermaid) => { + fence + .as_mut() + .expect("fenced block should be open") + .contents + .extend_from_slice(value.as_bytes()); + } + Event::Text(_) + | Event::Code(_) + | Event::SoftBreak + | Event::HardBreak + | Event::Rule + | Event::TaskListMarker(_) + | Event::FootnoteReference(_) + | Event::InlineMath(_) + | Event::DisplayMath(_) + | Event::Start(_) + | Event::End(_) => {} + } + } + if heading.is_some() || fence.is_some() { + return Err(local_error(format!( + "{path} has an unterminated semantic block" + ))); + } + Ok(ParsedMarkdown { + anchors, + heading_anchors, + links, + mermaid_diagrams, + }) +} + +#[derive(Default)] +struct ParsedFrontmatter { + body_start: usize, + links: Vec, +} + +fn parse_public_frontmatter( + path: &str, + markdown: &str, +) -> Result> { + let opening_bytes = if markdown.starts_with("---\r\n") { + 5 + } else if markdown.starts_with("---\n") { + 4 + } else { + return Ok(ParsedFrontmatter::default()); + }; + let bytes = markdown.as_bytes(); + let mut line_start = opening_bytes; + let (frontmatter_end, body_start) = loop { + if line_start > MAXIMUM_FRONTMATTER_BYTES { + return Err(local_error(format!( + "{path} frontmatter exceeds {MAXIMUM_FRONTMATTER_BYTES} bytes" + ))); + } + let line_end = bytes[line_start..] + .iter() + .position(|byte| *byte == b'\n') + .map_or(bytes.len(), |offset| line_start + offset); + let line = markdown[line_start..line_end].trim_end_matches('\r'); + if line == "---" { + let body_start = if line_end < bytes.len() { + line_end + 1 + } else { + line_end + }; + break (line_start, body_start); + } + if line_end == bytes.len() { + return Err(local_error(format!("{path} has unclosed frontmatter"))); + } + line_start = line_end + 1; + }; + if frontmatter_end > MAXIMUM_FRONTMATTER_BYTES { + return Err(local_error(format!( + "{path} frontmatter exceeds {MAXIMUM_FRONTMATTER_BYTES} bytes" + ))); + } + let source = &markdown[opening_bytes..frontmatter_end]; + let yaml: YamlValue = serde_yaml::from_str(source) + .map_err(|error| local_error(format!("{path} has malformed frontmatter: {error}")))?; + let mut links = Vec::new(); + extract_frontmatter_links(path, &yaml, body_start, &mut links)?; + Ok(ParsedFrontmatter { body_start, links }) +} + +fn extract_frontmatter_links( + path: &str, + yaml: &YamlValue, + end: usize, + links: &mut Vec, +) -> Result<(), Report> { + let mapping = yaml + .as_mapping() + .ok_or_else(|| local_error(format!("{path} frontmatter must be a YAML mapping")))?; + if let Some(hero) = yaml_field(mapping, "hero") { + if hero == &YamlValue::Bool(false) { + return extract_feature_links(path, mapping, end, links); + } + let hero = hero.as_mapping().ok_or_else(|| { + local_error(format!( + "{path} frontmatter hero must be a mapping or false" + )) + })?; + if let Some(image) = yaml_field(hero, "image") { + match image { + YamlValue::String(destination) => { + push_frontmatter_link(path, destination, end, links)?; + } + YamlValue::Mapping(image) => { + extract_themeable_image_links(path, "hero.image", image, end, links)? + } + _ => { + return Err(local_error(format!( + "{path} frontmatter hero.image must be a string or mapping" + ))); + } + } + } + if let Some(actions) = yaml_field(hero, "actions") { + let actions = actions.as_sequence().ok_or_else(|| { + local_error(format!( + "{path} frontmatter hero.actions must be a sequence" + )) + })?; + for action in actions { + let action = action.as_mapping().ok_or_else(|| { + local_error(format!("{path} frontmatter hero action must be a mapping")) + })?; + let destination = yaml_field(action, "link") + .and_then(YamlValue::as_str) + .ok_or_else(|| { + local_error(format!( + "{path} frontmatter hero action link must be a string" + )) + })?; + push_frontmatter_link(path, destination, end, links)?; + } + } + } + extract_feature_links(path, mapping, end, links) +} + +fn extract_feature_links( + path: &str, + mapping: &serde_yaml::Mapping, + end: usize, + links: &mut Vec, +) -> Result<(), Report> { + let Some(features) = yaml_field(mapping, "features") else { + return Ok(()); + }; + let features = features + .as_sequence() + .ok_or_else(|| local_error(format!("{path} frontmatter features must be a sequence")))?; + for feature in features { + let feature = feature + .as_mapping() + .ok_or_else(|| local_error(format!("{path} frontmatter feature must be a mapping")))?; + if let Some(destination) = yaml_field(feature, "link") { + let destination = destination.as_str().ok_or_else(|| { + local_error(format!("{path} frontmatter feature link must be a string")) + })?; + push_frontmatter_link(path, destination, end, links)?; + } + if let Some(icon) = yaml_field(feature, "icon") { + match icon { + YamlValue::String(_) => {} + YamlValue::Mapping(icon) => { + extract_themeable_image_links(path, "feature icon", icon, end, links)?; + } + _ => { + return Err(local_error(format!( + "{path} frontmatter feature icon must be a string or mapping" + ))); + } + } + } + } + Ok(()) +} + +fn extract_themeable_image_links( + path: &str, + field: &str, + image: &serde_yaml::Mapping, + end: usize, + links: &mut Vec, +) -> Result<(), Report> { + if let Some(source) = yaml_field(image, "src") { + let source = source.as_str().ok_or_else(|| { + local_error(format!("{path} frontmatter {field}.src must be a string")) + })?; + return push_frontmatter_link(path, source, end, links); + } + let light = yaml_field(image, "light") + .and_then(YamlValue::as_str) + .ok_or_else(|| local_error(format!("{path} frontmatter {field}.light must be a string")))?; + let dark = yaml_field(image, "dark") + .and_then(YamlValue::as_str) + .ok_or_else(|| local_error(format!("{path} frontmatter {field}.dark must be a string")))?; + push_frontmatter_link(path, light, end, links)?; + push_frontmatter_link(path, dark, end, links) +} + +fn yaml_field<'a>(mapping: &'a serde_yaml::Mapping, name: &str) -> Option<&'a YamlValue> { + mapping.get(YamlValue::String(name.to_owned())) +} + +fn push_frontmatter_link( + path: &str, + destination: &str, + end: usize, + links: &mut Vec, +) -> Result<(), Report> { + if destination.is_empty() || destination.len() > MAXIMUM_LINK_BYTES { + return Err(local_error(format!( + "{path} frontmatter contains an empty or oversized link" + ))); + } + links.push(ParsedLink { + destination: destination.to_owned(), + start: 0, + end, + }); + Ok(()) +} + +struct HeadingState { + text: String, + explicit_id: Option, + image_depth: usize, +} + +enum HeadingSlugs { + Vitepress(UniqueSlugs), + Github(GithubSlugger), +} + +impl HeadingSlugs { + fn new(set: LinkSourceSet) -> Self { + if set == LinkSourceSet::Public { + Self::Vitepress(UniqueSlugs::default()) + } else { + Self::Github(GithubSlugger::default()) + } + } + + fn slug( + &mut self, + path: &str, + heading: &str, + explicit_id: Option<&str>, + ) -> Result> { + let slug = match self { + Self::Vitepress(seen) => { + if let Some(identifier) = explicit_id { + validate_explicit_heading_id(path, identifier)?; + seen.claim_explicit(path, identifier)? + } else { + if heading.contains("{#") { + return Err(local_error(format!( + "{path} has an invalid explicit heading id" + ))); + } + seen.unique(&vitepress_slugify(heading)) + } + } + Self::Github(slugger) => slugger.slug(heading), + }; + if slug.is_empty() { + return Err(local_error(format!("{path} has an empty heading anchor"))); + } + Ok(slug) + } +} + +#[derive(Default)] +struct UniqueSlugs { + seen: BTreeSet, +} + +impl UniqueSlugs { + fn unique(&mut self, base: &str) -> String { + let mut candidate = base.to_owned(); + let mut suffix = 1; + while self.seen.contains(&candidate) { + candidate = format!("{base}-{suffix}"); + suffix += 1; + } + self.seen.insert(candidate.clone()); + candidate + } + + fn claim_explicit( + &mut self, + path: &str, + identifier: &str, + ) -> Result> { + if !self.seen.insert(identifier.to_owned()) { + return Err(local_error(format!( + "{path} has duplicate explicit heading id: {identifier}" + ))); + } + Ok(identifier.to_owned()) + } +} + +fn validate_explicit_heading_id(path: &str, identifier: &str) -> Result<(), Report> { + if identifier.is_empty() + || identifier.len() > 128 + || identifier.chars().any(|character| { + !(character.is_alphanumeric() || matches!(character, '-' | '_' | ':' | '.')) + }) + { + return Err(local_error(format!( + "{path} has an invalid explicit heading id" + ))); + } + Ok(()) +} + +fn vitepress_slugify(value: &str) -> String { + let mut output = String::new(); + let mut pending_separator = false; + for character in value.nfkd() { + if ('\u{0300}'..='\u{036f}').contains(&character) + || ('\u{0000}'..='\u{001f}').contains(&character) + { + continue; + } + if vitepress_special(character) { + pending_separator = !output.is_empty(); + continue; + } + if pending_separator { + output.push('-'); + pending_separator = false; + } + output.push(character); + } + while output.ends_with('-') { + output.pop(); + } + if output.as_bytes().first().is_some_and(u8::is_ascii_digit) { + output.insert(0, '_'); + } + unicode_default_lowercase(&output) +} + +fn unicode_default_lowercase(value: &str) -> String { + static CASED: LazyLock = LazyLock::new(|| { + Regex::new(r"^\p{Cased}$").expect("should compile the Unicode Cased property") + }); + static CASE_IGNORABLE: LazyLock = LazyLock::new(|| { + Regex::new(r"^\p{Case_Ignorable}$") + .expect("should compile the Unicode Case_Ignorable property") + }); + + let characters = value.chars().collect::>(); + let mut output = String::new(); + for (index, character) in characters.iter().copied().enumerate() { + if character == '\u{03a3}' + && final_sigma_context(&characters, index, &CASED, &CASE_IGNORABLE) + { + output.push('\u{03c2}'); + } else { + output.extend(character.to_lowercase()); + } + } + output +} + +fn final_sigma_context( + characters: &[char], + index: usize, + cased: &Regex, + case_ignorable: &Regex, +) -> bool { + let preceded_by_cased = characters[..index] + .iter() + .rev() + .copied() + .find(|character| !unicode_property(case_ignorable, *character)) + .is_some_and(|character| unicode_property(cased, character)); + let followed_by_cased = characters[index + 1..] + .iter() + .copied() + .find(|character| !unicode_property(case_ignorable, *character)) + .is_some_and(|character| unicode_property(cased, character)); + preceded_by_cased && !followed_by_cased +} + +fn unicode_property(property: &Regex, character: char) -> bool { + let mut buffer = [0_u8; 4]; + property.is_match(character.encode_utf8(&mut buffer)) +} + +fn vitepress_special(character: char) -> bool { + ecmascript_whitespace(character) + || matches!( + character, + '~' | '`' + | '!' + | '@' + | '#' + | '$' + | '%' + | '^' + | '&' + | '*' + | '(' + | ')' + | '-' + | '_' + | '+' + | '=' + | '[' + | ']' + | '{' + | '}' + | '|' + | '\\' + | ';' + | ':' + | '"' + | '\'' + | '“' + | '”' + | '‘' + | '’' + | '<' + | '>' + | ',' + | '.' + | '?' + | '/' + ) +} + +const fn ecmascript_whitespace(character: char) -> bool { + matches!( + character, + '\u{0009}'..='\u{000d}' + | '\u{0020}' + | '\u{00a0}' + | '\u{1680}' + | '\u{2000}'..='\u{200a}' + | '\u{2028}' + | '\u{2029}' + | '\u{202f}' + | '\u{205f}' + | '\u{3000}' + | '\u{feff}' + ) +} + +fn parse_html_fragment( + path: &str, + raw: &str, + start: usize, + end: usize, + anchors: &mut BTreeSet, + links: &mut Vec, +) -> Result<(), Report> { + if raw.len() > MAXIMUM_LINK_BYTES || raw.chars().any(|character| character == '\0') { + return Err(local_error(format!( + "{path} has an oversized or unsafe HTML fragment at bytes {start}-{end}" + ))); + } + let document = Html::parse_fragment(raw); + let selector = + Selector::parse("*").map_err(|_error| local_error("internal HTML selector is invalid"))?; + for element in document.select(&selector) { + for name in ["id", "name"] { + if let Some(value) = element.value().attr(name) + && !value.is_empty() + { + anchors.insert(value.to_owned()); + } + } + if let Some(destination) = element.value().attr("href") { + links.push(ParsedLink { + destination: destination.to_owned(), + start, + end, + }); + } + } + Ok(()) +} + +struct FenceState { + character: u8, + count: usize, + mermaid: bool, + selector: Option, + contents: Vec, +} + +fn parse_opening_fence( + path: &str, + markdown: &str, + start: usize, + info: &str, +) -> Result> { + let line = markdown[start..] + .lines() + .next() + .ok_or_else(|| local_error(format!("{path} has an empty fenced block")))?; + let trimmed = line.trim_start_matches(' '); + if line.len() - trimmed.len() > 3 { + return Err(local_error(format!("{path} has an invalid fenced block"))); + } + let character = *trimmed + .as_bytes() + .first() + .ok_or_else(|| local_error(format!("{path} has an empty fence")))?; + let count = trimmed + .as_bytes() + .iter() + .take_while(|byte| **byte == character) + .count(); + if !matches!(character, b'`' | b'~') || count < 3 { + return Err(local_error(format!("{path} has an invalid opening fence"))); + } + let mermaid = validate_mermaid_info(path, info)?; + Ok(FenceState { + character, + count, + mermaid, + selector: None, + contents: Vec::new(), + }) +} + +fn validate_mermaid_info(path: &str, info: &str) -> Result> { + let trimmed = info.trim(); + let first = trimmed.split_whitespace().next().unwrap_or_default(); + if first != "mermaid" { + if first.starts_with("mermaid") { + return Err(local_error(format!( + "{path} has invalid mermaid fence info: {trimmed}" + ))); + } + return Ok(false); + } + let remainder = trimmed[first.len()..].trim(); + let valid = remainder.is_empty() + || (remainder.starts_with('{') + && remainder.ends_with('}') + && valid_mermaid_attributes(&remainder[1..remainder.len() - 1])); + if !valid { + return Err(local_error(format!( + "{path} has invalid mermaid fence attributes: {remainder}" + ))); + } + Ok(true) +} + +fn valid_mermaid_attributes(attributes: &str) -> bool { + let mut found = false; + for attribute in attributes.split_ascii_whitespace() { + found = true; + let valid_identifier = |value: &str| { + !value.is_empty() + && value.chars().all(|character| { + character.is_ascii_alphanumeric() || matches!(character, '_' | '-' | ':' | '.') + }) + }; + let valid = attribute + .strip_prefix('#') + .or_else(|| attribute.strip_prefix('.')) + .is_some_and(valid_identifier) + || attribute + .split_once('=') + .is_some_and(|(name, value)| valid_identifier(name) && valid_identifier(value)); + if !valid { + return false; + } + } + found +} + +fn validate_closing_fence( + path: &str, + markdown: &str, + opening: &FenceState, + start: usize, + end: usize, +) -> Result<(), Report> { + let raw = markdown + .get(start..end) + .ok_or_else(|| local_error(format!("{path} has invalid fence offsets")))?; + let line = raw + .trim_end_matches(['\r', '\n']) + .lines() + .last() + .unwrap_or_default() + .trim_start_matches(' '); + let count = line + .as_bytes() + .iter() + .take_while(|byte| **byte == opening.character) + .count(); + if count < opening.count + || line[count..] + .chars() + .any(|character| !character.is_ascii_whitespace()) + { + return Err(local_error(format!( + "{path} has a mismatched or unterminated fenced block at bytes {start}-{end}: {raw:?}" + ))); + } + Ok(()) +} + +fn strict_percent_decode(value: &str, source: &str) -> Result> { + let bytes = value.as_bytes(); + let mut decoded = Vec::with_capacity(bytes.len()); + let mut index = 0; + while index < bytes.len() { + if bytes[index] == b'%' { + let high = bytes + .get(index + 1) + .and_then(|byte| hexadecimal(*byte)) + .ok_or_else(|| { + local_error(format!("{source} has invalid percent encoding: {value}")) + })?; + let low = bytes + .get(index + 2) + .and_then(|byte| hexadecimal(*byte)) + .ok_or_else(|| { + local_error(format!("{source} has invalid percent encoding: {value}")) + })?; + decoded.push(high * 16 + low); + index += 3; + } else { + decoded.push(bytes[index]); + index += 1; + } + } + String::from_utf8(decoded) + .map_err(|_error| local_error(format!("{source} percent-decodes to invalid UTF-8"))) + .and_then(|decoded| { + let bytes = decoded.as_bytes(); + if bytes.windows(3).any(|window| { + window[0] == b'%' + && hexadecimal(window[1]).is_some() + && hexadecimal(window[2]).is_some() + }) { + Err(local_error(format!( + "{source} has residual percent encoding after one decode" + ))) + } else { + Ok(decoded) + } + }) +} + +const fn hexadecimal(value: u8) -> Option { + match value { + b'0'..=b'9' => Some(value - b'0'), + b'a'..=b'f' => Some(value - b'a' + 10), + b'A'..=b'F' => Some(value - b'A' + 10), + _ => None, + } +} + +fn is_external_or_non_file(value: &str) -> bool { + let lower = value.to_ascii_lowercase(); + [ + "https://", + "http://", + "mailto:", + "tel:", + "data:", + "javascript:", + ] + .iter() + .any(|prefix| lower.starts_with(prefix)) +} + +fn validate_repo_path(path: &str) -> Result<(), Report> { + if path.is_empty() + || path.starts_with('/') + || path.contains('\\') + || path + .split('/') + .any(|part| part.is_empty() || part == "." || part == "..") + { + return Err(local_error(format!("unsafe repository path: {path}"))); + } + Ok(()) +} + +fn resolve_relative_path(source: &str, relative: &str) -> Result> { + let mut components = source + .rsplit_once('/') + .map_or(Vec::new(), |(parent, _file)| { + parent.split('/').map(str::to_owned).collect() + }); + for component in relative.split('/') { + match component { + "" | "." => {} + ".." => { + if components.pop().is_none() { + return Err(local_error(format!( + "relative link escapes repository: {relative}" + ))); + } + } + value => components.push(value.to_owned()), + } + } + if components.is_empty() { + return Err(local_error(format!( + "relative link has no target: {relative}" + ))); + } + Ok(components.join("/")) +} + +fn public_route(path: &str) -> Result> { + let Some(relative) = path.strip_prefix("docs/") else { + return Err(local_error(format!("public path is outside docs: {path}"))); + }; + if relative == "index.md" { + return Ok("/".to_owned()); + } + let without_extension = relative + .strip_suffix(".md") + .ok_or_else(|| local_error(format!("public source is not Markdown: {path}")))?; + if let Some(parent) = without_extension.strip_suffix("/index") { + Ok(format!("/{parent}/")) + } else { + Ok(format!("/{without_extension}")) + } +} + +fn normalize_route(route: &str) -> Result> { + if !route.starts_with('/') || route.contains('\\') { + return Err(local_error(format!("invalid VitePress route: {route}"))); + } + let mut components = Vec::new(); + for component in route.split('/') { + match component { + "" | "." => {} + ".." => { + if components.pop().is_none() { + return Err(local_error(format!("route escapes site root: {route}"))); + } + } + value => components.push(value), + } + } + let mut result = format!("/{}", components.join("/")); + if route.ends_with('/') && result != "/" { + result.push('/'); + } + if let Some(stripped) = result.strip_suffix(".md") { + result = stripped.to_owned(); + } + if let Some(stripped) = result.strip_suffix(".html") { + result = stripped.to_owned(); + } + Ok(result) +} + +fn route_for_relative_target(path: &str) -> Result> { + if path.starts_with("docs/") { + let candidate = if path.ends_with(".md") { + path.to_owned() + } else { + format!("{path}.md") + }; + public_route(&candidate) + } else { + Err(local_error(format!( + "relative route is outside public docs: {path}" + ))) + } +} + +fn excluded_public_target<'a>( + raw_path: &str, + route: &str, + excluded_paths: &'a BTreeSet, +) -> Option<&'a str> { + let repository_path = raw_path.trim_start_matches('/'); + excluded_paths.iter().find_map(|path| { + if path == repository_path + || public_route(path).is_ok_and(|excluded_route| excluded_route == route) + { + Some(path.as_str()) + } else { + None + } + }) +} + +fn local_error(detail: impl Into) -> Report { + Report::new(MarkdownError::LocalLink { + detail: detail.into(), + }) +} + +/// Validate the checked repository's active Markdown sets and publication records. +/// +/// # Errors +/// +/// Returns an error when classification is incomplete, a source cannot be +/// read safely, local links fail, or page/navigation/orphan/diagram manifests +/// differ from the repository and `VitePress` configuration. +pub(crate) fn check_local_repository(repository: &Repository) -> Result<(), Report> { + let pages = read_pages_manifest(repository)?; + let orphans: OrphansManifest = read_toml_manifest(repository, ORPHANS_MANIFEST)?; + let diagrams: DiagramsManifest = read_toml_manifest(repository, DIAGRAMS_MANIFEST)?; + validate_manifest_attestation(orphans.version, orphans.reviewed, "orphans")?; + validate_manifest_attestation(diagrams.version, diagrams.reviewed, "diagrams")?; + + let intended_paths = live_pages(&pages.pages) + .map(|page| page.path.clone()) + .collect::>(); + let loaded = load_link_sources(repository, &intended_paths)?; + + let config_path = NormalizedRelativePath::new(Path::new(&pages.vitepress_config)) + .change_context(MarkdownError::LocalLink { + detail: "unsafe VitePress configuration path".to_owned(), + })?; + let config_bytes = repository + .read_optional(&config_path) + .change_context(MarkdownError::LocalLink { + detail: "cannot safely read VitePress configuration".to_owned(), + })? + .ok_or_else(|| local_error("VitePress configuration is missing"))?; + let config_text = core::str::from_utf8(&config_bytes) + .map_err(|_error| local_error("VitePress configuration is not UTF-8"))?; + let vitepress = parse_vitepress_config(config_text)?; + let public_directory = vitepress_public_directory(&pages.site_root, &vitepress)?; + let safe_public_assets = + safe_public_assets(repository, &loaded.known_paths, &public_directory)?; + let page_inventory = validate_page_inventory(repository, &pages, &vitepress)?; + let orphan_inventory = validate_orphan_records(&orphans)?; + if page_inventory.tombstones != orphan_inventory.tombstones { + return Err(local_error(format!( + "tombstone inventory mismatch; pages-only={:?}, orphans-only={:?}", + page_inventory + .tombstones + .iter() + .find(|entry| !orphan_inventory.tombstones.contains(*entry)), + orphan_inventory + .tombstones + .iter() + .find(|entry| !page_inventory.tombstones.contains(*entry)) + ))); + } + let intended = page_inventory + .live + .iter() + .map(|page| page.path.clone()) + .collect::>(); + check_local_links_with_known( + &loaded.sources, + &intended, + &page_inventory + .tombstones + .iter() + .map(|(route, _replacement)| route.clone()) + .collect::>(), + &loaded.excluded_paths, + &loaded.known_paths, + Some(&public_directory), + &safe_public_assets, + )?; + validate_reachability( + &loaded.sources, + &page_inventory.live, + &orphan_inventory.manual, + )?; + validate_diagrams(&loaded.sources, &diagrams)?; + Ok(()) +} + +struct LoadedLinkSources { + sources: Vec, + excluded_paths: BTreeSet, + known_paths: BTreeSet, +} + +fn load_link_sources( + repository: &Repository, + intended_paths: &BTreeSet, +) -> Result> { + let classification = crate::classification::checked_markdown_sources(repository) + .change_context(MarkdownError::LocalLink { + detail: "Markdown source classification is incomplete".to_owned(), + })?; + let mut sources = Vec::new(); + for path_text in &classification.included_paths { + let path = NormalizedRelativePath::new(Path::new(path_text)).change_context( + MarkdownError::LocalLink { + detail: format!("unsafe Markdown source path: {path_text}"), + }, + )?; + let bytes = repository + .read_optional(&path) + .change_context(MarkdownError::LocalLink { + detail: format!("cannot safely read Markdown source: {path_text}"), + })? + .ok_or_else(|| local_error(format!("Markdown source is missing: {path_text}")))?; + if bytes.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(local_error(format!( + "Markdown source exceeds {MAXIMUM_DOCUMENT_BYTES} bytes: {path_text}" + ))); + } + let markdown = String::from_utf8(bytes) + .map_err(|_error| local_error(format!("Markdown source is not UTF-8: {path_text}")))?; + let set = if intended_paths.contains(path_text) { + LinkSourceSet::Public + } else if path_text.starts_with("docs/internal/") { + LinkSourceSet::MaintainedInternal + } else { + LinkSourceSet::Repository + }; + sources.push(LinkSource { + path: path_text.clone(), + set, + markdown, + }); + } + sources.sort_by(|left, right| left.path.cmp(&right.path)); + Ok(LoadedLinkSources { + sources, + excluded_paths: classification.excluded_paths, + known_paths: classification.known_paths, + }) +} + +fn validate_manifest_attestation( + version: u32, + reviewed: bool, + name: &str, +) -> Result<(), Report> { + if version != MANIFEST_VERSION { + return Err(local_error(format!( + "{name} manifest version must be {MANIFEST_VERSION}" + ))); + } + if !reviewed { + return Err(local_error(format!( + "{name} manifest must be explicitly reviewed" + ))); + } + Ok(()) +} + +struct VitepressRecords { + src_excludes: BTreeSet, + navigation_routes: BTreeSet, + public_directory: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +struct LivePage { + path: String, + route: String, + navigation: bool, +} + +struct PageInventory { + live: Vec, + tombstones: BTreeSet<(String, String)>, +} + +struct OrphanInventory { + manual: BTreeSet, + tombstones: BTreeSet<(String, String)>, +} + +fn live_pages(records: &[PageRecord]) -> impl Iterator + '_ { + records.iter().filter_map(|record| match record { + PageRecord::Live { + path, + route, + navigation, + } => Some(LivePage { + path: path.clone(), + route: route.clone(), + navigation: *navigation, + }), + PageRecord::Tombstone { .. } => None, + }) +} + +#[derive(Clone, Debug, Eq, PartialEq)] +enum TypeScriptToken { + Identifier(String), + String(String), + Punctuation(char), +} + +fn parse_vitepress_config(source: &str) -> Result> { + let tokens = lex_typescript(source)?; + let mut src_excludes = None; + let mut navigation_routes = BTreeSet::new(); + let mut public_directory = None; + let mut index = 0; + while index < tokens.len() { + match tokens.get(index) { + Some(TypeScriptToken::Identifier(name)) if name == "srcExclude" => { + if src_excludes.is_some() { + return Err(local_error("VitePress srcExclude is declared twice")); + } + if tokens.get(index + 1) != Some(&TypeScriptToken::Punctuation(':')) + || tokens.get(index + 2) != Some(&TypeScriptToken::Punctuation('[')) + { + return Err(local_error("VitePress srcExclude has an unknown shape")); + } + index += 3; + let mut values = BTreeSet::new(); + loop { + match tokens.get(index) { + Some(TypeScriptToken::Punctuation(']')) => break, + Some(TypeScriptToken::String(value)) => { + if !values.insert(value.clone()) { + return Err(local_error(format!( + "duplicate VitePress srcExclude value: {value}" + ))); + } + index += 1; + if tokens.get(index) == Some(&TypeScriptToken::Punctuation(',')) { + index += 1; + } + } + _ => { + return Err(local_error( + "VitePress srcExclude contains an unknown expression", + )); + } + } + } + src_excludes = Some(values); + } + Some(TypeScriptToken::Identifier(name)) + if name == "link" + && tokens.get(index + 1) == Some(&TypeScriptToken::Punctuation(':')) => + { + let Some(TypeScriptToken::String(value)) = tokens.get(index + 2) else { + return Err(local_error("VitePress link has a nonliteral value")); + }; + if value.starts_with('/') { + navigation_routes.insert(normalize_route(value)?); + } + } + Some(TypeScriptToken::Identifier(name)) if name == "publicDir" => { + if public_directory.is_some() { + return Err(local_error("VitePress publicDir is declared twice")); + } + if tokens.get(index + 1) != Some(&TypeScriptToken::Punctuation(':')) { + return Err(local_error("VitePress publicDir has an unknown shape")); + } + let Some(TypeScriptToken::String(value)) = tokens.get(index + 2) else { + return Err(local_error("VitePress publicDir has a nonliteral value")); + }; + public_directory = Some(value.clone()); + } + _ => {} + } + index += 1; + } + Ok(VitepressRecords { + src_excludes: src_excludes.ok_or_else(|| local_error("VitePress srcExclude is missing"))?, + navigation_routes, + public_directory, + }) +} + +fn vitepress_public_directory( + site_root: &str, + vitepress: &VitepressRecords, +) -> Result> { + let relative = vitepress.public_directory.as_deref().unwrap_or("public"); + validate_repo_path(relative)?; + let directory = format!("{site_root}/{relative}"); + validate_repo_path(&directory)?; + Ok(directory) +} + +fn safe_public_assets( + repository: &Repository, + known_paths: &BTreeSet, + public_directory: &str, +) -> Result, Report> { + let prefix = format!("{public_directory}/"); + let mut assets = BTreeSet::new(); + for path in known_paths.iter().filter(|path| path.starts_with(&prefix)) { + let normalized = NormalizedRelativePath::new(Path::new(path)).change_context( + MarkdownError::LocalLink { + detail: format!("unsafe public asset path: {path}"), + }, + )?; + repository + .validate_regular_file(&normalized) + .change_context(MarkdownError::LocalLink { + detail: format!("unsafe public asset: {path}"), + })?; + assets.insert(path.clone()); + } + Ok(assets) +} + +fn lex_typescript(source: &str) -> Result, Report> { + if source.len() > MAXIMUM_DOCUMENT_BYTES { + return Err(local_error("VitePress configuration exceeds size bound")); + } + let bytes = source.as_bytes(); + let mut tokens = Vec::new(); + let mut index = 0; + while index < bytes.len() { + if bytes[index].is_ascii_whitespace() { + index += 1; + } else if bytes[index] == b'/' && bytes.get(index + 1) == Some(&b'/') { + index += 2; + while bytes.get(index).is_some_and(|byte| *byte != b'\n') { + index += 1; + } + } else if bytes[index] == b'/' && bytes.get(index + 1) == Some(&b'*') { + let Some(end) = source[index + 2..].find("*/") else { + return Err(local_error("unclosed TypeScript block comment")); + }; + index += end + 4; + } else if matches!(bytes[index], b'\'' | b'"') { + let (value, end) = parse_typescript_string(source, index, bytes[index])?; + tokens.push(TypeScriptToken::String(value)); + index = end; + } else if bytes[index] == b'`' { + index = skip_typescript_template(source, index)?; + } else if bytes[index].is_ascii_alphabetic() || matches!(bytes[index], b'_' | b'$') { + let start = index; + index += 1; + while bytes + .get(index) + .is_some_and(|byte| byte.is_ascii_alphanumeric() || matches!(*byte, b'_' | b'$')) + { + index += 1; + } + tokens.push(TypeScriptToken::Identifier(source[start..index].to_owned())); + } else { + tokens.push(TypeScriptToken::Punctuation(char::from(bytes[index]))); + index += 1; + } + } + Ok(tokens) +} + +fn parse_typescript_string( + source: &str, + start: usize, + quote: u8, +) -> Result<(String, usize), Report> { + let bytes = source.as_bytes(); + let mut output = String::new(); + let mut index = start + 1; + while index < bytes.len() { + if bytes[index] == quote { + return Ok((output, index + 1)); + } + if bytes[index] == b'\\' { + index += 1; + let escaped = *bytes + .get(index) + .ok_or_else(|| local_error("truncated TypeScript string escape"))?; + let value = match escaped { + b'\\' | b'\'' | b'"' | b'/' => char::from(escaped), + b'n' => '\n', + b'r' => '\r', + b't' => '\t', + _ => return Err(local_error("unknown TypeScript string escape")), + }; + output.push(value); + index += 1; + } else { + let character = source[index..] + .chars() + .next() + .ok_or_else(|| local_error("invalid TypeScript string"))?; + if character.is_control() { + return Err(local_error("control character in TypeScript string")); + } + output.push(character); + index += character.len_utf8(); + } + } + Err(local_error("unclosed TypeScript string")) +} + +fn skip_typescript_template(source: &str, start: usize) -> Result> { + let bytes = source.as_bytes(); + let mut index = start + 1; + while index < bytes.len() { + if bytes[index] == b'\\' { + index += 2; + } else if bytes[index] == b'`' { + return Ok(index + 1); + } else { + index += 1; + } + } + Err(local_error("unclosed TypeScript template string")) +} + +fn validate_page_inventory( + repository: &Repository, + manifest: &PagesManifest, + vitepress: &VitepressRecords, +) -> Result> { + let mut manifest_paths = BTreeSet::new(); + let mut manifest_routes = BTreeSet::new(); + let mut manifest_navigation = BTreeSet::new(); + let live = live_pages(&manifest.pages).collect::>(); + for page in &live { + validate_repo_path(&page.path)?; + let expected_route = public_route(&page.path)?; + let route = normalize_route(&page.route)?; + if route != expected_route { + return Err(local_error(format!( + "page {} route {route} does not match {expected_route}", + page.path + ))); + } + if !manifest_paths.insert(page.path.clone()) { + return Err(local_error(format!("duplicate page path: {}", page.path))); + } + if !manifest_routes.insert(route.clone()) { + return Err(local_error(format!("duplicate page route: {route}"))); + } + if page.navigation { + manifest_navigation.insert(route); + } + } + let mut tombstone_routes = BTreeSet::new(); + let mut tombstones = BTreeSet::new(); + for page in &manifest.pages { + let PageRecord::Tombstone { route, replacement } = page else { + continue; + }; + let route = normalize_route(route)?; + let replacement = normalize_route(replacement)?; + if manifest_routes.contains(&route) { + return Err(local_error(format!( + "tombstone route collides with live page: {route}" + ))); + } + if !manifest_routes.contains(&replacement) { + return Err(local_error(format!( + "tombstone {route} replacement is not a live route: {replacement}" + ))); + } + if !tombstone_routes.insert(route.clone()) { + return Err(local_error(format!("duplicate tombstone page: {route}"))); + } + tombstones.insert((route, replacement)); + } + let expected_navigation = vitepress + .navigation_routes + .iter() + .map(|route| normalize_route(route)) + .collect::, _>>()?; + if manifest_navigation != expected_navigation { + return Err(local_error(format!( + "navigation inventory mismatch; manifest-only={:?}, config-only={:?}", + manifest_navigation.difference(&expected_navigation).next(), + expected_navigation.difference(&manifest_navigation).next() + ))); + } + + let root_prefix = format!("{}/", manifest.site_root); + let mut built_paths = BTreeSet::new(); + for path in repository + .tracked_paths() + .change_context(MarkdownError::LocalLink { + detail: "cannot enumerate tracked VitePress sources".to_owned(), + })? + { + let text = path.as_utf8().change_context(MarkdownError::LocalLink { + detail: "tracked VitePress path is not UTF-8".to_owned(), + })?; + let Some(relative) = text.strip_prefix(&root_prefix) else { + continue; + }; + if !relative.ends_with(".md") { + continue; + } + if !vitepress + .src_excludes + .iter() + .any(|pattern| matches_src_exclude(relative, pattern)) + { + built_paths.insert(text.to_owned()); + } + } + if built_paths != manifest_paths { + return Err(local_error(format!( + "built page inventory mismatch; unlisted={:?}, stale={:?}", + built_paths.difference(&manifest_paths).next(), + manifest_paths.difference(&built_paths).next() + ))); + } + Ok(PageInventory { live, tombstones }) +} + +fn matches_src_exclude(path: &str, pattern: &str) -> bool { + pattern + .strip_suffix("/**") + .is_some_and(|prefix| path == prefix || path.starts_with(&format!("{prefix}/"))) + || path == pattern +} + +fn validate_orphan_records( + manifest: &OrphansManifest, +) -> Result> { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map_err(|_error| local_error("system clock precedes Unix epoch"))? + .as_secs(); + let mut manual = BTreeSet::new(); + let mut tombstone_routes = BTreeSet::new(); + let mut tombstones = BTreeSet::new(); + for record in &manifest.exceptions { + if record.owner.trim().is_empty() || record.reason.trim().is_empty() { + return Err(local_error("orphan exception requires owner and reason")); + } + let expiry = timestamp_seconds(&record.expires_at) + .ok_or_else(|| local_error("orphan exception has invalid expiry"))?; + if now >= expiry { + return Err(local_error("orphan exception is expired")); + } + match record.kind { + OrphanKind::Manual => { + let path = record + .path + .as_ref() + .ok_or_else(|| local_error("manual orphan requires path"))?; + validate_repo_path(path)?; + if record.route.is_some() || record.replacement.is_some() { + return Err(local_error( + "manual orphan cannot carry route or replacement", + )); + } + if !manual.insert(path.clone()) { + return Err(local_error(format!("duplicate manual orphan: {path}"))); + } + } + OrphanKind::Tombstone => { + let route = record + .route + .as_ref() + .ok_or_else(|| local_error("tombstone requires route"))?; + let route = normalize_route(route)?; + if record.path.is_some() { + return Err(local_error("tombstone cannot carry a path")); + } + let replacement = record + .replacement + .as_ref() + .ok_or_else(|| local_error("tombstone requires replacement"))?; + let replacement = normalize_route(replacement)?; + if !tombstone_routes.insert(route.clone()) { + return Err(local_error(format!("duplicate tombstone: {route}"))); + } + tombstones.insert((route, replacement)); + } + } + } + Ok(OrphanInventory { manual, tombstones }) +} + +fn validate_reachability( + sources: &[LinkSource], + pages: &[LivePage], + manual_orphans: &BTreeSet, +) -> Result<(), Report> { + let public = sources + .iter() + .filter(|source| source.set == LinkSourceSet::Public) + .map(|source| (source.path.clone(), source)) + .collect::>(); + let route_to_path = pages + .iter() + .map(|page| (page.route.clone(), page.path.clone())) + .collect::>(); + let mut reachable = pages + .iter() + .filter(|page| page.navigation) + .map(|page| page.path.clone()) + .collect::>(); + let mut queue = reachable.iter().cloned().collect::>(); + while let Some(path) = queue.pop_front() { + let source = public + .get(&path) + .ok_or_else(|| local_error(format!("navigation page is not public: {path}")))?; + let parsed = parse_markdown(&path, source.set, &source.markdown)?; + for destination in parsed.links { + if let Some(target) = + public_link_target(&path, &destination.destination, &route_to_path)? + && reachable.insert(target.clone()) + { + queue.push_back(target); + } + } + } + let actual_orphans = public + .keys() + .filter(|path| !reachable.contains(*path)) + .cloned() + .collect::>(); + if &actual_orphans != manual_orphans { + return Err(local_error(format!( + "orphan inventory mismatch; unlisted={:?}, stale={:?}", + actual_orphans.difference(manual_orphans).next(), + manual_orphans.difference(&actual_orphans).next() + ))); + } + Ok(()) +} + +fn public_link_target( + source_path: &str, + destination: &str, + route_to_path: &BTreeMap, +) -> Result, Report> { + if is_external_or_non_file(destination) || destination.starts_with('#') { + return Ok(None); + } + let raw = destination + .split_once('#') + .map_or(destination, |(path, _fragment)| path) + .split_once('?') + .map_or_else( + || { + destination + .split_once('#') + .map_or(destination, |(path, _)| path) + }, + |(path, _)| path, + ); + let decoded = strict_percent_decode(raw, source_path)?; + if decoded.is_empty() { + return Ok(None); + } + if decoded.starts_with('/') { + return Ok(route_to_path.get(&normalize_route(&decoded)?).cloned()); + } + let relative = resolve_relative_path(source_path, &decoded)?; + if route_to_path.values().any(|path| path == &relative) { + Ok(Some(relative)) + } else { + let route = route_for_relative_target(&relative)?; + Ok(route_to_path.get(&route).cloned()) + } +} + +fn validate_diagrams( + sources: &[LinkSource], + manifest: &DiagramsManifest, +) -> Result<(), Report> { + let public = sources + .iter() + .filter(|source| source.set == LinkSourceSet::Public) + .map(|source| (source.path.clone(), source)) + .collect::>(); + let mut actual = BTreeSet::new(); + for source in public.values() { + let parsed = parse_markdown(&source.path, source.set, &source.markdown)?; + for diagram in parsed.mermaid_diagrams { + actual.insert((source.path.clone(), diagram.selector, diagram.fingerprint)); + } + } + let mut recorded = BTreeSet::new(); + let mut recorded_selectors = BTreeSet::new(); + for record in &manifest.diagrams { + validate_repo_path(&record.path)?; + validate_content_fingerprint(&record.fingerprint)?; + if record.owner.trim().is_empty() || record.prose_anchor.trim().is_empty() { + return Err(local_error(format!( + "diagram {} {} requires prose anchor and owner", + record.path, record.selector + ))); + } + let source = public + .get(&record.path) + .ok_or_else(|| local_error(format!("diagram source is not public: {}", record.path)))?; + let parsed = parse_markdown(&record.path, source.set, &source.markdown)?; + if !parsed.heading_anchors.contains(&record.prose_anchor) { + return Err(local_error(format!( + "diagram {} {} has missing prose heading #{}", + record.path, record.selector, record.prose_anchor + ))); + } + if let Some(diagram) = parsed + .mermaid_diagrams + .iter() + .find(|diagram| diagram.selector == record.selector) + && diagram.fingerprint != record.fingerprint + { + return Err(local_error(format!( + "diagram fingerprint mismatch: {} {}", + record.path, record.selector + ))); + } + if !recorded_selectors.insert((record.path.clone(), record.selector.clone())) { + return Err(local_error(format!( + "duplicate diagram record: {} {}", + record.path, record.selector + ))); + } + recorded.insert(( + record.path.clone(), + record.selector.clone(), + record.fingerprint.clone(), + )); + } + if actual != recorded { + return Err(local_error(format!( + "diagram inventory mismatch; unlisted={:?}, stale={:?}", + actual.difference(&recorded).next(), + recorded.difference(&actual).next() + ))); + } + Ok(()) +} + +fn content_fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +fn validate_content_fingerprint(value: &str) -> Result<(), Report> { + let Some(hex) = value.strip_prefix("sha256:") else { + return Err(local_error(format!("invalid diagram fingerprint: {value}"))); + }; + if hex.len() != 64 + || !hex + .bytes() + .all(|byte| byte.is_ascii_digit() || matches!(byte, b'a'..=b'f')) + { + return Err(local_error(format!("invalid diagram fingerprint: {value}"))); + } + Ok(()) +} + +/// Exact external-link exception with mandatory ownership and expiry. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalException { + /// Exact canonical URL skipped by the transport. + pub url: String, + /// Non-empty accountable owner. + pub owner: String, + /// Non-empty bounded reason. + pub reason: String, + /// Canonical UTC expiry timestamp. + pub expires_at: String, +} + +/// One bounded external transport request. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalRequest { + /// `HEAD` or fallback `GET`. + pub method: String, + /// Exact HTTPS URL. + pub url: String, + /// Per-attempt timeout. + pub timeout_seconds: u64, + /// Maximum response body bytes accepted by the transport. + pub maximum_body_bytes: usize, +} + +/// Bounded external response metadata. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalResponse { + /// HTTP status code. + pub status: u16, + /// Raw response fields in wire order, retaining legal repeated fields. + pub headers: Vec, + /// Exact number of header bytes read by the transport. + pub header_bytes: usize, + /// Exact number of body bytes read by the transport. + pub body_bytes: usize, +} + +/// One raw HTTP response field retained for validation and policy lookup. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalHeader { + /// Exact field name supplied by the transport. + pub name: String, + /// Exact field value after transport whitespace normalization. + pub value: String, +} + +/// Injected external HTTP transport. +pub trait ExternalTransport { + /// Send one request without following redirects or retrying. + /// + /// # Errors + /// + /// Returns a bounded diagnostic when the request cannot be completed. + fn send(&mut self, request: &ExternalRequest) -> Result; +} + +/// Injected bounded sleeper used by retry tests and production execution. +pub trait Sleeper { + /// Sleep for the supplied whole-second delay. + fn sleep_seconds(&mut self, seconds: u64); +} + +/// Run the explicitly requested production external-link check. +/// +/// This is the only documentation-parity path that performs network I/O. +/// Local and generated checks never construct the production transport. +/// +/// # Errors +/// +/// Returns an error for incomplete source classification, malformed page or +/// exception governance, system-clock failure, unavailable bounded transport, +/// or any external-link failure. +pub(crate) fn check_external_repository( + repository: &Repository, +) -> Result<(), Report> { + let pages = read_pages_manifest(repository)?; + let intended = live_pages(&pages.pages) + .map(|page| page.path) + .collect::>(); + let loaded = load_link_sources(repository, &intended)?; + let exceptions = pages + .external_exceptions + .into_iter() + .map(|record| ExternalException { + url: record.url, + owner: record.owner, + reason: record.reason, + expires_at: record.expires_at, + }) + .collect::>(); + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_err(|_error| external_error("system clock precedes Unix epoch"))? + .as_secs(); + let mut transport = CurlTransport::production(); + let mut sleeper = ThreadSleeper; + check_external_links( + &loaded.sources, + &exceptions, + now, + &mut transport, + &mut sleeper, + ) +} + +struct ThreadSleeper; + +impl Sleeper for ThreadSleeper { + fn sleep_seconds(&mut self, seconds: u64) { + std::thread::sleep(Duration::from_secs(seconds)); + } +} + +/// Bounded result returned by an injected external command runner. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct CommandOutput { + /// Whether the process exited successfully. + pub success: bool, + /// Platform exit code when one was available. + pub status_code: Option, + /// Complete stdout, bounded during the read by [`CommandRunner`]. + pub stdout: Vec, +} + +/// Injectable runner used by [`CurlTransport`]. +pub trait CommandRunner { + /// Run one command and cap stdout while it is being read. + /// + /// # Errors + /// + /// Returns an error when spawning, reading, waiting, or the byte cap fails. + fn run( + &mut self, + program: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + ) -> Result; +} + +/// Production process runner for the bounded curl transport. +pub struct ProcessCommandRunner; + +impl CommandRunner for ProcessCommandRunner { + fn run( + &mut self, + program: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + ) -> Result { + if program != CURL_EXECUTABLE { + return Err(format!( + "production executable must be the fixed path {CURL_EXECUTABLE}" + )); + } + run_bounded_process(program, arguments, maximum_output_bytes, timeout) + } +} + +fn run_bounded_process( + executable: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, +) -> Result { + run_bounded_process_with_environment_and_observer( + executable, + arguments, + maximum_output_bytes, + timeout, + &[], + |_pid| Ok(()), + ) +} + +#[cfg(test)] +fn run_bounded_process_with_observer( + executable: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + observer: F, +) -> Result +where + F: FnOnce(u32) -> Result<(), String>, +{ + run_bounded_process_with_environment_and_observer( + executable, + arguments, + maximum_output_bytes, + timeout, + &[], + observer, + ) +} + +#[cfg(test)] +fn run_bounded_process_with_environment( + executable: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + initial_environment: &[(&str, &str)], +) -> Result { + run_bounded_process_with_environment_and_observer( + executable, + arguments, + maximum_output_bytes, + timeout, + initial_environment, + |_pid| Ok(()), + ) +} + +fn run_bounded_process_with_environment_and_observer( + executable: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + initial_environment: &[(&str, &str)], + observer: F, +) -> Result +where + F: FnOnce(u32) -> Result<(), String>, +{ + if timeout.is_zero() { + return Err("process timeout must be positive".to_owned()); + } + let mut child = Command::new(executable) + .args(arguments) + .envs(initial_environment.iter().copied()) + .env_clear() + .env("LANG", "C") + .env("LC_ALL", "C") + .stdout(Stdio::piped()) + .stderr(Stdio::null()) + .spawn() + .map_err(|error| format!("cannot start {executable}: {error}"))?; + if let Err(error) = observer(child.id()) { + return Err(cleanup_spawned_process(&mut child, error)); + } + let deadline = match Instant::now().checked_add(timeout) { + Some(deadline) => deadline, + None => { + return Err(cleanup_spawned_process( + &mut child, + "process timeout overflowed".to_owned(), + )); + } + }; + let stdout = match child.stdout.take() { + Some(stdout) => stdout, + None => { + return Err(cleanup_spawned_process( + &mut child, + format!("{executable} stdout pipe is unavailable"), + )); + } + }; + let (ready_sender, ready_receiver) = mpsc::channel(); + let (sender, receiver) = mpsc::sync_channel(1); + let reader = match thread::Builder::new() + .name("docs-parity-stdout".to_owned()) + .spawn(move || { + let _send_result = ready_sender.send(()); + let result = read_bounded_stdout(stdout, maximum_output_bytes); + let _send_result = sender.send(()); + result + }) { + Ok(reader) => reader, + Err(error) => { + return Err(cleanup_spawned_process( + &mut child, + format!("cannot start bounded stdout reader: {error}"), + )); + } + }; + let mut reader = Some(reader); + let reader_ready = deadline.saturating_duration_since(Instant::now()); + match ready_receiver.recv_timeout(reader_ready) { + Ok(()) => {} + Err(mpsc::RecvTimeoutError::Timeout) => { + return Err(finish_process_failure( + &mut child, + reader.take(), + format!("{executable} exceeded wall-clock timeout before stdout reader readiness"), + )); + } + Err(mpsc::RecvTimeoutError::Disconnected) => { + return Err(finish_process_failure( + &mut child, + reader.take(), + "bounded stdout reader disconnected before readiness".to_owned(), + )); + } + } + let mut status = None; + let mut output = None; + loop { + if output.is_none() { + match receiver.try_recv() { + Ok(()) => match join_stdout_reader(reader.take()) { + Ok(bytes) => output = Some(bytes), + Err(error) => return Err(cleanup_spawned_process(&mut child, error)), + }, + Err(TryRecvError::Empty) => {} + Err(TryRecvError::Disconnected) => { + return Err(finish_process_failure( + &mut child, + reader.take(), + "bounded stdout reader disconnected".to_owned(), + )); + } + } + } + if status.is_none() { + match child.try_wait() { + Ok(Some(exited)) => status = Some(exited), + Ok(None) => {} + Err(error) => { + return Err(finish_process_failure( + &mut child, + reader.take(), + format!("cannot inspect {executable} process: {error}"), + )); + } + } + } + if let Some(status) = status + && let Some(stdout) = output.take() + { + return Ok(CommandOutput { + success: status.success(), + status_code: status.code(), + stdout, + }); + } + if Instant::now() >= deadline { + if let Ok(()) = receiver.try_recv() { + match join_stdout_reader(reader.take()) { + Ok(bytes) => { + output = Some(bytes); + continue; + } + Err(error) => return Err(cleanup_spawned_process(&mut child, error)), + } + } + return Err(finish_process_failure( + &mut child, + reader.take(), + format!("{executable} exceeded wall-clock timeout"), + )); + } + thread::sleep( + PROCESS_POLL_INTERVAL.min(deadline.saturating_duration_since(Instant::now())), + ); + } +} + +fn join_stdout_reader( + reader: Option, String>>>, +) -> Result, String> { + reader + .expect("reader should exist until it signals completion") + .join() + .map_err(|_panic| "bounded stdout reader panicked".to_owned())? +} + +fn read_bounded_stdout( + mut stdout: impl Read, + maximum_output_bytes: usize, +) -> Result, String> { + let limit = maximum_output_bytes + .checked_add(1) + .ok_or_else(|| "stdout byte bound overflowed".to_owned())?; + let mut bytes = Vec::new(); + stdout + .by_ref() + .take(limit as u64) + .read_to_end(&mut bytes) + .map_err(|error| format!("cannot read process stdout: {error}"))?; + if bytes.len() > maximum_output_bytes { + return Err(format!( + "process stdout exceeds {maximum_output_bytes} bytes" + )); + } + Ok(bytes) +} + +trait ProcessCleanup { + fn poll_exited(&mut self) -> std::io::Result; + fn kill_owned(&mut self) -> std::io::Result<()>; + fn wait_owned(&mut self) -> std::io::Result<()>; +} + +impl ProcessCleanup for std::process::Child { + fn poll_exited(&mut self) -> std::io::Result { + self.try_wait().map(|status| status.is_some()) + } + + fn kill_owned(&mut self) -> std::io::Result<()> { + self.kill() + } + + fn wait_owned(&mut self) -> std::io::Result<()> { + self.wait().map(|_status| ()) + } +} + +fn cleanup_spawned_process(process: &mut impl ProcessCleanup, primary: String) -> String { + let mut diagnostics = vec![primary]; + let exited = match process.poll_exited() { + Ok(exited) => exited, + Err(error) => { + diagnostics.push(format!("process poll failed during cleanup: {error}")); + false + } + }; + if !exited && let Err(error) = process.kill_owned() { + diagnostics.push(format!("process kill failed during cleanup: {error}")); + } + if let Err(error) = process.wait_owned() { + diagnostics.push(format!("process wait failed during cleanup: {error}")); + } + diagnostics.join("; ") +} + +fn finish_process_failure( + process: &mut impl ProcessCleanup, + reader: Option, String>>>, + primary: String, +) -> String { + let mut diagnostic = cleanup_spawned_process(process, primary); + if let Some(reader) = reader { + match reader.join() { + Ok(Ok(_bytes)) => {} + Ok(Err(error)) => diagnostic.push_str(&format!("; stdout reader failed: {error}")), + Err(_panic) => diagnostic.push_str("; stdout reader panicked"), + } + } + diagnostic +} + +/// HTTPS-only, non-redirecting curl transport with an injectable command seam. +pub struct CurlTransport { + runner: R, +} + +impl CurlTransport { + fn production() -> Self { + Self { + runner: ProcessCommandRunner, + } + } +} + +impl CurlTransport { + /// Create a transport from an injected command runner. + #[must_use] + pub const fn new(runner: R) -> Self { + Self { runner } + } + + /// Consume the transport and return its runner. + #[must_use] + pub fn into_runner(self) -> R { + self.runner + } +} + +impl ExternalTransport for CurlTransport { + fn send(&mut self, request: &ExternalRequest) -> Result { + validate_transport_request(request)?; + let mut arguments = [ + "--disable".to_owned(), + "--silent".to_owned(), + "--show-error".to_owned(), + "--proto".to_owned(), + "=https".to_owned(), + "--proto-redir".to_owned(), + "=https".to_owned(), + "--max-redirs".to_owned(), + "0".to_owned(), + "--connect-timeout".to_owned(), + "5".to_owned(), + "--max-time".to_owned(), + request.timeout_seconds.to_string(), + "--max-filesize".to_owned(), + request.maximum_body_bytes.to_string(), + ] + .to_vec(); + if request.method == "HEAD" { + arguments.extend([ + "--output".to_owned(), + "-".to_owned(), + "--write-out".to_owned(), + CURL_WRITE_OUT.to_owned(), + "--head".to_owned(), + ]); + } else { + arguments.extend([ + "--dump-header".to_owned(), + "-".to_owned(), + "--output".to_owned(), + "-".to_owned(), + "--write-out".to_owned(), + CURL_WRITE_OUT.to_owned(), + "--request".to_owned(), + "GET".to_owned(), + ]); + } + arguments.extend(["--url".to_owned(), request.url.clone()]); + let maximum_output = + MAXIMUM_RESPONSE_HEADER_BYTES + request.maximum_body_bytes + CURL_TRAILER_BYTES; + let output = self.runner.run( + CURL_EXECUTABLE, + &arguments, + maximum_output, + Duration::from_secs(request.timeout_seconds), + )?; + if !output.success { + return Err(format!( + "curl exited unsuccessfully with status {:?}", + output.status_code + )); + } + parse_curl_output(&output.stdout, request.maximum_body_bytes) + } +} + +fn validate_transport_request(request: &ExternalRequest) -> Result<(), String> { + if !matches!(request.method.as_str(), "HEAD" | "GET") { + return Err(format!("unsupported transport method: {}", request.method)); + } + if !(1..=30).contains(&request.timeout_seconds) { + return Err("transport timeout is outside 1..=30 seconds".to_owned()); + } + if request.maximum_body_bytes == 0 || request.maximum_body_bytes > MAXIMUM_RESPONSE_BODY_BYTES { + return Err("transport body bound is outside 1..=65536 bytes".to_owned()); + } + let url = Url::parse(&request.url).map_err(|_error| "transport URL is malformed".to_owned())?; + if url.scheme() != "https" + || url.host_str().is_none() + || !url.username().is_empty() + || url.password().is_some() + { + return Err("transport URL must be credential-free HTTPS".to_owned()); + } + Ok(()) +} + +fn parse_curl_output(bytes: &[u8], maximum_body_bytes: usize) -> Result { + let marker = b"\nDOCS_PARITY_COUNTS:"; + let marker_start = bytes + .windows(marker.len()) + .rposition(|window| window == marker) + .ok_or_else(|| "curl output has no byte-count trailer".to_owned())?; + let trailer = bytes + .get(marker_start + marker.len()..) + .and_then(|value| value.strip_suffix(b"\n")) + .ok_or_else(|| "curl byte-count trailer is malformed".to_owned())?; + let trailer = core::str::from_utf8(trailer) + .map_err(|_error| "curl byte-count trailer is not UTF-8".to_owned())?; + let (header_text, body_text) = trailer + .split_once(':') + .ok_or_else(|| "curl byte-count trailer is malformed".to_owned())?; + let header_bytes = header_text + .parse::() + .map_err(|_error| "curl header byte count is malformed".to_owned())?; + let body_bytes = body_text + .parse::() + .map_err(|_error| "curl body byte count is malformed".to_owned())?; + if header_bytes > MAXIMUM_RESPONSE_HEADER_BYTES { + return Err(format!( + "curl response headers exceed {MAXIMUM_RESPONSE_HEADER_BYTES} bytes" + )); + } + if body_bytes > maximum_body_bytes { + return Err(format!( + "curl response body exceeds {maximum_body_bytes} bytes" + )); + } + if marker_start != header_bytes + body_bytes { + return Err("curl byte counts do not match captured output".to_owned()); + } + let headers = bytes + .get(..header_bytes) + .ok_or_else(|| "curl header byte count exceeds output".to_owned())?; + let (status, headers) = parse_curl_headers(headers)?; + Ok(ExternalResponse { + status, + headers, + header_bytes, + body_bytes, + }) +} + +fn parse_curl_headers(bytes: &[u8]) -> Result<(u16, Vec), String> { + let text = core::str::from_utf8(bytes) + .map_err(|_error| "curl response headers are not UTF-8".to_owned())?; + let blocks = text + .strip_suffix("\r\n\r\n") + .ok_or_else(|| "curl response headers have no terminator".to_owned())? + .split("\r\n\r\n") + .collect::>(); + let mut final_response = None; + let mut total_fields = 0usize; + for block in blocks { + let response = parse_curl_header_block(block)?; + total_fields = total_fields + .checked_add(response.1.len()) + .ok_or_else(|| "curl response header count overflowed".to_owned())?; + if total_fields > MAXIMUM_RESPONSE_HEADERS { + return Err("curl response has too many headers".to_owned()); + } + final_response = Some(response); + } + final_response.ok_or_else(|| "curl response has no HTTP header block".to_owned()) +} + +fn parse_curl_header_block(block: &str) -> Result<(u16, Vec), String> { + let mut lines = block.split("\r\n"); + let status_line = lines + .next() + .ok_or_else(|| "curl response has no status line".to_owned())?; + let mut status_parts = status_line.split_ascii_whitespace(); + let protocol = status_parts + .next() + .ok_or_else(|| "curl status has no protocol".to_owned())?; + let status_text = status_parts + .next() + .ok_or_else(|| "curl status has no code".to_owned())?; + let status = status_text + .parse::() + .map_err(|_error| "curl status code is malformed".to_owned())?; + if !protocol.starts_with("HTTP/") || status_text.len() != 3 || !(100..=599).contains(&status) { + return Err("curl status line is malformed".to_owned()); + } + let mut headers = Vec::new(); + let mut duplicate_forbidden_fields = BTreeSet::new(); + for line in lines { + if line.is_empty() { + continue; + } + if line.len() > MAXIMUM_HEADER_LINE_BYTES { + return Err("curl header line exceeds 8192 bytes".to_owned()); + } + let (name, value) = line + .split_once(':') + .ok_or_else(|| "curl header line is malformed".to_owned())?; + if name.len() > MAXIMUM_HEADER_NAME_BYTES || !valid_header_name(name) { + return Err("curl header name is malformed".to_owned()); + } + let name = name.to_ascii_lowercase(); + let value = value.trim(); + if value.len() > MAXIMUM_HEADER_VALUE_BYTES || value.chars().any(char::is_control) { + return Err("curl header value exceeds bounds".to_owned()); + } + if duplicate_forbidden_header_name(&name) + && !duplicate_forbidden_fields.insert(name.clone()) + { + return Err(format!("duplicate curl response header: {name}")); + } + headers.push(ExternalHeader { + name, + value: value.to_owned(), + }); + if headers.len() > MAXIMUM_RESPONSE_HEADERS { + return Err("curl response has too many headers".to_owned()); + } + } + Ok((status, headers)) +} + +/// Validate all external Markdown destinations using a deterministic transport. +/// +/// `now_seconds` is a Unix timestamp injected by callers. The checker follows +/// no more than five redirects, retries 429/5xx responses no more than three +/// total attempts, and falls back from HEAD to GET only for 405 or 501. +/// +/// # Errors +/// +/// Returns an error for malformed or credential-bearing URLs, non-HTTPS final +/// URLs, redirect loops/depth, exhausted retries, invalid exception records, +/// expired or stale exceptions, and non-success final status codes. +pub fn check_external_links( + sources: &[LinkSource], + exceptions: &[ExternalException], + now_seconds: u64, + transport: &mut T, + sleeper: &mut S, +) -> Result<(), Report> { + let mut urls = BTreeSet::new(); + for source in sources { + let parsed = parse_markdown(&source.path, source.set, &source.markdown)?; + urls.extend(parsed.links.into_iter().filter_map(|link| { + let lower = link.destination.to_ascii_lowercase(); + (lower.starts_with("https://") || lower.starts_with("http://")) + .then_some(link.destination) + })); + } + let exception_map = validate_external_exceptions(exceptions, now_seconds, &urls)?; + for url in urls { + if exception_map.contains(&url) { + continue; + } + check_external_url(&url, now_seconds, transport, sleeper)?; + } + Ok(()) +} + +fn validate_external_exceptions( + exceptions: &[ExternalException], + now_seconds: u64, + urls: &BTreeSet, +) -> Result, Report> { + let mut exact = BTreeSet::new(); + for record in exceptions { + if record.owner.trim().is_empty() || record.reason.trim().is_empty() { + return Err(external_error(format!( + "exception {} requires owner and reason", + record.url + ))); + } + validate_external_url(&record.url)?; + let expires = timestamp_seconds(&record.expires_at).ok_or_else(|| { + external_error(format!( + "exception {} has invalid expiry {}", + record.url, record.expires_at + )) + })?; + if now_seconds >= expires { + return Err(external_error(format!( + "exception {} is expired", + record.url + ))); + } + if !urls.contains(&record.url) { + return Err(external_error(format!("exception {} is stale", record.url))); + } + if !exact.insert(record.url.clone()) { + return Err(external_error(format!( + "duplicate exception {}", + record.url + ))); + } + } + Ok(exact) +} + +fn check_external_url( + initial: &str, + now_seconds: u64, + transport: &mut T, + sleeper: &mut S, +) -> Result<(), Report> { + let mut current = validate_external_url(initial)?; + let mut visited = BTreeSet::new(); + let mut redirects = 0; + let mut method = "HEAD"; + let mut retry_attempts = 0; + let mut fallback_used = false; + loop { + let canonical = current.as_str().to_owned(); + if !visited.insert((method, canonical.clone())) { + return Err(external_error(format!("redirect loop at {canonical}"))); + } + let request = ExternalRequest { + method: method.to_owned(), + url: canonical.clone(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + let response = transport.send(&request).map_err(|diagnostic| { + external_error(format!("request failed for {canonical}: {diagnostic}")) + })?; + validate_response_headers(&response, request.maximum_body_bytes)?; + + if method == "HEAD" && matches!(response.status, 405 | 501) && !fallback_used { + method = "GET"; + fallback_used = true; + continue; + } + if matches!(response.status, 429 | 500..=599) { + retry_attempts += 1; + if retry_attempts >= MAXIMUM_RETRY_ATTEMPTS { + return Err(external_error(format!( + "retry attempts exhausted for {canonical}" + ))); + } + let local_delay = if retry_attempts == 1 { 1 } else { 2 }; + let delay = response + .header("retry-after") + .and_then(|value| retry_after_seconds(value, now_seconds)) + .filter(|delay| *delay <= 30) + .unwrap_or(local_delay); + sleeper.sleep_seconds(delay); + visited.remove(&(method, canonical)); + continue; + } + if (300..=399).contains(&response.status) { + if redirects >= MAXIMUM_REDIRECTS { + return Err(external_error(format!( + "redirect depth exceeds {MAXIMUM_REDIRECTS}" + ))); + } + let location = response.header("location").ok_or_else(|| { + external_error(format!("redirect {canonical} has no Location header")) + })?; + let next = current.join(location).map_err(|_error| { + external_error(format!("redirect {canonical} has malformed Location")) + })?; + validate_url_parts(&next)?; + redirects += 1; + current = next; + method = "HEAD"; + fallback_used = false; + continue; + } + if !(200..=299).contains(&response.status) { + return Err(external_error(format!( + "final status {} for {canonical}", + response.status + ))); + } + validate_url_parts(¤t)?; + return Ok(()); + } +} + +fn validate_external_url(value: &str) -> Result> { + if value.len() > MAXIMUM_LINK_BYTES + || value.chars().any(char::is_control) + || value.contains('\\') + { + return Err(external_error("external URL is oversized or unsafe")); + } + let url = Url::parse(value) + .map_err(|_error| external_error(format!("malformed external URL: {value}")))?; + validate_url_parts(&url)?; + Ok(url) +} + +fn validate_url_parts(url: &Url) -> Result<(), Report> { + if url.scheme() != "https" { + return Err(external_error(format!("final URL must use HTTPS: {url}"))); + } + if !url.username().is_empty() || url.password().is_some() { + return Err(external_error(format!( + "credential-bearing URL is prohibited: {url}" + ))); + } + if url.host_str().is_none() { + return Err(external_error(format!("URL has no host: {url}"))); + } + Ok(()) +} + +fn validate_response_headers( + response: &ExternalResponse, + maximum_body_bytes: usize, +) -> Result<(), Report> { + if !(100..=599).contains(&response.status) { + return Err(external_error("response status is outside HTTP bounds")); + } + if response.headers.len() > MAXIMUM_RESPONSE_HEADERS { + return Err(external_error("response has too many headers")); + } + let total = response + .headers + .iter() + .map(|field| field.name.len() + field.value.len() + 4) + .sum::(); + let mut duplicate_forbidden_fields = BTreeSet::new(); + if response.header_bytes > MAXIMUM_RESPONSE_HEADER_BYTES + || total > MAXIMUM_RESPONSE_HEADER_BYTES + || response.headers.iter().any(|field| { + field.name.len() > MAXIMUM_HEADER_NAME_BYTES + || field.value.len() > MAXIMUM_HEADER_VALUE_BYTES + || field.name.len() + field.value.len() + 4 > MAXIMUM_HEADER_LINE_BYTES + || !valid_header_name(&field.name) + || field.value.chars().any(char::is_control) + || (duplicate_forbidden_header_name(&field.name.to_ascii_lowercase()) + && !duplicate_forbidden_fields.insert(field.name.to_ascii_lowercase())) + }) + { + return Err(external_error("response headers exceed bounds")); + } + if response.body_bytes > maximum_body_bytes { + return Err(external_error("response body exceeds bound")); + } + Ok(()) +} + +impl ExternalResponse { + fn header(&self, name: &str) -> Option<&str> { + self.headers + .iter() + .find(|field| field.name.eq_ignore_ascii_case(name)) + .map(|field| field.value.as_str()) + } +} + +fn duplicate_forbidden_header_name(name: &str) -> bool { + matches!( + name, + "location" | "retry-after" | "content-length" | "transfer-encoding" | "content-encoding" + ) +} + +fn valid_header_name(name: &str) -> bool { + !name.is_empty() + && name.bytes().all(|byte| { + byte.is_ascii_alphanumeric() + || matches!( + byte, + b'!' | b'#' + | b'$' + | b'%' + | b'&' + | b'\'' + | b'*' + | b'+' + | b'-' + | b'.' + | b'^' + | b'_' + | b'`' + | b'|' + | b'~' + ) + }) +} + +fn retry_after_seconds(value: &str, now_seconds: u64) -> Option { + if value.bytes().all(|byte| byte.is_ascii_digit()) { + return value.parse().ok(); + } + http_date_seconds(value).map(|timestamp| timestamp.saturating_sub(now_seconds)) +} + +fn http_date_seconds(value: &str) -> Option { + let bytes = value.as_bytes(); + if bytes.len() != 29 + || bytes[3] != b',' + || ![4, 7, 11, 16, 25] + .into_iter() + .all(|index| bytes[index] == b' ') + || bytes[19] != b':' + || bytes[22] != b':' + || ![5, 6, 12, 13, 14, 15, 17, 18, 20, 21, 23, 24] + .into_iter() + .all(|index| bytes[index].is_ascii_digit()) + { + return None; + } + let mut parts = value.split_ascii_whitespace(); + let weekday = parts.next()?; + let day = parts.next()?.parse::().ok()?; + let month = match parts.next()? { + "Jan" => 1, + "Feb" => 2, + "Mar" => 3, + "Apr" => 4, + "May" => 5, + "Jun" => 6, + "Jul" => 7, + "Aug" => 8, + "Sep" => 9, + "Oct" => 10, + "Nov" => 11, + "Dec" => 12, + _ => return None, + }; + let year = parts.next()?.parse::().ok()?; + let time = parts.next()?; + let zone = parts.next()?; + if parts.next().is_some() + || !matches!( + weekday, + "Sun," | "Mon," | "Tue," | "Wed," | "Thu," | "Fri," | "Sat," + ) + || zone != "GMT" + { + return None; + } + let mut clock = time.split(':'); + let hour = clock.next()?.parse::().ok()?; + let minute = clock.next()?.parse::().ok()?; + let second = clock.next()?.parse::().ok()?; + if clock.next().is_some() { + return None; + } + let timestamp = timestamp_components(year, month, day, hour, minute, second)?; + let weekday_index = ((timestamp / 86_400 + 4) % 7) as usize; + let expected = ["Sun,", "Mon,", "Tue,", "Wed,", "Thu,", "Fri,", "Sat,"]; + (weekday == expected[weekday_index]).then_some(timestamp) +} + +fn timestamp_seconds(value: &str) -> Option { + let bytes = value.as_bytes(); + if bytes.len() != 20 + || bytes[4] != b'-' + || bytes[7] != b'-' + || bytes[10] != b'T' + || bytes[13] != b':' + || bytes[16] != b':' + || bytes[19] != b'Z' + { + return None; + } + timestamp_components( + decimal(bytes, 0, 4)?, + decimal(bytes, 5, 2)?, + decimal(bytes, 8, 2)?, + decimal(bytes, 11, 2)?, + decimal(bytes, 14, 2)?, + decimal(bytes, 17, 2)?, + ) +} + +fn timestamp_components( + year: u32, + month: u32, + day: u32, + hour: u32, + minute: u32, + second: u32, +) -> Option { + if year < 1970 + || !(1..=12).contains(&month) + || day == 0 + || day > days_in_month(year, month) + || hour > 23 + || minute > 59 + || second > 59 + { + return None; + } + let mut days = 0_u64; + for prior_year in 1970..year { + days += u64::from(if is_leap(prior_year) { + 366_u16 + } else { + 365_u16 + }); + } + for prior_month in 1..month { + days += u64::from(days_in_month(year, prior_month)); + } + days += u64::from(day - 1); + Some(days * 86_400 + u64::from(hour * 3_600 + minute * 60 + second)) +} + +fn decimal(bytes: &[u8], start: usize, length: usize) -> Option { + bytes + .get(start..start + length)? + .iter() + .try_fold(0, |value, byte| { + byte.is_ascii_digit() + .then(|| value * 10 + u32::from(*byte - b'0')) + }) +} + +const fn days_in_month(year: u32, month: u32) -> u32 { + match month { + 2 if is_leap(year) => 29, + 2 => 28, + 4 | 6 | 9 | 11 => 30, + _ => 31, + } +} + +const fn is_leap(year: u32) -> bool { + year.is_multiple_of(400) || (year.is_multiple_of(4) && !year.is_multiple_of(100)) +} + +fn external_error(detail: impl Into) -> Report { + Report::new(MarkdownError::ExternalLink { + detail: detail.into(), + }) +} + +#[cfg(test)] +mod process_tests { + use std::fs; + use std::io; + use std::os::unix::fs::PermissionsExt as _; + use std::process::{Command, Stdio}; + + use super::*; + + #[test] + fn bounded_process_clears_path_proxy_and_curl_environment_to_the_fixed_locale() { + let output = run_bounded_process_with_environment( + "/usr/bin/env", + &[], + 4096, + Duration::from_secs(1), + &[ + ("PATH", "/tmp/substituted-curl"), + ("HTTPS_PROXY", "https://proxy.example.invalid"), + ("ALL_PROXY", "https://proxy.example.invalid"), + ("CURL_HOME", "/tmp/poisoned-curl-home"), + ("SSL_CERT_FILE", "/tmp/poisoned-certificates"), + ], + ) + .expect("should execute environment fixture"); + let environment = + String::from_utf8(output.stdout).expect("should return UTF-8 environment"); + let variables = environment.lines().collect::>(); + + assert_eq!(variables, BTreeSet::from(["LANG=C", "LC_ALL=C"])); + } + + #[test] + fn bounded_process_times_out_kills_and_reaps_a_silent_child() { + let fixture = process_fixture("exec /bin/sleep 60\n"); + let mut observed_pid = None; + + let error = run_bounded_process_with_observer( + fixture + .path() + .join("process.sh") + .to_str() + .expect("should have UTF-8 fixture path"), + &[], + 32, + Duration::from_millis(500), + |pid| { + observed_pid = Some(pid); + Ok(()) + }, + ) + .expect_err("silent child should time out"); + + assert!(error.contains("wall-clock timeout")); + assert_reaped(observed_pid.expect("should observe the child synchronously")); + } + + #[test] + fn bounded_process_overflow_kills_and_reaps_the_child() { + let fixture = process_fixture(concat!( + "printf '0123456789012345678901234567890123456789012345678901234567890123'\n", + ": > \"$1\"\n", + "exec /bin/sleep 60\n", + )); + let ready = fixture.path().join("stdout-ready"); + let arguments = [ready + .to_str() + .expect("should have UTF-8 readiness path") + .to_owned()]; + let mut observed_pid = None; + + let error = run_bounded_process_with_observer( + fixture + .path() + .join("process.sh") + .to_str() + .expect("should have UTF-8 fixture path"), + &arguments, + 32, + Duration::from_secs(5), + |pid| { + observed_pid = Some(pid); + wait_for_fixture_readiness(&ready) + }, + ) + .expect_err("overflowing child should be terminated"); + + assert!( + error.contains("stdout exceeds 32 bytes"), + "overflow should take precedence over timeout: {error}" + ); + assert_reaped(observed_pid.expect("should observe the child synchronously")); + } + + #[test] + fn deadline_overflow_kills_waits_and_reaps_the_observed_child() { + let fixture = process_fixture("exec /bin/sleep 60\n"); + let mut observed_pid = None; + + let error = run_bounded_process_with_observer( + fixture + .path() + .join("process.sh") + .to_str() + .expect("should have UTF-8 fixture path"), + &[], + 32, + Duration::MAX, + |pid| { + observed_pid = Some(pid); + Ok(()) + }, + ) + .expect_err("overflowed deadline should terminate the spawned child"); + + assert!(error.contains("timeout overflowed")); + assert_reaped(observed_pid.expect("should observe the child synchronously")); + } + + #[test] + fn cleanup_waits_after_kill_failure_and_retains_every_diagnostic() { + let mut process = FakeCleanupProcess::running_with_failures(); + + let error = cleanup_spawned_process(&mut process, "primary failure".to_owned()); + + assert_eq!(process.calls, ["poll", "kill", "wait"]); + assert!(error.contains("primary failure")); + assert!(error.contains("injected kill failure")); + assert!(error.contains("injected wait failure")); + } + + #[test] + fn cleanup_waits_without_killing_an_already_exited_child() { + let mut process = FakeCleanupProcess::exited(); + + let error = cleanup_spawned_process(&mut process, "primary failure".to_owned()); + + assert_eq!(process.calls, ["poll", "wait"]); + assert_eq!(error, "primary failure"); + } + + #[test] + fn cleanup_retains_reader_error_while_reaping_the_process() { + let mut process = FakeCleanupProcess::running(); + let reader = thread::spawn(|| -> Result, String> { + Err("injected concurrent reader failure".to_owned()) + }); + + let error = + finish_process_failure(&mut process, Some(reader), "primary failure".to_owned()); + + assert_eq!(process.calls, ["poll", "kill", "wait"]); + assert!(error.contains("primary failure")); + assert!(error.contains("injected concurrent reader failure")); + } + + #[test] + fn bounded_reader_reports_read_errors_and_overflow() { + let read_error = + read_bounded_stdout(FailingReader, 32).expect_err("reader failure should be retained"); + let overflow = read_bounded_stdout(&b"overflow"[..], 4) + .expect_err("reader overflow should be retained"); + + assert!(read_error.contains("injected reader failure")); + assert!(overflow.contains("stdout exceeds 4 bytes")); + } + + fn process_fixture(command: &str) -> tempfile::TempDir { + let fixture = tempfile::tempdir().expect("should create process fixture"); + let executable = fixture.path().join("process.sh"); + fs::write(&executable, format!("#!/bin/sh\n{command}")) + .expect("should write process fixture"); + fs::set_permissions(&executable, fs::Permissions::from_mode(0o700)) + .expect("should make process fixture executable"); + fixture + } + + fn wait_for_fixture_readiness(path: &std::path::Path) -> Result<(), String> { + let deadline = Instant::now() + .checked_add(Duration::from_secs(30)) + .expect("fixture readiness timeout should fit"); + loop { + match path.try_exists() { + Ok(true) => return Ok(()), + Ok(false) => {} + Err(error) => { + return Err(format!( + "cannot inspect process-fixture readiness {}: {error}", + path.display() + )); + } + } + if Instant::now() >= deadline { + return Err(format!( + "process fixture did not report readiness at {}", + path.display() + )); + } + thread::yield_now(); + } + } + + fn assert_reaped(pid: u32) { + let status = Command::new("/bin/kill") + .args(["-0", &pid.to_string()]) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .expect("should inspect child process"); + assert!(!status.success(), "child process should be reaped"); + } + + struct FailingReader; + + impl Read for FailingReader { + fn read(&mut self, _buffer: &mut [u8]) -> io::Result { + Err(io::Error::other("injected reader failure")) + } + } + + struct FakeCleanupProcess { + exited: bool, + kill_error: Option, + wait_error: Option, + calls: Vec<&'static str>, + } + + impl FakeCleanupProcess { + fn running() -> Self { + Self { + exited: false, + kill_error: None, + wait_error: None, + calls: Vec::new(), + } + } + + fn running_with_failures() -> Self { + Self { + exited: false, + kill_error: Some(io::Error::other("injected kill failure")), + wait_error: Some(io::Error::other("injected wait failure")), + calls: Vec::new(), + } + } + + fn exited() -> Self { + Self { + exited: true, + kill_error: None, + wait_error: None, + calls: Vec::new(), + } + } + } + + impl ProcessCleanup for FakeCleanupProcess { + fn poll_exited(&mut self) -> io::Result { + self.calls.push("poll"); + Ok(self.exited) + } + + fn kill_owned(&mut self) -> io::Result<()> { + self.calls.push("kill"); + self.kill_error.take().map_or(Ok(()), Err) + } + + fn wait_owned(&mut self) -> io::Result<()> { + self.calls.push("wait"); + self.wait_error.take().map_or(Ok(()), Err) + } + } +} diff --git a/tools/docs-parity/src/model.rs b/tools/docs-parity/src/model.rs new file mode 100644 index 000000000..80ad16f95 --- /dev/null +++ b/tools/docs-parity/src/model.rs @@ -0,0 +1,196 @@ +//! Shared governance types for checked records. + +use error_stack::Report; + +/// Validation failure for a checked record field. +#[derive(Debug, derive_more::Display)] +pub enum ModelError { + /// A required text field is empty or only whitespace. + #[display("{field} must not be blank")] + Blank { + /// Name of the invalid field. + field: &'static str, + }, + /// An expiry is not a canonical UTC timestamp. + #[display("expiry must use YYYY-MM-DDTHH:MM:SSZ")] + InvalidExpiry, +} + +impl core::error::Error for ModelError {} + +/// Non-empty owner responsible for a governed record. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Owner(String); + +impl Owner { + /// Create an owner from non-empty text. + /// + /// # Errors + /// + /// Returns an error when `value` is empty or contains only whitespace. + pub fn new(value: impl Into) -> Result> { + required_text(value.into(), "owner").map(Self) + } + + /// Return the owner text. + #[must_use] + pub fn as_str(&self) -> &str { + &self.0 + } +} + +/// Non-empty rationale for a governed record. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Rationale(String); + +impl Rationale { + /// Create a rationale from non-empty text. + /// + /// # Errors + /// + /// Returns an error when `value` is empty or contains only whitespace. + pub fn new(value: impl Into) -> Result> { + required_text(value.into(), "rationale").map(Self) + } + + /// Return the rationale text. + #[must_use] + pub fn as_str(&self) -> &str { + &self.0 + } +} + +/// Canonical UTC expiry timestamp for a governed record. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Expiry(String); + +impl Expiry { + /// Parse a `YYYY-MM-DDTHH:MM:SSZ` expiry timestamp. + /// + /// # Errors + /// + /// Returns an error when the timestamp is not canonical UTC or contains + /// an invalid calendar or clock component. + pub fn parse(value: impl Into) -> Result> { + let value = value.into(); + if valid_expiry(&value) { + Ok(Self(value)) + } else { + Err(Report::new(ModelError::InvalidExpiry)) + } + } + + /// Return the canonical timestamp text. + #[must_use] + pub fn as_str(&self) -> &str { + &self.0 + } +} + +/// Mandatory governance attached to an expiring exception or prose override. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Governance { + owner: Owner, + rationale: Rationale, + expiry: Expiry, +} + +impl Governance { + /// Create governance with all structurally required fields. + #[must_use] + pub const fn new(owner: Owner, rationale: Rationale, expiry: Expiry) -> Self { + Self { + owner, + rationale, + expiry, + } + } + + /// Return the responsible owner. + #[must_use] + pub const fn owner(&self) -> &Owner { + &self.owner + } + + /// Return the bounded rationale. + #[must_use] + pub const fn rationale(&self) -> &Rationale { + &self.rationale + } + + /// Return the expiry timestamp. + #[must_use] + pub const fn expiry(&self) -> &Expiry { + &self.expiry + } +} + +fn required_text(value: String, field: &'static str) -> Result> { + if value.trim().is_empty() { + Err(Report::new(ModelError::Blank { field })) + } else { + Ok(value) + } +} + +fn valid_expiry(value: &str) -> bool { + let bytes = value.as_bytes(); + if bytes.len() != 20 + || bytes[4] != b'-' + || bytes[7] != b'-' + || bytes[10] != b'T' + || bytes[13] != b':' + || bytes[16] != b':' + || bytes[19] != b'Z' + { + return false; + } + + let Some(year) = decimal(bytes, 0, 4) else { + return false; + }; + let Some(month) = decimal(bytes, 5, 2) else { + return false; + }; + let Some(day) = decimal(bytes, 8, 2) else { + return false; + }; + let Some(hour) = decimal(bytes, 11, 2) else { + return false; + }; + let Some(minute) = decimal(bytes, 14, 2) else { + return false; + }; + let Some(second) = decimal(bytes, 17, 2) else { + return false; + }; + + year > 0 + && (1..=12).contains(&month) + && day > 0 + && day <= days_in_month(year, month) + && hour <= 23 + && minute <= 59 + && second <= 59 +} + +fn decimal(bytes: &[u8], start: usize, length: usize) -> Option { + bytes + .get(start..start + length)? + .iter() + .try_fold(0, |value, byte| { + byte.is_ascii_digit() + .then(|| value * 10 + u32::from(*byte - b'0')) + }) +} + +const fn days_in_month(year: u32, month: u32) -> u32 { + match month { + 2 if year.is_multiple_of(400) || (year.is_multiple_of(4) && !year.is_multiple_of(100)) => { + 29 + } + 2 => 28, + 4 | 6 | 9 | 11 => 30, + _ => 31, + } +} diff --git a/tools/docs-parity/src/repository.rs b/tools/docs-parity/src/repository.rs new file mode 100644 index 000000000..d3ec960e7 --- /dev/null +++ b/tools/docs-parity/src/repository.rs @@ -0,0 +1,944 @@ +use std::ffi::{OsStr, OsString}; +use std::fs::{self, File}; +use std::io::{ErrorKind, Read as _, Write as _}; +#[cfg(any(target_os = "linux", target_os = "macos"))] +use std::os::unix::fs::{MetadataExt as _, PermissionsExt as _}; +use std::path::{Component, Path, PathBuf}; +use std::process::Command; + +use error_stack::{Report, ResultExt as _}; + +#[derive(Debug, derive_more::Display)] +pub(crate) enum RepositoryError { + #[display("Git repository discovery failed")] + Discovery, + #[display("Git tracked-path enumeration failed")] + TrackedPaths, + #[display("repository path is not a normalized relative path")] + UnsafeRelativePath, + #[display("repository path escapes through a symlink")] + SymlinkEscape, + #[display("repository entry has an unsafe type or mode")] + UnsafeEntry, + #[display("repository file operation failed")] + FileOperation, +} + +impl core::error::Error for RepositoryError {} + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub(crate) struct NormalizedRelativePath(PathBuf); + +impl NormalizedRelativePath { + pub(crate) fn new(path: &Path) -> Result> { + if path.as_os_str().is_empty() || path.is_absolute() { + return Err(Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("path: {}", path.display()))); + } + + let mut normalized = PathBuf::new(); + for component in path.components() { + match component { + Component::Normal(value) if safe_component(value) => normalized.push(value), + _ => { + return Err(Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("path: {}", path.display()))); + } + } + } + + if normalized.as_os_str() != path.as_os_str() { + return Err(Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("path: {}", path.display()))); + } + + Ok(Self(normalized)) + } + + pub(crate) fn as_path(&self) -> &Path { + &self.0 + } + + pub(crate) fn as_utf8(&self) -> Result<&str, Report> { + self.0.to_str().ok_or_else(|| { + Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("non-UTF-8 path: {}", self.0.display())) + }) + } +} + +fn safe_component(value: &OsStr) -> bool { + let Some(value) = value.to_str() else { + return false; + }; + !value.eq_ignore_ascii_case(".git") + && !value.ends_with(['.', ' ']) + && !value.chars().any(|character| { + character.is_control() + || matches!(character, '<' | '>' | ':' | '"' | '|' | '?' | '*' | '\\') + }) + && !is_windows_device_name(value) +} + +fn is_windows_device_name(value: &str) -> bool { + let stem = value + .split_once('.') + .map_or(value, |(stem, _extension)| stem) + .trim_end_matches(['.', ' ']); + if ["CON", "PRN", "AUX", "NUL", "CLOCK$"] + .iter() + .any(|reserved| stem.eq_ignore_ascii_case(reserved)) + { + return true; + } + + let Some(prefix) = stem.get(..3) else { + return false; + }; + let Some(suffix) = stem.get(3..) else { + return false; + }; + (prefix.eq_ignore_ascii_case("COM") || prefix.eq_ignore_ascii_case("LPT")) + && matches!( + suffix, + "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "¹" | "²" | "³" + ) +} + +pub(crate) struct Repository { + root: PathBuf, +} + +impl Repository { + pub(crate) fn discover(start: &Path) -> Result> { + let start = fs::canonicalize(start) + .change_context(RepositoryError::Discovery) + .attach_with(|| format!("start path: {}", start.display()))?; + let output = Command::new("git") + .args([ + "-C", + start.to_str().ok_or_else(|| { + Report::new(RepositoryError::Discovery).attach("start path is not UTF-8") + })?, + "rev-parse", + "--show-toplevel", + ]) + .output() + .change_context(RepositoryError::Discovery)?; + + if !output.status.success() { + return Err(Report::new(RepositoryError::Discovery) + .attach(String::from_utf8_lossy(&output.stderr).trim().to_owned())); + } + + let root_bytes = output.stdout.strip_suffix(b"\n").ok_or_else(|| { + Report::new(RepositoryError::Discovery) + .attach("Git repository root output has no line terminator") + })?; + let root_text = + core::str::from_utf8(root_bytes).change_context(RepositoryError::Discovery)?; + let root = fs::canonicalize(root_text) + .change_context(RepositoryError::Discovery) + .attach_with(|| format!("repository root: {root_text}"))?; + if !start.starts_with(&root) { + return Err(Report::new(RepositoryError::SymlinkEscape) + .attach(format!("start path: {}", start.display())) + .attach(format!("repository root: {}", root.display()))); + } + + Ok(Self { root }) + } + + pub(crate) fn tracked_paths_record(&self) -> Result, Report> { + let paths = self.tracked_paths()?; + let mut record = Vec::new(); + for path in paths { + record.extend_from_slice(path.as_utf8()?.as_bytes()); + record.push(b'\n'); + } + Ok(record) + } + + pub(crate) fn tracked_paths( + &self, + ) -> Result, Report> { + let output = Command::new("git") + .args(["-C", self.root_text()?, "ls-files", "-z"]) + .output() + .change_context(RepositoryError::TrackedPaths)?; + if !output.status.success() { + return Err(Report::new(RepositoryError::TrackedPaths) + .attach(String::from_utf8_lossy(&output.stderr).trim().to_owned())); + } + + let mut paths = Vec::new(); + for raw_path in output + .stdout + .split(|byte| *byte == 0) + .filter(|path| !path.is_empty()) + { + let path_text = core::str::from_utf8(raw_path) + .change_context(RepositoryError::TrackedPaths) + .attach("tracked path is not UTF-8")?; + let path = NormalizedRelativePath::new(Path::new(path_text))?; + self.validate_existing(&path, true)?; + paths.push(path); + } + paths.sort_unstable(); + Ok(paths) + } + + pub(crate) fn read_tracked( + &self, + path: &NormalizedRelativePath, + ) -> Result, Report> { + self.validate_existing(path, true)?; + let absolute = self.root.join(path.as_path()); + fs::read(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("read tracked path: {}", absolute.display())) + } + + pub(crate) fn read_tracked_bounded( + &self, + path: &NormalizedRelativePath, + maximum_bytes: usize, + ) -> Result, Report> { + self.read_tracked_bounded_with_hook(path, maximum_bytes, || Ok(())) + } + + fn read_tracked_bounded_with_hook( + &self, + path: &NormalizedRelativePath, + maximum_bytes: usize, + after_read: F, + ) -> Result, Report> + where + F: FnOnce() -> Result<(), std::io::Error>, + { + self.validate_existing(path, false)?; + let absolute = self.root.join(path.as_path()); + let path_before = FileSnapshot::read_path(&absolute)?; + if path_before.size > maximum_bytes as u64 { + return Err(Report::new(RepositoryError::UnsafeEntry).attach(format!( + "bounded path exceeds {maximum_bytes} bytes: {}", + absolute.display() + ))); + } + + let mut file = File::open(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("open bounded path: {}", absolute.display()))?; + let opened_before = FileSnapshot::from_metadata( + &file + .metadata() + .change_context(RepositoryError::FileOperation)?, + )?; + if opened_before != path_before { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "bounded path changed before read: {}", + absolute.display() + ))); + } + + let capacity = usize::try_from(opened_before.size).map_err(|error| { + Report::new(RepositoryError::UnsafeEntry) + .attach(format!("bounded file size cannot be represented: {error}")) + })?; + let mut bytes = Vec::with_capacity(capacity); + std::io::Read::take(&mut file, (maximum_bytes as u64).saturating_add(1)) + .read_to_end(&mut bytes) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("read bounded path: {}", absolute.display()))?; + if bytes.len() > maximum_bytes { + return Err(Report::new(RepositoryError::UnsafeEntry).attach(format!( + "bounded path exceeds {maximum_bytes} bytes: {}", + absolute.display() + ))); + } + after_read() + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("bounded read hook: {}", absolute.display()))?; + self.validate_existing(path, false)?; + let path_after = FileIdentity::read(&absolute)?; + if path_after != opened_before.identity { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "bounded path identity changed while reading: {}", + absolute.display() + ))); + } + let opened_after = FileSnapshot::from_metadata( + &file + .metadata() + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("reinspect opened bounded path: {}", absolute.display()))?, + )?; + let path_metadata = fs::symlink_metadata(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("reinspect bounded path: {}", absolute.display()))?; + if opened_after != opened_before + || opened_after.size != bytes.len() as u64 + || FileIdentity::from_metadata(&path_metadata)? != opened_before.identity + { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "bounded path changed while reading: {}", + absolute.display() + ))); + } + Ok(bytes) + } + + pub(crate) fn read_optional( + &self, + path: &NormalizedRelativePath, + ) -> Result>, Report> { + let absolute = self.root.join(path.as_path()); + if final_entry_metadata(&absolute)?.is_none() { + self.validate_parent_chain(path)?; + return Ok(None); + } + + self.validate_existing(path, false)?; + fs::read(&absolute) + .map(Some) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("read path: {}", absolute.display())) + } + + pub(crate) fn validate_regular_file( + &self, + path: &NormalizedRelativePath, + ) -> Result<(), Report> { + self.validate_existing(path, false) + } + + pub(crate) fn replace_atomically_after_precommit_validation( + &self, + path: &NormalizedRelativePath, + expected_original: Option<&[u8]>, + contents: &[u8], + ) -> Result<(), Report> { + self.replace_atomically_with_hooks( + path, + expected_original, + contents, + |_stage| Ok(()), + |staged, target| fs::rename(staged, target), + ) + } + + fn replace_atomically_with_hooks( + &self, + path: &NormalizedRelativePath, + expected_original: Option<&[u8]>, + contents: &[u8], + after_stage: F, + commit: C, + ) -> Result<(), Report> + where + F: FnOnce(&Path) -> Result<(), std::io::Error>, + C: FnOnce(&Path, &Path) -> Result<(), std::io::Error>, + { + let absolute = self.root.join(path.as_path()); + let identity = self.validate_expected_target(path, expected_original)?; + let parent = absolute.parent().ok_or_else(|| { + Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("path: {}", path.as_path().display())) + })?; + self.create_safe_parent(path, parent)?; + + let prefix = temporary_prefix(&absolute)?; + let mut stage = tempfile::Builder::new() + .prefix(&prefix) + .tempfile_in(parent) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("create owned atomic stage in: {}", parent.display()))?; + let stage_mode = identity.as_ref().map_or(0o644, |value| value.mode & 0o777); + #[cfg(any(target_os = "linux", target_os = "macos"))] + stage + .as_file() + .set_permissions(fs::Permissions::from_mode(stage_mode)) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("set atomic stage mode: {}", stage.path().display()))?; + + let write_result = stage + .write_all(contents) + .and_then(|()| stage.as_file().sync_all()) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("atomic stage: {}", stage.path().display())); + write_result?; + + after_stage(stage.path()) + .change_context(RepositoryError::FileOperation) + .attach("atomic update interrupted after staging")?; + self.verify_expected_target(path, expected_original, identity.as_ref())?; + + commit(stage.path(), &absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("atomic target: {}", absolute.display()))?; + let (_committed_file, _vacated_stage_path) = stage + .keep() + .change_context(RepositoryError::FileOperation) + .attach("release cleanup ownership after atomic commit")?; + + File::open(parent) + .and_then(|directory| directory.sync_all()) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("sync directory: {}", parent.display()))?; + Ok(()) + } + + fn validate_expected_target( + &self, + path: &NormalizedRelativePath, + expected_original: Option<&[u8]>, + ) -> Result, Report> { + let absolute = self.root.join(path.as_path()); + match expected_original { + Some(expected) => { + self.validate_existing(path, false)?; + let before = FileIdentity::read(&absolute)?; + let actual = fs::read(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| { + format!("read expected atomic target: {}", absolute.display()) + })?; + let after = FileIdentity::read(&absolute)?; + if before != after || actual != expected { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "atomic target changed before staging: {}", + absolute.display() + ))); + } + Ok(Some(after)) + } + None => { + if final_entry_metadata(&absolute)?.is_some() { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "atomic target was created concurrently: {}", + absolute.display() + ))); + } + self.validate_parent_chain(path)?; + Ok(None) + } + } + } + + fn verify_expected_target( + &self, + path: &NormalizedRelativePath, + expected_original: Option<&[u8]>, + expected_identity: Option<&FileIdentity>, + ) -> Result<(), Report> { + let absolute = self.root.join(path.as_path()); + match (expected_original, expected_identity) { + (Some(expected), Some(identity)) => { + self.validate_existing(path, false)?; + let before = FileIdentity::read(&absolute)?; + let actual = fs::read(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("re-read atomic target: {}", absolute.display()))?; + let after = FileIdentity::read(&absolute)?; + if &before != identity || before != after || actual != expected { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "atomic target changed while staging: {}", + absolute.display() + ))); + } + } + (None, None) => { + if final_entry_metadata(&absolute)?.is_some() { + return Err(Report::new(RepositoryError::FileOperation).attach(format!( + "atomic target was created while staging: {}", + absolute.display() + ))); + } + self.validate_parent_chain(path)?; + } + _ => { + return Err(Report::new(RepositoryError::FileOperation) + .attach("atomic target expectation is inconsistent")); + } + } + Ok(()) + } + + fn root_text(&self) -> Result<&str, Report> { + self.root.to_str().ok_or_else(|| { + Report::new(RepositoryError::Discovery).attach("repository root is not UTF-8") + }) + } + + fn validate_existing( + &self, + path: &NormalizedRelativePath, + allow_internal_symlink: bool, + ) -> Result<(), Report> { + self.validate_parent_chain(path)?; + let absolute = self.root.join(path.as_path()); + let link_metadata = fs::symlink_metadata(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("inspect path: {}", absolute.display()))?; + if link_metadata.file_type().is_symlink() && !allow_internal_symlink { + return Err(Report::new(RepositoryError::UnsafeEntry) + .attach(format!("symlink path: {}", absolute.display()))); + } + let canonical = fs::canonicalize(&absolute) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("canonicalize path: {}", absolute.display()))?; + if !canonical.starts_with(&self.root) { + return Err(Report::new(RepositoryError::SymlinkEscape) + .attach(format!("path: {}", absolute.display())) + .attach(format!("target: {}", canonical.display()))); + } + + let metadata = fs::metadata(&canonical) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("inspect target: {}", canonical.display()))?; + if !metadata.is_file() || unsafe_mode(&metadata) { + return Err(Report::new(RepositoryError::UnsafeEntry) + .attach(format!("path: {}", canonical.display()))); + } + if link_metadata.file_type().is_symlink() { + let target_relative = canonical.strip_prefix(&self.root).map_err(|_error| { + Report::new(RepositoryError::SymlinkEscape) + .attach(format!("target: {}", canonical.display())) + })?; + let target_relative = NormalizedRelativePath::new(target_relative)?; + self.validate_parent_chain(&target_relative)?; + } + Ok(()) + } + + fn validate_parent_chain( + &self, + path: &NormalizedRelativePath, + ) -> Result<(), Report> { + self.validate_directory(&self.root)?; + let Some(parent) = path.as_path().parent() else { + return Ok(()); + }; + let mut ancestor = self.root.clone(); + for component in parent.components() { + let Component::Normal(component) = component else { + return Err(Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("path: {}", path.as_path().display()))); + }; + ancestor.push(component); + if !ancestor + .try_exists() + .change_context(RepositoryError::FileOperation)? + { + break; + } + self.validate_directory(&ancestor)?; + } + Ok(()) + } + + fn validate_directory(&self, path: &Path) -> Result<(), Report> { + let canonical = fs::canonicalize(path) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("canonicalize directory: {}", path.display()))?; + if !canonical.starts_with(&self.root) { + return Err(Report::new(RepositoryError::SymlinkEscape) + .attach(format!("directory: {}", path.display())) + .attach(format!("target: {}", canonical.display()))); + } + let metadata = fs::metadata(&canonical).change_context(RepositoryError::FileOperation)?; + if !metadata.is_dir() || unsafe_mode(&metadata) { + return Err(Report::new(RepositoryError::UnsafeEntry) + .attach(format!("directory: {}", canonical.display()))); + } + Ok(()) + } + + fn create_safe_parent( + &self, + path: &NormalizedRelativePath, + parent: &Path, + ) -> Result<(), Report> { + self.validate_parent_chain(path)?; + fs::create_dir_all(parent) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("create directory: {}", parent.display()))?; + self.validate_parent_chain(path) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +struct FileIdentity { + device: u64, + inode: u64, + mode: u32, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +struct FileSnapshot { + identity: FileIdentity, + size: u64, + modified_seconds: i64, + modified_nanoseconds: i64, + changed_seconds: i64, + changed_nanoseconds: i64, +} + +impl FileSnapshot { + fn read_path(path: &Path) -> Result> { + let metadata = fs::symlink_metadata(path) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("inspect bounded path snapshot: {}", path.display()))?; + Self::from_metadata(&metadata) + } + + fn from_metadata(metadata: &fs::Metadata) -> Result> { + Ok(Self { + identity: FileIdentity::from_metadata(metadata)?, + size: metadata.len(), + modified_seconds: metadata.mtime(), + modified_nanoseconds: metadata.mtime_nsec(), + changed_seconds: metadata.ctime(), + changed_nanoseconds: metadata.ctime_nsec(), + }) + } +} + +impl FileIdentity { + fn read(path: &Path) -> Result> { + let metadata = fs::symlink_metadata(path) + .change_context(RepositoryError::FileOperation) + .attach_with(|| format!("inspect atomic target identity: {}", path.display()))?; + if !metadata.is_file() || unsafe_mode(&metadata) { + return Err(Report::new(RepositoryError::UnsafeEntry) + .attach(format!("unsafe atomic target: {}", path.display()))); + } + Self::from_metadata(&metadata) + } + + fn from_metadata(metadata: &fs::Metadata) -> Result> { + if !metadata.is_file() || unsafe_mode(metadata) { + return Err( + Report::new(RepositoryError::UnsafeEntry).attach("unsafe bounded file metadata") + ); + } + Ok(Self { + device: metadata.dev(), + inode: metadata.ino(), + mode: metadata.mode(), + }) + } +} + +fn final_entry_metadata(path: &Path) -> Result, Report> { + match fs::symlink_metadata(path) { + Ok(metadata) => Ok(Some(metadata)), + Err(error) if error.kind() == ErrorKind::NotFound => Ok(None), + Err(error) => Err(Report::new(error) + .change_context(RepositoryError::FileOperation) + .attach(format!("inspect final entry: {}", path.display()))), + } +} + +fn temporary_prefix(target: &Path) -> Result> { + let file_name = target.file_name().ok_or_else(|| { + Report::new(RepositoryError::UnsafeRelativePath) + .attach(format!("target: {}", target.display())) + })?; + let mut prefix = OsString::from("."); + prefix.push(file_name); + prefix.push(".docs-parity."); + Ok(prefix) +} + +#[cfg(any(target_os = "linux", target_os = "macos"))] +fn unsafe_mode(metadata: &fs::Metadata) -> bool { + metadata.permissions().mode() & 0o022 != 0 +} + +#[cfg(not(any(target_os = "linux", target_os = "macos")))] +fn unsafe_mode(_metadata: &fs::Metadata) -> bool { + std::process::abort() +} + +#[cfg(test)] +mod tests { + use std::cell::RefCell; + + use super::*; + + fn repository() -> (tempfile::TempDir, Repository, NormalizedRelativePath) { + let directory = tempfile::tempdir().expect("should create repository fixture"); + let root = fs::canonicalize(directory.path()).expect("should canonicalize fixture"); + let repository = Repository { root }; + let path = NormalizedRelativePath::new(Path::new("record.txt")) + .expect("should create normalized fixture path"); + (directory, repository, path) + } + + #[test] + fn atomic_replacement_rejects_stale_content_and_cleans_its_owned_stage() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original"); + + let stage = RefCell::new(None); + let result = repository.replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |staged| { + stage.replace(Some(staged.to_owned())); + fs::write(&target, b"concurrent") + }, + |staged, target| fs::rename(staged, target), + ); + + assert!(result.is_err()); + assert_eq!( + fs::read(&target).expect("should read concurrent edit"), + b"concurrent" + ); + assert_owned_stage_removed(stage); + } + + #[test] + fn atomic_replacement_rejects_replacement_identity_even_with_equal_bytes() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + let replacement = directory.path().join("replacement.txt"); + fs::write(&target, b"original").expect("should write original"); + + let stage = RefCell::new(None); + let result = repository.replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |staged| { + stage.replace(Some(staged.to_owned())); + fs::write(&replacement, b"original")?; + fs::rename(&replacement, &target) + }, + |staged, target| fs::rename(staged, target), + ); + + assert!(result.is_err()); + assert_eq!( + fs::read(&target).expect("should read replacement"), + b"original" + ); + assert_owned_stage_removed(stage); + } + + #[test] + fn interrupted_atomic_replacement_reaps_its_stage_without_touching_target() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original"); + + let stage = RefCell::new(None); + let result = repository.replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |staged| { + stage.replace(Some(staged.to_owned())); + Err(std::io::Error::other("injected interruption")) + }, + |staged, target| fs::rename(staged, target), + ); + + assert!(result.is_err()); + assert_eq!( + fs::read(&target).expect("should read original"), + b"original" + ); + assert_owned_stage_removed(stage); + } + + #[test] + fn failed_atomic_rename_cleans_its_owned_stage_and_preserves_the_target() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original"); + + let stage = RefCell::new(None); + let result = repository.replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |staged| { + stage.replace(Some(staged.to_owned())); + Ok(()) + }, + |_stage, _target| Err(std::io::Error::other("injected rename failure")), + ); + + assert!(result.is_err()); + assert_eq!( + fs::read(&target).expect("should read original"), + b"original" + ); + assert_owned_stage_removed(stage); + } + + #[test] + fn atomic_replacement_rejects_a_target_created_before_precommit_validation() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + + let stage = RefCell::new(None); + let result = repository.replace_atomically_with_hooks( + &path, + None, + b"generated", + |staged| { + stage.replace(Some(staged.to_owned())); + fs::write(&target, b"concurrent") + }, + |staged, target| fs::rename(staged, target), + ); + + assert!(result.is_err()); + assert_eq!( + fs::read(&target).expect("should read concurrent creation"), + b"concurrent" + ); + assert_owned_stage_removed(stage); + } + + #[test] + fn commit_hook_demonstrates_the_documented_final_syscall_window() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original"); + + repository + .replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |_staged| Ok(()), + |staged, target| { + fs::write(target, b"change after the precommit check")?; + fs::rename(staged, target) + }, + ) + .expect("portable rename should replace after the documented check boundary"); + + assert_eq!( + fs::read(target).expect("should read committed target"), + b"generated" + ); + } + + #[test] + fn successful_commit_releases_the_vacated_stage_path_before_cleanup() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original"); + let stage_path = RefCell::new(None); + + repository + .replace_atomically_with_hooks( + &path, + Some(b"original"), + b"generated", + |staged| { + stage_path.replace(Some(staged.to_owned())); + Ok(()) + }, + |staged, target| { + fs::rename(staged, target)?; + fs::write(staged, b"peer replacement") + }, + ) + .expect("successful commit should release its old stage path"); + + let stage_path = stage_path + .into_inner() + .expect("should observe the unique stage path"); + assert_eq!( + fs::read(stage_path).expect("peer replacement should remain"), + b"peer replacement" + ); + assert_eq!( + fs::read(target).expect("should read committed target"), + b"generated" + ); + } + + #[test] + fn bounded_read_accepts_the_limit_and_rejects_larger_or_symlink_entries() { + const LIMIT: usize = 4 * 1024 * 1024; + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, vec![b'x'; LIMIT]).expect("should write exact-limit fixture"); + assert_eq!( + repository + .read_tracked_bounded(&path, LIMIT) + .expect("exact-limit input should be readable") + .len(), + LIMIT + ); + fs::write(&target, vec![b'x'; LIMIT + 1]).expect("should write over-limit fixture"); + assert!( + repository.read_tracked_bounded(&path, LIMIT).is_err(), + "over-limit input must fail before allocation" + ); + + #[cfg(any(target_os = "linux", target_os = "macos"))] + { + use std::os::unix::fs::symlink; + + let linked = directory.path().join("linked.txt"); + symlink(&target, &linked).expect("should create symlink fixture"); + let linked = NormalizedRelativePath::new(Path::new("linked.txt")) + .expect("should normalize linked path"); + assert!( + repository.read_tracked_bounded(&linked, LIMIT).is_err(), + "a symlink input must fail before reading" + ); + } + } + + #[test] + fn bounded_read_rejects_same_length_in_place_mutation() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + fs::write(&target, b"original").expect("should write original fixture"); + + let result = + repository.read_tracked_bounded_with_hook(&path, 8, || fs::write(&target, b"mutated!")); + + assert!( + result.is_err(), + "descriptor metadata must expose a same-length in-place mutation" + ); + } + + #[test] + fn bounded_read_rejects_same_length_path_replacement() { + let (directory, repository, path) = repository(); + let target = directory.path().join("record.txt"); + let replacement = directory.path().join("replacement.txt"); + fs::write(&target, b"original").expect("should write original fixture"); + + let result = repository.read_tracked_bounded_with_hook(&path, 8, || { + fs::write(&replacement, b"replaced")?; + fs::rename(&replacement, &target) + }); + + assert!( + result.is_err(), + "path identity must expose a same-length replacement" + ); + } + + fn assert_owned_stage_removed(stage: RefCell>) { + let stage = stage + .into_inner() + .expect("should observe the unique owned stage path"); + assert!(!stage.exists(), "owned stage should be removed on failure"); + } +} diff --git a/tools/docs-parity/src/routes.rs b/tools/docs-parity/src/routes.rs new file mode 100644 index 000000000..1b27ad31f --- /dev/null +++ b/tools/docs-parity/src/routes.rs @@ -0,0 +1,6133 @@ +//! Closed adapter-route records and Cloudflare builder extraction. + +use std::collections::{BTreeMap, BTreeSet}; + +use error_stack::Report; +use serde::Deserialize; +use syn::visit::{self, Visit}; +use syn::{Attribute, Block, Expr, Item, Lit, Pat, Stmt}; + +use crate::repository::{NormalizedRelativePath, Repository}; + +const MAX_ROUTE_INPUT_BYTES: usize = 4 * 1024 * 1024; +const MAX_ROUTE_ENTRIES: usize = 4096; +const MAX_ROUTE_STRING_BYTES: usize = 16 * 1024; +type RawRouteIdentity = (String, String, String, bool); +type RouteGroupKey = (String, String, RouteShape, String, RouteStatus, bool); + +#[derive(Default)] +struct RouteAccumulator { + identities: BTreeSet, + groups: BTreeMap, +} + +impl RouteAccumulator { + fn insert(&mut self, record: &RouteRecord) -> Result<(), Report> { + for method in &record.methods { + let identity = ( + record.adapter.clone(), + record.path.clone(), + method.clone(), + record.startup_router, + ); + if !self.identities.insert(identity) { + return Err(invalid(format!( + "duplicate expanded route semantic (raw identity): {} {method} {} startup={}", + record.adapter, record.path, record.startup_router + ))); + } + let key = ( + record.adapter.clone(), + record.path.clone(), + record.shape, + record.predicate.clone(), + record.status, + record.startup_router, + ); + self.groups + .entry(key) + .and_modify(|existing| { + existing.methods.insert(method.clone()); + }) + .or_insert_with(|| { + RouteRecord::new( + &record.adapter, + &record.path, + [method], + record.shape, + &record.predicate, + record.status, + record.startup_router, + ) + }); + } + Ok(()) + } + + fn extend( + &mut self, + records: impl IntoIterator, + ) -> Result<(), Report> { + for record in records { + self.insert(&record)?; + } + Ok(()) + } + + fn finish(self) -> BTreeSet { + self.groups.into_values().collect() + } +} + +/// Route-inventory validation failure. +#[derive(Debug, derive_more::Display)] +pub enum RouteError { + /// A checked or extracted route uses an unsupported shape. + #[display("invalid route inventory: {detail}")] + Invalid { detail: String }, + /// A particular route semantic differs from its checked record. + #[display("route {axis} inventory differs")] + Drift { axis: &'static str }, +} + +impl core::error::Error for RouteError {} + +/// How a route path is obtained. +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(rename_all = "snake_case")] +pub enum RouteShape { + /// A fixed path literal or named path constant. + Literal, + /// A router path template. + Template, + /// A path or prefix obtained from operator configuration. + ConfigDerived, + /// A route registered only under a named configuration predicate. + Conditional, +} + +/// Observable routing disposition. +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(rename_all = "snake_case")] +pub enum RouteStatus { + /// The adapter serves the real handler. + Real, + /// The adapter deliberately returns not-supported. + Unsupported, + /// The adapter deliberately denies or guards the route. + Guarded, + /// The request is forwarded through publisher fallback. + PublisherFallback, + /// The route returns the adapter's startup error. + StartupError, +} + +/// One exact adapter route contract. +#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(deny_unknown_fields)] +pub struct RouteRecord { + /// Stable adapter identifier. + pub adapter: String, + /// Literal, template, or symbolic config-derived path. + pub path: String, + /// Exact registered methods. + pub methods: BTreeSet, + /// Path provenance. + pub shape: RouteShape, + /// Exact registration/configuration predicate. + pub predicate: String, + /// Observable handler disposition. + pub status: RouteStatus, + /// Whether this record belongs to the startup-error router. + pub startup_router: bool, +} + +impl RouteRecord { + /// Construct a normalized route record. + #[must_use] + pub fn new( + adapter: &str, + path: &str, + methods: M, + shape: RouteShape, + predicate: &str, + status: RouteStatus, + startup_router: bool, + ) -> Self + where + M: IntoIterator, + M::Item: AsRef, + { + Self { + adapter: adapter.to_owned(), + path: path.to_owned(), + methods: methods + .into_iter() + .map(|method| method.as_ref().to_owned()) + .collect(), + shape, + predicate: predicate.to_owned(), + status, + startup_router, + } + } +} + +/// Adapter source files that jointly define the complete route inventory. +pub struct RouteSources<'a> { + /// Core publisher source that owns shared route-path constants. + pub publisher_routes: &'a str, + /// Core EC admin source that owns the portable unsupported response. + pub admin_routes: &'a str, + /// Fastly router source. + pub fastly_app: &'a str, + /// Fastly pre-router entrypoint source. + pub fastly_entrypoint: &'a str, + /// Axum router source. + pub axum_app: &'a str, + /// Cloudflare inline router source. + pub cloudflare_app: &'a str, + /// Spin router source. + pub spin_app: &'a str, +} + +/// Parsed and expanded checked route manifest. +#[derive(Debug)] +pub struct RouteManifest { + routes: BTreeSet, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct RawRouteManifest { + version: u32, + reviewed: bool, + #[serde(default)] + routes: Vec, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct RawRoute { + adapters: Vec, + path: String, + methods: Vec, + shape: RouteShape, + predicate: String, + status: RouteStatus, + #[serde(default)] + startup_router: bool, +} + +impl RouteManifest { + /// Parse and expand grouped adapter rows from a reviewed manifest. + /// + /// # Errors + /// + /// Returns an error for malformed data, unknown fields, unsupported + /// versions, an absent review attestation, or duplicate expanded records. + pub fn parse(source: &str) -> Result> { + ensure_route_input_bound("route manifest", source)?; + let manifest = toml::from_str::(source) + .map_err(|error| invalid(format!("malformed route manifest: {error}")))?; + if manifest.version != 1 { + return Err(invalid("route manifest version must equal 1")); + } + if !manifest.reviewed { + return Err(invalid("route manifest reviewed must be true")); + } + if manifest.routes.len() > MAX_ROUTE_ENTRIES { + return Err(invalid("route row cardinality limit exceeded")); + } + let mut routes = RouteAccumulator::default(); + for row in manifest.routes { + if row.path.len() > MAX_ROUTE_STRING_BYTES + || row.predicate.len() > MAX_ROUTE_STRING_BYTES + { + return Err(invalid("route row contains an oversized string")); + } + let adapters = unique_route_values(row.adapters, "adapter")?; + let methods = unique_route_values(row.methods, "method")?; + if adapters.is_empty() { + return Err(invalid("route row adapters must not be empty")); + } + if methods.is_empty() { + return Err(invalid("route row methods must not be empty")); + } + for adapter in adapters { + if !matches!(adapter.as_str(), "fastly" | "axum" | "cloudflare" | "spin") { + return Err(invalid(format!("unknown route adapter: {adapter}"))); + } + let record = RouteRecord::new( + &adapter, + &row.path, + &methods, + row.shape, + &row.predicate, + row.status, + row.startup_router, + ); + routes.insert(&record)?; + } + } + Ok(Self { + routes: routes.finish(), + }) + } + + /// Expanded exact route set. + #[must_use] + pub fn routes(&self) -> &BTreeSet { + &self.routes + } +} + +/// One manually reviewed adapter operational-support record. +#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(deny_unknown_fields)] +pub struct AdapterSupportRecord { + id: String, + release_status: String, + owner: String, + reviewed_at: String, + health: String, + startup_status: u16, + startup_health: bool, + provider_fanout: String, +} + +/// Checked adapter support records. +#[derive(Debug)] +pub struct AdapterSupportManifest { + adapters: BTreeSet, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct RawAdapterSupportManifest { + version: u32, + reviewed: bool, + #[serde(default)] + adapters: Vec, +} + +impl AdapterSupportManifest { + /// Parse manually owned adapter support records. + /// + /// # Errors + /// + /// Returns an error for malformed or unreviewed records and duplicate IDs. + pub fn parse(source: &str) -> Result> { + ensure_route_input_bound("adapter support manifest", source)?; + let manifest = toml::from_str::(source) + .map_err(|error| invalid(format!("malformed adapter support manifest: {error}")))?; + if manifest.version != 1 || !manifest.reviewed { + return Err(invalid( + "adapter support manifest requires version 1 and reviewed=true", + )); + } + if manifest.adapters.len() > MAX_ROUTE_ENTRIES { + return Err(invalid("adapter support row cardinality limit exceeded")); + } + let mut ids = BTreeSet::new(); + let adapters = manifest + .adapters + .into_iter() + .map(|record| { + if [ + &record.id, + &record.release_status, + &record.owner, + &record.reviewed_at, + &record.health, + &record.provider_fanout, + ] + .into_iter() + .any(|value| value.len() > MAX_ROUTE_STRING_BYTES) + { + return Err(invalid("adapter support row contains an oversized string")); + } + if !ids.insert(record.id.clone()) { + return Err(invalid(format!( + "duplicate adapter support row: {}", + record.id + ))); + } + if record.owner.trim().is_empty() + || !is_review_date(&record.reviewed_at) + || !matches!(record.release_status.as_str(), "production" | "development") + { + return Err(invalid(format!( + "invalid manual ownership/status for adapter {}", + record.id + ))); + } + Ok(record) + }) + .collect::, _>>()?; + Ok(Self { adapters }) + } +} + +/// Validate the exact four adapter startup/fan-out facts while leaving release +/// maturity manually owned. +/// +/// # Errors +/// +/// Returns an error when an adapter is missing/extra or a source-backed support +/// fact differs from the known runtime contract. +pub fn validate_adapter_support( + manifest: &AdapterSupportManifest, +) -> Result<(), Report> { + let facts = manifest + .adapters + .iter() + .map(|record| { + ( + record.id.as_str(), + record.health.as_str(), + record.startup_status, + record.startup_health, + record.provider_fanout.as_str(), + ) + }) + .collect::>(); + let expected = BTreeSet::from([ + ("axum", "real", 500, false, "multiple"), + ("cloudflare", "absent", 500, false, "single"), + ("fastly", "pre_router", 500, true, "multiple"), + ("spin", "real", 503, true, "single"), + ]); + if facts != expected { + return Err(Report::new(RouteError::Drift { + axis: "adapter-support", + })); + } + Ok(()) +} + +/// Extract all fixed, fallback, config-derived, and degraded adapter routes. +/// +/// # Errors +/// +/// Returns an error when a named collection or required routing decision leaves +/// the closed grammar. +pub fn extract_repository_routes( + sources: &RouteSources<'_>, +) -> Result, Report> { + for (label, source) in [ + ("Fastly app", sources.fastly_app), + ("Fastly entrypoint", sources.fastly_entrypoint), + ("Axum app", sources.axum_app), + ("Cloudflare app", sources.cloudflare_app), + ("Spin app", sources.spin_app), + ("Core publisher", sources.publisher_routes), + ("Core EC admin", sources.admin_routes), + ] { + ensure_route_input_bound(label, source)?; + } + let authoritative_paths = publisher_route_constants(sources.publisher_routes)?; + let mut routes = RouteAccumulator::default(); + routes.extend(extract_named_routes_with_constants( + "fastly", + sources.fastly_app, + &authoritative_paths, + )?)?; + routes.extend(extract_named_routes_with_constants( + "axum", + sources.axum_app, + &authoritative_paths, + )?)?; + routes.extend(extract_named_routes_with_constants( + "spin", + sources.spin_app, + &authoritative_paths, + )?)?; + routes.extend(extract_cloudflare_routes_with_constants( + sources.cloudflare_app, + &authoritative_paths, + )?)?; + + validate_special_route_sources(sources, &authoritative_paths)?; + + let fallback_methods = ["GET", "POST", "HEAD", "OPTIONS", "PUT", "PATCH", "DELETE"]; + for adapter in ["fastly", "axum", "spin"] { + add_record( + &mut routes, + adapter, + "/", + &fallback_methods, + RouteShape::Literal, + "publisher_fallback", + RouteStatus::PublisherFallback, + false, + )?; + add_record( + &mut routes, + adapter, + "/{*rest}", + &fallback_methods, + RouteShape::Template, + "publisher_fallback", + RouteStatus::PublisherFallback, + false, + )?; + } + for adapter in ["fastly", "axum", "spin"] { + add_record( + &mut routes, + adapter, + "/health", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false, + )?; + } + add_record( + &mut routes, + "fastly", + "/_ts/debug/ja4", + &["GET"], + RouteShape::Conditional, + "settings.debug.ja4_endpoint_enabled", + RouteStatus::Real, + false, + )?; + for adapter in ["fastly", "axum", "cloudflare", "spin"] { + add_record( + &mut routes, + adapter, + "/static/tsjs=", + &["GET"], + RouteShape::Template, + "path.starts_with(/static/tsjs=)", + RouteStatus::Real, + false, + )?; + } + add_record( + &mut routes, + "fastly", + "{*rest}", + &["GET", "HEAD"], + RouteShape::ConfigDerived, + "settings.proxy.asset_routes[]", + RouteStatus::Real, + false, + )?; + for adapter in ["fastly", "axum", "cloudflare", "spin"] { + for (path, shape) in [ + ("/", RouteShape::Literal), + ("/{*rest}", RouteShape::Template), + ] { + add_record( + &mut routes, + adapter, + path, + &fallback_methods, + shape, + "startup_error", + RouteStatus::StartupError, + true, + )?; + } + } + for adapter in ["fastly", "spin"] { + add_record( + &mut routes, + adapter, + "/health", + &["GET"], + RouteShape::Literal, + "startup_error", + RouteStatus::Real, + true, + )?; + } + Ok(routes.finish()) +} + +/// Check route and adapter-support manifests against repository sources. +/// +/// # Errors +/// +/// Returns an error for repository access, unsupported route source grammar, +/// exact set drift, or invalid adapter support facts. +pub(crate) fn check_repository(repository: &Repository) -> Result<(), Report> { + let route_manifest = RouteManifest::parse(&read_utf8( + repository, + "tools/docs-parity/manifests/routes.toml", + )?)?; + let support_manifest = AdapterSupportManifest::parse(&read_utf8( + repository, + "tools/docs-parity/manifests/adapter-support.toml", + )?)?; + let fastly_app = read_utf8( + repository, + "crates/trusted-server-adapter-fastly/src/app.rs", + )?; + let fastly_entrypoint = read_utf8( + repository, + "crates/trusted-server-adapter-fastly/src/main.rs", + )?; + let axum_app = read_utf8(repository, "crates/trusted-server-adapter-axum/src/app.rs")?; + let cloudflare_app = read_utf8( + repository, + "crates/trusted-server-adapter-cloudflare/src/app.rs", + )?; + let spin_app = read_utf8(repository, "crates/trusted-server-adapter-spin/src/app.rs")?; + let publisher_routes = read_utf8(repository, "crates/trusted-server-core/src/publisher.rs")?; + let admin_routes = read_utf8(repository, "crates/trusted-server-core/src/ec/admin.rs")?; + let observed = extract_repository_routes(&RouteSources { + publisher_routes: &publisher_routes, + admin_routes: &admin_routes, + fastly_app: &fastly_app, + fastly_entrypoint: &fastly_entrypoint, + axum_app: &axum_app, + cloudflare_app: &cloudflare_app, + spin_app: &spin_app, + })?; + validate_routes(route_manifest.routes(), &observed)?; + validate_adapter_support(&support_manifest) +} + +#[allow(clippy::too_many_arguments)] +fn add_record( + routes: &mut RouteAccumulator, + adapter: &str, + path: &str, + methods: &[&str], + shape: RouteShape, + predicate: &str, + status: RouteStatus, + startup_router: bool, +) -> Result<(), Report> { + routes.insert(&RouteRecord::new( + adapter, + path, + methods, + shape, + predicate, + status, + startup_router, + )) +} + +fn validate_special_route_sources( + sources: &RouteSources<'_>, + authoritative_paths: &BTreeMap, +) -> Result<(), Report> { + let fastly = parse_route_source("Fastly app", sources.fastly_app)?; + let entrypoint = parse_route_source("Fastly entrypoint", sources.fastly_entrypoint)?; + let axum = parse_route_source("Axum app", sources.axum_app)?; + let cloudflare = parse_route_source("Cloudflare app", sources.cloudflare_app)?; + let spin = parse_route_source("Spin app", sources.spin_app)?; + let publisher = parse_route_source("Core publisher", sources.publisher_routes)?; + let admin = parse_route_source("Core EC admin", sources.admin_routes)?; + validate_fastly_pre_router(&entrypoint)?; + validate_fastly_health_call(&entrypoint)?; + validate_fastly_dispatch_tsjs(&fastly)?; + validate_fastly_early_named_dispatch(&fastly)?; + validate_nested_dispatch_binding("cloudflare", &cloudflare)?; + validate_nested_dispatch_binding("spin", &spin)?; + validate_named_handler_dispatch("fastly", &fastly)?; + validate_named_handler_dispatch("axum", &axum)?; + validate_named_discovery_arm("fastly", &fastly)?; + validate_named_discovery_arm("axum", &axum)?; + validate_named_inventory_registration("fastly", &fastly)?; + validate_named_inventory_registration("axum", &axum)?; + validate_healthy_fallback_handler("fastly", &fastly)?; + validate_healthy_fallback_handler("axum", &axum)?; + validate_unsupported_response("cloudflare", &cloudflare)?; + validate_unsupported_response("spin", &spin)?; + validate_guarded_response_bodies(&publisher, &admin, &fastly, &axum, &cloudflare, &spin)?; + validate_dynamic_tsjs_guard("fastly", &fastly)?; + validate_dynamic_tsjs_guard("axum", &axum)?; + validate_dynamic_tsjs_guard("cloudflare", &cloudflare)?; + validate_dynamic_tsjs_guard("spin", &spin)?; + + for (adapter, file, needs_health) in [ + ("fastly", &fastly, false), + ("axum", &axum, true), + ("cloudflare", &cloudflare, false), + ("spin", &spin, true), + ] { + if needs_health { + validate_health_registration(adapter, file)?; + } + validate_fallback_routes(adapter, file, false)?; + let methods = exact_method_list(file, "publisher_fallback_methods")?; + let expected = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"] + .into_iter() + .map(str::to_owned) + .collect::>(); + if methods != expected { + return Err(invalid(format!( + "{adapter} fallback method AST receipt differs" + ))); + } + validate_fallback_routes(adapter, file, true)?; + if adapter == "spin" { + validate_spin_startup_health(file)?; + } + } + validate_asset_route_guard(&fastly)?; + validate_cloudflare_local_handlers(&cloudflare)?; + validate_cloudflare_discovery_handler(&cloudflare)?; + validate_spin_named_handlers(&spin, authoritative_paths)?; + Ok(()) +} + +fn validate_named_discovery_arm(adapter: &str, file: &syn::File) -> Result<(), Report> { + let function = exact_top_function( + file, + if adapter == "fastly" { + "run_named_route" + } else { + "named_route_handler" + }, + )?; + struct DiscoveryArms<'a>(Vec<&'a Expr>); + impl<'ast> Visit<'ast> for DiscoveryArms<'ast> { + fn visit_arm(&mut self, arm: &'ast syn::Arm) { + if matches!(&arm.pat, Pat::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == 2 + && path.path.segments[0].ident == "NamedRouteHandler" + && path.path.segments[1].ident == "TrustedServerDiscovery" + && path.path.segments.iter().all(|segment| { + matches!(segment.arguments, syn::PathArguments::None) + })) + { + self.0.push(&arm.body); + } + visit::visit_arm(self, arm); + } + } + let mut arms = DiscoveryArms(Vec::new()); + arms.visit_block(&function.block); + let [expression] = arms.0.as_slice() else { + return Err(invalid(format!( + "{adapter} discovery handler must have one live arm" + ))); + }; + let Expr::Block(body) = strip_parens(expression) else { + return Err(invalid(format!( + "{adapter} discovery handler arm shape differs" + ))); + }; + let [Stmt::Expr(Expr::Call(call), None)] = body.block.stmts.as_slice() else { + return Err(invalid(format!( + "{adapter} discovery handler arm is not one terminal call" + ))); + }; + let exact_services = if adapter == "fastly" { + call.args + .iter() + .nth(1) + .is_some_and(|value| is_ident(value, "services")) + } else { + call.args.iter().nth(1).is_some_and(|value| { + matches!(strip_parens(value), Expr::Reference(reference) + if reference.mutability.is_none() && is_ident(&reference.expr, "services")) + }) + }; + if !call_named_route(call, "handle_trusted_server_discovery") + || call.args.len() != 3 + || call.args.first().is_none_or(|value| { + !matches!(strip_parens(value), Expr::Reference(reference) + if reference.mutability.is_none() + && exact_field_receiver(&reference.expr, "state", "settings")) + }) + || !exact_services + || call + .args + .iter() + .nth(2) + .is_none_or(|value| !is_ident(value, "req")) + { + return Err(invalid(format!( + "{adapter} discovery handler call arguments differ" + ))); + } + Ok(()) +} + +fn validate_named_inventory_registration( + adapter: &str, + file: &syn::File, +) -> Result<(), Report> { + let block = if adapter == "fastly" { + exact_impl_method(file, "TrustedServerApp", "routes_for_state")? + } else { + &exact_top_function(file, "build_router")?.block + }; + let loops = block + .stmts + .iter() + .filter_map(|statement| match statement { + Stmt::Expr(Expr::ForLoop(loop_expression), _) + if named_inventory_iterator(&loop_expression.expr, adapter) => + { + Some(loop_expression) + } + _ => None, + }) + .collect::>(); + let [routes] = loops.as_slice() else { + return Err(invalid(format!( + "{adapter} named inventory must have one live registration loop" + ))); + }; + if !matches!(&*routes.pat, Pat::Ident(binding) + if binding.ident == "route" && binding.subpat.is_none()) + || routes.body.stmts.len() != 2 + || !exact_primary_named_registration(&routes.body.stmts[0]) + || !exact_named_fallback_registration( + &routes.body.stmts[1], + if adapter == "fastly" { + "fallback_handler" + } else { + "fallback" + }, + ) + { + return Err(invalid(format!( + "{adapter} named inventory registration arguments differ" + ))); + } + Ok(()) +} + +fn named_inventory_iterator(expression: &Expr, adapter: &str) -> bool { + if adapter == "fastly" { + return is_ident(expression, "NAMED_ROUTES"); + } + matches!(strip_parens(expression), Expr::Call(call) + if call_named_route(call, "named_routes") && call.args.is_empty()) +} + +fn exact_primary_named_registration(statement: &Stmt) -> bool { + let Stmt::Expr(Expr::ForLoop(methods), _) = statement else { + return false; + }; + if !matches!(&*methods.pat, Pat::Ident(binding) + if binding.ident == "method" && binding.subpat.is_none()) + || !exact_field_receiver(&methods.expr, "route", "primary_methods") + { + return false; + } + let [Stmt::Expr(Expr::Assign(assignment), _)] = methods.body.stmts.as_slice() else { + return false; + }; + let Expr::MethodCall(route) = strip_parens(&assignment.right) else { + return false; + }; + is_ident(&assignment.left, "router") + && route.method == "route" + && is_ident(&route.receiver, "router") + && route.args.len() == 3 + && route + .args + .first() + .is_some_and(|value| exact_field_receiver(value, "route", "path")) + && route.args.iter().nth(1).is_some_and(|value| { + matches!(strip_parens(value), Expr::MethodCall(clone) + if clone.method == "clone" && clone.args.is_empty() + && is_ident(&clone.receiver, "method")) + }) + && route.args.iter().nth(2).is_some_and(|value| { + matches!(strip_parens(value), Expr::Call(handler) + if call_named_route(handler, "named_route_handler") + && handler.args.len() == 2 + && handler.args.first().is_some_and(exact_arc_clone_state) + && handler.args.iter().nth(1).is_some_and(|argument| { + exact_field_receiver(argument, "route", "handler") + })) + }) +} + +fn exact_named_fallback_registration(statement: &Stmt, fallback: &str) -> bool { + let Stmt::Expr(Expr::ForLoop(methods), _) = statement else { + return false; + }; + if !matches!(&*methods.pat, Pat::Ident(binding) + if binding.ident == "method" && binding.subpat.is_none()) + || !matches!(strip_parens(&methods.expr), Expr::Call(call) + if call_named_route(call, "publisher_fallback_methods") && call.args.is_empty()) + { + return false; + } + let [Stmt::Expr(Expr::If(branch), _)] = methods.body.stmts.as_slice() else { + return false; + }; + let [Stmt::Expr(Expr::Assign(assignment), _)] = branch.then_branch.stmts.as_slice() else { + return false; + }; + let Expr::MethodCall(route) = strip_parens(&assignment.right) else { + return false; + }; + branch.else_branch.is_none() + && is_ident(&assignment.left, "router") + && route.method == "route" + && is_ident(&route.receiver, "router") + && route.args.len() == 3 + && route + .args + .first() + .is_some_and(|value| exact_field_receiver(value, "route", "path")) + && route + .args + .iter() + .nth(1) + .is_some_and(|value| is_ident(value, "method")) + && route.args.iter().nth(2).is_some_and(|value| { + matches!(strip_parens(value), Expr::MethodCall(clone) + if clone.method == "clone" && clone.args.is_empty() + && is_ident(&clone.receiver, fallback)) + }) +} + +fn exact_field_receiver(expression: &Expr, base: &str, field: &str) -> bool { + matches!(strip_parens(expression), Expr::Field(value) + if is_ident(&value.base, base) + && matches!(&value.member, syn::Member::Named(name) if name == field)) +} + +fn exact_arc_clone_state(expression: &Expr) -> bool { + matches!(strip_parens(expression), Expr::Call(call) + if exact_route_call_path(call, &["Arc", "clone"]) + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| is_ident(argument, "state"))) +} + +fn validate_healthy_fallback_handler( + adapter: &str, + file: &syn::File, +) -> Result<(), Report> { + let name = if adapter == "fastly" { + "fallback_route_handler" + } else { + "fallback_handler" + }; + let function = exact_top_function(file, name)?; + let [Stmt::Expr(Expr::Closure(handler), None)] = function.block.stmts.as_slice() else { + return Err(invalid(format!( + "{adapter} healthy fallback factory shape differs" + ))); + }; + let Expr::Block(body) = strip_parens(&handler.body) else { + return Err(invalid(format!( + "{adapter} healthy fallback closure shape differs" + ))); + }; + if body.block.stmts.len() != 2 + || !matches!(&body.block.stmts[0], Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "state") + && local.init.as_ref().is_some_and(|init| exact_arc_clone(&init.expr, "state"))) + { + return Err(invalid(format!( + "{adapter} healthy fallback state binding differs" + ))); + } + let Some(terminal) = body + .block + .stmts + .last() + .and_then(statement_terminal_expression) + else { + return Err(invalid(format!( + "{adapter} healthy fallback terminal expression differs" + ))); + }; + let Expr::Call(pin) = strip_parens(terminal) else { + return Err(invalid(format!( + "{adapter} healthy fallback terminal expression differs" + ))); + }; + if !exact_route_call_path(pin, &["Box", "pin"]) || pin.args.len() != 1 { + return Err(invalid(format!( + "{adapter} healthy fallback terminal expression differs" + ))); + } + let dispatch = pin.args.first().expect("Box::pin should have one argument"); + let exact = if adapter == "fastly" { + matches!(strip_parens(dispatch), Expr::Call(call) + if call_named_route(call, "execute_fallback") + && call.args.len() == 2 + && call.args.first().is_some_and(|value| is_ident(value, "state")) + && call.args.iter().nth(1).is_some_and(|value| is_ident(value, "ctx"))) + } else { + exact_axum_fallback_dispatch(dispatch) + }; + if !exact { + return Err(invalid(format!( + "{adapter} healthy fallback dispatch binding differs" + ))); + } + Ok(()) +} + +fn exact_arc_clone(expression: &Expr, name: &str) -> bool { + matches!(strip_parens(expression), Expr::Call(call) + if exact_route_call_path(call, &["Arc", "clone"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if is_ident(&reference.expr, name))) +} + +fn exact_axum_fallback_dispatch(expression: &Expr) -> bool { + let Expr::Call(execute) = strip_parens(expression) else { + return false; + }; + if !call_named_route(execute, "execute_handler") + || execute.args.len() != 3 + || execute + .args + .first() + .is_none_or(|value| !is_ident(value, "state")) + || execute + .args + .iter() + .nth(1) + .is_none_or(|value| !is_ident(value, "ctx")) + { + return false; + } + let Some(Expr::Closure(dispatch)) = execute.args.iter().nth(2).map(strip_parens) else { + return false; + }; + let inputs = dispatch + .inputs + .iter() + .map(|input| match input { + Pat::Ident(binding) => Some(binding.ident.to_string()), + _ => None, + }) + .collect::>>(); + if inputs.as_deref() != Some(&["state".to_owned(), "services".to_owned(), "req".to_owned()]) { + return false; + } + let Expr::Async(future) = strip_parens(&dispatch.body) else { + return false; + }; + let [Stmt::Expr(Expr::Await(awaited), None)] = future.block.stmts.as_slice() else { + return false; + }; + matches!(strip_parens(&awaited.base), Expr::Call(call) + if call_named_route(call, "dispatch_fallback") + && call.args.len() == 3 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if is_ident(&reference.expr, "state")) + && matches!(call.args.iter().nth(1).map(strip_parens), Some(Expr::Reference(reference)) + if is_ident(&reference.expr, "services")) + && call.args.iter().nth(2).is_some_and(|value| is_ident(value, "req"))) +} + +fn parse_route_source(label: &str, source: &str) -> Result> { + syn::parse_file(source).map_err(|error| invalid(format!("invalid {label} Rust: {error}"))) +} + +fn validate_health_registration(adapter: &str, file: &syn::File) -> Result<(), Report> { + if adapter == "spin" { + validate_spin_health_response(file)?; + } + let block = &exact_top_function(file, "build_router")?.block; + let authority = if adapter == "axum" { + "router" + } else { + "builder" + }; + if !block_returns_build(block, authority) { + return Err(invalid(format!( + "{adapter} build_router must return its health-route authority" + ))); + } + let mut count = 0; + for block in direct_anonymous_blocks(block) { + for statement in &block.stmts { + match statement { + Stmt::Expr(Expr::Assign(assignment), _) if adapter == "axum" => { + let Expr::MethodCall(call) = strip_parens(&assignment.right) else { + continue; + }; + if is_ident(&assignment.left, "router") + && exact_health_route_call(call, "router") + { + count += 1; + } + } + Stmt::Local(local) + if adapter == "spin" + && matches!(&local.pat, Pat::Ident(binding) if binding.ident == "builder") + && local + .init + .as_ref() + .is_some_and(|init| method_chain_health_count(&init.expr) == 1) => + { + count += 1; + } + _ => {} + } + } + } + if count != 1 { + return Err(invalid(format!( + "{adapter} health registration AST receipt differs" + ))); + } + Ok(()) +} + +fn exact_health_route_call(call: &syn::ExprMethodCall, receiver: &str) -> bool { + call.method == "route" + && is_ident(&call.receiver, receiver) + && call.args.len() == 3 + && call.args.first().and_then(literal_string_value).as_deref() == Some("/health") + && call.args.iter().nth(1).is_some_and(expression_is_get) + && call + .args + .iter() + .nth(2) + .is_some_and(axum_health_handler_is_ok) +} + +fn method_chain_health_count(expression: &Expr) -> usize { + match strip_parens(expression) { + Expr::MethodCall(call) => { + usize::from( + call.method == "get" + && call.args.len() == 2 + && call.args.first().and_then(literal_string_value).as_deref() + == Some("/health") + && call.args.iter().nth(1).is_some_and(spin_health_handler), + ) + method_chain_health_count(&call.receiver) + } + _ => 0, + } +} + +fn status_is_ok(expression: &Expr) -> bool { + exact_route_path(expression, &["StatusCode", "OK"]) +} + +fn axum_health_handler_is_ok(expression: &Expr) -> bool { + let Expr::Closure(closure) = strip_parens(expression) else { + return false; + }; + let Expr::Async(body) = strip_parens(&closure.body) else { + return false; + }; + let [Stmt::Expr(Expr::Call(ok), None)] = body.block.stmts.as_slice() else { + return false; + }; + call_named_route(ok, "Ok") + && ok.args.len() == 1 + && ok.args.first().is_some_and(exact_axum_health_response) +} + +fn spin_health_handler(expression: &Expr) -> bool { + let Expr::Closure(closure) = strip_parens(expression) else { + return false; + }; + let Expr::Async(body) = strip_parens(&closure.body) else { + return false; + }; + matches!(body.block.stmts.as_slice(), [Stmt::Expr(Expr::Call(ok), None)] + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && matches!(ok.args.first().map(strip_parens), Some(Expr::Call(health)) + if call_named_route(health, "health_response") && health.args.is_empty())) +} + +fn validate_spin_health_response(file: &syn::File) -> Result<(), Report> { + let response = exact_top_function(file, "health_response")?; + if response.block.stmts.len() != 4 + || !matches!(&response.block.stmts[0], Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "resp") + && local.init.as_ref().is_some_and(|init| exact_spin_health_initializer(&init.expr))) + || !matches!(&response.block.stmts[1], Stmt::Expr(Expr::Assign(assignment), _) + if status_is_ok(&assignment.right) + && matches!(strip_parens(&assignment.left), Expr::Unary(unary) + if matches!(unary.op, syn::UnOp::Deref(_)) + && matches!(strip_parens(&unary.expr), Expr::MethodCall(call) + if call.method == "status_mut" && is_ident(&call.receiver, "resp")))) + || !matches!(&response.block.stmts[2], Stmt::Expr(Expr::MethodCall(insert), _) + if exact_content_type_insert(insert, "resp", "text/plain")) + || !matches!(&response.block.stmts[3], Stmt::Expr(value, None) if is_ident(value, "resp")) + { + return Err(invalid("Spin health response AST receipt differs")); + } + Ok(()) +} + +fn exact_axum_health_response(expression: &Expr) -> bool { + let Expr::MethodCall(expect) = strip_parens(expression) else { + return false; + }; + if expect.method != "expect" + || expect.args.len() != 1 + || expect + .args + .first() + .and_then(literal_string_value) + .as_deref() + != Some("should build health response") + { + return false; + } + let Expr::MethodCall(body) = strip_parens(&expect.receiver) else { + return false; + }; + let exact_body = body.method == "body" + && body.args.len() == 1 + && body.args.first().is_some_and(|value| { + matches!(strip_parens(value), Expr::Call(call) + if exact_route_call_path(call, &["edgezero_core", "body", "Body", "from"]) + && call.args.len() == 1 + && call.args.first().and_then(literal_string_value).as_deref() == Some("ok")) + }); + let Expr::MethodCall(header) = strip_parens(&body.receiver) else { + return false; + }; + let Expr::MethodCall(status) = strip_parens(&header.receiver) else { + return false; + }; + let exact_status = status.method == "status" + && status.args.len() == 1 + && status.args.first().is_some_and(status_is_ok); + let exact_builder = matches!(strip_parens(&status.receiver), Expr::Call(call) + if exact_route_call_path(call, &["edgezero_core", "http", "response_builder"]) + && call.args.is_empty()); + exact_body + && header.method == "header" + && header.args.len() == 2 + && header + .args + .first() + .is_some_and(|value| exact_route_path(value, &["header", "CONTENT_TYPE"])) + && header + .args + .iter() + .nth(1) + .is_some_and(|value| exact_header_value(value, "text/plain")) + && exact_status + && exact_builder +} + +fn exact_spin_health_initializer(expression: &Expr) -> bool { + matches!(strip_parens(expression), Expr::Call(response) + if exact_route_call_path(response, &["Response", "new"]) + && response.args.len() == 1 + && matches!(response.args.first().map(strip_parens), Some(Expr::Call(body)) + if exact_route_call_path(body, &["edgezero_core", "body", "Body", "from"]) + && body.args.len() == 1 + && body.args.first().and_then(literal_string_value).as_deref() == Some("ok"))) +} + +fn exact_route_path(expression: &Expr, expected: &[&str]) -> bool { + matches!(strip_parens(expression), Expr::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == expected.len() + && path.path.segments.iter().zip(expected).all(|(segment, name)| { + segment.ident == *name + && matches!(segment.arguments, syn::PathArguments::None) + })) +} + +fn exact_header_value(expression: &Expr, value: &str) -> bool { + matches!(strip_parens(expression), Expr::Call(call) + if exact_route_call_path(call, &["HeaderValue", "from_static"]) + && call.args.len() == 1 + && call.args.first().and_then(literal_string_value).as_deref() == Some(value)) +} + +fn exact_content_type_insert(call: &syn::ExprMethodCall, response: &str, value: &str) -> bool { + call.method == "insert" + && call.args.len() == 2 + && matches!(strip_parens(&call.receiver), Expr::MethodCall(headers) + if headers.method == "headers_mut" + && headers.args.is_empty() + && is_ident(&headers.receiver, response)) + && call + .args + .first() + .is_some_and(|argument| exact_route_path(argument, &["header", "CONTENT_TYPE"])) + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| exact_header_value(argument, value)) +} + +fn direct_anonymous_blocks(block: &Block) -> Vec<&Block> { + let mut blocks = vec![block]; + for statement in &block.stmts { + if let Stmt::Expr(Expr::Block(expression), _) = statement { + blocks.extend(direct_anonymous_blocks(&expression.block)); + } + } + blocks +} + +fn validate_spin_startup_health(file: &syn::File) -> Result<(), Report> { + validate_spin_health_response(file)?; + let startup = exact_top_function(file, "startup_error_router")?; + let mut registrations = 0; + for statement in &startup.block.stmts { + let Stmt::Expr(Expr::Assign(assignment), _) = statement else { + continue; + }; + let Expr::MethodCall(call) = strip_parens(&assignment.right) else { + continue; + }; + if call.method == "get" + && is_ident(&assignment.left, "builder") + && is_ident(&call.receiver, "builder") + && call.args.first().and_then(literal_string_value).as_deref() == Some("/health") + && call.args.iter().nth(1).is_some_and(spin_health_handler) + { + registrations += 1; + } + } + if registrations != 1 { + return Err(invalid("Spin startup health AST receipt differs")); + } + Ok(()) +} + +fn validate_asset_route_guard(file: &syn::File) -> Result<(), Report> { + let function = exact_top_function(file, "dispatch_fallback")?; + let matches = function + .block + .stmts + .iter() + .filter(|statement| { + let Stmt::Local(local) = statement else { + return false; + }; + if !matches!(&local.pat, Pat::Ident(binding) if binding.ident == "result") { + return false; + } + let Some(init) = &local.init else { + return false; + }; + let Expr::If(branches) = strip_parens(&init.expr) else { + return false; + }; + final_else_block(branches).is_some_and(exact_asset_dispatch) + }) + .count(); + if matches != 1 { + return Err(invalid( + "Fastly asset GET/HEAD dispatch AST receipt differs", + )); + } + Ok(()) +} + +fn exact_asset_dispatch(block: &Block) -> bool { + let bindings = block + .stmts + .iter() + .enumerate() + .filter_map(|(index, statement)| { + let Stmt::Local(asset) = statement else { + return None; + }; + matches!(&asset.pat, Pat::Ident(binding) if binding.ident == "matched_asset_route") + .then_some((index, asset)) + }) + .collect::>(); + let [(index, asset)] = bindings.as_slice() else { + return false; + }; + asset + .init + .as_ref() + .is_some_and(|init| exact_asset_initializer(&init.expr)) + && block + .stmts + .get(index + 1) + .is_some_and(exact_asset_dispatch_branch) +} + +fn exact_asset_dispatch_branch(statement: &Stmt) -> bool { + let Stmt::Expr(Expr::If(branch), _) = statement else { + return false; + }; + let Expr::Let(condition) = strip_parens(&branch.cond) else { + return false; + }; + let exact_pattern = matches!(condition.pat.as_ref(), Pat::TupleStruct(pattern) + if pattern.path.segments.last().is_some_and(|segment| segment.ident == "Some") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(Pat::Ident(binding)) if binding.ident == "asset_route")); + exact_pattern + && is_ident(&condition.expr, "matched_asset_route") + && branch.else_branch.is_none() + && matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Return(value), _)] + if value.expr.as_deref().is_some_and(|value| { + matches!(strip_parens(value), Expr::Await(awaited) + if matches!(strip_parens(&awaited.base), Expr::Call(call) + if call_named_route(call, "dispatch_asset_fallback") + && call.args.len() == 5 + && call.args.first().is_some_and(|value| is_ident(value, "state")) + && call.args.iter().nth(1).is_some_and(|value| is_ident(value, "services")) + && call.args.iter().nth(2).is_some_and(|value| is_ident(value, "req")) + && call.args.iter().nth(3).is_some_and(|value| is_ident(value, "asset_route")) + && matches!(call.args.iter().nth(4).map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "effects")))) + })) +} + +fn exact_asset_initializer(expression: &Expr) -> bool { + let Expr::MethodCall(flatten) = strip_parens(expression) else { + return false; + }; + if flatten.method != "flatten" || !flatten.args.is_empty() { + return false; + } + let Expr::MethodCall(then) = strip_parens(&flatten.receiver) else { + return false; + }; + let Expr::Macro(methods) = strip_parens(&then.receiver) else { + return false; + }; + let tokens = methods + .mac + .tokens + .to_string() + .chars() + .filter(|character| !character.is_whitespace()) + .collect::(); + if !methods.mac.path.is_ident("matches") + || tokens != "method,Method::GET|Method::HEAD" + || then.method != "then" + || then.args.len() != 1 + { + return false; + } + let Some(Expr::Closure(lookup_closure)) = then.args.first() else { + return false; + }; + let Expr::MethodCall(lookup) = strip_parens(&lookup_closure.body) else { + return false; + }; + lookup.method == "asset_route_for_path" + && matches!(strip_parens(&lookup.receiver), Expr::Field(settings) + if is_ident(&settings.base, "state") + && matches!(&settings.member, syn::Member::Named(member) if member == "settings")) + && lookup.args.len() == 1 + && matches!(lookup.args.first(), Some(Expr::Reference(reference)) if is_ident(&reference.expr, "path")) +} + +fn final_else_block(mut expression: &syn::ExprIf) -> Option<&Block> { + loop { + let (_, alternative) = expression.else_branch.as_ref()?; + match strip_parens(alternative) { + Expr::If(next) => expression = next, + Expr::Block(block) => return Some(&block.block), + _ => return None, + } + } +} + +fn validate_fallback_routes( + adapter: &str, + file: &syn::File, + startup: bool, +) -> Result<(), Report> { + let name = if startup { + "startup_error_router" + } else if adapter == "fastly" { + "routes_for_state" + } else { + "build_router" + }; + let block = if !startup && adapter == "fastly" { + exact_impl_method(file, "TrustedServerApp", name)? + } else { + &exact_top_function(file, name)?.block + }; + validate_router_construction_reachability(block, adapter, startup)?; + let (receiver, handler) = if startup { + match adapter { + "fastly" => ("router", "make"), + "axum" => ("router", "make_handler"), + "cloudflare" => ("router", "make"), + "spin" => ("builder", "handler"), + _ => return Err(invalid("unknown fallback adapter")), + } + } else { + match adapter { + "fastly" => ("router", "fallback_handler"), + "axum" | "cloudflare" => ("router", "fallback"), + "spin" => ("builder", "fallback"), + _ => return Err(invalid("unknown fallback adapter")), + } + }; + let facts = exact_fallback_call_facts(block, receiver, handler); + if facts != (1, 1) { + return Err(invalid(format!( + "{adapter} {} fallback route AST receipt differs", + if startup { "startup" } else { "healthy" } + ))); + } + if startup && !startup_status_is_bound(block, adapter) { + return Err(invalid(format!( + "{adapter} startup status AST receipt differs" + ))); + } + if !block_returns_build(block, receiver) { + return Err(invalid(format!( + "{adapter} {} fallback routes are not bound to the returned authority", + if startup { "startup" } else { "healthy" } + ))); + } + validate_router_authority_continuity(block, receiver, adapter, startup)?; + Ok(()) +} + +fn validate_router_construction_reachability( + block: &Block, + adapter: &str, + startup: bool, +) -> Result<(), Report> { + let active = if !startup && matches!(adapter, "cloudflare" | "spin") { + let [Stmt::Expr(Expr::Block(body), None)] = block.stmts.as_slice() else { + return Err(invalid(format!( + "{adapter} router construction must use one lexical block" + ))); + }; + &body.block + } else { + block + }; + + struct TerminatingControl { + found: bool, + } + impl<'ast> Visit<'ast> for TerminatingControl { + fn visit_expr_return(&mut self, _: &'ast syn::ExprReturn) { + self.found = true; + } + + fn visit_expr_break(&mut self, _: &'ast syn::ExprBreak) { + self.found = true; + } + + fn visit_expr_continue(&mut self, _: &'ast syn::ExprContinue) { + self.found = true; + } + + fn visit_expr_closure(&mut self, _: &'ast syn::ExprClosure) {} + + fn visit_expr_async(&mut self, _: &'ast syn::ExprAsync) {} + + fn visit_item(&mut self, _: &'ast Item) {} + } + + let mut terminating = TerminatingControl { found: false }; + for statement in &active.stmts { + terminating.visit_stmt(statement); + } + let unmodeled = active.stmts.iter().any(|statement| match statement { + Stmt::Expr( + Expr::If(_) + | Expr::Match(_) + | Expr::While(_) + | Expr::Loop(_) + | Expr::Break(_) + | Expr::Continue(_) + | Expr::Return(_), + _, + ) => true, + Stmt::Expr(Expr::Macro(value), _) => !exact_log_error_macro(&value.mac), + Stmt::Expr(Expr::ForLoop(loop_expression), _) => { + !router_loop_is_modeled(&loop_expression.expr, adapter, startup) + } + Stmt::Macro(value) => !exact_log_error_macro(&value.mac), + _ => false, + }); + let consumed_authorities: &[&str] = match adapter { + "fastly" => &[ + "publisher_fallback_methods", + "NAMED_ROUTES", + "LEGACY_ADMIN_DENY_METHODS", + "degraded_routes", + ], + "axum" => &[ + "publisher_fallback_methods", + "named_routes", + "LEGACY_ADMIN_DENY_METHODS", + "degraded_routes", + ], + "cloudflare" => &[ + "publisher_fallback_methods", + "PAGE_BIDS_PATH", + "PAGE_BIDS_LEGACY_PATH", + "degraded_routes", + ], + "spin" => &[ + "publisher_fallback_methods", + "named_fallback_paths", + "LEGACY_ADMIN_DENY_METHODS", + "degraded_routes", + ], + _ => &[], + }; + if terminating.found || unmodeled || block_shadows_route_authority(active, consumed_authorities) + { + return Err(invalid(format!( + "{adapter} {} router construction has a reachable bypass", + if startup { "startup" } else { "healthy" } + ))); + } + Ok(()) +} + +fn block_shadows_route_authority(block: &Block, names: &[&str]) -> bool { + struct Shadows<'a> { + names: &'a [&'a str], + found: bool, + } + impl<'ast> Visit<'ast> for Shadows<'_> { + fn visit_item(&mut self, item: &'ast Item) { + let name = match item { + Item::Fn(value) => Some(&value.sig.ident), + Item::Const(value) => Some(&value.ident), + Item::Static(value) => Some(&value.ident), + Item::Struct(value) => Some(&value.ident), + _ => None, + }; + if name.is_some_and(|ident| self.names.iter().any(|name| ident == name)) + || matches!(item, Item::Use(value) + if self.names.iter().any(|name| route_use_tree_binds_name(&value.tree, name))) + { + self.found = true; + return; + } + visit::visit_item(self, item); + } + + fn visit_pat_ident(&mut self, pattern: &'ast syn::PatIdent) { + if self.names.iter().any(|name| pattern.ident == name) { + self.found = true; + return; + } + visit::visit_pat_ident(self, pattern); + } + } + let mut shadows = Shadows { + names, + found: false, + }; + shadows.visit_block(block); + shadows.found +} + +fn route_use_tree_binds_name(tree: &syn::UseTree, name: &str) -> bool { + match tree { + syn::UseTree::Name(value) => value.ident == name, + syn::UseTree::Rename(value) => value.rename == name, + syn::UseTree::Path(value) => route_use_tree_binds_name(&value.tree, name), + syn::UseTree::Group(value) => value + .items + .iter() + .any(|item| route_use_tree_binds_name(item, name)), + syn::UseTree::Glob(_) => true, + } +} + +fn exact_log_error_macro(value: &syn::Macro) -> bool { + value.path.leading_colon.is_none() + && value.path.segments.len() == 2 + && value.path.segments[0].ident == "log" + && value.path.segments[1].ident == "error" + && value + .path + .segments + .iter() + .all(|segment| matches!(segment.arguments, syn::PathArguments::None)) +} + +fn router_loop_is_modeled(expression: &Expr, adapter: &str, startup: bool) -> bool { + if matches!(strip_parens(expression), Expr::Call(call) + if call_named_route(call, "publisher_fallback_methods") && call.args.is_empty()) + { + return true; + } + if startup { + return false; + } + match (adapter, strip_parens(expression)) { + ("fastly", expression) => is_ident(expression, "NAMED_ROUTES"), + ("axum", Expr::Call(call)) => { + call_named_route(call, "named_routes") && call.args.is_empty() + } + ("cloudflare", Expr::Array(array)) => { + array.elems.len() == 2 + && array + .elems + .first() + .is_some_and(|value| is_ident(value, "PAGE_BIDS_PATH")) + && array + .elems + .iter() + .nth(1) + .is_some_and(|value| is_ident(value, "PAGE_BIDS_LEGACY_PATH")) + } + ("spin", expression) if is_ident(expression, "LEGACY_ADMIN_DENY_METHODS") => true, + ("spin", Expr::Call(call)) => { + call_named_route(call, "named_fallback_paths") && call.args.is_empty() + } + _ => false, + } +} + +fn exact_fallback_call_facts(block: &Block, receiver: &str, handler: &str) -> (usize, usize) { + let mut root = 0; + let mut rest = 0; + for loop_expression in direct_fallback_loops(block) { + for statement in &loop_expression.body.stmts { + let call = match statement { + Stmt::Expr(Expr::Assign(assignment), _) => { + if !is_ident(&assignment.left, receiver) { + continue; + } + let Expr::MethodCall(call) = strip_parens(&assignment.right) else { + continue; + }; + call + } + _ => continue, + }; + if call.method != "route" + || !is_ident(&call.receiver, receiver) + || call.args.len() != 3 + || call + .args + .iter() + .nth(1) + .is_none_or(|value| !exact_loop_method(value)) + || call + .args + .iter() + .nth(2) + .is_none_or(|value| !exact_handler(value, handler)) + { + continue; + } + match call.args.first().and_then(literal_string_value).as_deref() { + Some("/") => root += 1, + Some("/{*rest}") => rest += 1, + _ => {} + } + } + } + (root, rest) +} + +fn validate_router_authority_continuity( + block: &Block, + authority: &str, + adapter: &str, + startup: bool, +) -> Result<(), Report> { + struct Audit<'a> { + authority: &'a str, + authority_bindings: usize, + builder_bindings: usize, + authorized_route_calls: usize, + invalid: bool, + } + + impl<'ast> Visit<'ast> for Audit<'_> { + fn visit_local(&mut self, local: &'ast syn::Local) { + let binding_is_authority = matches!(&local.pat, Pat::Ident(binding) + if binding.ident == self.authority); + self.authority_bindings += usize::from(binding_is_authority); + + if let Some(init) = &local.init { + let route_calls = expression_route_method_count(&init.expr); + if is_router_builder_chain(&init.expr) { + self.builder_bindings += usize::from(binding_is_authority); + if !binding_is_authority + || (route_calls != 0 + && !route_calls_have_root(&init.expr, self.authority, true)) + { + self.invalid = true; + } else { + self.authorized_route_calls += route_calls; + } + } else if route_calls != 0 { + self.invalid = true; + } + } + visit::visit_local(self, local); + } + + fn visit_expr_assign(&mut self, assignment: &'ast syn::ExprAssign) { + let assigns_authority = is_ident(&assignment.left, self.authority); + let route_calls = expression_route_method_count(&assignment.right); + if assigns_authority { + if route_calls == 0 + || !route_calls_have_root(&assignment.right, self.authority, false) + { + self.invalid = true; + } else { + self.authorized_route_calls += route_calls; + } + } else if route_calls != 0 { + self.invalid = true; + } + visit::visit_expr_assign(self, assignment); + } + + fn visit_expr_closure(&mut self, closure: &'ast syn::ExprClosure) { + if expression_route_method_count(&closure.body) != 0 + || expression_references_ident(&closure.body, self.authority) + { + self.invalid = true; + } + visit::visit_expr_closure(self, closure); + } + } + + let mut audit = Audit { + authority, + authority_bindings: 0, + builder_bindings: 0, + authorized_route_calls: 0, + invalid: false, + }; + audit.visit_block(block); + let total_route_calls = block_route_method_count(block); + if block_builder_count(block) != 1 + || audit.authority_bindings != 1 + || audit.builder_bindings != 1 + || audit.authorized_route_calls != total_route_calls + || audit.invalid + { + return Err(invalid(format!( + "{adapter} {} router authority continuity differs", + if startup { "startup" } else { "healthy" } + ))); + } + Ok(()) +} + +fn route_calls_have_root(expression: &Expr, authority: &str, allow_builder: bool) -> bool { + struct Roots<'a> { + authority: &'a str, + allow_builder: bool, + seen: usize, + valid: bool, + } + + impl Visit<'_> for Roots<'_> { + fn visit_expr_method_call(&mut self, call: &syn::ExprMethodCall) { + if route_method_call(call) { + self.seen += 1; + self.valid &= + route_receiver_root(&call.receiver, self.authority, self.allow_builder); + } + visit::visit_expr_method_call(self, call); + } + } + + let mut roots = Roots { + authority, + allow_builder, + seen: 0, + valid: true, + }; + roots.visit_expr(expression); + roots.seen != 0 && roots.valid +} + +fn route_receiver_root(expression: &Expr, authority: &str, allow_builder: bool) -> bool { + match strip_parens(expression) { + Expr::Path(_) => is_ident(expression, authority), + Expr::MethodCall(call) => route_receiver_root(&call.receiver, authority, allow_builder), + Expr::Call(call) => { + allow_builder + && exact_route_call_path(call, &["RouterService", "builder"]) + && call.args.is_empty() + } + _ => false, + } +} + +fn block_route_method_count(block: &Block) -> usize { + struct Counter(usize); + impl<'ast> Visit<'ast> for Counter { + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + self.0 += usize::from(route_method_call(call)); + visit::visit_expr_method_call(self, call); + } + } + let mut counter = Counter(0); + counter.visit_block(block); + counter.0 +} + +fn route_method_call(call: &syn::ExprMethodCall) -> bool { + let method = call.method.to_string(); + method == "route" + || (matches!( + method.as_str(), + "get" | "post" | "head" | "options" | "put" | "patch" | "delete" + ) && call.args.len() == 2) +} + +fn direct_fallback_loops(block: &Block) -> Vec<&syn::ExprForLoop> { + let mut loops = Vec::new(); + for statement in &block.stmts { + match statement { + Stmt::Expr(Expr::ForLoop(expression), _) if matches!(strip_parens(&expression.expr), Expr::Call(call) if call_named_route(call, "publisher_fallback_methods")) => + { + loops.push(expression); + } + Stmt::Expr(Expr::Block(expression), _) => { + loops.extend(direct_fallback_loops(&expression.block)); + } + _ => {} + } + } + loops +} + +fn call_named_route(call: &syn::ExprCall, expected: &str) -> bool { + matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == 1 + && path.path.segments[0].ident == expected + && path.path.segments.iter().all(|segment| { + matches!(segment.arguments, syn::PathArguments::None) + || matches!(expected, "Ok" | "Some") + })) +} + +fn exact_loop_method(expression: &Expr) -> bool { + is_ident(expression, "method") + || matches!(strip_parens(expression), Expr::MethodCall(call) if call.method == "clone" && call.args.is_empty() && is_ident(&call.receiver, "method")) +} + +fn exact_handler(expression: &Expr, expected: &str) -> bool { + match strip_parens(expression) { + Expr::Path(path) => path.path.is_ident(expected), + Expr::MethodCall(call) => { + call.method == "clone" && call.args.is_empty() && is_ident(&call.receiver, expected) + } + Expr::Call(call) => { + matches!(call.func.as_ref(), Expr::Path(path) if path.path.is_ident(expected)) + } + _ => false, + } +} + +fn startup_status_is_bound(block: &Block, adapter: &str) -> bool { + let expected_handler = if adapter == "spin" { + "handler" + } else if adapter == "axum" { + "make_handler" + } else { + "make" + }; + let exact_source = |expression: &Expr| { + matches!(strip_parens(expression), Expr::MethodCall(status) + if status.method == "status_code" + && status.args.is_empty() + && matches!(strip_parens(&status.receiver), Expr::MethodCall(context) + if context.method == "current_context" + && context.args.is_empty() + && is_ident(&context.receiver, "e"))) + }; + let source_count = block + .stmts + .iter() + .filter(|statement| { + matches!(statement, Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "status") + && local.init.as_ref().is_some_and(|init| exact_source(&init.expr))) + }) + .count(); + if (adapter == "spin" && source_count != 0) || (adapter != "spin" && source_count != 1) { + return false; + } + + let handlers = block + .stmts + .iter() + .filter_map(|statement| { + let Stmt::Local(local) = statement else { + return None; + }; + matches!(&local.pat, Pat::Ident(binding) if binding.ident == expected_handler) + .then(|| local.init.as_ref().map(|init| &*init.expr)) + }) + .collect::>(); + let [Some(handler)] = handlers.as_slice() else { + return false; + }; + exact_startup_handler(handler, adapter) +} + +fn exact_startup_handler(expression: &Expr, adapter: &str) -> bool { + let Expr::Closure(outer) = strip_parens(expression) else { + return false; + }; + let response_block = if adapter == "spin" { + let Expr::Block(block) = strip_parens(&outer.body) else { + return false; + }; + &block.block + } else { + let Expr::Block(block) = strip_parens(&outer.body) else { + return false; + }; + let [Stmt::Expr(Expr::Closure(inner), None)] = block.block.stmts.as_slice() else { + return false; + }; + let Expr::Block(block) = strip_parens(&inner.body) else { + return false; + }; + &block.block + }; + + if response_block.stmts.len() != 5 + || !matches!(&response_block.stmts[0], Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "body") + && local.init.as_ref().is_some_and(|init| matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["edgezero_core", "body", "Body", "from"]) + && call.args.len() == 1))) + || !matches!(&response_block.stmts[1], Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "resp") + && local.init.as_ref().is_some_and(|init| matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Response", "new"]) + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| is_ident(argument, "body"))))) + || !matches!(&response_block.stmts[2], Stmt::Expr(Expr::Assign(assignment), _) + if exact_status_assignment(assignment, adapter)) + || !matches!(&response_block.stmts[3], Stmt::Expr(Expr::MethodCall(insert), _) + if insert.method == "insert" + && insert.args.len() == 2 + && matches!(strip_parens(&insert.receiver), Expr::MethodCall(headers) + if headers.method == "headers_mut" + && headers.args.is_empty() + && is_ident(&headers.receiver, "resp"))) + { + return false; + } + matches!(&response_block.stmts[4], Stmt::Expr(Expr::Async(future), None) + if matches!(future.block.stmts.as_slice(), [Stmt::Expr(Expr::Call(ok), None)] + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && ok.args.first().is_some_and(|argument| is_ident(argument, "resp")))) +} + +fn exact_status_assignment(assignment: &syn::ExprAssign, adapter: &str) -> bool { + let exact_receiver = matches!(strip_parens(&assignment.left), Expr::Unary(unary) + if matches!(unary.op, syn::UnOp::Deref(_)) + && matches!(strip_parens(&unary.expr), Expr::MethodCall(call) + if call.method == "status_mut" + && call.args.is_empty() + && is_ident(&call.receiver, "resp"))); + let exact_value = if adapter == "spin" { + matches!(strip_parens(&assignment.right), Expr::Path(path) + if path.path.segments.len() == 2 + && path.path.segments[0].ident == "StatusCode" + && path.path.segments[1].ident == "SERVICE_UNAVAILABLE") + } else { + is_ident(&assignment.right, "status") + }; + exact_receiver && exact_value +} + +fn exact_method_list(file: &syn::File, name: &str) -> Result, Report> { + let function = exact_top_function(file, name)?; + let [Stmt::Expr(Expr::Array(array), None)] = function.block.stmts.as_slice() else { + return Err(invalid(format!( + "unsupported adapter method function: {name}" + ))); + }; + Ok(parse_method_array(array)?.into_iter().collect()) +} + +fn literal_string_value(expression: &Expr) -> Option { + match expression { + Expr::Lit(literal) => match &literal.lit { + Lit::Str(value) => Some(value.value()), + _ => None, + }, + _ => None, + } +} + +fn expression_is_get(expression: &Expr) -> bool { + exact_route_path(expression, &["Method", "GET"]) + || exact_route_path(expression, &["FastlyMethod", "GET"]) +} + +fn validate_fastly_pre_router(file: &syn::File) -> Result<(), Report> { + let health = exact_top_function(file, "health_response")?; + let health_if = health + .block + .stmts + .iter() + .find_map(statement_if) + .ok_or_else(|| { + invalid("Fastly health_response is missing its exact controlling condition") + })?; + if health.block.stmts.len() != 2 + || !exact_get_path_condition(&health_if.cond, "/health") + || !block_returns_health_200_ok(&health_if.then_branch) + || !matches!(&health.block.stmts[1], Stmt::Expr(value, None) + if exact_route_path(value, &["None"])) + { + return Err(invalid("Fastly health route AST receipt differs")); + } + let entry = exact_top_function(file, "edgezero_main")?; + let ja4 = entry + .block + .stmts + .iter() + .filter_map(statement_if) + .find(|expression| exact_get_path_condition(&expression.cond, "/_ts/debug/ja4")) + .ok_or_else(|| invalid("Fastly JA4 route condition AST receipt differs"))?; + if !exact_ja4_branch(&ja4.then_branch) { + return Err(invalid( + "Fastly JA4 predicate is not bound to the JA4 branch", + )); + } + Ok(()) +} + +fn validate_fastly_health_call(file: &syn::File) -> Result<(), Report> { + let main = exact_top_function(file, "main")?; + let exact_request = matches!(main.block.stmts.first(), Some(Stmt::Local(local)) + if local.attrs.is_empty() + && matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "req" && binding.mutability.is_none() && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["FastlyRequest", "from_client"]) + && call.args.is_empty()))); + let exact_health = main.block.stmts.get(1).is_some_and(|statement| { + let Stmt::Expr(Expr::If(branch), _) = statement else { + return false; + }; + let Expr::Let(condition) = strip_parens(&branch.cond) else { + return false; + }; + let Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + pattern.path.is_ident("Some") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(Pat::Ident(binding)) + if binding.ident == "response" && binding.subpat.is_none()) + && matches!(strip_parens(&condition.expr), Expr::Call(call) + if matches!(call.func.as_ref(), Expr::Path(path) if path.path.is_ident("health_response")) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "req"))) + && branch.else_branch.is_none() + && branch.then_branch.stmts.len() == 2 + && matches!(&branch.then_branch.stmts[0], Stmt::Expr(Expr::MethodCall(call), _) + if call.method == "send_to_client" && call.args.is_empty() + && is_ident(&call.receiver, "response")) + && matches!(&branch.then_branch.stmts[1], Stmt::Expr(Expr::Return(value), _) + if value.expr.is_none()) + }); + if !exact_request || !exact_health { + return Err(invalid( + "Fastly main does not dispatch through the exact health response", + )); + } + Ok(()) +} + +fn exact_ja4_branch(block: &Block) -> bool { + if block.stmts.len() != 2 { + return false; + } + let Stmt::Expr(Expr::Match(routes), _) = &block.stmts[0] else { + return false; + }; + let guarded = routes.arms.iter().filter(|arm| { + arm.guard.as_ref().is_some_and(|(_, guard)| { + matches!(strip_parens(guard), Expr::Field(field) + if matches!(&field.member, syn::Member::Named(name) if name == "ja4_endpoint_enabled") + && matches!(strip_parens(&field.base), Expr::Field(debug) + if is_ident(&debug.base, "settings") + && matches!(&debug.member, syn::Member::Named(name) if name == "debug"))) + }) && matches!(strip_parens(&arm.body), Expr::Block(body) + if body.block.stmts.first().is_some_and(|statement| matches!(statement, Stmt::Expr(Expr::MethodCall(send), _) + if send.method == "send_to_client" + && matches!(strip_parens(&send.receiver), Expr::Call(call) + if call_named_route(call, "build_ja4_debug_response") + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "req")))))) + }).count(); + guarded == 1 + && matches!(&block.stmts[1], Stmt::Expr(Expr::Return(value), _) + if value.expr.is_none()) +} + +fn validate_fastly_dispatch_tsjs(file: &syn::File) -> Result<(), Report> { + let dispatch = exact_top_function(file, "dispatch_fallback")?; + struct ResultBindings { + bindings: usize, + assignments: usize, + } + impl<'ast> Visit<'ast> for ResultBindings { + fn visit_pat_ident(&mut self, pattern: &'ast syn::PatIdent) { + self.bindings += usize::from(pattern.ident == "result"); + visit::visit_pat_ident(self, pattern); + } + + fn visit_expr_assign(&mut self, assignment: &'ast syn::ExprAssign) { + self.assignments += usize::from(is_ident(&assignment.left, "result")); + visit::visit_expr_assign(self, assignment); + } + } + let mut authority = ResultBindings { + bindings: 0, + assignments: 0, + }; + authority.visit_block(&dispatch.block); + if dispatch.block.stmts.len() < 3 { + return Err(invalid( + "Fastly returned dispatcher is disconnected from TSJS", + )); + } + let result_index = dispatch.block.stmts.len() - 3; + let exact_result = matches!(&dispatch.block.stmts[result_index], Stmt::Local(local) + if local.attrs.is_empty() + && matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "result" && binding.mutability.is_none() && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::If(branch) + if matches!(strip_parens(&branch.cond), Expr::Call(call) + if call_named_route(call, "uses_dynamic_tsjs_fallback") + && call.args.len() == 2 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "method")) + && matches!(call.args.iter().nth(1).map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "path"))) + && exact_tsjs_branch_result(&branch.then_branch, false)) + })); + if !exact_result + || authority.bindings != 1 + || authority.assignments != 0 + || !exact_fastly_result_response(&dispatch.block.stmts[result_index + 1]) + || !exact_fastly_dispatch_return(&dispatch.block.stmts[result_index + 2]) + { + return Err(invalid( + "Fastly returned dispatcher is disconnected from TSJS", + )); + } + Ok(()) +} + +fn exact_fastly_result_response(statement: &Stmt) -> bool { + let Stmt::Local(local) = statement else { + return false; + }; + if !local.attrs.is_empty() + || !matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "response" && binding.mutability.is_none() && binding.subpat.is_none()) + { + return false; + } + let Some(init) = &local.init else { + return false; + }; + let Expr::MethodCall(unwrap) = strip_parens(&init.expr) else { + return false; + }; + if unwrap.method != "unwrap_or_else" + || !is_ident(&unwrap.receiver, "result") + || unwrap.args.len() != 1 + { + return false; + } + let Some(Expr::Closure(error)) = unwrap.args.first().map(strip_parens) else { + return false; + }; + error.inputs.len() == 1 + && matches!(error.inputs.first(), Some(Pat::Ident(binding)) + if binding.ident == "e" && binding.subpat.is_none()) + && matches!(strip_parens(&error.body), Expr::Call(call) + if call_named_route(call, "http_error") + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "e"))) +} + +fn exact_fastly_dispatch_return(statement: &Stmt) -> bool { + let Stmt::Expr(Expr::Call(call), None) = statement else { + return false; + }; + call_named_route(call, "attach_dispatch_extensions") + && call.args.len() == 3 + && call + .args + .first() + .is_some_and(|argument| is_ident(argument, "response")) + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident(argument, "ec")) + && call + .args + .iter() + .nth(2) + .is_some_and(|argument| is_ident(argument, "effects")) +} + +fn validate_named_handler_dispatch( + adapter: &str, + file: &syn::File, +) -> Result<(), Report> { + let function = exact_top_function( + file, + if adapter == "fastly" { + "run_named_route" + } else { + "named_route_handler" + }, + )?; + struct Arms<'a> { + values: Vec<(String, &'a Expr)>, + } + impl<'ast> Visit<'ast> for Arms<'ast> { + fn visit_arm(&mut self, arm: &'ast syn::Arm) { + if let Some(variant) = match &arm.pat { + Pat::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == 2 + && path.path.segments[0].ident == "NamedRouteHandler" + && path.path.segments.iter().all(|segment| { + matches!(segment.arguments, syn::PathArguments::None) + }) => + { + Some(path.path.segments[1].ident.to_string()) + } + _ => None, + } { + self.values.push((variant, &arm.body)); + } + visit::visit_arm(self, arm); + } + } + let mut arms = Arms { values: Vec::new() }; + arms.visit_block(&function.block); + let expected: &[(&str, &str)] = if adapter == "fastly" { + &[ + ("TrustedServerDiscovery", "handle_trusted_server_discovery"), + ("VerifySignature", "handle_verify_signature"), + ("RotateKey", "handle_rotate_key"), + ("DeactivateKey", "handle_deactivate_key"), + ("LegacyAdminDenied", "legacy_admin_alias_denied"), + ("SetTester", "handle_set_tester"), + ("ClearTester", "handle_clear_tester"), + ("Auction", "handle_auction"), + ("FirstPartyProxy", "handle_first_party_proxy"), + ("FirstPartyClick", "handle_first_party_click"), + ("FirstPartySign", "handle_first_party_proxy_sign"), + ("FirstPartyProxyRebuild", "handle_first_party_proxy_rebuild"), + ] + } else { + &[ + ("TrustedServerDiscovery", "handle_trusted_server_discovery"), + ("VerifySignature", "handle_verify_signature"), + ("AdminEcNotSupported", "admin_ec_lookup_not_supported"), + ("AdminEidsLookup", "handle_admin_eids_lookup"), + ("LegacyAdminDenied", "legacy_admin_alias_denied"), + ("Auction", "handle_auction"), + ("FirstPartyProxy", "handle_first_party_proxy"), + ("FirstPartyClick", "handle_first_party_click"), + ("FirstPartySign", "handle_first_party_proxy_sign"), + ("FirstPartyProxyRebuild", "handle_first_party_proxy_rebuild"), + ] + }; + let mut audited_behaviors = expected + .iter() + .map(|(_, behavior)| *behavior) + .collect::>(); + audited_behaviors.extend(["handle_page_bids", "page_bids_preflight_denied"]); + if block_shadows_route_authority(&function.block, &audited_behaviors) { + return Err(invalid(format!( + "{adapter} named handler authority is lexically shadowed" + ))); + } + for (variant, behavior) in expected { + let matching = arms + .values + .iter() + .filter(|(actual, expression)| { + actual == variant + && terminal_behavior_name(expression).as_deref() == Some(*behavior) + && exact_named_handler_call(adapter, variant, behavior, expression) + }) + .count(); + if matching != 1 { + return Err(invalid(format!( + "{adapter} named handler behavior differs for {variant}" + ))); + } + } + if arms + .values + .iter() + .filter(|(variant, expression)| variant == "PageBids" && exact_page_bids_arm(expression)) + .count() + != 1 + { + return Err(invalid(format!( + "{adapter} named handler behavior differs for PageBids" + ))); + } + if adapter == "fastly" { + validate_fastly_run_named_specials(function)?; + } + if adapter == "axum" + && arms + .values + .iter() + .filter(|(variant, expression)| { + variant == "AdminNotSupported" + && matches!(strip_parens(expression), Expr::Block(block) + if exact_not_implemented_response(&block.block, "resp", true, "axum")) + }) + .count() + != 1 + { + return Err(invalid("axum unsupported handler response differs")); + } + Ok(()) +} + +fn validate_fastly_early_named_dispatch(file: &syn::File) -> Result<(), Report> { + let execute = exact_top_function(file, "execute_named")?; + let batch = execute + .block + .stmts + .iter() + .filter_map(statement_if) + .filter(|branch| exact_matches_macro(&branch.cond, "handler,NamedRouteHandler::BatchSync")) + .collect::>(); + let [batch] = batch.as_slice() else { + return Err(invalid( + "Fastly BatchSync early dispatch is missing or ambiguous", + )); + }; + if batch.else_branch.is_some() + || !matches!(batch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Return(value), _)] + if matches!(value.expr.as_deref().map(strip_parens), Some(Expr::Call(ok)) + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && matches!(ok.args.first().map(strip_parens), Some(Expr::Call(run)) + if call_named_route(run, "run_batch_sync") + && run.args.len() == 3 + && exact_reference(run.args.first(), "state") + && exact_reference(run.args.iter().nth(1), "services") + && run.args.iter().nth(2).is_some_and(|argument| is_ident(argument, "req"))))) + { + return Err(invalid("Fastly BatchSync early dispatch behavior differs")); + } + + let admin = execute + .block + .stmts + .iter() + .filter_map(statement_if) + .filter(|branch| { + exact_matches_macro( + &branch.cond, + "handler,NamedRouteHandler::AdminEcLookup|NamedRouteHandler::AdminEidsLookup", + ) + }) + .collect::>(); + let [admin] = admin.as_slice() else { + return Err(invalid( + "Fastly admin diagnostic early dispatch is missing or ambiguous", + )); + }; + if admin.else_branch.is_some() + || admin.then_branch.stmts.len() != 2 + || !matches!(&admin.then_branch.stmts[0], Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "response" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && exact_fastly_admin_response_initializer(local)) + || exact_call_occurrences(&admin.then_branch, &["handle_admin_ec_lookup"]) != 1 + || exact_call_occurrences(&admin.then_branch, &["handle_admin_eids_lookup"]) != 1 + || !exact_fastly_admin_calls(&admin.then_branch) + || !matches!(admin.then_branch.stmts.last(), Some(Stmt::Expr(Expr::Return(value), _)) + if matches!(value.expr.as_deref().map(strip_parens), Some(Expr::Call(ok)) + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && ok.args.first().is_some_and(|argument| is_ident(argument, "response")))) + { + return Err(invalid( + "Fastly admin diagnostic early dispatch behavior differs", + )); + } + Ok(()) +} + +fn exact_fastly_admin_calls(block: &Block) -> bool { + struct AdminCalls { + ec: usize, + eids: usize, + } + impl<'ast> Visit<'ast> for AdminCalls { + fn visit_expr_call(&mut self, call: &'ast syn::ExprCall) { + if exact_route_call_path(call, &["handle_admin_ec_lookup"]) { + self.ec += usize::from( + call.args.len() == 3 + && call.args.first().is_some_and(|argument| { + exact_zero_arg_method(argument, "as_ref", |receiver| { + is_ident(receiver, "kv") + }) + }) + && exact_reference(call.args.iter().nth(1), "registry") + && exact_reference(call.args.iter().nth(2), "req"), + ); + } else if exact_route_call_path(call, &["handle_admin_eids_lookup"]) { + self.eids += usize::from( + call.args.len() == 2 + && exact_reference(call.args.first(), "registry") + && exact_reference(call.args.iter().nth(1), "req"), + ); + } + visit::visit_expr_call(self, call); + } + } + let mut calls = AdminCalls { ec: 0, eids: 0 }; + calls.visit_block(block); + calls.ec == 1 && calls.eids == 1 +} + +fn exact_fastly_admin_response_initializer(local: &syn::Local) -> bool { + let Some(init) = &local.init else { + return false; + }; + let Expr::MethodCall(unwrap) = strip_parens(&init.expr) else { + return false; + }; + let exact_error = unwrap.method == "unwrap_or_else" + && unwrap.args.len() == 1 + && matches!(unwrap.args.first().map(strip_parens), Some(Expr::Closure(closure)) + if matches!(closure.inputs.iter().collect::>().as_slice(), + [Pat::Ident(binding)] if binding.ident == "error" && binding.subpat.is_none()) + && matches!(strip_parens(&closure.body), Expr::Call(call) + if exact_route_call_path(call, &["http_error"]) + && call.args.len() == 1 + && exact_reference(call.args.first(), "error"))); + let Expr::MethodCall(and_then) = strip_parens(&unwrap.receiver) else { + return false; + }; + let exact_dispatch = and_then.method == "and_then" + && and_then.args.len() == 1 + && matches!(and_then.args.first().map(strip_parens), Some(Expr::Closure(closure)) + if matches!(closure.inputs.iter().collect::>().as_slice(), + [Pat::Ident(binding)] if binding.ident == "registry" && binding.subpat.is_none()) + && matches!(strip_parens(&closure.body), Expr::Match(dispatch) + if is_ident(&dispatch.expr, "handler") + && exact_fastly_admin_match_arms(&dispatch.arms))); + let exact_registry = matches!(strip_parens(&and_then.receiver), Expr::Call(call) + if exact_route_call_path(call, &["PartnerRegistry", "from_config"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && exact_field_chain(&reference.expr, "state", &["settings", "ec", "partners"]))); + exact_error && exact_dispatch && exact_registry +} + +fn exact_fastly_admin_match_arms(arms: &[syn::Arm]) -> bool { + let [ec, eids, fallback] = arms else { + return false; + }; + let exact_ec = exact_named_variant_pattern(&ec.pat, "AdminEcLookup") + && ec.guard.is_none() + && matches!(strip_parens(&ec.body), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [Stmt::Local(kv), Stmt::Expr(Expr::Call(call), None)] + if matches!(&kv.pat, Pat::Ident(binding) + if binding.ident == "kv" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && kv.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["crate", "maybe_identity_graph"]) + && call.args.len() == 1 + && exact_reference_field(call.args.first(), "state", "settings")) + }) + && exact_route_call_path(call, &["handle_admin_ec_lookup"]) + && call.args.len() == 3 + && call.args.first().is_some_and(|argument| { + exact_zero_arg_method(argument, "as_ref", |receiver| is_ident(receiver, "kv")) + }) + && exact_reference(call.args.iter().nth(1), "registry") + && exact_reference(call.args.iter().nth(2), "req"))); + let exact_eids = exact_named_variant_pattern(&eids.pat, "AdminEidsLookup") + && eids.guard.is_none() + && matches!(strip_parens(&eids.body), Expr::Call(call) + if exact_route_call_path(call, &["handle_admin_eids_lookup"]) + && call.args.len() == 2 + && exact_reference(call.args.first(), "registry") + && exact_reference(call.args.iter().nth(1), "req")); + let exact_fallback = matches!(&fallback.pat, Pat::Wild(_)) + && fallback.guard.is_none() + && matches!(strip_parens(&fallback.body), Expr::Macro(value) + if value.mac.path.is_ident("unreachable") + && syn::parse2::(value.mac.tokens.clone()).is_ok_and(|message| { + message.value() == "admin diagnostics should use early dispatch" + })); + exact_ec && exact_eids && exact_fallback +} + +fn exact_field_chain(expression: &Expr, root: &str, fields: &[&str]) -> bool { + let mut current = strip_parens(expression); + for expected in fields.iter().rev() { + let Expr::Field(field) = current else { + return false; + }; + if !matches!(&field.member, syn::Member::Named(name) if name == expected) { + return false; + } + current = strip_parens(&field.base); + } + is_ident(current, root) +} + +fn exact_reference(expression: Option<&Expr>, name: &str) -> bool { + matches!(expression.map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, name)) +} + +fn exact_matches_macro(expression: &Expr, expected: &str) -> bool { + let Expr::Macro(value) = strip_parens(expression) else { + return false; + }; + value.mac.path.is_ident("matches") + && value + .mac + .tokens + .to_string() + .chars() + .filter(|character| !character.is_whitespace()) + .collect::() + == expected +} + +fn exact_call_occurrences(block: &Block, path: &[&str]) -> usize { + struct Calls<'a> { + path: &'a [&'a str], + count: usize, + } + impl<'ast> Visit<'ast> for Calls<'_> { + fn visit_expr_call(&mut self, call: &'ast syn::ExprCall) { + self.count += usize::from(exact_route_call_path(call, self.path)); + visit::visit_expr_call(self, call); + } + } + let mut calls = Calls { path, count: 0 }; + calls.visit_block(block); + calls.count +} + +fn validate_fastly_run_named_specials(function: &syn::ItemFn) -> Result<(), Report> { + let [Stmt::Expr(Expr::Match(dispatch), None)] = function.block.stmts.as_slice() else { + return Err(invalid( + "fastly run_named_route must return one handler match", + )); + }; + let identify = dispatch + .arms + .iter() + .filter(|arm| { + exact_named_variant_pattern(&arm.pat, "Identify") && exact_identify_arm(&arm.body) + }) + .count(); + let batch = dispatch + .arms + .iter() + .filter(|arm| { + exact_named_variant_pattern(&arm.pat, "BatchSync") + && exact_unreachable_arm( + &arm.body, + "batch-sync should be handled by run_batch_sync", + ) + }) + .count(); + let admin = dispatch + .arms + .iter() + .filter(|arm| { + exact_admin_variant_pattern(&arm.pat) + && exact_unreachable_arm( + &arm.body, + "admin diagnostics should be handled before EC setup", + ) + }) + .count(); + if identify != 1 || batch != 1 || admin != 1 { + return Err(invalid(format!( + "fastly special named handler behavior differs: identify={identify}, batch={batch}, admin={admin}" + ))); + } + Ok(()) +} + +fn exact_named_variant_pattern(pattern: &Pat, variant: &str) -> bool { + matches!(pattern, Pat::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == 2 + && path.path.segments[0].ident == "NamedRouteHandler" + && path.path.segments[1].ident == variant + && path.path.segments.iter().all(|segment| matches!(segment.arguments, syn::PathArguments::None))) +} + +fn exact_admin_variant_pattern(pattern: &Pat) -> bool { + let Pat::Or(alternatives) = pattern else { + return false; + }; + matches!(alternatives.cases.iter().collect::>().as_slice(), [first, second] + if exact_named_variant_pattern(first, "AdminEcLookup") + && exact_named_variant_pattern(second, "AdminEidsLookup")) +} + +fn exact_unreachable_arm(expression: &Expr, message: &str) -> bool { + let Expr::Block(block) = strip_parens(expression) else { + return false; + }; + let [statement] = block.block.stmts.as_slice() else { + return false; + }; + let item = match statement { + Stmt::Macro(statement) => &statement.mac, + Stmt::Expr(Expr::Macro(expression), _) => &expression.mac, + _ => return false, + }; + item.path.is_ident("unreachable") + && syn::parse2::(item.tokens.clone()) + .is_ok_and(|value| value.value() == message) +} + +fn exact_identify_arm(expression: &Expr) -> bool { + let Expr::Block(block) = strip_parens(expression) else { + return false; + }; + let [Stmt::Expr(Expr::If(branch), None)] = block.block.stmts.as_slice() else { + return false; + }; + let condition = exact_equality( + &branch.cond, + |value| { + matches!(strip_parens(value), Expr::MethodCall(call) + if call.method == "method" && call.args.is_empty() && is_ident(&call.receiver, "req")) + }, + |value| { + matches!(strip_parens(value), Expr::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == 2 + && path.path.segments[0].ident == "Method" + && path.path.segments[1].ident == "OPTIONS") + }, + ); + let preflight = matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Call(call), None)] + if call_named_route(call, "cors_preflight_identify") + && call.args.len() == 2 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && matches!(strip_parens(&reference.expr), Expr::Field(settings) + if is_ident(&settings.base, "state") + && matches!(&settings.member, syn::Member::Named(member) if member == "settings"))) + && exact_reference(call.args.iter().nth(1), "req")); + let real = branch.else_branch.as_ref().is_some_and(|(_, alternative)| { + matches!(strip_parens(alternative), Expr::Block(body) + if terminal_block_behavior_name(&body.block).as_deref() == Some("handle_identify") + && terminal_behavior_call(alternative, "handle_identify") + .is_some_and(exact_fastly_identify_call)) + }); + condition && preflight && real +} + +fn exact_page_bids_arm(expression: &Expr) -> bool { + let Expr::Block(block) = strip_parens(expression) else { + return false; + }; + let Some(Stmt::Expr(Expr::If(preflight), _)) = block.block.stmts.first() else { + return false; + }; + let exact_condition = exact_equality( + &preflight.cond, + |value| { + matches!(strip_parens(value), Expr::MethodCall(call) + if call.method == "method" && call.args.is_empty() && is_ident(&call.receiver, "req")) + }, + |value| exact_route_path(value, &["Method", "OPTIONS"]), + ); + let exact_denial = matches!(preflight.then_branch.stmts.as_slice(), [statement] + if match statement { + Stmt::Expr(Expr::Return(value), _) => value.expr.as_deref(), + Stmt::Expr(value, None) => Some(value), + _ => None, + }.is_some_and(|value| terminal_behavior_name(value).as_deref() == Some("page_bids_preflight_denied"))); + let handler_expression = if let Some((_, alternative)) = &preflight.else_branch { + Some(alternative.as_ref()) + } else { + block + .block + .stmts + .last() + .and_then(statement_terminal_expression) + }; + let exact_real_handler = if preflight.else_branch.is_some() { + handler_expression + .and_then(terminal_behavior_name) + .as_deref() + == Some("handle_page_bids") + } else { + terminal_statements_behavior_name(&block.block.stmts[1..]).as_deref() + == Some("handle_page_bids") + }; + let exact_call = handler_expression + .and_then(|expression| terminal_behavior_call(expression, "handle_page_bids")) + .is_some_and(exact_page_bids_handler_call); + exact_condition && exact_denial && exact_real_handler && exact_call +} + +fn terminal_behavior_call<'a>(expression: &'a Expr, expected: &str) -> Option<&'a syn::ExprCall> { + match strip_parens(expression) { + Expr::Call(call) => { + if exact_route_call_path(call, &[expected]) { + Some(call) + } else if (call_named_route(call, "Ok") + || call_named_route(call, "Some") + || call_named_route(call, "make_handler")) + && (call.args.len() == 1 + || (call.args.len() == 2 && call_named_route(call, "make_handler"))) + { + terminal_behavior_call(call.args.last()?, expected) + } else { + None + } + } + Expr::MethodCall(call) + if matches!(call.method.to_string().as_str(), "unwrap_or_else" | "clone") => + { + terminal_behavior_call(&call.receiver, expected) + } + Expr::Await(value) => terminal_behavior_call(&value.base, expected), + Expr::Try(value) => terminal_behavior_call(&value.expr, expected), + Expr::Closure(value) => terminal_behavior_call(&value.body, expected), + Expr::Async(value) => value + .block + .stmts + .last() + .and_then(statement_terminal_expression) + .and_then(|terminal| terminal_behavior_call(terminal, expected)), + Expr::Block(value) => value + .block + .stmts + .last() + .and_then(statement_terminal_expression) + .and_then(|terminal| terminal_behavior_call(terminal, expected)), + _ => None, + } +} + +fn exact_named_handler_call( + adapter: &str, + variant: &str, + behavior: &str, + expression: &Expr, +) -> bool { + let Some(call) = terminal_behavior_call(expression, behavior) else { + return false; + }; + match (adapter, variant) { + ( + "fastly", + "TrustedServerDiscovery" | "VerifySignature" | "RotateKey" | "DeactivateKey", + ) + | ( + "fastly", + "FirstPartyProxy" | "FirstPartyClick" | "FirstPartySign" | "FirstPartyProxyRebuild", + ) => { + call.args.len() == 3 + && exact_reference_field(call.args.first(), "state", "settings") + && call + .args + .iter() + .nth(1) + .is_some_and(|value| is_ident(value, "services")) + && call + .args + .iter() + .nth(2) + .is_some_and(|value| is_ident(value, "req")) + } + ("fastly", "LegacyAdminDenied") => call.args.is_empty(), + ("fastly", "SetTester" | "ClearTester") => { + call.args.len() == 1 && exact_reference_field(call.args.first(), "state", "settings") + } + ("fastly", "Auction") => { + call.args.len() == 7 + && exact_reference_field(call.args.first(), "state", "settings") + && exact_reference_field(call.args.iter().nth(1), "state", "orchestrator") + && call.args.iter().nth(2).is_some_and(|argument| { + exact_zero_arg_method(argument, "as_ref", |receiver| { + exact_field_receiver(receiver, "ec", "kv_graph") + }) + }) + && call + .args + .iter() + .nth(3) + .is_some_and(|value| is_ident(value, "registry_ref")) + && exact_reference_field(call.args.iter().nth(4), "ec", "ec_context") + && exact_reference(call.args.iter().nth(5), "consent_services") + && call + .args + .iter() + .nth(6) + .is_some_and(|value| is_ident(value, "req")) + } + ("axum", "TrustedServerDiscovery" | "VerifySignature") + | ( + "axum", + "FirstPartyProxy" | "FirstPartyClick" | "FirstPartySign" | "FirstPartyProxyRebuild", + ) => { + call.args.len() == 3 + && exact_reference_field(call.args.first(), "state", "settings") + && exact_reference(call.args.iter().nth(1), "services") + && call + .args + .iter() + .nth(2) + .is_some_and(|value| is_ident(value, "req")) + } + ("axum", "AdminEcNotSupported" | "LegacyAdminDenied") => call.args.is_empty(), + ("axum", "AdminEidsLookup") => { + call.args.len() == 2 + && exact_reference(call.args.first(), "partner_registry") + && exact_reference(call.args.iter().nth(1), "req") + } + ("axum", "Auction") => { + call.args.len() == 7 + && exact_reference_field(call.args.first(), "state", "settings") + && exact_reference_field(call.args.iter().nth(1), "state", "orchestrator") + && call + .args + .iter() + .nth(2) + .is_some_and(|value| exact_route_path(value, &["None"])) + && call + .args + .iter() + .nth(3) + .is_some_and(|value| exact_route_path(value, &["None"])) + && exact_reference(call.args.iter().nth(4), "ec_context") + && exact_reference(call.args.iter().nth(5), "services") + && call + .args + .iter() + .nth(6) + .is_some_and(|value| is_ident(value, "req")) + } + _ => false, + } +} + +fn exact_reference_field(expression: Option<&Expr>, root: &str, field: &str) -> bool { + matches!(expression.map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && exact_field_receiver(&reference.expr, root, field)) +} + +fn exact_zero_arg_method( + expression: &Expr, + method: &str, + receiver: impl FnOnce(&Expr) -> bool, +) -> bool { + matches!(strip_parens(expression), Expr::MethodCall(call) + if call.method == method && call.args.is_empty() && receiver(&call.receiver)) +} + +fn exact_fastly_identify_call(call: &syn::ExprCall) -> bool { + call.args.len() == 5 + && exact_reference_field(call.args.first(), "state", "settings") + && exact_reference(call.args.iter().nth(1), "kv") + && exact_reference(call.args.iter().nth(2), "partner_registry") + && exact_reference(call.args.iter().nth(3), "req") + && exact_reference_field(call.args.iter().nth(4), "ec", "ec_context") +} + +fn exact_page_bids_handler_call(call: &syn::ExprCall) -> bool { + if call.args.len() != 6 { + return false; + } + let fastly = exact_reference_field(call.args.first(), "state", "settings") + && exact_reference(call.args.iter().nth(1), "consent_services") + && call.args.iter().nth(2).is_some_and(|argument| { + exact_zero_arg_method(argument, "as_ref", |receiver| { + exact_field_receiver(receiver, "ec", "kv_graph") + }) + }) + && call + .args + .iter() + .nth(3) + .is_some_and(|value| is_ident(value, "auction")) + && exact_reference_field(call.args.iter().nth(4), "ec", "ec_context") + && call + .args + .iter() + .nth(5) + .is_some_and(|value| is_ident(value, "req")); + let axum = exact_reference_field(call.args.first(), "state", "settings") + && exact_reference(call.args.iter().nth(1), "services") + && call + .args + .iter() + .nth(2) + .is_some_and(|value| exact_route_path(value, &["None"])) + && call + .args + .iter() + .nth(3) + .is_some_and(|value| is_ident(value, "auction")) + && exact_reference(call.args.iter().nth(4), "ec_context") + && call + .args + .iter() + .nth(5) + .is_some_and(|value| is_ident(value, "req")); + fastly || axum +} + +fn statement_terminal_expression(statement: &Stmt) -> Option<&Expr> { + match statement { + Stmt::Expr(Expr::Return(value), _) => value.expr.as_deref(), + Stmt::Expr(value, None) => Some(value), + _ => None, + } +} + +fn terminal_behavior_name(expression: &Expr) -> Option { + match strip_parens(expression) { + Expr::Path(path) => unqualified_path_name(path, false), + Expr::Call(call) => { + let path = match call.func.as_ref() { + Expr::Path(path) => path, + _ => return None, + }; + let wrapper = path.path.segments.len() == 1 + && matches!( + path.path.segments[0].ident.to_string().as_str(), + "Ok" | "Some" + ); + let name = unqualified_path_name(path, wrapper)?; + if matches!(name.as_str(), "Ok" | "Some" | "make_handler") { + terminal_behavior_name(call.args.last()?) + } else { + Some(name) + } + } + Expr::MethodCall(call) + if matches!(call.method.to_string().as_str(), "unwrap_or_else" | "clone") => + { + terminal_behavior_name(&call.receiver) + } + Expr::Await(value) => terminal_behavior_name(&value.base), + Expr::Try(value) => terminal_behavior_name(&value.expr), + Expr::Closure(value) => terminal_behavior_name(&value.body), + Expr::Async(value) => terminal_block_behavior_name(&value.block), + Expr::Block(value) => terminal_block_behavior_name(&value.block), + _ => None, + } +} + +fn terminal_block_behavior_name(block: &Block) -> Option { + terminal_statements_behavior_name(&block.stmts) +} + +fn terminal_statements_behavior_name(statements: &[Stmt]) -> Option { + let (terminal, preceding) = statements.split_last()?; + let behavior = statement_terminal_expression(terminal).and_then(terminal_behavior_name)?; + let preceding_is_closed = preceding.iter().all(|statement| match statement { + Stmt::Local(local) => local_initializer_is_closed(local, behavior.as_str()), + Stmt::Expr(Expr::If(branch), _) => { + matches!(behavior.as_str(), "handle_auction" | "handle_page_bids") + && exact_registered_prepare_request_guard(branch) + } + _ => false, + }); + preceding_is_closed.then_some(behavior) +} + +fn local_initializer_is_closed(local: &syn::Local, behavior: &str) -> bool { + if !local.attrs.is_empty() + || local + .init + .as_ref() + .is_some_and(|init| init.diverge.is_some()) + { + return false; + } + exact_registered_try_local(local, behavior) + || exact_registered_clone_local(local) + || exact_registered_services_local(local) + || exact_registered_request_local(local, behavior) + || exact_registered_ec_context_local(local) + || exact_registered_registry_ref_local(local) + || exact_registered_auction_local(local) +} + +fn exact_registered_clone_local(local: &syn::Local) -> bool { + exact_local_binding(local, "s", false) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Arc", "clone"]) + && call.args.len() == 1 + && (exact_reference(call.args.first(), "s") + || exact_reference(call.args.first(), "state"))) + }) +} + +fn exact_registered_services_local(local: &syn::Local) -> bool { + exact_local_binding(local, "services", false) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["build_runtime_services"]) + && call.args.len() == 1 + && exact_reference(call.args.first(), "ctx")) + }) +} + +fn exact_registered_request_local(local: &syn::Local, behavior: &str) -> bool { + let mutable = matches!(behavior, "handle_auction" | "handle_page_bids"); + exact_local_binding(local, "req", mutable) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::MethodCall(call) + if call.method == "into_request" + && call.args.is_empty() + && is_ident(&call.receiver, "ctx")) + }) +} + +fn exact_registered_ec_context_local(local: &syn::Local) -> bool { + exact_local_binding(local, "ec_context", false) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["build_ec_context"]) + && call.args.len() == 3 + && (exact_reference(call.args.first(), "state") + || exact_reference_field(call.args.first(), "s", "settings")) + && exact_reference(call.args.iter().nth(1), "services") + && exact_reference(call.args.iter().nth(2), "req")) + }) +} + +fn exact_registered_registry_ref_local(local: &syn::Local) -> bool { + exact_local_binding(local, "registry_ref", false) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::If(branch) + if branch.else_branch.as_ref().is_some_and(|(_, alternative)| { + matches!(strip_parens(alternative), Expr::Block(block) + if matches!(block.block.stmts.as_slice(), [Stmt::Expr(Expr::Call(some), None)] + if exact_route_call_path(some, &["Some"]) + && some.args.len() == 1 + && exact_reference(some.args.first(), "partner_registry"))) + }) + && matches!(strip_parens(&branch.cond), Expr::MethodCall(empty) + if empty.method == "is_empty" + && empty.args.is_empty() + && is_ident(&empty.receiver, "partner_registry")) + && matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(none, None)] + if exact_route_path(none, &["None"]))) + }) +} + +fn exact_registered_auction_local(local: &syn::Local) -> bool { + if !exact_local_binding(local, "auction", false) { + return false; + } + let Some(init) = &local.init else { + return false; + }; + let Expr::Struct(auction) = strip_parens(&init.expr) else { + return false; + }; + if auction.qself.is_some() + || !auction.path.is_ident("AuctionDispatch") + || auction.rest.is_some() + || auction.fields.len() != 3 + { + return false; + } + let Some(orchestrator) = struct_field(auction, "orchestrator") else { + return false; + }; + let Some(slots) = struct_field(auction, "slots") else { + return false; + }; + let Some(registry) = struct_field(auction, "registry") else { + return false; + }; + let root = if exact_reference_field(Some(orchestrator), "state", "orchestrator") { + "state" + } else if exact_reference_field(Some(orchestrator), "s", "orchestrator") { + "s" + } else { + return false; + }; + exact_settings_slots_call(slots, root) + && (is_ident(registry, "registry_ref") || exact_route_path(registry, &["None"])) +} + +fn exact_settings_slots_call(expression: &Expr, root: &str) -> bool { + matches!(strip_parens(expression), Expr::MethodCall(call) + if call.method == "creative_opportunity_slots" + && call.args.is_empty() + && exact_field_receiver(&call.receiver, root, "settings")) +} + +fn exact_local_binding(local: &syn::Local, name: &str, mutable: bool) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == name + && binding.mutability.is_some() == mutable + && binding.subpat.is_none()) +} + +fn exact_registered_try_local(local: &syn::Local, behavior: &str) -> bool { + let Pat::Ident(binding) = &local.pat else { + return false; + }; + if binding.mutability.is_some() || binding.subpat.is_some() { + return false; + } + let Some(init) = &local.init else { + return false; + }; + let Expr::Try(attempt) = strip_parens(&init.expr) else { + return false; + }; + let Expr::Call(call) = strip_parens(&attempt.expr) else { + return false; + }; + match (behavior, binding.ident.to_string().as_str()) { + ("handle_identify", "kv") => { + exact_route_call_path(call, &["crate", "require_identity_graph"]) + && call.args.len() == 1 + && exact_reference_field(call.args.first(), "state", "settings") + } + ("handle_auction" | "handle_page_bids", "consent_services") => { + exact_route_call_path(call, &["runtime_services_for_consent_route"]) + && call.args.len() == 2 + && exact_reference_field(call.args.first(), "state", "settings") + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident(argument, "services")) + } + ( + "handle_identify" | "handle_admin_eids_lookup" | "handle_auction" | "handle_page_bids", + "partner_registry", + ) => { + exact_route_call_path(call, &["PartnerRegistry", "from_config"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && ["state", "s"].iter().any(|root| { + exact_field_chain( + &reference.expr, + root, + &["settings", "ec", "partners"], + ) + })) + } + _ => false, + } +} + +fn exact_registered_prepare_request_guard(branch: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_parens(&branch.cond) else { + return false; + }; + let Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + let exact_pattern = pattern.path.is_ident("Err") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(Pat::Ident(binding)) + if binding.ident == "error" && binding.subpat.is_none()); + let exact_call = matches!(strip_parens(&condition.expr), Expr::Call(call) + if exact_route_call_path( + call, + &["trusted_server_core", "integrations", "gpt_diagnostics", "prepare_request"], + ) + && call.args.len() == 2 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && exact_field_receiver(&reference.expr, "s", "settings")) + && matches!(call.args.iter().nth(1).map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_some() && is_ident(&reference.expr, "req"))); + exact_pattern + && exact_call + && branch.else_branch.is_none() + && matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Return(value), _)] + if matches!(value.expr.as_deref().map(strip_parens), Some(Expr::Call(ok)) + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && matches!(ok.args.first().map(strip_parens), Some(Expr::Call(error)) + if call_named_route(error, "http_error") + && error.args.len() == 1 + && matches!(error.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "error"))))) +} + +fn validate_unsupported_response( + adapter: &str, + file: &syn::File, +) -> Result<(), Report> { + let function = exact_top_function(file, "admin_key_management_not_supported")?; + if !exact_not_implemented_response(&function.block, "response", false, adapter) { + return Err(invalid(format!( + "{adapter} unsupported handler response differs" + ))); + } + Ok(()) +} + +fn exact_not_implemented_response( + block: &Block, + response: &str, + wrapped: bool, + adapter: &str, +) -> bool { + let expected_message = match adapter { + "axum" => { + "Admin key management is not supported on the Axum dev server.\nUse the Fastly adapter (via Viceroy or deployed) to rotate or deactivate keys.\n" + } + "cloudflare" => { + "Admin key management is not supported on Cloudflare Workers.\nUse the Fastly adapter (via Viceroy or deployed) to rotate or deactivate keys.\n" + } + "spin" => { + "Admin key management is not supported on Fermyon Spin.\nUse the Fastly adapter (via Viceroy or deployed) to rotate or deactivate keys.\n" + } + _ => return false, + }; + let [ + Stmt::Local(body), + Stmt::Local(response_local), + status, + header, + terminal, + ] = block.stmts.as_slice() + else { + return false; + }; + let exact_body = matches!(&body.pat, Pat::Ident(binding) + if binding.ident == "body" && binding.mutability.is_none() && binding.subpat.is_none()) + && body.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["edgezero_core", "body", "Body", "from"]) + && call.args.len() == 1 + && call.args.first().and_then(literal_string_value).as_deref() + == Some(expected_message)) + }); + let exact_response = matches!(&response_local.pat, Pat::Ident(binding) + if binding.ident == response + && binding.mutability.is_some() + && binding.subpat.is_none()) + && response_local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Response", "new"]) + && call.args.len() == 1 + && call.args.first().is_some_and(|argument| is_ident(argument, "body"))) + }); + let exact_status = matches!(status, Stmt::Expr(Expr::Assign(assignment), _) + if exact_response_status_assignment( + assignment, + response, + &["StatusCode", "NOT_IMPLEMENTED"], + )); + let exact_header = matches!(header, Stmt::Expr(Expr::MethodCall(insert), _) + if exact_content_type_insert(insert, response, "text/plain; charset=utf-8")); + let exact_terminal = statement_terminal_expression(terminal).is_some_and(|expression| { + if wrapped { + matches!(strip_parens(expression), Expr::Call(call) + if exact_route_call_path(call, &["Ok"]) + && call.args.len() == 1 + && call.args.first().is_some_and(|value| is_ident(value, response))) + } else { + is_ident(expression, response) + } + }); + exact_body && exact_response && exact_status && exact_header && exact_terminal +} + +fn exact_response_status_assignment( + assignment: &syn::ExprAssign, + response: &str, + status: &[&str], +) -> bool { + matches!(strip_parens(&assignment.left), Expr::Unary(unary) + if matches!(unary.op, syn::UnOp::Deref(_)) + && matches!(strip_parens(&unary.expr), Expr::MethodCall(call) + if call.method == "status_mut" + && call.args.is_empty() + && is_ident(&call.receiver, response))) + && exact_route_path(&assignment.right, status) +} + +fn validate_guarded_response_bodies( + publisher: &syn::File, + admin: &syn::File, + fastly: &syn::File, + axum: &syn::File, + cloudflare: &syn::File, + spin: &syn::File, +) -> Result<(), Report> { + validate_page_bids_preflight_body(publisher)?; + validate_admin_ec_unsupported_body(admin)?; + for (adapter, file) in [ + ("fastly", fastly), + ("axum", axum), + ("cloudflare", cloudflare), + ("spin", spin), + ] { + let function = exact_top_function(file, "legacy_admin_alias_denied")?; + if !exact_legacy_admin_denial(&function.block, adapter) { + return Err(invalid(format!( + "{adapter} legacy admin denial response differs" + ))); + } + } + for (adapter, file) in [("cloudflare", cloudflare), ("spin", spin)] { + let function = exact_top_function(file, "admin_ec_lookup_not_supported")?; + if !matches!(function.block.stmts.as_slice(), [Stmt::Expr(Expr::Call(call), None)] + if exact_route_call_path(call, &["core_admin_ec_lookup_not_supported"]) + && call.args.is_empty()) + { + return Err(invalid(format!( + "{adapter} portable admin EC response binding differs" + ))); + } + } + Ok(()) +} + +fn validate_page_bids_preflight_body(file: &syn::File) -> Result<(), Report> { + let function = exact_top_function(file, "page_bids_preflight_denied")?; + let [ + Stmt::Local(response), + status, + privacy, + Stmt::Expr(terminal, None), + ] = function.block.stmts.as_slice() + else { + return Err(invalid("page-bids preflight denial body differs")); + }; + let exact_response = matches!(&response.pat, Pat::Ident(binding) + if binding.ident == "response" + && binding.mutability.is_some() + && binding.subpat.is_none()) + && response.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Response", "new"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Call(body)) + if exact_route_call_path(body, &["EdgeBody", "from"]) + && body.args.len() == 1 + && body.args.first().and_then(literal_string_value).as_deref() + == Some("Forbidden"))) + }); + let exact_status = matches!(status, Stmt::Expr(Expr::Assign(assignment), _) + if exact_response_status_assignment( + assignment, + "response", + &["StatusCode", "FORBIDDEN"], + )); + let exact_privacy = matches!(privacy, Stmt::Expr(Expr::Call(call), _) + if exact_route_call_path(call, &["enforce_terminal_private_cache_privacy"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_some() && is_ident(&reference.expr, "response"))); + if exact_response && exact_status && exact_privacy && is_ident(terminal, "response") { + Ok(()) + } else { + Err(invalid("page-bids preflight denial body differs")) + } +} + +fn validate_admin_ec_unsupported_body(file: &syn::File) -> Result<(), Report> { + let function = exact_top_function(file, "admin_ec_lookup_not_supported")?; + let exact = matches!(function.block.stmts.as_slice(), [Stmt::Expr(Expr::Call(call), None)] + if exact_route_call_path(call, &["json_error"]) + && call.args.len() == 2 + && call.args.first().is_some_and(|argument| { + exact_route_path(argument, &["StatusCode", "NOT_IMPLEMENTED"]) + }) + && call.args.iter().nth(1).and_then(literal_string_value).as_deref() + == Some("EC identity graph is not configured on this deployment")); + if exact { + Ok(()) + } else { + Err(invalid("portable admin EC unsupported response differs")) + } +} + +fn exact_legacy_admin_denial(block: &Block, adapter: &str) -> bool { + let [ + Stmt::Local(response), + status, + header, + Stmt::Expr(terminal, None), + ] = block.stmts.as_slice() + else { + return false; + }; + let exact_response = matches!(&response.pat, Pat::Ident(binding) + if binding.ident == "response" + && binding.mutability.is_some() + && binding.subpat.is_none()) + && response.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Response", "new"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Call(body)) + if exact_route_call_path(body, &["edgezero_core", "body", "Body", "from"]) + && body.args.len() == 1 + && body.args.first().and_then(literal_string_value).as_deref() + == Some("Not found\n"))) + }); + let status_path: &[&str] = if adapter == "cloudflare" { + &["edgezero_core", "http", "StatusCode", "NOT_FOUND"] + } else { + &["StatusCode", "NOT_FOUND"] + }; + let exact_status = matches!(status, Stmt::Expr(Expr::Assign(assignment), _) + if exact_response_status_assignment(assignment, "response", status_path)); + let exact_header = matches!(header, Stmt::Expr(Expr::MethodCall(insert), _) + if exact_content_type_insert(insert, "response", "text/plain; charset=utf-8")); + exact_response && exact_status && exact_header && is_ident(terminal, "response") +} + +fn validate_dynamic_tsjs_guard(adapter: &str, file: &syn::File) -> Result<(), Report> { + let function = match adapter { + "fastly" => exact_top_function(file, "uses_dynamic_tsjs_fallback")?, + "axum" => exact_top_function(file, "dispatch_fallback")?, + "cloudflare" | "spin" => direct_dispatch_function(file)?, + _ => return Err(invalid("unknown adapter for TSJS AST receipt")), + }; + if adapter == "fastly" { + let Some(Stmt::Expr(condition, None)) = function.block.stmts.last() else { + return Err(invalid("Fastly TSJS predicate must be the function result")); + }; + if !exact_tsjs_condition(condition) { + return Err(invalid("fastly dynamic TSJS GET AST receipt differs")); + } + return Ok(()); + } + + let cloudflare_guard = if adapter == "cloudflare" { + exact_unshadowed_allow_tsjs(function) + } else { + false + }; + let matches = function + .block + .stmts + .iter() + .enumerate() + .filter_map(|(index, statement)| statement_if(statement).map(|branch| (index, branch))) + .filter(|(_, expression)| { + (exact_tsjs_condition(&expression.cond) + || (cloudflare_guard && exact_allow_tsjs_condition(&expression.cond))) + && exact_tsjs_branch_result(&expression.then_branch, adapter == "axum") + }) + .collect::>(); + let exact_prior_flow = matches.first().is_some_and(|(index, _)| { + prior_tsjs_flow_is_closed(adapter, &function.block.stmts[..*index]) + }); + if matches.len() != 1 || !exact_prior_flow { + return Err(invalid(format!( + "{adapter} dynamic TSJS condition/handler AST receipt differs" + ))); + } + Ok(()) +} + +fn prior_tsjs_flow_is_closed(adapter: &str, statements: &[Stmt]) -> bool { + match adapter { + "axum" => matches!(statements, [ + Stmt::Expr(Expr::If(admin), _), + prepare, + Stmt::Local(path), + Stmt::Local(method), + ] if exact_admin_fallback_guard(admin) + && exact_axum_prepare_request_statement(prepare) + && exact_request_path_binding(path, "to_string") + && exact_request_method_binding(method)), + "cloudflare" => matches!(statements, [ + Stmt::Local(services), + Stmt::Local(request), + Stmt::Expr(Expr::If(admin), _), + Stmt::Expr(Expr::If(prepare), _), + Stmt::Local(path), + Stmt::Local(method), + Stmt::Local(allow), + ] if exact_services_binding(services, "build_per_request_services") + && exact_request_binding(request) + && exact_admin_fallback_guard(admin) + && exact_prepare_request_guard(prepare) + && exact_request_path_binding(path, "to_owned") + && exact_request_method_binding(method) + && exact_allow_tsjs_binding(allow)), + "spin" => matches!(statements, [ + Stmt::Local(services), + Stmt::Local(request), + Stmt::Expr(Expr::If(admin), _), + Stmt::Expr(Expr::If(prepare), _), + Stmt::Local(path), + Stmt::Local(method), + ] if exact_services_binding(services, "build_runtime_services") + && exact_request_binding(request) + && exact_admin_fallback_guard(admin) + && exact_prepare_request_guard(prepare) + && exact_request_path_binding(path, "to_owned") + && exact_request_method_binding(method)), + _ => false, + } +} + +fn exact_axum_prepare_request_statement(statement: &Stmt) -> bool { + matches!(statement, Stmt::Expr(Expr::Try(attempt), Some(_)) + if matches!(strip_parens(&attempt.expr), Expr::Call(call) + if exact_route_call_path( + call, + &["trusted_server_core", "integrations", "gpt_diagnostics", "prepare_request"], + ) + && call.args.len() == 2 + && exact_reference_field(call.args.first(), "state", "settings") + && matches!(call.args.iter().nth(1).map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_some() && is_ident(&reference.expr, "req")))) +} + +fn exact_services_binding(local: &syn::Local, function: &str) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "services" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &[function]) + && call.args.len() == 1 + && exact_reference(call.args.first(), "ctx")) + }) +} + +fn exact_request_binding(local: &syn::Local) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "req" + && binding.mutability.is_some() + && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::MethodCall(call) + if call.method == "into_request" + && call.args.is_empty() + && is_ident(&call.receiver, "ctx")) + }) +} + +fn exact_request_path_binding(local: &syn::Local, conversion: &str) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "path" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::MethodCall(convert) + if convert.method == conversion + && convert.args.is_empty() + && matches!(strip_parens(&convert.receiver), Expr::MethodCall(path) + if path.method == "path" + && path.args.is_empty() + && matches!(strip_parens(&path.receiver), Expr::MethodCall(uri) + if uri.method == "uri" + && uri.args.is_empty() + && is_ident(&uri.receiver, "req")))) + }) +} + +fn exact_request_method_binding(local: &syn::Local) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "method" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::MethodCall(clone) + if clone.method == "clone" + && clone.args.is_empty() + && matches!(strip_parens(&clone.receiver), Expr::MethodCall(method) + if method.method == "method" + && method.args.is_empty() + && is_ident(&method.receiver, "req"))) + }) +} + +fn exact_allow_tsjs_binding(local: &syn::Local) -> bool { + matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "allow_tsjs" + && binding.mutability.is_none() + && binding.subpat.is_none()) + && local.init.as_ref().is_some_and(|init| { + exact_equality( + &init.expr, + |value| is_ident(value, "method"), + |value| exact_route_path(value, &["Method", "GET"]), + ) + }) +} + +fn exact_admin_fallback_guard(branch: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_parens(&branch.cond) else { + return false; + }; + let Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + let exact_pattern = pattern.path.is_ident("Some") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(Pat::Ident(binding)) + if binding.ident == "response" && binding.subpat.is_none()); + let exact_call = matches!(strip_parens(&condition.expr), Expr::Call(call) + if call_named_route(call, "deny_admin_diagnostic_fallback") + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "req"))); + exact_pattern + && exact_call + && branch.else_branch.is_none() + && matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Return(value), _)] + if value.expr.as_deref().is_some_and(|expression| { + is_ident(expression, "response") + || matches!(strip_parens(expression), Expr::Call(ok) + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && ok.args.first().is_some_and(|argument| is_ident(argument, "response"))) + })) +} + +fn exact_prepare_request_guard(branch: &syn::ExprIf) -> bool { + let Expr::Let(condition) = strip_parens(&branch.cond) else { + return false; + }; + let Pat::TupleStruct(pattern) = condition.pat.as_ref() else { + return false; + }; + let exact_pattern = pattern.path.is_ident("Err") + && pattern.elems.len() == 1 + && matches!(pattern.elems.first(), Some(Pat::Ident(binding)) + if binding.ident == "error" && binding.subpat.is_none()); + let exact_call = matches!(strip_parens(&condition.expr), Expr::Call(call) + if exact_route_call_path( + call, + &["trusted_server_core", "integrations", "gpt_diagnostics", "prepare_request"], + ) + && call.args.len() == 2 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && matches!(strip_parens(&reference.expr), Expr::Field(settings) + if is_ident(&settings.base, "state") + && matches!(&settings.member, syn::Member::Named(member) if member == "settings"))) + && matches!(call.args.iter().nth(1).map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_some() && is_ident(&reference.expr, "req"))); + exact_pattern + && exact_call + && branch.else_branch.is_none() + && matches!(branch.then_branch.stmts.as_slice(), [Stmt::Expr(Expr::Return(value), _)] + if matches!(value.expr.as_deref().map(strip_parens), Some(Expr::Call(ok)) + if call_named_route(ok, "Ok") + && ok.args.len() == 1 + && matches!(ok.args.first().map(strip_parens), Some(Expr::Call(error)) + if call_named_route(error, "http_error") + && error.args.len() == 1 + && matches!(error.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "error"))))) +} + +fn exact_route_call_path(call: &syn::ExprCall, expected: &[&str]) -> bool { + matches!(call.func.as_ref(), Expr::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == expected.len() + && path.path.segments.iter().zip(expected).all(|(segment, name)| { + segment.ident == *name && matches!(segment.arguments, syn::PathArguments::None) + })) +} + +fn direct_dispatch_function(file: &syn::File) -> Result<&syn::ItemFn, Report> { + let build_router = exact_top_function(file, "build_router")?; + let [Stmt::Expr(Expr::Block(body), None)] = build_router.block.stmts.as_slice() else { + return Err(invalid("build_router must return one direct lexical block")); + }; + let direct = body + .block + .stmts + .iter() + .filter_map(|statement| match statement { + Stmt::Item(Item::Fn(function)) if function.sig.ident == "dispatch" => Some(function), + _ => None, + }) + .collect::>(); + let [dispatch] = direct.as_slice() else { + return Err(invalid( + "fallback dispatch must have one direct lexical definition", + )); + }; + + struct DispatchDefinitions<'a> { + functions: Vec<&'a syn::ItemFn>, + } + impl<'ast> Visit<'ast> for DispatchDefinitions<'ast> { + fn visit_item_fn(&mut self, function: &'ast syn::ItemFn) { + if function.sig.ident == "dispatch" { + self.functions.push(function); + } + visit::visit_item_fn(self, function); + } + } + let mut definitions = DispatchDefinitions { + functions: Vec::new(), + }; + definitions.visit_file(file); + let mut production = Vec::new(); + for function in definitions.functions { + if route_item_is_production(&function.attrs, "fallback dispatch")? { + production.push(function); + } + } + if production.len() != 1 { + return Err(invalid( + "fallback dispatch must have one production lexical definition", + )); + } + Ok(*dispatch) +} + +fn validate_nested_dispatch_binding( + adapter: &str, + file: &syn::File, +) -> Result<(), Report> { + let _dispatch = direct_dispatch_function(file)?; + let build_router = exact_top_function(file, "build_router")?; + let [Stmt::Expr(Expr::Block(body), None)] = build_router.block.stmts.as_slice() else { + return Err(invalid(format!( + "{adapter} build_router must return one direct lexical block" + ))); + }; + let fallbacks = body + .block + .stmts + .iter() + .filter_map(|statement| match statement { + Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "fallback") => + { + local.init.as_ref().map(|init| init.expr.as_ref()) + } + _ => None, + }) + .collect::>(); + let [fallback] = fallbacks.as_slice() else { + return Err(invalid(format!( + "{adapter} fallback must have one direct lexical binding" + ))); + }; + if !terminal_exact_dispatch_call(fallback) { + return Err(invalid(format!( + "{adapter} fallback does not call its direct lexical dispatch" + ))); + } + Ok(()) +} + +fn terminal_exact_dispatch_call(expression: &Expr) -> bool { + match strip_parens(expression) { + Expr::Closure(closure) => terminal_exact_dispatch_call(&closure.body), + Expr::Block(block) => block + .block + .stmts + .last() + .and_then(statement_terminal_expression) + .is_some_and(terminal_exact_dispatch_call), + Expr::Call(call) => { + call_named_route(call, "dispatch") + && call.args.len() == 2 + && call + .args + .first() + .is_some_and(|argument| is_ident(argument, "s")) + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident(argument, "ctx")) + } + _ => false, + } +} + +fn exact_unshadowed_allow_tsjs(function: &syn::ItemFn) -> bool { + struct Bindings { + valid: usize, + total: usize, + assignments: usize, + } + impl<'ast> Visit<'ast> for Bindings { + fn visit_local(&mut self, local: &'ast syn::Local) { + if matches!(&local.pat, Pat::Ident(binding) if binding.ident == "allow_tsjs") { + self.total += 1; + self.valid += usize::from( + local.attrs.is_empty() + && matches!(&local.pat, Pat::Ident(binding) + if binding.mutability.is_none() && binding.subpat.is_none()) + && local + .init + .as_ref() + .is_some_and(|init| exact_method_get(&init.expr)), + ); + } + visit::visit_local(self, local); + } + + fn visit_expr_assign(&mut self, assignment: &'ast syn::ExprAssign) { + self.assignments += usize::from(is_ident(&assignment.left, "allow_tsjs")); + visit::visit_expr_assign(self, assignment); + } + } + let mut bindings = Bindings { + valid: 0, + total: 0, + assignments: 0, + }; + bindings.visit_block(&function.block); + bindings.valid == 1 && bindings.total == 1 && bindings.assignments == 0 +} + +fn exact_top_function<'a>( + file: &'a syn::File, + name: &str, +) -> Result<&'a syn::ItemFn, Report> { + let mut functions = Vec::new(); + for item in &file.items { + let Item::Fn(function) = item else { continue }; + if function.sig.ident == name + && route_item_is_production(&function.attrs, &format!("adapter function `{name}`"))? + { + functions.push(function); + } + } + if functions.len() != 1 { + return Err(invalid(format!( + "adapter function `{name}` is missing or ambiguous" + ))); + } + Ok(functions[0]) +} + +fn exact_impl_method<'a>( + file: &'a syn::File, + owner: &str, + name: &str, +) -> Result<&'a Block, Report> { + let mut methods = Vec::new(); + for item in &file.items { + let Item::Impl(item) = item else { continue }; + let syn::Type::Path(self_type) = item.self_ty.as_ref() else { + continue; + }; + if item.trait_.is_some() || !self_type.path.is_ident(owner) { + continue; + } + if !route_item_is_production(&item.attrs, &format!("{owner} impl"))? { + continue; + } + for member in &item.items { + let syn::ImplItem::Fn(function) = member else { + continue; + }; + if function.sig.ident == name + && route_item_is_production(&function.attrs, &format!("{owner}::{name}"))? + { + methods.push(&function.block); + } + } + } + let Some(method) = methods.first().copied() else { + return Err(invalid(format!("missing {owner}::{name}"))); + }; + if methods.len() != 1 { + return Err(invalid(format!("duplicate {owner}::{name}"))); + } + Ok(method) +} + +fn route_item_is_production( + attributes: &[Attribute], + label: &str, +) -> Result> { + let mut cfg_test = false; + for attribute in attributes { + if attribute.path().is_ident("cfg_attr") { + return Err(invalid(format!( + "unsupported conditional attribute on {label}" + ))); + } + if !attribute.path().is_ident("cfg") { + continue; + } + let syn::Meta::List(list) = &attribute.meta else { + return Err(invalid(format!("invalid cfg on {label}"))); + }; + if list.tokens.to_string() == "test" && !cfg_test { + cfg_test = true; + } else { + return Err(invalid(format!("unsupported production cfg on {label}"))); + } + } + Ok(!cfg_test) +} + +fn statement_if(statement: &Stmt) -> Option<&syn::ExprIf> { + match statement { + Stmt::Expr(Expr::If(expression), _) => Some(expression), + Stmt::Local(local) => local + .init + .as_ref() + .and_then(|init| match init.expr.as_ref() { + Expr::If(expression) => Some(expression), + _ => None, + }), + _ => None, + } +} + +fn exact_get_path_condition(expression: &Expr, path: &str) -> bool { + let Expr::Binary(and) = strip_parens(expression) else { + return false; + }; + if !matches!(and.op, syn::BinOp::And(_)) { + return false; + } + (exact_request_method_get(&and.left) && exact_request_path(&and.right, path)) + || (exact_request_path(&and.left, path) && exact_request_method_get(&and.right)) +} + +fn exact_tsjs_condition(expression: &Expr) -> bool { + let Expr::Binary(and) = strip_parens(expression) else { + return false; + }; + if !matches!(and.op, syn::BinOp::And(_)) { + return false; + } + (exact_method_get(&and.left) && exact_tsjs_prefix(&and.right)) + || (exact_tsjs_prefix(&and.left) && exact_method_get(&and.right)) +} + +fn exact_allow_tsjs_condition(expression: &Expr) -> bool { + let Expr::Binary(and) = strip_parens(expression) else { + return false; + }; + if !matches!(and.op, syn::BinOp::And(_)) { + return false; + } + (is_ident(&and.left, "allow_tsjs") && exact_tsjs_prefix(&and.right)) + || (exact_tsjs_prefix(&and.left) && is_ident(&and.right, "allow_tsjs")) +} + +fn exact_request_method_get(expression: &Expr) -> bool { + exact_equality( + expression, + |value| { + matches!(strip_parens(value), Expr::MethodCall(call) + if call.method == "get_method" && call.args.is_empty() && is_ident(&call.receiver, "req")) + }, + expression_is_get, + ) +} + +fn exact_method_get(expression: &Expr) -> bool { + exact_equality( + expression, + |value| { + matches!(strip_parens(value), Expr::Path(path) if path.path.is_ident("method")) + || matches!(strip_parens(value), Expr::Unary(unary) if matches!(unary.op, syn::UnOp::Deref(_)) && is_ident(&unary.expr, "method")) + }, + expression_is_get, + ) +} + +fn exact_request_path(expression: &Expr, expected: &str) -> bool { + exact_equality( + expression, + |value| { + matches!(strip_parens(value), Expr::MethodCall(call) + if call.method == "get_path" && call.args.is_empty() && is_ident(&call.receiver, "req")) + }, + |value| literal_string_value(strip_parens(value)).as_deref() == Some(expected), + ) +} + +fn exact_equality( + expression: &Expr, + left: impl Fn(&Expr) -> bool, + right: impl Fn(&Expr) -> bool, +) -> bool { + let Expr::Binary(binary) = strip_parens(expression) else { + return false; + }; + matches!(binary.op, syn::BinOp::Eq(_)) + && ((left(&binary.left) && right(&binary.right)) + || (right(&binary.left) && left(&binary.right))) +} + +fn exact_tsjs_prefix(expression: &Expr) -> bool { + matches!(strip_parens(expression), Expr::MethodCall(call) + if call.method == "starts_with" + && is_ident(&call.receiver, "path") + && call.args.len() == 1 + && call.args.first().and_then(literal_string_value).as_deref() == Some("/static/tsjs=")) +} + +fn strip_parens(expression: &Expr) -> &Expr { + match expression { + Expr::Paren(paren) => strip_parens(&paren.expr), + Expr::Group(group) => strip_parens(&group.expr), + _ => expression, + } +} + +fn exact_tsjs_branch_result(block: &Block, returned: bool) -> bool { + let [statement] = block.stmts.as_slice() else { + return false; + }; + let expression = match (returned, statement) { + (true, Stmt::Expr(Expr::Return(value), _)) => value.expr.as_deref(), + (false, Stmt::Expr(expression, None)) => Some(expression), + _ => None, + }; + expression.is_some_and(|expression| { + expression_root_call_name(expression) == Some("handle_tsjs_dynamic") + }) +} + +fn expression_root_call_name(expression: &Expr) -> Option<&str> { + match strip_parens(expression) { + Expr::Call(call) => match call.func.as_ref() { + Expr::Path(path) => path + .path + .segments + .last() + .map(|segment| segment.ident.to_string()) + .and_then(|name| (name == "handle_tsjs_dynamic").then_some("handle_tsjs_dynamic")), + _ => None, + }, + Expr::Await(value) => expression_root_call_name(&value.base), + Expr::Try(value) => expression_root_call_name(&value.expr), + _ => None, + } +} + +fn block_returns_health_200_ok(block: &Block) -> bool { + let [Stmt::Expr(Expr::Return(value), _)] = block.stmts.as_slice() else { + return false; + }; + let Some(Expr::Call(some)) = value.expr.as_deref().map(strip_parens) else { + return false; + }; + if !call_named_route(some, "Some") || some.args.len() != 1 { + return false; + } + matches!(some.args.first().map(strip_parens), Some(Expr::MethodCall(body)) + if body.method == "with_body_text_plain" + && body.args.len() == 1 + && body.args.first().and_then(literal_string_value).as_deref() == Some("ok") + && matches!(strip_parens(&body.receiver), Expr::Call(status) + if exact_route_call_path(status, &["FastlyResponse", "from_status"]) + && status.args.len() == 1 + && matches!(status.args.first().map(strip_parens), Some(Expr::Lit(literal)) + if matches!(&literal.lit, Lit::Int(number) if number.base10_digits() == "200")))) +} + +fn is_review_date(value: &str) -> bool { + if !(value.len() == 10 + && value.as_bytes()[4] == b'-' + && value.as_bytes()[7] == b'-' + && value + .bytes() + .enumerate() + .all(|(index, byte)| matches!(index, 4 | 7) || byte.is_ascii_digit())) + { + return false; + } + let year = value[0..4].parse::().unwrap_or(0); + let month = value[5..7].parse::().unwrap_or(0); + let day = value[8..10].parse::().unwrap_or(0); + let leap = year.is_multiple_of(4) && (!year.is_multiple_of(100) || year.is_multiple_of(400)); + let maximum = match month { + 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, + 4 | 6 | 9 | 11 => 30, + 2 if leap => 29, + 2 => 28, + _ => return false, + }; + year > 0 && (1..=maximum).contains(&day) +} + +fn read_utf8(repository: &Repository, path: &str) -> Result> { + let path = NormalizedRelativePath::new(std::path::Path::new(path)) + .map_err(|error| invalid(format!("invalid route source path: {error:?}")))?; + let bytes = repository + .read_tracked_bounded(&path, MAX_ROUTE_INPUT_BYTES) + .map_err(|error| invalid(format!("cannot read route source: {error:?}")))?; + String::from_utf8(bytes).map_err(|error| invalid(format!("route source is not UTF-8: {error}"))) +} + +/// Require exact route-set equality and identify a changed semantic axis. +/// +/// # Errors +/// +/// Returns an error for every missing, extra, or altered route record. +pub fn validate_routes( + expected: &BTreeSet, + observed: &BTreeSet, +) -> Result<(), Report> { + if expected == observed { + return Ok(()); + } + for expected_record in expected { + let candidates = observed + .iter() + .filter(|record| { + record.adapter == expected_record.adapter && record.path == expected_record.path + }) + .collect::>(); + if candidates.len() == 1 { + let observed_record = candidates[0]; + if expected_record == observed_record { + continue; + } + let axis = if expected_record.methods != observed_record.methods { + "method" + } else if expected_record.shape != observed_record.shape { + "shape" + } else if expected_record.predicate != observed_record.predicate { + "predicate" + } else if expected_record.status != observed_record.status { + "status" + } else if expected_record.startup_router != observed_record.startup_router { + "startup-router" + } else { + "route" + }; + return Err(Report::new(RouteError::Drift { axis })); + } + } + Err(Report::new(RouteError::Drift { axis: "route" })) +} + +/// Extract the private Fastly, Axum, or Spin named-route collection. +/// +/// # Errors +/// +/// Returns an error if the named collection is absent or leaves the closed +/// struct/tuple, path-constant, and method-array grammar. +pub fn extract_named_routes( + adapter: &str, + source: &str, +) -> Result, Report> { + extract_named_routes_with_constants(adapter, source, &BTreeMap::new()) +} + +fn extract_named_routes_with_constants( + adapter: &str, + source: &str, + authoritative_paths: &BTreeMap, +) -> Result, Report> { + ensure_route_input_bound(&format!("{adapter} route source"), source)?; + if !matches!(adapter, "fastly" | "axum" | "spin") { + return Err(invalid(format!( + "unsupported named-route adapter: {adapter}" + ))); + } + let file = syn::parse_file(source) + .map_err(|error| invalid(format!("invalid {adapter} Rust: {error}")))?; + let strings = string_constants(&file.items).with_authoritative(authoritative_paths); + let methods = method_array_constants(&file.items)?; + let array = if adapter == "fastly" { + let mut arrays = Vec::new(); + for item in &file.items { + let Item::Const(item) = item else { continue }; + if item.ident == "NAMED_ROUTES" + && route_item_is_production(&item.attrs, "Fastly NAMED_ROUTES")? + { + arrays.push( + expression_array(&item.expr) + .ok_or_else(|| invalid("unsupported Fastly NAMED_ROUTES expression"))?, + ); + } + } + if arrays.len() > 1 { + return Err(invalid("duplicate Fastly NAMED_ROUTES collection")); + } + arrays.first().copied() + } else { + let symbol = if adapter == "axum" { + "named_routes" + } else { + "named_fallback_paths" + }; + let function = exact_top_function(&file, symbol)?; + function + .block + .stmts + .last() + .and_then(|statement| match statement { + Stmt::Expr(expression, _) => expression_array(expression), + _ => None, + }) + } + .ok_or_else(|| invalid(format!("missing {adapter} named route collection")))?; + + let mut records = RouteAccumulator::default(); + for entry in &array.elems { + let (path_expression, method_expression, handler_expression) = if adapter == "spin" { + let Expr::Tuple(tuple) = entry else { + return Err(invalid("unsupported Spin named route row")); + }; + if tuple.elems.len() != 2 { + return Err(invalid("Spin named route rows require path and methods")); + } + (&tuple.elems[0], &tuple.elems[1], None) + } else { + let Expr::Struct(row) = entry else { + return Err(invalid(format!("unsupported {adapter} named route row"))); + }; + let path = struct_field(row, "path") + .ok_or_else(|| invalid(format!("{adapter} route row is missing path")))?; + let methods = struct_field(row, "primary_methods").ok_or_else(|| { + invalid(format!("{adapter} route row is missing primary_methods")) + })?; + let handler = struct_field(row, "handler") + .ok_or_else(|| invalid(format!("{adapter} route row is missing handler")))?; + if row.rest.is_some() || row.fields.len() != 3 { + return Err(invalid(format!("unsupported {adapter} named route fields"))); + } + (path, methods, Some(handler)) + }; + let path = resolve_static_path(path_expression, &strings)?; + if let Some(handler) = handler_expression { + validate_named_handler(adapter, path_expression, &path, handler)?; + } + let route_methods = resolve_method_array(method_expression, &methods)?; + let shape = if path.contains('{') { + RouteShape::Template + } else { + RouteShape::Literal + }; + for method in route_methods { + let (predicate, status) = named_semantics(adapter, &path, &method); + records.insert(&RouteRecord::new( + adapter, + &path, + [&method], + shape, + predicate, + status, + false, + ))?; + } + } + Ok(records.finish()) +} + +fn validate_named_handler( + adapter: &str, + path_expression: &Expr, + path: &str, + expression: &Expr, +) -> Result<(), Report> { + let path_symbol = match strip_parens(path_expression) { + Expr::Path(value) => value.path.get_ident().map(ToString::to_string), + _ => None, + }; + let expected = match (adapter, path, path_symbol.as_deref()) { + (_, _, Some("PAGE_BIDS_PATH" | "PAGE_BIDS_LEGACY_PATH")) => "PageBids", + (_, "/.well-known/trusted-server.json", _) => "TrustedServerDiscovery", + (_, "/verify-signature", _) => "VerifySignature", + ("fastly", "/_ts/admin/keys/rotate", _) => "RotateKey", + ("fastly", "/_ts/admin/keys/deactivate", _) => "DeactivateKey", + ("fastly", "/_ts/admin/ec" | "/_ts/admin/ec/{id}", _) => "AdminEcLookup", + ("axum", "/_ts/admin/keys/rotate" | "/_ts/admin/keys/deactivate", _) => "AdminNotSupported", + ("axum", "/_ts/admin/ec" | "/_ts/admin/ec/{id}", _) => "AdminEcNotSupported", + (_, "/_ts/admin/eids", _) => "AdminEidsLookup", + (_, "/admin/keys/rotate" | "/admin/keys/deactivate", _) => "LegacyAdminDenied", + ("fastly", "/_ts/api/v1/batch-sync", _) => "BatchSync", + ("fastly", "/_ts/api/v1/identify", _) => "Identify", + ("fastly", "/_ts/set-tester", _) => "SetTester", + ("fastly", "/_ts/clear-tester", _) => "ClearTester", + (_, "/auction", _) => "Auction", + (_, "/_ts/page-bids" | "/__ts/page-bids", _) => "PageBids", + (_, "/first-party/proxy", _) => "FirstPartyProxy", + (_, "/first-party/click", _) => "FirstPartyClick", + (_, "/first-party/sign", _) => "FirstPartySign", + (_, "/first-party/proxy-rebuild", _) => "FirstPartyProxyRebuild", + _ => { + return Err(invalid(format!( + "unknown {adapter} named route path: {path}" + ))); + } + }; + if !matches!(strip_parens(expression), Expr::Path(value) + if value.path.segments.len() == 2 + && value.path.segments[0].ident == "NamedRouteHandler" + && value.path.segments[1].ident == expected) + { + return Err(invalid(format!( + "{adapter} named route handler differs for {path}" + ))); + } + Ok(()) +} + +fn expression_array(expression: &Expr) -> Option<&syn::ExprArray> { + match expression { + Expr::Array(array) => Some(array), + Expr::Reference(reference) => expression_array(&reference.expr), + Expr::Paren(paren) => expression_array(&paren.expr), + _ => None, + } +} + +fn struct_field<'a>(row: &'a syn::ExprStruct, name: &str) -> Option<&'a Expr> { + row.fields.iter().find_map(|field| { + matches!(&field.member, syn::Member::Named(ident) if ident == name).then_some(&field.expr) + }) +} + +fn resolve_static_path( + expression: &Expr, + constants: &RouteStringConstants, +) -> Result> { + match expression { + Expr::Lit(literal) => match &literal.lit { + Lit::Str(value) => Ok(value.value()), + _ => Err(invalid("named route path must be a string")), + }, + Expr::Path(path) => { + let name = path + .path + .get_ident() + .map(ToString::to_string) + .ok_or_else(|| invalid("unsupported named route path"))?; + constants.resolve(&name) + } + _ => Err(invalid("unsupported named route path expression")), + } +} + +fn resolve_method_array( + expression: &Expr, + constants: &BTreeMap>, +) -> Result, Report> { + if let Some(array) = expression_array(expression) { + return parse_method_array(array); + } + let Expr::Path(path) = expression else { + return Err(invalid("unsupported named route method expression")); + }; + let name = path + .path + .get_ident() + .map(ToString::to_string) + .ok_or_else(|| invalid("unsupported named route method constant"))?; + constants + .get(&name) + .cloned() + .ok_or_else(|| invalid(format!("unknown named route method constant: {name}"))) +} + +fn method_array_constants( + items: &[Item], +) -> Result>, Report> { + let mut constants = BTreeMap::new(); + for item in items { + let (name, expression, attributes) = match item { + Item::Const(item) => (item.ident.to_string(), &*item.expr, item.attrs.as_slice()), + Item::Static(item) => (item.ident.to_string(), &*item.expr, item.attrs.as_slice()), + _ => continue, + }; + if let Some(array) = expression_array(expression) + && (array.elems.is_empty() + || matches!(array.elems.first(), Some(Expr::Path(path)) if path.path.segments.first().is_some_and(|segment| segment.ident == "Method"))) + { + if !route_item_is_production(attributes, &format!("method array `{name}`"))? { + continue; + } + if constants + .insert(name.clone(), parse_method_array(array)?) + .is_some() + { + return Err(invalid(format!("duplicate method array: {name}"))); + } + } + } + Ok(constants) +} + +fn parse_method_array(array: &syn::ExprArray) -> Result, Report> { + let methods = array + .elems + .iter() + .map(|expression| { + let Expr::Path(path) = expression else { + return Err(invalid("named route method array contains a non-path")); + }; + let segments = path.path.segments.iter().collect::>(); + if segments.len() != 2 || segments[0].ident != "Method" { + return Err(invalid("named route method is not Method::")); + } + Ok(segments[1].ident.to_string()) + }) + .collect::, _>>()?; + let count = methods.len(); + if methods.iter().collect::>().len() != count { + return Err(invalid("duplicate named route method")); + } + Ok(methods) +} + +fn named_semantics(adapter: &str, path: &str, method: &str) -> (&'static str, RouteStatus) { + if path.starts_with("/admin/keys/") || (path.ends_with("page-bids") && method == "OPTIONS") { + ("always", RouteStatus::Guarded) + } else if adapter != "fastly" + && (path.starts_with("/_ts/admin/keys/") || path.starts_with("/_ts/admin/ec")) + { + ("always", RouteStatus::Unsupported) + } else if path == "/_ts/set-tester" || path == "/_ts/clear-tester" { + ("settings.tester_cookie.enabled", RouteStatus::Real) + } else { + ("always", RouteStatus::Real) + } +} + +/// Extract Cloudflare route registrations from the supported router grammar. +/// +/// # Errors +/// +/// Returns an error for invalid Rust, a missing builder, or an unsupported +/// route-affecting construct. +pub fn extract_cloudflare_routes( + source: &str, +) -> Result, Report> { + extract_cloudflare_routes_with_constants(source, &BTreeMap::new()) +} + +fn extract_cloudflare_routes_with_constants( + source: &str, + authoritative_paths: &BTreeMap, +) -> Result, Report> { + ensure_route_input_bound("Cloudflare route source", source)?; + let file = syn::parse_file(source) + .map_err(|error| invalid(format!("invalid Cloudflare Rust: {error}")))?; + let strings = string_constants(&file.items).with_authoritative(authoritative_paths); + let method_lists = method_list_functions(&file.items)?; + let build_router = &exact_top_function(&file, "build_router")?.block; + if cloudflare_builder_occurrences(build_router) != 1 { + return Err(invalid( + "Cloudflare build_router must contain exactly one raw RouterService::builder call", + )); + } + let mut parser = CloudflareParser { + strings: &strings, + method_lists: &method_lists, + values: BTreeMap::new(), + routes: RouteAccumulator::default(), + authority: None, + }; + parser.parse_block(build_router)?; + let authority = parser + .authority + .as_deref() + .ok_or_else(|| invalid("Cloudflare build_router has no builder authority"))?; + if !block_returns_build(build_router, authority) { + return Err(invalid( + "Cloudflare build_router must return its builder authority", + )); + } + if parser.routes.identities.is_empty() { + return Err(invalid( + "Cloudflare build_router contains no recognized routes", + )); + } + Ok(parser.routes.finish()) +} + +struct CloudflareParser<'a> { + strings: &'a RouteStringConstants, + method_lists: &'a BTreeMap>, + values: BTreeMap, + routes: RouteAccumulator, + authority: Option, +} + +impl CloudflareParser<'_> { + fn parse_block(&mut self, block: &Block) -> Result<(), Report> { + for statement in &block.stmts { + match statement { + Stmt::Local(local) => { + let Some(init) = &local.init else { continue }; + let binding = match &local.pat { + Pat::Ident(binding) => Some(binding.ident.to_string()), + _ => None, + }; + if binding.as_deref().is_some_and(|binding| { + self.authority + .as_deref() + .is_some_and(|authority| authority == binding) + }) { + return Err(invalid("Cloudflare router authority cannot be shadowed")); + } + if is_router_builder_chain(&init.expr) { + let Pat::Ident(ident) = &local.pat else { + return Err(invalid( + "Cloudflare builder authority must use an identifier binding", + )); + }; + if self.authority.replace(ident.ident.to_string()).is_some() { + return Err(invalid("multiple Cloudflare router builders")); + } + self.parse_router_chain(&init.expr)?; + } else if expression_builder_count(&init.expr) != 0 { + return Err(invalid("unsupported hidden Cloudflare router builder")); + } else if matches!(strip_parens(&init.expr), Expr::Macro(_)) { + return Err(invalid("unsupported Cloudflare macro local initializer")); + } else if expression_route_method_count(&init.expr) != 0 { + return Err(invalid( + "unsupported competing Cloudflare route initializer", + )); + } else if self + .authority + .as_deref() + .is_some_and(|authority| expression_references_ident(&init.expr, authority)) + { + return Err(invalid( + "unsupported Cloudflare route-affecting local initializer", + )); + } + } + Stmt::Item(Item::Fn(function)) if function.sig.ident == "dispatch" => { + if block_builder_count(&function.block) != 0 { + return Err(invalid("unsupported hidden Cloudflare router builder")); + } + } + Stmt::Item(_) => { + return Err(invalid("unsupported Cloudflare nested item")); + } + Stmt::Macro(_) => { + return Err(invalid("unsupported Cloudflare statement macro")); + } + Stmt::Expr(expression, _) => self.parse_expression(expression)?, + } + } + Ok(()) + } + + fn parse_expression(&mut self, expression: &Expr) -> Result<(), Report> { + let authority = self.authority.as_deref().unwrap_or("").to_owned(); + match expression { + Expr::MethodCall(call) + if call.method == "build" + && self.authority.is_none() + && is_router_builder_chain(&call.receiver) => + { + self.authority = Some("".to_owned()); + self.parse_router_chain(expression) + } + Expr::Assign(assign) if is_ident(&assign.left, &authority) => { + self.parse_router_chain(&assign.right) + } + Expr::Assign(assign) if expression_route_method_count(&assign.right) != 0 => Err( + invalid("Cloudflare route assignment does not update the returned authority"), + ), + Expr::ForLoop(loop_expression) => self.parse_loop(loop_expression), + Expr::Block(block) => self.parse_block(&block.block), + Expr::MethodCall(call) + if call.method == "build" && is_ident(&call.receiver, &authority) => + { + Ok(()) + } + Expr::Call(call) => Err(invalid(format!( + "unsupported Cloudflare builder call: {}", + compact_expr(&call.func) + ))), + Expr::Macro(_) => Err(invalid("unsupported Cloudflare expression macro")), + Expr::If(_) + | Expr::Match(_) + | Expr::While(_) + | Expr::Loop(_) + | Expr::Return(_) + | Expr::Break(_) + | Expr::Continue(_) => Err(invalid( + "unsupported Cloudflare control flow in build_router", + )), + _ if !authority.is_empty() && expression_references_ident(expression, &authority) => { + Err(invalid( + "unsupported Cloudflare expression that references the router", + )) + } + _ => Ok(()), + } + } + + fn parse_loop(&mut self, expression: &syn::ExprForLoop) -> Result<(), Report> { + let Pat::Ident(binding) = &*expression.pat else { + return Err(invalid("unsupported Cloudflare loop binding")); + }; + let name = binding.ident.to_string(); + let values = self.resolve_loop_values(&expression.expr)?; + let previous = self.values.get(&name).cloned(); + for value in values { + self.values.insert(name.clone(), value); + self.parse_block(&expression.body)?; + } + if let Some(previous) = previous { + self.values.insert(name, previous); + } else { + self.values.remove(&name); + } + Ok(()) + } + + fn resolve_loop_values(&self, expression: &Expr) -> Result, Report> { + match expression { + Expr::Array(array) => array + .elems + .iter() + .map(|value| self.resolve_path(value)) + .collect(), + Expr::Call(call) => { + let Expr::Path(path) = &*call.func else { + return Err(invalid("unsupported Cloudflare loop iterator")); + }; + let name = path + .path + .get_ident() + .map(ToString::to_string) + .ok_or_else(|| invalid("unsupported Cloudflare loop function"))?; + self.method_lists + .get(&name) + .cloned() + .ok_or_else(|| invalid(format!("unsupported Cloudflare loop function: {name}"))) + } + _ => Err(invalid("unsupported Cloudflare loop iterator")), + } + } + + fn parse_router_chain(&mut self, expression: &Expr) -> Result<(), Report> { + if let Expr::Call(call) = expression + && exact_route_call_path(call, &["RouterService", "builder"]) + && call.args.is_empty() + { + return Ok(()); + } + let Expr::MethodCall(call) = expression else { + if self + .authority + .as_deref() + .is_some_and(|authority| is_ident(expression, authority)) + { + return Ok(()); + } + return Err(invalid("unsupported Cloudflare router assignment")); + }; + if self + .authority + .as_deref() + .is_none_or(|authority| !is_ident(&call.receiver, authority)) + { + self.parse_router_chain(&call.receiver)?; + } + let method = call.method.to_string(); + match method.as_str() { + "middleware" => Ok(()), + "get" | "post" | "head" | "options" | "put" | "patch" | "delete" => { + let path = call + .args + .first() + .ok_or_else(|| invalid("Cloudflare route helper is missing its path"))?; + if call.args.len() != 2 { + return Err(invalid("Cloudflare route helper has unsupported arguments")); + } + let path = self.resolve_path(path)?; + let method = method.to_ascii_uppercase(); + validate_cloudflare_handler( + &path, + &method, + call.args + .iter() + .nth(1) + .expect("route helper should have a handler"), + )?; + self.add(&path, method)?; + Ok(()) + } + "route" => { + let mut args = call.args.iter(); + let path = args + .next() + .ok_or_else(|| invalid("Cloudflare route call is missing its path"))?; + let method = args + .next() + .ok_or_else(|| invalid("Cloudflare route call is missing its method"))?; + if call.args.len() != 3 { + return Err(invalid("Cloudflare route call has unsupported arguments")); + } + let path = self.resolve_path(path)?; + let method = self.resolve_method(method)?; + validate_cloudflare_handler( + &path, + &method, + call.args + .iter() + .nth(2) + .expect("route call should have a handler"), + )?; + self.add(&path, method)?; + Ok(()) + } + "build" | "builder" => Ok(()), + _ => Err(invalid(format!( + "unsupported Cloudflare router method: {method}" + ))), + } + } + + fn resolve_path(&self, expression: &Expr) -> Result> { + match expression { + Expr::Lit(literal) => match &literal.lit { + Lit::Str(value) => Ok(value.value()), + _ => Err(invalid("Cloudflare route path must be a string")), + }, + Expr::Path(path) => { + let name = path + .path + .get_ident() + .map(ToString::to_string) + .ok_or_else(|| invalid("unsupported Cloudflare route path"))?; + if let Some(value) = self.values.get(&name) { + Ok(value.clone()) + } else { + self.strings.resolve(&name) + } + } + _ => Err(invalid("unsupported Cloudflare route path expression")), + } + } + + fn resolve_method(&self, expression: &Expr) -> Result> { + match expression { + Expr::Path(path) => { + let segments = path.path.segments.iter().collect::>(); + if segments.len() == 2 && segments[0].ident == "Method" { + return Ok(segments[1].ident.to_string()); + } + let name = path + .path + .get_ident() + .map(ToString::to_string) + .ok_or_else(|| invalid("unsupported Cloudflare route method"))?; + self.values + .get(&name) + .cloned() + .ok_or_else(|| invalid(format!("unknown Cloudflare route method: {name}"))) + } + Expr::MethodCall(call) if call.method == "clone" => self.resolve_method(&call.receiver), + _ => Err(invalid("unsupported Cloudflare route method expression")), + } + } + + fn add(&mut self, path: &str, method: String) -> Result<(), Report> { + let shape = if path.contains('{') { + RouteShape::Template + } else { + RouteShape::Literal + }; + let (predicate, status) = cloudflare_semantics(path, &method); + self.routes.insert(&RouteRecord::new( + "cloudflare", + path, + [method], + shape, + predicate, + status, + false, + )) + } +} + +fn is_router_builder_chain(expression: &Expr) -> bool { + match expression { + Expr::Call(call) => { + exact_route_call_path(call, &["RouterService", "builder"]) && call.args.is_empty() + } + Expr::MethodCall(call) => is_router_builder_chain(&call.receiver), + Expr::Paren(paren) => is_router_builder_chain(&paren.expr), + _ => false, + } +} + +fn block_returns_build(block: &Block, authority: &str) -> bool { + let Some(Stmt::Expr(expression, None)) = block.stmts.last() else { + return false; + }; + match expression { + Expr::Block(block) => block_returns_build(&block.block, authority), + Expr::MethodCall(call) => { + call.method == "build" + && call.args.is_empty() + && (is_ident(&call.receiver, authority) + || (authority == "" && is_router_builder_chain(&call.receiver))) + } + _ => false, + } +} + +fn expression_builder_count(expression: &Expr) -> usize { + struct Counter(usize); + impl<'ast> Visit<'ast> for Counter { + fn visit_expr_call(&mut self, call: &'ast syn::ExprCall) { + if exact_route_call_path(call, &["RouterService", "builder"]) { + self.0 += 1; + } + visit::visit_expr_call(self, call); + } + } + let mut counter = Counter(0); + counter.visit_expr(expression); + counter.0 +} + +fn expression_route_method_count(expression: &Expr) -> usize { + struct Counter(usize); + impl<'ast> Visit<'ast> for Counter { + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + self.0 += usize::from(route_method_call(call)); + visit::visit_expr_method_call(self, call); + } + } + let mut counter = Counter(0); + counter.visit_expr(expression); + counter.0 +} + +fn block_builder_count(block: &Block) -> usize { + struct Counter(usize); + impl<'ast> Visit<'ast> for Counter { + fn visit_expr_call(&mut self, call: &'ast syn::ExprCall) { + if exact_route_call_path(call, &["RouterService", "builder"]) { + self.0 += 1; + } + visit::visit_expr_call(self, call); + } + + fn visit_macro(&mut self, item: &'ast syn::Macro) { + let tokens = item.tokens.to_string(); + if tokens.contains("RouterService") && tokens.contains("builder") { + self.0 += 1; + } + visit::visit_macro(self, item); + } + } + let mut counter = Counter(0); + counter.visit_block(block); + counter.0 +} + +fn cloudflare_builder_occurrences(block: &Block) -> usize { + block_builder_count(block) +} + +fn validate_cloudflare_handler( + path: &str, + method: &str, + expression: &Expr, +) -> Result<(), Report> { + let expected: &[&str] = match (path, method) { + ("/.well-known/trusted-server.json", "GET") => { + &["handle_trusted_server_discovery", "discovery"] + } + ("/verify-signature", "POST") => &["handle_verify_signature", "verify"], + ("/_ts/admin/keys/rotate" | "/_ts/admin/keys/deactivate", "POST") => &[ + "admin_key_management_not_supported", + "admin_not_supported_handler", + ], + ("/_ts/admin/ec" | "/_ts/admin/ec/{id}", "GET") => &[ + "admin_ec_lookup_not_supported", + "admin_ec_not_supported_handler", + ], + ("/_ts/admin/eids", "GET") => &["handle_admin_eids_lookup", "admin_eids_handler"], + ("/auction", "POST") => &["handle_auction", "auction"], + ("/_ts/page-bids" | "/__ts/page-bids", "GET") => { + &["handle_page_bids", "page_bids", "page_bids_handler"] + } + ("/_ts/page-bids" | "/__ts/page-bids", "OPTIONS") => &[ + "page_bids_preflight_denied", + "page_bids_preflight", + "page_bids_options_handler", + ], + ("/first-party/proxy", "GET") => &["handle_first_party_proxy", "fp_proxy_handler"], + ("/first-party/click", "GET") => &["handle_first_party_click", "fp_click_handler"], + ("/first-party/sign", "GET" | "POST") => &[ + "handle_first_party_proxy_sign", + "fp_sign_handler", + "fp_sign_post_handler", + ], + ("/first-party/proxy-rebuild", "GET" | "POST") => &[ + "handle_first_party_proxy_rebuild", + "fp_rebuild_handler", + "fp_rebuild_post_handler", + ], + ("/admin/keys/rotate" | "/admin/keys/deactivate", _) => { + &["legacy_admin_alias_denied", "legacy_admin_deny"] + } + ("/" | "/{*rest}", _) => &["dispatch", "fallback"], + _ => return Ok(()), + }; + let Some(actual) = terminal_handler_authority(expression) else { + return Err(invalid(format!( + "Cloudflare handler is not bound for {method} {path}" + ))); + }; + if !expected.contains(&actual.as_str()) { + return Err(invalid(format!( + "Cloudflare handler differs for {method} {path}" + ))); + } + if actual == expected[0] + && !exact_portable_handler_expression("Cloudflare", expected[0], expression) + { + return Err(invalid(format!( + "Cloudflare handler arguments differ for {method} {path}" + ))); + } + Ok(()) +} + +fn terminal_handler_authority(expression: &Expr) -> Option { + match strip_parens(expression) { + Expr::Path(path) => unqualified_path_name(path, false), + Expr::MethodCall(call) if call.method == "clone" && call.args.is_empty() => { + terminal_handler_authority(&call.receiver) + } + Expr::Call(call) => { + let path = match call.func.as_ref() { + Expr::Path(path) => path, + _ => return None, + }; + let wrapper = path.path.segments.len() == 1 + && matches!( + path.path.segments[0].ident.to_string().as_str(), + "Ok" | "Some" + ); + let name = unqualified_path_name(path, wrapper)?; + if name == "make_handler" || name == "Ok" { + terminal_handler_authority(call.args.last()?) + } else { + Some(name) + } + } + Expr::Closure(closure) => terminal_handler_authority(&closure.body), + Expr::Async(value) => terminal_block_authority(&value.block), + Expr::Block(value) => terminal_block_authority(&value.block), + Expr::Await(value) => terminal_handler_authority(&value.base), + Expr::Try(value) => terminal_handler_authority(&value.expr), + _ => None, + } +} + +fn unqualified_path_name(path: &syn::ExprPath, allow_arguments: bool) -> Option { + if path.qself.is_some() + || path.path.leading_colon.is_some() + || path.path.segments.len() != 1 + || (!allow_arguments + && !matches!(path.path.segments[0].arguments, syn::PathArguments::None)) + { + return None; + } + Some(path.path.segments[0].ident.to_string()) +} + +fn terminal_block_authority(block: &Block) -> Option { + let Stmt::Expr(expression, None) = block.stmts.last()? else { + return None; + }; + terminal_handler_authority(expression) +} + +fn validate_spin_named_handlers( + file: &syn::File, + authoritative_paths: &BTreeMap, +) -> Result<(), Report> { + struct SpinRoutes<'a> { + strings: &'a RouteStringConstants, + page_bids_path: &'a str, + page_bids_legacy_path: &'a str, + seen: BTreeSet<(String, String)>, + error: Option>, + } + impl<'ast> Visit<'ast> for SpinRoutes<'_> { + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + if self.error.is_some() { + return; + } + let method = call.method.to_string(); + if method == "route" + && let Some(path_expression) = call.args.first() + && let Ok(path) = resolve_static_path(path_expression, self.strings) + && matches!( + path.as_str(), + "/admin/keys/rotate" | "/admin/keys/deactivate" + ) + && call + .args + .iter() + .nth(2) + .and_then(terminal_handler_authority) + .as_deref() + != Some("legacy_admin_deny") + { + self.error = Some(invalid(format!( + "Spin legacy admin handler differs for {path}" + ))); + return; + } + let verb = match method.as_str() { + "get" | "post" => Some(method.to_ascii_uppercase()), + "route" => call + .args + .iter() + .nth(1) + .and_then(|value| match strip_parens(value) { + Expr::Path(path) => path + .path + .segments + .last() + .map(|segment| segment.ident.to_string()), + _ => None, + }), + _ => None, + }; + if let Some(verb) = verb + && let Some(path_expression) = call.args.first() + && let Ok(path) = resolve_static_path(path_expression, self.strings) + && spin_expected_handler( + &path, + &verb, + self.page_bids_path, + self.page_bids_legacy_path, + ) + .is_some() + { + let handler_index = if method == "route" { 2 } else { 1 }; + let valid = call.args.iter().nth(handler_index).is_some_and(|handler| { + terminal_handler_authority(handler).is_some_and(|actual| { + spin_expected_handler( + &path, + &verb, + self.page_bids_path, + self.page_bids_legacy_path, + ) + .is_some_and(|expected| expected.contains(&actual.as_str())) + }) + }); + if !valid || !self.seen.insert((path.clone(), verb.clone())) { + self.error = Some(invalid(format!("Spin handler differs for {verb} {path}"))); + return; + } + } + visit::visit_expr_method_call(self, call); + } + } + let strings = string_constants(&file.items).with_authoritative(authoritative_paths); + let page_bids_path = strings.resolve("PAGE_BIDS_PATH")?; + let page_bids_legacy_path = strings.resolve("PAGE_BIDS_LEGACY_PATH")?; + let build_router = exact_top_function(file, "build_router")?; + validate_spin_discovery_handler(build_router)?; + validate_local_handler_behaviors( + &build_router.block, + "Spin", + &[ + ("discovery_handler", "handle_trusted_server_discovery"), + ("verify_handler", "handle_verify_signature"), + ( + "admin_not_supported_handler", + "admin_key_management_not_supported", + ), + ( + "admin_ec_not_supported_handler", + "admin_ec_lookup_not_supported", + ), + ("admin_eids_handler", "handle_admin_eids_lookup"), + ("auction_handler", "handle_auction"), + ("page_bids_handler", "handle_page_bids"), + ("page_bids_options_handler", "page_bids_preflight_denied"), + ("fp_proxy_handler", "handle_first_party_proxy"), + ("fp_click_handler", "handle_first_party_click"), + ("fp_sign_handler", "handle_first_party_proxy_sign"), + ("fp_sign_post_handler", "handle_first_party_proxy_sign"), + ("fp_rebuild_handler", "handle_first_party_proxy_rebuild"), + ( + "fp_rebuild_post_handler", + "handle_first_party_proxy_rebuild", + ), + ("legacy_admin_deny", "legacy_admin_alias_denied"), + ("fallback", "dispatch"), + ], + &[], + )?; + let mut routes = SpinRoutes { + strings: &strings, + page_bids_path: &page_bids_path, + page_bids_legacy_path: &page_bids_legacy_path, + seen: BTreeSet::new(), + error: None, + }; + routes.visit_block(&build_router.block); + if let Some(error) = routes.error { + return Err(error); + } + let mut expected = [ + ("/.well-known/trusted-server.json", "GET"), + ("/verify-signature", "POST"), + ("/_ts/admin/keys/rotate", "POST"), + ("/_ts/admin/keys/deactivate", "POST"), + ("/_ts/admin/ec", "GET"), + ("/_ts/admin/ec/{id}", "GET"), + ("/_ts/admin/eids", "GET"), + ("/auction", "POST"), + ("/first-party/proxy", "GET"), + ("/first-party/click", "GET"), + ("/first-party/sign", "GET"), + ("/first-party/sign", "POST"), + ("/first-party/proxy-rebuild", "GET"), + ("/first-party/proxy-rebuild", "POST"), + ] + .into_iter() + .map(|(path, method)| (path.to_owned(), method.to_owned())) + .collect::>(); + for path in [&page_bids_path, &page_bids_legacy_path] { + for method in ["GET", "OPTIONS"] { + expected.insert((path.clone(), method.to_owned())); + } + } + if routes.seen != expected { + return Err(invalid("Spin named route handler coverage differs")); + } + Ok(()) +} + +fn validate_spin_discovery_handler(build_router: &syn::ItemFn) -> Result<(), Report> { + let [Stmt::Expr(Expr::Block(active), None)] = build_router.block.stmts.as_slice() else { + return Err(invalid("Spin discovery handler lexical scope differs")); + }; + let handlers = active + .block + .stmts + .iter() + .filter_map(|statement| match statement { + Stmt::Local(local) + if matches!(&local.pat, Pat::Ident(binding) + if binding.ident == "discovery_handler" && binding.subpat.is_none()) => + { + local.init.as_ref().map(|init| &*init.expr) + } + _ => None, + }) + .collect::>(); + let [handler] = handlers.as_slice() else { + return Err(invalid("Spin discovery handler ownership differs")); + }; + let Expr::Closure(outer) = strip_parens(handler) else { + return Err(invalid("Spin discovery handler shape differs")); + }; + let Expr::Block(body) = strip_parens(&outer.body) else { + return Err(invalid("Spin discovery handler shape differs")); + }; + let [Stmt::Local(clone), Stmt::Expr(Expr::Async(future), None)] = body.block.stmts.as_slice() + else { + return Err(invalid("Spin discovery handler must have one live future")); + }; + let exact_clone = matches!(&clone.pat, Pat::Ident(binding) + if binding.ident == "s" && binding.subpat.is_none()) + && clone.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if exact_route_call_path(call, &["Arc", "clone"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "s"))) + }); + let [ + Stmt::Local(services), + Stmt::Local(request), + Stmt::Expr(Expr::Call(ok), None), + ] = future.block.stmts.as_slice() + else { + return Err(invalid( + "Spin discovery handler must have one terminal response", + )); + }; + let exact_services = matches!(&services.pat, Pat::Ident(binding) + if binding.ident == "services" && binding.subpat.is_none()) + && services.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::Call(call) + if call_named_route(call, "build_runtime_services") + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "ctx"))) + }); + let exact_request = matches!(&request.pat, Pat::Ident(binding) + if binding.ident == "req" && binding.subpat.is_none()) + && request.init.as_ref().is_some_and(|init| { + matches!(strip_parens(&init.expr), Expr::MethodCall(call) + if call.method == "into_request" && call.args.is_empty() + && is_ident(&call.receiver, "ctx")) + }); + let exact_response = call_named_route(ok, "Ok") + && ok.args.len() == 1 + && ok.args.first().is_some_and(|argument| { + matches!(strip_parens(argument), Expr::MethodCall(unwrap) + if unwrap.method == "unwrap_or_else" && unwrap.args.len() == 1 + && matches!(strip_parens(&unwrap.receiver), Expr::Call(call) + if call_named_route(call, "handle_trusted_server_discovery") + && call.args.len() == 3 + && call.args.first().is_some_and(|value| { + matches!(strip_parens(value), Expr::Reference(reference) + if reference.mutability.is_none() + && exact_field_receiver(&reference.expr, "s", "settings")) + }) + && call.args.iter().nth(1).is_some_and(|value| { + matches!(strip_parens(value), Expr::Reference(reference) + if reference.mutability.is_none() + && is_ident(&reference.expr, "services")) + }) + && call.args.iter().nth(2).is_some_and(|value| is_ident(value, "req")))) + }); + if !exact_clone || !exact_services || !exact_request || !exact_response { + return Err(invalid("Spin discovery handler call differs")); + } + Ok(()) +} + +fn validate_cloudflare_local_handlers(file: &syn::File) -> Result<(), Report> { + let build_router = exact_top_function(file, "build_router")?; + let optional = [ + ("discovery", "handle_trusted_server_discovery"), + ("verify", "handle_verify_signature"), + ( + "admin_not_supported_handler", + "admin_key_management_not_supported", + ), + ( + "admin_ec_not_supported_handler", + "admin_ec_lookup_not_supported", + ), + ("admin_eids_handler", "handle_admin_eids_lookup"), + ("auction", "handle_auction"), + ("page_bids_handler", "handle_page_bids"), + ("page_bids_options_handler", "page_bids_preflight_denied"), + ("fp_proxy_handler", "handle_first_party_proxy"), + ("fp_click_handler", "handle_first_party_click"), + ("fp_sign_handler", "handle_first_party_proxy_sign"), + ("fp_sign_post_handler", "handle_first_party_proxy_sign"), + ("fp_rebuild_handler", "handle_first_party_proxy_rebuild"), + ( + "fp_rebuild_post_handler", + "handle_first_party_proxy_rebuild", + ), + ]; + let registered = cloudflare_registered_handler_aliases(&build_router.block, &optional); + let optional = optional + .into_iter() + .filter(|(name, _)| registered.contains(*name)) + .collect::>(); + validate_local_handler_behaviors( + &build_router.block, + "Cloudflare", + &[ + ("page_bids", "handle_page_bids"), + ("page_bids_preflight", "page_bids_preflight_denied"), + ("legacy_admin_deny", "legacy_admin_alias_denied"), + ("fallback", "dispatch"), + ], + &optional, + ) +} + +fn cloudflare_registered_handler_aliases( + block: &Block, + candidates: &[(&str, &str)], +) -> BTreeSet { + struct Registrations<'a> { + candidates: &'a [(&'a str, &'a str)], + aliases: BTreeSet, + } + impl<'ast> Visit<'ast> for Registrations<'_> { + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + let index = match call.method.to_string().as_str() { + "get" | "post" if call.args.len() == 2 => Some(1), + "route" if call.args.len() == 3 => Some(2), + _ => None, + }; + if let Some(alias) = index + .and_then(|index| call.args.iter().nth(index)) + .and_then(terminal_handler_authority) + && self.candidates.iter().any(|(name, _)| *name == alias) + { + self.aliases.insert(alias); + } + visit::visit_expr_method_call(self, call); + } + } + let mut registrations = Registrations { + candidates, + aliases: BTreeSet::new(), + }; + registrations.visit_block(block); + registrations.aliases +} + +fn validate_cloudflare_discovery_handler(file: &syn::File) -> Result<(), Report> { + struct Discovery<'a>(Vec<&'a Expr>); + impl<'ast> Visit<'ast> for Discovery<'ast> { + fn visit_expr_method_call(&mut self, call: &'ast syn::ExprMethodCall) { + if call.method == "get" + && call.args.len() == 2 + && call.args.first().and_then(literal_string_value).as_deref() + == Some("/.well-known/trusted-server.json") + && let Some(handler) = call.args.iter().nth(1) + { + self.0.push(handler); + } + visit::visit_expr_method_call(self, call); + } + } + let build_router = exact_top_function(file, "build_router")?; + let mut discovery = Discovery(Vec::new()); + discovery.visit_block(&build_router.block); + let [handler] = discovery.0.as_slice() else { + return Err(invalid( + "Cloudflare discovery must have one live registration", + )); + }; + let Expr::Call(make) = strip_parens(handler) else { + return Err(invalid("Cloudflare discovery handler shape differs")); + }; + if !call_named_route(make, "make_handler") || make.args.len() != 2 { + return Err(invalid("Cloudflare discovery handler shape differs")); + } + let exact_state = make.args.first().is_some_and(|value| { + matches!(strip_parens(value), Expr::Call(clone) + if exact_route_call_path(clone, &["Arc", "clone"]) + && clone.args.len() == 1 + && matches!(clone.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() && is_ident(&reference.expr, "state"))) + }); + let exact_closure = make.args.iter().nth(1).is_some_and(|value| { + let Expr::Closure(closure) = strip_parens(value) else { + return false; + }; + let inputs = closure + .inputs + .iter() + .map(|pattern| match pattern { + Pat::Ident(binding) if binding.subpat.is_none() => Some(binding.ident.to_string()), + _ => None, + }) + .collect::>>(); + let Expr::Async(future) = strip_parens(&closure.body) else { + return false; + }; + let [Stmt::Expr(Expr::Call(call), None)] = future.block.stmts.as_slice() else { + return false; + }; + inputs.as_deref() == Some(&["s".to_owned(), "services".to_owned(), "req".to_owned()]) + && call_named_route(call, "handle_trusted_server_discovery") + && call.args.len() == 3 + && call.args.first().is_some_and(|argument| { + matches!(strip_parens(argument), Expr::Reference(reference) + if reference.mutability.is_none() + && exact_field_receiver(&reference.expr, "s", "settings")) + }) + && call.args.iter().nth(1).is_some_and(|argument| { + matches!(strip_parens(argument), Expr::Reference(reference) + if reference.mutability.is_none() && is_ident(&reference.expr, "services")) + }) + && call + .args + .iter() + .nth(2) + .is_some_and(|argument| is_ident(argument, "req")) + }); + if !exact_state || !exact_closure { + return Err(invalid("Cloudflare discovery handler call differs")); + } + Ok(()) +} + +fn exact_local_clone_target(expression: &Expr) -> Option { + let Expr::MethodCall(clone) = strip_parens(expression) else { + return None; + }; + (clone.method == "clone" && clone.args.is_empty()) + .then(|| match strip_parens(&clone.receiver) { + Expr::Path(path) => unqualified_path_name(path, false), + _ => None, + }) + .flatten() +} + +fn exact_portable_handler_expression(adapter: &str, behavior: &str, expression: &Expr) -> bool { + terminal_behavior_name(expression).as_deref() == Some(behavior) + && terminal_behavior_call(expression, behavior) + .is_some_and(|call| exact_portable_handler_call(adapter, behavior, call)) + && match adapter { + "Cloudflare" => exact_cloudflare_handler_wrapper(behavior, expression), + "Spin" => exact_spin_handler_wrapper(behavior, expression), + _ => false, + } +} + +fn exact_portable_handler_call(adapter: &str, behavior: &str, call: &syn::ExprCall) -> bool { + match behavior { + "handle_trusted_server_discovery" + | "handle_verify_signature" + | "handle_first_party_proxy" + | "handle_first_party_click" + | "handle_first_party_proxy_sign" + | "handle_first_party_proxy_rebuild" => { + call.args.len() == 3 + && exact_reference_field(call.args.first(), "s", "settings") + && exact_reference(call.args.iter().nth(1), "services") + && call + .args + .iter() + .nth(2) + .is_some_and(|argument| is_ident(argument, "req")) + } + "admin_key_management_not_supported" + | "admin_ec_lookup_not_supported" + | "page_bids_preflight_denied" + | "legacy_admin_alias_denied" => call.args.is_empty(), + "handle_admin_eids_lookup" => { + let registry = if adapter == "Cloudflare" { + "partner_registry" + } else { + "registry" + }; + call.args.len() == 2 + && exact_reference(call.args.first(), registry) + && exact_reference(call.args.iter().nth(1), "req") + } + "handle_auction" => { + call.args.len() == 7 + && exact_reference_field(call.args.first(), "s", "settings") + && exact_reference_field(call.args.iter().nth(1), "s", "orchestrator") + && call + .args + .iter() + .nth(2) + .is_some_and(|argument| exact_route_path(argument, &["None"])) + && call + .args + .iter() + .nth(3) + .is_some_and(|argument| exact_route_path(argument, &["None"])) + && exact_reference(call.args.iter().nth(4), "ec_context") + && exact_reference(call.args.iter().nth(5), "services") + && call + .args + .iter() + .nth(6) + .is_some_and(|argument| is_ident(argument, "req")) + } + "handle_page_bids" => { + call.args.len() == 6 + && exact_reference_field(call.args.first(), "s", "settings") + && exact_reference(call.args.iter().nth(1), "services") + && call + .args + .iter() + .nth(2) + .is_some_and(|argument| exact_route_path(argument, &["None"])) + && call + .args + .iter() + .nth(3) + .is_some_and(|argument| is_ident(argument, "auction")) + && exact_reference(call.args.iter().nth(4), "ec_context") + && call + .args + .iter() + .nth(5) + .is_some_and(|argument| is_ident(argument, "req")) + } + "dispatch" => { + call.args.len() == 2 + && call + .args + .first() + .is_some_and(|argument| is_ident(argument, "s")) + && call + .args + .iter() + .nth(1) + .is_some_and(|argument| is_ident(argument, "ctx")) + } + _ => false, + } +} + +fn exact_cloudflare_handler_wrapper(behavior: &str, expression: &Expr) -> bool { + if behavior == "dispatch" { + return true; + } + match strip_parens(expression) { + Expr::Call(make) => { + if !exact_route_call_path(make, &["make_handler"]) || make.args.len() != 2 { + return false; + } + let exact_state = matches!(make.args.first().map(strip_parens), Some(Expr::Call(clone)) + if exact_route_call_path(clone, &["Arc", "clone"]) + && clone.args.len() == 1 + && exact_reference(clone.args.first(), "state")); + let Some(Expr::Closure(handler)) = make.args.iter().nth(1).map(strip_parens) else { + return false; + }; + let expected_inputs: &[&str] = match behavior { + "handle_admin_eids_lookup" => &["s", "_services", "req"], + "page_bids_preflight_denied" | "legacy_admin_alias_denied" => { + &["_s", "_services", "_req"] + } + _ => &["s", "services", "req"], + }; + exact_state + && exact_untyped_closure_inputs(handler, expected_inputs) + && matches!(strip_parens(&handler.body), Expr::Async(_)) + } + Expr::Closure(handler) + if matches!( + behavior, + "admin_key_management_not_supported" | "admin_ec_lookup_not_supported" + ) => + { + exact_typed_closure_input(handler, "_ctx") + && matches!(strip_parens(&handler.body), Expr::Async(_)) + } + _ => false, + } +} + +fn exact_spin_handler_wrapper(behavior: &str, expression: &Expr) -> bool { + let Expr::Closure(handler) = strip_parens(expression) else { + return false; + }; + let input = if matches!( + behavior, + "admin_key_management_not_supported" + | "admin_ec_lookup_not_supported" + | "page_bids_preflight_denied" + | "legacy_admin_alias_denied" + ) { + "_ctx" + } else { + "ctx" + }; + if !exact_typed_closure_input(handler, input) { + return false; + } + if input == "_ctx" { + return matches!(strip_parens(&handler.body), Expr::Async(_)); + } + let Expr::Block(body) = strip_parens(&handler.body) else { + return false; + }; + matches!(body.block.stmts.as_slice(), [Stmt::Local(clone), Stmt::Expr(terminal, None)] + if exact_registered_clone_local(clone) + && if behavior == "dispatch" { + terminal_behavior_name(terminal).as_deref() == Some("dispatch") + } else { + matches!(terminal, Expr::Async(_)) + }) +} + +fn exact_untyped_closure_inputs(closure: &syn::ExprClosure, expected: &[&str]) -> bool { + closure.inputs.len() == expected.len() + && closure.inputs.iter().zip(expected).all(|(pattern, name)| { + matches!(pattern, Pat::Ident(binding) + if binding.ident == *name && binding.subpat.is_none()) + }) +} + +fn exact_typed_closure_input(closure: &syn::ExprClosure, expected: &str) -> bool { + matches!(closure.inputs.iter().collect::>().as_slice(), [Pat::Type(typed)] + if matches!(typed.pat.as_ref(), Pat::Ident(binding) + if binding.ident == expected && binding.subpat.is_none()) + && exact_route_path_type(&typed.ty, &["RequestContext"])) +} + +fn exact_route_path_type(ty: &syn::Type, expected: &[&str]) -> bool { + matches!(ty, syn::Type::Path(path) + if path.qself.is_none() + && path.path.leading_colon.is_none() + && path.path.segments.len() == expected.len() + && path.path.segments.iter().zip(expected).all(|(segment, name)| { + segment.ident == *name + && matches!(segment.arguments, syn::PathArguments::None) + })) +} + +fn exact_spin_admin_eids_handler(expression: &Expr) -> bool { + let Expr::Closure(handler) = strip_parens(expression) else { + return false; + }; + let Expr::Block(body) = strip_parens(&handler.body) else { + return false; + }; + let [Stmt::Local(clone), Stmt::Expr(Expr::Async(future), None)] = body.block.stmts.as_slice() + else { + return false; + }; + let [ + Stmt::Local(request), + Stmt::Local(result), + Stmt::Expr(Expr::Call(ok), None), + ] = future.block.stmts.as_slice() + else { + return false; + }; + exact_typed_closure_input(handler, "ctx") + && exact_registered_clone_local(clone) + && exact_registered_request_local(request, "handle_admin_eids_lookup") + && exact_spin_admin_eids_result(result) + && exact_result_http_error(ok) +} + +fn exact_spin_admin_eids_result(local: &syn::Local) -> bool { + let Some(init) = &local.init else { + return false; + }; + let Expr::MethodCall(and_then) = strip_parens(&init.expr) else { + return false; + }; + let exact_registry = matches!(strip_parens(&and_then.receiver), Expr::Call(call) + if exact_route_call_path(call, &["PartnerRegistry", "from_config"]) + && call.args.len() == 1 + && matches!(call.args.first().map(strip_parens), Some(Expr::Reference(reference)) + if reference.mutability.is_none() + && exact_field_chain(&reference.expr, "s", &["settings", "ec", "partners"]))); + let exact_handler = and_then.method == "and_then" + && and_then.args.len() == 1 + && matches!(and_then.args.first().map(strip_parens), Some(Expr::Closure(handler)) + if exact_untyped_closure_inputs(handler, &["registry"]) + && terminal_behavior_call(&handler.body, "handle_admin_eids_lookup") + .is_some_and(|call| exact_portable_handler_call( + "Spin", + "handle_admin_eids_lookup", + call, + ))); + exact_local_binding(local, "result", false) && exact_registry && exact_handler +} + +fn exact_result_http_error(ok: &syn::ExprCall) -> bool { + call_named_route(ok, "Ok") + && ok.args.len() == 1 + && matches!(ok.args.first().map(strip_parens), Some(Expr::MethodCall(unwrap)) + if unwrap.method == "unwrap_or_else" + && unwrap.args.len() == 1 + && is_ident(&unwrap.receiver, "result") + && matches!(unwrap.args.first().map(strip_parens), Some(Expr::Closure(error)) + if exact_untyped_closure_inputs(error, &["e"]) + && matches!(strip_parens(&error.body), Expr::Call(call) + if exact_route_call_path(call, &["http_error"]) + && call.args.len() == 1 + && exact_reference(call.args.first(), "e")))) +} + +fn validate_local_handler_behaviors( + block: &Block, + adapter: &str, + expected: &[(&str, &str)], + optional: &[(&str, &str)], +) -> Result<(), Report> { + struct Locals<'a> { + values: BTreeMap>, + } + impl<'ast> Visit<'ast> for Locals<'ast> { + fn visit_local(&mut self, local: &'ast syn::Local) { + if let Pat::Ident(binding) = &local.pat + && let Some(init) = &local.init + { + self.values + .entry(binding.ident.to_string()) + .or_default() + .push(&init.expr); + } + visit::visit_local(self, local); + } + } + fn exact_behavior( + adapter: &str, + name: &str, + behavior: &str, + locals: &BTreeMap>, + depth: usize, + ) -> bool { + if depth > 2 { + return false; + } + let Some(expressions) = locals.get(name) else { + return false; + }; + let [expression] = expressions.as_slice() else { + return false; + }; + if adapter == "Spin" + && behavior == "handle_admin_eids_lookup" + && exact_spin_admin_eids_handler(expression) + { + return true; + } + if terminal_behavior_name(expression).as_deref() == Some(behavior) { + return exact_portable_handler_expression(adapter, behavior, expression); + } + exact_local_clone_target(expression) + .is_some_and(|target| exact_behavior(adapter, &target, behavior, locals, depth + 1)) + } + let mut locals = Locals { + values: BTreeMap::new(), + }; + let audited_behaviors = expected + .iter() + .chain(optional) + .filter_map(|(_, behavior)| (*behavior != "dispatch").then_some(*behavior)) + .collect::>(); + if block_shadows_route_authority(block, &audited_behaviors) { + return Err(invalid(format!( + "{adapter} local handler authority is lexically shadowed" + ))); + } + locals.visit_block(block); + for (name, behavior) in expected { + if !exact_behavior(adapter, name, behavior, &locals.values, 0) { + return Err(invalid(format!( + "{adapter} local handler behavior differs for {name}" + ))); + } + } + for (name, behavior) in optional { + if locals.values.contains_key(*name) + && !exact_behavior(adapter, name, behavior, &locals.values, 0) + { + return Err(invalid(format!( + "{adapter} local handler behavior differs for {name}" + ))); + } + } + Ok(()) +} + +fn spin_expected_handler( + path: &str, + method: &str, + page_bids_path: &str, + page_bids_legacy_path: &str, +) -> Option<&'static [&'static str]> { + if path == page_bids_path || path == page_bids_legacy_path { + return match method { + "GET" => Some(&["page_bids_handler"]), + "OPTIONS" => Some(&["page_bids_options_handler"]), + _ => None, + }; + } + match (path, method) { + ("/.well-known/trusted-server.json", "GET") => Some(&["discovery_handler"]), + ("/verify-signature", "POST") => Some(&["verify_handler"]), + ("/_ts/admin/keys/rotate" | "/_ts/admin/keys/deactivate", "POST") => { + Some(&["admin_not_supported_handler"]) + } + ("/_ts/admin/ec" | "/_ts/admin/ec/{id}", "GET") => { + Some(&["admin_ec_not_supported_handler"]) + } + ("/_ts/admin/eids", "GET") => Some(&["admin_eids_handler"]), + ("/auction", "POST") => Some(&["auction_handler"]), + ("/first-party/proxy", "GET") => Some(&["fp_proxy_handler"]), + ("/first-party/click", "GET") => Some(&["fp_click_handler"]), + ("/first-party/sign", "GET") => Some(&["fp_sign_handler"]), + ("/first-party/sign", "POST") => Some(&["fp_sign_post_handler"]), + ("/first-party/proxy-rebuild", "GET") => Some(&["fp_rebuild_handler"]), + ("/first-party/proxy-rebuild", "POST") => Some(&["fp_rebuild_post_handler"]), + _ => None, + } +} + +fn expression_references_ident(expression: &Expr, name: &str) -> bool { + struct IdentFinder<'a> { + name: &'a str, + found: bool, + } + + impl<'ast> Visit<'ast> for IdentFinder<'_> { + fn visit_ident(&mut self, ident: &'ast syn::Ident) { + self.found |= ident == self.name; + if !self.found { + visit::visit_ident(self, ident); + } + } + } + + let mut finder = IdentFinder { name, found: false }; + finder.visit_expr(expression); + finder.found +} + +fn cloudflare_semantics(path: &str, method: &str) -> (&'static str, RouteStatus) { + if path == "/" || path == "/{*rest}" { + ("publisher_fallback", RouteStatus::PublisherFallback) + } else if path == "/admin/keys/rotate" + || path == "/admin/keys/deactivate" + || ((path == "/_ts/page-bids" || path == "/__ts/page-bids") && method == "OPTIONS") + { + ("always", RouteStatus::Guarded) + } else if path.starts_with("/_ts/admin/keys/") || path.starts_with("/_ts/admin/ec") { + ("always", RouteStatus::Unsupported) + } else { + ("always", RouteStatus::Real) + } +} + +#[derive(Clone, Copy)] +enum RouteConstantOwnership { + Production, + Test, + Invalid, +} + +struct RouteStringConstants { + definitions: BTreeMap>, + authoritative: BTreeMap, +} + +impl RouteStringConstants { + fn with_authoritative(mut self, authoritative: &BTreeMap) -> Self { + self.authoritative.clone_from(authoritative); + self + } + + fn resolve(&self, name: &str) -> Result> { + let Some(definitions) = self.definitions.get(name) else { + return self + .authoritative + .get(name) + .cloned() + .ok_or_else(|| invalid(format!("unknown named route path: {name}"))); + }; + if definitions + .iter() + .any(|(ownership, _)| matches!(ownership, RouteConstantOwnership::Invalid)) + { + return Err(invalid(format!( + "unsupported conditional route constant: {name}" + ))); + } + let production = definitions + .iter() + .filter_map(|(ownership, value)| { + matches!(ownership, RouteConstantOwnership::Production).then_some(value) + }) + .collect::>(); + let [value] = production.as_slice() else { + return Err(invalid(format!( + "route constant must have exactly one production definition: {name}" + ))); + }; + Ok((*value).clone()) + } +} + +fn string_constants(items: &[Item]) -> RouteStringConstants { + let mut definitions = BTreeMap::>::new(); + for item in items { + let Item::Const(item) = item else { continue }; + if let Expr::Lit(literal) = &*item.expr + && let Lit::Str(value) = &literal.lit + { + let mut cfg_test = false; + let mut invalid_cfg = false; + for attribute in &item.attrs { + if attribute.path().is_ident("cfg_attr") { + invalid_cfg = true; + } else if attribute.path().is_ident("cfg") { + let exact_test = matches!(&attribute.meta, syn::Meta::List(list) + if list.tokens.to_string() == "test"); + if exact_test && !cfg_test { + cfg_test = true; + } else { + invalid_cfg = true; + } + } + } + let ownership = if invalid_cfg { + RouteConstantOwnership::Invalid + } else if cfg_test { + RouteConstantOwnership::Test + } else { + RouteConstantOwnership::Production + }; + definitions + .entry(item.ident.to_string()) + .or_default() + .push((ownership, value.value())); + } + } + RouteStringConstants { + definitions, + authoritative: BTreeMap::new(), + } +} + +fn publisher_route_constants(source: &str) -> Result, Report> { + let file = parse_route_source("core publisher", source)?; + let constants = string_constants(&file.items); + ["PAGE_BIDS_PATH", "PAGE_BIDS_LEGACY_PATH"] + .into_iter() + .map(|name| { + constants + .resolve(name) + .map(|value| (name.to_owned(), value)) + }) + .collect() +} + +fn method_list_functions( + items: &[Item], +) -> Result>, Report> { + let mut lists = BTreeMap::new(); + for item in items { + let Item::Fn(function) = item else { continue }; + let Some(Stmt::Expr(Expr::Array(array), _)) = function.block.stmts.last() else { + continue; + }; + let mut methods = Vec::new(); + let mut all_methods = true; + for expression in &array.elems { + let Expr::Path(path) = expression else { + all_methods = false; + break; + }; + let segments = path.path.segments.iter().collect::>(); + if segments.len() != 2 || segments[0].ident != "Method" { + all_methods = false; + break; + } + methods.push(segments[1].ident.to_string()); + } + if all_methods { + let name = function.sig.ident.to_string(); + if !route_item_is_production(&function.attrs, &format!("method function `{name}`"))? { + continue; + } + if lists.insert(name.clone(), methods).is_some() { + return Err(invalid(format!("duplicate method function: {name}"))); + } + } + } + Ok(lists) +} + +fn is_ident(expression: &Expr, expected: &str) -> bool { + matches!(expression, Expr::Path(path) if path.path.is_ident(expected)) +} + +fn compact_expr(expression: &Expr) -> String { + match expression { + Expr::Path(path) => path + .path + .segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::>() + .join("::"), + _ => "expression".to_owned(), + } +} + +fn invalid(detail: impl Into) -> Report { + Report::new(RouteError::Invalid { + detail: detail.into(), + }) +} + +fn ensure_route_input_bound(label: &str, source: &str) -> Result<(), Report> { + if source.len() > MAX_ROUTE_INPUT_BYTES { + Err(invalid(format!("{label} exceeds the 4 MiB input limit"))) + } else { + Ok(()) + } +} + +fn unique_route_values( + values: Vec, + axis: &'static str, +) -> Result, Report> { + if values.len() > MAX_ROUTE_ENTRIES { + return Err(invalid(format!("route {axis} cardinality limit exceeded"))); + } + if values + .iter() + .any(|value| value.len() > MAX_ROUTE_STRING_BYTES) + { + return Err(invalid(format!( + "route {axis} contains an oversized string" + ))); + } + let count = values.len(); + let unique = values.into_iter().collect::>(); + if unique.len() != count { + Err(invalid(format!("duplicate route {axis}"))) + } else { + Ok(unique) + } +} diff --git a/tools/docs-parity/src/scanner.rs b/tools/docs-parity/src/scanner.rs new file mode 100644 index 000000000..14037cb7d --- /dev/null +++ b/tools/docs-parity/src/scanner.rs @@ -0,0 +1,2687 @@ +//! Sensitive-data detection over every classified tracked file. + +use std::collections::{BTreeMap, BTreeSet}; +use std::path::Path; +use std::sync::OnceLock; +use std::time::{SystemTime, UNIX_EPOCH}; + +use error_stack::{Report, ResultExt as _}; +use regex::Regex; +use serde::{Deserialize, Serialize}; +use serde_json::Value as JsonValue; +use sha2::{Digest as _, Sha256}; +use toml_edit::{ + Document as TomlDocument, Item as TomlItem, Table as TomlTable, Value as TomlValue, +}; + +use crate::classification::{self, FileKind}; +use crate::model::{Expiry, Owner, Rationale}; +use crate::repository::{NormalizedRelativePath, Repository}; + +const ALLOWLIST_MANIFEST: &str = "tools/docs-parity/manifests/sensitive-allowlist.toml"; +const RETIRED_MANIFEST: &str = "tools/docs-parity/manifests/retired-identifiers.toml"; +const TRACKED_MANIFEST: &str = "tools/docs-parity/manifests/tracked-files.toml"; +const MAINTAINED_MANIFEST: &str = "tools/docs-parity/manifests/maintained-sources.toml"; +const MANIFEST_VERSION: u32 = 1; +const SERVICE_PATH: &str = "fastly.toml"; +const SERVICE_OWNER: &str = "aram356"; +const SERVICE_EXPIRY: &str = "2026-09-30T00:00:00Z"; +const HISTORICAL_CNAME_FINGERPRINT: &str = + "sha256:c5c88b1c0fd72489bc2352a680544204f898392cfe43655f761e8e21ae26bddf"; +const HISTORICAL_EMAIL_FINGERPRINT: &str = + "sha256:60a0c7d895777dbb3206205a932557134c63283c4f73dce19e5b1fc2e225bb2a"; +const QUERY_FIXTURE_EMAIL_FINGERPRINT: &str = + "sha256:360d72075fa5baa70019e10f18af70ffb5a94e7de3b19162f29938993a389478"; +const HISTORICAL_BINARY_PATH: &str = "docs/public/images/hero-graphic.jpeg"; + +/// Failure while scanning classified repository content. +#[derive(Debug, derive_more::Display)] +pub enum ScannerError { + /// Required scanner governance cannot be read or parsed. + #[display("cannot read scanner governance")] + Governance, + /// The classification universe is incomplete. + #[display("cannot scan an unclassified repository")] + Classification, + /// An exception or retired-identifier record is invalid. + #[display("invalid scanner governance")] + InvalidGovernance, + /// A finding has no exact, active reviewed disposition. + #[display("sensitive-data scan found an undispositioned value")] + Finding, + /// Candidate records cannot be updated safely. + #[display("cannot bootstrap scanner candidates")] + Bootstrap, +} + +impl core::error::Error for ScannerError {} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct AllowlistManifest { + version: u32, + reviewed: bool, + #[serde(default)] + exceptions: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct ExceptionRecord { + class: ExceptionClass, + path: String, + detector: Detector, + scope: String, + selector: String, + fingerprint: String, + owner: String, + rationale: String, + expires_at: String, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "snake_case")] +enum ExceptionClass { + VendorUrl, + HashPinnedFakeCredentialFixture, + SettingsSchemaIdentifier, + HistoricalExample, + ServiceId, + ProjectOwnedPublicDomain, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "snake_case")] +enum Detector { + Domain, + Email, + CredentialShape, + ServiceId, + EncodedToken, + BinaryString, + LockfileField, + MediaMetadata, + RetiredIdentifier, +} + +impl Detector { + const fn label(self) -> &'static str { + match self { + Self::Domain => "domain", + Self::Email => "email", + Self::CredentialShape => "credential_shape", + Self::ServiceId => "service_id", + Self::EncodedToken => "encoded_token", + Self::BinaryString => "binary_string", + Self::LockfileField => "lockfile_field", + Self::MediaMetadata => "media_metadata", + Self::RetiredIdentifier => "retired_identifier", + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct RetiredManifest { + version: u32, + reviewed: bool, + #[serde(default)] + identifiers: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(deny_unknown_fields)] +struct RetiredIdentifier { + kind: RetiredKind, + fingerprint: String, + normalized_length: usize, + word_count: usize, + case_insensitive: bool, + whitespace_tolerant: bool, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +enum RetiredKind { + Identifier, + AccessPhrase, +} + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +struct Finding { + path: String, + detector: Detector, + selector: String, + matched: String, +} + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +struct ExceptionKey { + path: String, + detector: Detector, + selector: String, + fingerprint: String, +} + +struct RetiredToken { + text: String, + start: usize, + end: usize, +} + +struct ScanState { + findings: Vec, + allowlist: AllowlistManifest, +} + +struct SourceLexicalContext { + literal_or_comment: Vec, +} + +struct DomainContext { + tracked_paths: BTreeSet, + source_members: BTreeMap, +} + +struct TomlLockScanner<'a> { + path: &'a str, + text: &'a str, + findings: Vec, +} + +#[derive(Clone, Copy, Eq, PartialEq)] +enum TomlStringKind { + Basic, + Literal, + MultilineBasic, + MultilineLiteral, +} + +/// Scan every tracked file and require exact active dispositions for findings. +/// +/// This covers the named mechanical detector classes. Human semantic +/// sensitivity outside those classes still requires reviewed disposition; the +/// scanner does not claim detector completeness for prose meaning. +/// +/// # Errors +/// +/// Returns an error for incomplete classification, invalid governance, +/// expired or stale exceptions, and unallowlisted findings. +pub(crate) fn check(repository: &Repository) -> Result<(), Report> { + let state = scan_repository(repository)?; + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .change_context(ScannerError::InvalidGovernance)?; + validate_findings(&state.findings, &state.allowlist, now.as_secs()) +} + +/// Replace the allowlist with deterministic, deliberately unreviewed candidates. +/// +/// # Errors +/// +/// Returns an error when classification, scanning, rendering, or atomic +/// replacement fails. +pub(crate) fn bootstrap(repository: &Repository) -> Result<(), Report> { + let state = scan_repository(repository)?; + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .change_context(ScannerError::InvalidGovernance)?; + let mut previous = BTreeMap::new(); + if state.allowlist.reviewed { + for record in state.allowlist.exceptions { + let key = validate_exception(&record, now.as_secs())?; + if previous.insert(key, record).is_some() { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("duplicate sensitive-data exception")); + } + } + } + + let mut changed = !state.allowlist.reviewed; + let mut exceptions = Vec::with_capacity(state.findings.len()); + for finding in state.findings { + let key = finding_key(&finding); + if let Some(record) = previous.remove(&key) { + exceptions.push(record); + } else { + changed = true; + exceptions.push(candidate_exception(finding)); + } + } + changed |= !previous.is_empty(); + if !changed { + return Ok(()); + } + write_manifest( + repository, + ALLOWLIST_MANIFEST, + &AllowlistManifest { + version: MANIFEST_VERSION, + reviewed: false, + exceptions, + }, + ) +} + +fn scan_repository(repository: &Repository) -> Result> { + let classified = + classification::checked_files(repository).change_context(ScannerError::Classification)?; + let domain_context = DomainContext::build(repository, &classified)?; + for path in [TRACKED_MANIFEST, MAINTAINED_MANIFEST] { + let text = read_manifest_text(repository, path)?; + reject_toml_comments(path, &text)?; + } + let (allowlist, allowlist_text): (AllowlistManifest, String) = + read_manifest_document(repository, ALLOWLIST_MANIFEST)?; + reject_toml_comments(ALLOWLIST_MANIFEST, &allowlist_text)?; + let (retired, retired_text): (RetiredManifest, String) = + read_manifest_document(repository, RETIRED_MANIFEST)?; + reject_toml_comments(RETIRED_MANIFEST, &retired_text)?; + validate_retired_manifest(&retired)?; + validate_governance_free_text(&allowlist, &retired.identifiers)?; + let mut result = BTreeSet::new(); + for file in classified { + let normalized = NormalizedRelativePath::new(Path::new(&file.path)) + .change_context(ScannerError::Classification)?; + let contents = repository + .read_tracked(&normalized) + .change_context(ScannerError::Classification)?; + match file.kind { + FileKind::Text => { + let text = + core::str::from_utf8(&contents).change_context(ScannerError::Classification)?; + if is_lockfile(&file.path) { + let structured = scan_lockfile(&file.path, text)?; + result.extend( + scan_text(&file.path, text, 0, &domain_context) + .into_iter() + .filter(|finding| { + finding.detector != Detector::Domain + || !structured.iter().any(|structural| { + structural.detector == Detector::LockfileField + && selector_contains( + &structural.selector, + &finding.selector, + ) + }) + }), + ); + result.extend(structured); + } else if !is_governance_manifest(&file.path) { + result.extend(scan_text(&file.path, text, 0, &domain_context)); + } + } + FileKind::Binary => { + let media_findings = scan_media_metadata(&file.path, &contents, &domain_context)?; + let media_matches = media_findings + .iter() + .map(|finding| (finding.selector.as_str(), finding.matched.as_str())) + .collect::>(); + result.extend( + scan_binary(&file.path, &contents, &domain_context) + .into_iter() + .filter(|finding| { + !media_matches + .contains(&(finding.selector.as_str(), finding.matched.as_str())) + }), + ); + result.extend(media_findings); + } + } + if !is_governance_manifest(&file.path) { + result.extend(scan_retired(&file.path, &contents, &retired.identifiers)?); + } + } + Ok(ScanState { + findings: result.into_iter().collect(), + allowlist, + }) +} + +fn is_governance_manifest(path: &str) -> bool { + matches!( + path, + ALLOWLIST_MANIFEST | RETIRED_MANIFEST | TRACKED_MANIFEST | MAINTAINED_MANIFEST + ) +} + +fn scan_text( + path: &str, + text: &str, + base_offset: usize, + domain_context: &DomainContext, +) -> Vec { + let mut result = Vec::new(); + let lexical_context = SourceLexicalContext::for_path(path, text); + let url_authority_spans = url_regex() + .find_iter(text) + .filter_map(|matched| { + extracted_host_span(matched.as_str()) + .map(|(_host, start, end)| (matched.start() + start, matched.start() + end)) + }) + .collect::>(); + for matched in url_regex().find_iter(text) { + let value = trim_url(matched.as_str()); + let Some((host, host_start, host_end)) = extracted_host_span(value) else { + continue; + }; + if !valid_public_host(&host.to_ascii_lowercase()) && !fictional_or_local_url(value) { + continue; + } + if !fictional_or_local_url(value) { + result.push(finding( + path, + Detector::Domain, + host, + base_offset + matched.start() + host_start, + base_offset + matched.start() + host_end, + )); + } + let Some(component_start) = value.find(['?', '#']) else { + continue; + }; + let component = &value[component_start..]; + for nested in domain_host_regex().find_iter(component) { + let raw_host = nested.as_str(); + let start = matched.start() + component_start + nested.start(); + let end = start + raw_host.len(); + if valid_public_host(&raw_host.to_ascii_lowercase()) + && !fictional_or_local_url(raw_host) + && bare_domain_context_allowed( + path, + text, + start, + end, + domain_context, + lexical_context.as_ref(), + ) + && bare_domain_has_terminator(text, end) + { + result.push(finding( + path, + Detector::Domain, + raw_host, + base_offset + start, + base_offset + end, + )); + } + } + for nested in email_regex().find_iter(component) { + if !fictional_email(nested.as_str()) && !at_sign_filename(nested.as_str()) { + let start = matched.start() + component_start + nested.start(); + result.push(finding( + path, + Detector::Email, + nested.as_str(), + base_offset + start, + base_offset + matched.start() + component_start + nested.end(), + )); + } + } + } + for matched in bare_domain_regex().find_iter(text) { + if matched.start() > 0 && text.as_bytes()[matched.start() - 1] == b'@' { + continue; + } + if overlaps_url_authority(&url_authority_spans, matched.start(), matched.end()) { + continue; + } + if !bare_domain_context_allowed( + path, + text, + matched.start(), + matched.end(), + domain_context, + lexical_context.as_ref(), + ) { + continue; + } + if !bare_domain_has_terminator(text, matched.end()) { + continue; + } + let value = trim_url(matched.as_str()); + let raw_host = value.split('/').next().unwrap_or(value); + let host = raw_host.to_ascii_lowercase(); + if !valid_public_host(&host) { + continue; + } + if !fictional_or_local_url(value) { + result.push(finding( + path, + Detector::Domain, + raw_host, + base_offset + matched.start(), + base_offset + matched.start() + host.len(), + )); + } + } + for matched in email_regex().find_iter(text) { + if !overlaps_url_authority(&url_authority_spans, matched.start(), matched.end()) + && !fictional_email(matched.as_str()) + && !at_sign_filename(matched.as_str()) + { + result.push(finding( + path, + Detector::Email, + matched.as_str(), + base_offset + matched.start(), + base_offset + matched.end(), + )); + } + } + for captures in service_regex().captures_iter(text) { + if let Some(value) = captures.get(1) { + result.push(finding( + path, + Detector::ServiceId, + value.as_str(), + base_offset + value.start(), + base_offset + value.end(), + )); + } + } + for captures in credential_regex().captures_iter(text) { + if let Some(value) = captures + .get(1) + .or_else(|| captures.get(2)) + .or_else(|| captures.get(3)) + { + let is_quoted = captures.get(1).is_some() || captures.get(2).is_some(); + if lexical_context + .as_ref() + .is_some_and(|context| !context.allows(value.start())) + || lexical_context.is_some() + && !is_quoted + && credential_source_expression( + text, + captures + .get(0) + .expect("credential match should exist") + .start(), + value.as_str(), + ) + { + continue; + } + if !fictional_credential(value.as_str()) { + result.push(finding( + path, + Detector::CredentialShape, + value.as_str(), + base_offset + value.start(), + base_offset + value.end(), + )); + } + } + } + for captures in encoded_token_regex().captures_iter(text) { + if let Some(value) = captures.get(1) { + result.push(finding( + path, + Detector::EncodedToken, + value.as_str(), + base_offset + value.start(), + base_offset + value.end(), + )); + } + } + result +} + +fn at_sign_filename(value: &str) -> bool { + value.rsplit_once('@').is_some_and(|(_name, suffix)| { + let lower = suffix.to_ascii_lowercase(); + [".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg"] + .iter() + .any(|extension| { + lower.strip_suffix(extension).is_some_and(|scale| { + scale.strip_suffix('x').is_some_and(|digits| { + !digits.is_empty() && digits.bytes().all(|b| b.is_ascii_digit()) + }) + }) + }) + }) +} + +fn credential_source_expression(text: &str, match_start: usize, value: &str) -> bool { + if value.contains('.') || value.contains("::") { + return true; + } + let line_start = text[..match_start].rfind('\n').map_or(0, |index| index + 1); + let prefix = &text[line_start..match_start]; + let trimmed = prefix.trim_end(); + trimmed.ends_with('.') + || trimmed.ends_with(']') + || trimmed.ends_with('"') + || trimmed.ends_with('\'') + || trimmed.ends_with('`') + || prefix + .split_whitespace() + .any(|token| matches!(token, "let" | "const" | "var" | "static" | "final")) +} + +fn valid_public_host(host: &str) -> bool { + host.ends_with(".internal") + || psl::suffix(host.as_bytes()).is_some_and(|suffix| suffix.typ().is_some()) + && psl::domain_str(host).is_some() +} + +fn extracted_host_span(value: &str) -> Option<(&str, usize, usize)> { + let scheme_end = value.find("://")? + 3; + let authority_end = value[scheme_end..] + .find(['/', '?', '#']) + .map_or(value.len(), |n| scheme_end + n); + let authority = &value[scheme_end..authority_end]; + let user_end = authority.rfind('@').map_or(0, |n| n + 1); + let host_port = &authority[user_end..]; + let host_len = host_port.find(':').unwrap_or(host_port.len()); + let start = scheme_end + user_end; + let end = start + host_len; + (start < end).then(|| (&value[start..end], start, end)) +} + +fn bare_domain_context_allowed( + path: &str, + text: &str, + start: usize, + end: usize, + domain_context: &DomainContext, + lexical_context: Option<&SourceLexicalContext>, +) -> bool { + if repository_path_token(path, text, start, end, &domain_context.tracked_paths) { + return false; + } + if lexical_context.is_some() && member_occurrence_context(text, start, end) { + return false; + } + let candidate = text[start..end].to_ascii_lowercase(); + if path.ends_with(".json") && json_string_is_object_key(text, start) { + return false; + } + if path.ends_with(".toml") && toml_key_occurrence(text, start, end) { + return false; + } + let documented_source_member = domain_context.source_members.get(&candidate).is_some_and( + |(code_count, semantic, markdown_count, markdown_semantic)| { + *semantic || *code_count >= 2 || *markdown_count >= 2 && *markdown_semantic + }, + ); + if path.ends_with(".md") + && documented_source_member + && (markdown_code_offset(text, start) || explicit_member_syntax(text, start, end)) + { + return false; + } + lexical_context.is_none_or(|context| context.allows(start)) +} + +fn toml_key_occurrence(text: &str, start: usize, end: usize) -> bool { + let line_start = text[..start].rfind('\n').map_or(0, |index| index + 1); + let line_end = text[end..] + .find('\n') + .map_or(text.len(), |index| end + index); + let before = text[line_start..start] + .trim_start() + .strip_prefix('#') + .map_or_else(|| text[line_start..start].trim_start(), str::trim_start); + let after = text[end..line_end].trim_start(); + (before.starts_with('[') && after.starts_with(']')) + || !before.contains('=') && after.starts_with('=') +} + +fn json_string_is_object_key(text: &str, offset: usize) -> bool { + let bytes = text.as_bytes(); + let Some(open) = text[..offset].rfind('"') else { + return false; + }; + if text[open + 1..offset].contains('"') { + return false; + } + let Some(close) = quoted_end_simple(bytes, open) else { + return false; + }; + close >= offset + && bytes[close + 1..] + .iter() + .find(|byte| !byte.is_ascii_whitespace()) + == Some(&b':') +} + +fn quoted_end_simple(bytes: &[u8], start: usize) -> Option { + let mut escaped = false; + for (index, byte) in bytes.iter().enumerate().skip(start + 1) { + if escaped { + escaped = false; + } else if *byte == b'\\' { + escaped = true; + } else if *byte == b'"' { + return Some(index); + } + } + None +} + +fn markdown_code_offset(text: &str, offset: usize) -> bool { + let prefix = &text[..offset]; + if prefix.match_indices("```").count() % 2 == 1 || prefix.match_indices("~~~").count() % 2 == 1 + { + return true; + } + let line = prefix.rsplit_once('\n').map_or(prefix, |(_, line)| line); + line.starts_with(" ") || line.bytes().filter(|byte| *byte == b'`').count() % 2 == 1 +} + +fn repository_path_token( + current_path: &str, + text: &str, + start: usize, + end: usize, + tracked_paths: &BTreeSet, +) -> bool { + let bytes = text.as_bytes(); + let mut token_start = start; + while token_start > 0 && path_token_byte(bytes[token_start - 1]) { + token_start -= 1; + } + let mut token_end = end; + while token_end < bytes.len() && path_token_byte(bytes[token_end]) { + token_end += 1; + } + let token = text[token_start..token_end] + .trim_end_matches('.') + .trim_start_matches('/'); + if token.is_empty() || token.contains("//") { + return false; + } + if token.split('.').count() == 2 + && [".rs", ".sh", ".md", ".toml", ".js", ".mjs", ".ts"] + .iter() + .any(|extension| token.ends_with(extension)) + && (current_path.ends_with(".md") + && (markdown_code_offset(text, start) + || text[text[..start].rfind('\n').map_or(0, |index| index + 1)..start] + .contains('|')) + || matches!( + bytes.get(token_start.wrapping_sub(1)), + Some(b'"' | b'\'' | b'`') + ) && matches!(bytes.get(token_end), Some(b'"' | b'\'' | b'`'))) + { + return true; + } + if token.contains('/') + && [".rs", ".sh", ".md", ".toml", ".js", ".mjs", ".ts"] + .iter() + .any(|extension| token.ends_with(extension)) + { + return true; + } + + if tracked_paths.iter().any(|candidate| { + candidate == token + || candidate + .strip_suffix(token) + .is_some_and(|prefix| prefix.ends_with('/')) + }) { + return true; + } + if let Some((root, _remainder)) = token.split_once('/') + && tracked_paths + .iter() + .any(|candidate| candidate.starts_with(&format!("{root}/"))) + { + return true; + } + let root_candidate = normalize_repository_path("", token); + if root_candidate + .as_ref() + .is_some_and(|candidate| tracked_paths.contains(candidate)) + { + return true; + } + let parent = current_path + .rsplit_once('/') + .map_or("", |(parent, _name)| parent); + normalize_repository_path(parent, token) + .as_ref() + .is_some_and(|candidate| tracked_paths.contains(candidate)) + || !token.contains('/') + && tracked_paths.iter().any(|candidate| { + Path::new(candidate) + .file_name() + .and_then(|name| name.to_str()) + == Some(token) + }) +} + +fn path_token_byte(byte: u8) -> bool { + byte.is_ascii_alphanumeric() || matches!(byte, b'.' | b'_' | b'-' | b'/') +} + +fn normalize_repository_path(base: &str, token: &str) -> Option { + let mut components = base + .split('/') + .filter(|component| !component.is_empty()) + .map(str::to_owned) + .collect::>(); + for component in token.split('/') { + match component { + "" | "." => {} + ".." => { + components.pop()?; + } + component => components.push(component.to_owned()), + } + } + (!components.is_empty()).then(|| components.join("/")) +} + +impl SourceLexicalContext { + fn for_path(path: &str, text: &str) -> Option { + match Path::new(path) + .extension() + .and_then(|extension| extension.to_str()) + { + Some("rs") => Some(Self { + literal_or_comment: rust_literal_and_comment_bytes(text), + }), + Some("js" | "jsx" | "ts" | "tsx" | "mjs" | "mts") => Some(Self { + literal_or_comment: javascript_literal_and_comment_bytes(text), + }), + _ => None, + } + } + + fn allows(&self, offset: usize) -> bool { + self.literal_or_comment + .get(offset) + .copied() + .unwrap_or(false) + } +} + +impl DomainContext { + fn empty() -> Self { + Self { + tracked_paths: BTreeSet::new(), + source_members: BTreeMap::new(), + } + } + + fn build( + repository: &Repository, + classified: &[classification::ClassifiedFile], + ) -> Result> { + let tracked_paths = classified + .iter() + .map(|file| file.path.clone()) + .collect::>(); + let mut source_members = BTreeMap::new(); + for file in classified.iter().filter(|file| { + matches!( + Path::new(&file.path) + .extension() + .and_then(|value| value.to_str()), + Some("rs" | "js" | "mjs" | "ts" | "tsx" | "jsx") + ) + }) { + let normalized = NormalizedRelativePath::new(Path::new(&file.path)) + .change_context(ScannerError::Classification)?; + let contents = repository + .read_tracked(&normalized) + .change_context(ScannerError::Classification)?; + let Ok(text) = core::str::from_utf8(&contents) else { + continue; + }; + let Some(context) = SourceLexicalContext::for_path(&file.path, text) else { + continue; + }; + for matched in domain_host_regex().find_iter(text) { + let entry = source_members + .entry(matched.as_str().to_ascii_lowercase()) + .or_insert((0, false, 0, false)); + if context.allows(matched.start()) { + entry.1 |= member_occurrence_context(text, matched.start(), matched.end()); + } else { + entry.0 += 1; + } + } + } + for file in classified.iter().filter(|file| file.path.ends_with(".md")) { + let normalized = NormalizedRelativePath::new(Path::new(&file.path)) + .change_context(ScannerError::Classification)?; + let contents = repository + .read_tracked(&normalized) + .change_context(ScannerError::Classification)?; + let Ok(text) = core::str::from_utf8(&contents) else { + continue; + }; + for matched in domain_host_regex().find_iter(text) { + let entry = source_members + .entry(matched.as_str().to_ascii_lowercase()) + .or_insert((0, false, 0, false)); + entry.2 += 1; + entry.3 |= explicit_member_syntax(text, matched.start(), matched.end()); + } + } + Ok(Self { + tracked_paths, + source_members, + }) + } +} + +fn member_occurrence_context(text: &str, start: usize, end: usize) -> bool { + let before = &text[..start]; + let after = &text[end..]; + let line_start = before.rfind('\n').map_or(0, |index| index + 1); + let line_end = text[end..] + .find('\n') + .map_or(text.len(), |index| end + index); + let line = text[line_start..line_end].to_ascii_lowercase(); + let documented_in_code = (matches!(before.as_bytes().last(), Some(b'`' | b'"' | b'\'')) + || matches!(after.as_bytes().first(), Some(b'`' | b'"' | b'\''))) + && [ + " value", + " field", + "matcher", + " preserv", + " propagat", + " omit", + " canonical", + " upstream", + " forward", + " adapter", + "includes ", + ] + .iter() + .any(|marker| line.contains(marker)); + let test_description_member = line.contains("it('") && line.contains(" from "); + before.ends_with('.') + || after.starts_with('.') + || before.ends_with("[[") + || after.starts_with("]]") + || after.starts_with(':') + || after.trim_start().starts_with('=') + || documented_in_code + || test_description_member + || [" should", " must", " is", " are"] + .iter() + .any(|word| after.starts_with(word)) + || text[start..end] + .bytes() + .next() + .is_some_and(|byte| byte.is_ascii_uppercase()) +} + +fn explicit_member_syntax(text: &str, start: usize, end: usize) -> bool { + let before = &text[..start]; + let after = &text[end..]; + before.ends_with('.') + || after.starts_with('.') + || before.ends_with("[[") + || after.starts_with("]]") + || after.trim_start().starts_with('=') + || text[start..end] + .bytes() + .next() + .is_some_and(|byte| byte.is_ascii_uppercase()) +} + +fn mark_bytes(marked: &mut [bool], start: usize, end: usize) { + for byte in &mut marked[start..end] { + *byte = true; + } +} + +fn rust_literal_and_comment_bytes(text: &str) -> Vec { + let bytes = text.as_bytes(); + let mut marked = vec![false; bytes.len()]; + let mut index = 0; + while index < bytes.len() { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"//" { + let end = bytes[index..] + .iter() + .position(|byte| *byte == b'\n') + .map_or(bytes.len(), |length| index + length); + mark_bytes(&mut marked, index, end); + index = end; + continue; + } + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"/*" { + let mut depth = 1usize; + let mut end = index + 2; + while end < bytes.len() && depth > 0 { + if end + 1 < bytes.len() && &bytes[end..end + 2] == b"/*" { + depth += 1; + end += 2; + } else if end + 1 < bytes.len() && &bytes[end..end + 2] == b"*/" { + depth -= 1; + end += 2; + } else { + end += 1; + } + } + mark_bytes(&mut marked, index, end); + index = end; + continue; + } + if let Some((content_start, hashes)) = rust_raw_string_start(bytes, index) { + let terminator = format!("\"{}", "#".repeat(hashes)); + let end = text[content_start..] + .find(&terminator) + .map_or(bytes.len(), |length| { + content_start + length + terminator.len() + }); + mark_bytes(&mut marked, index, end); + index = end; + continue; + } + if bytes[index] == b'"' { + let end = quoted_literal_end(bytes, index, b'"'); + mark_bytes(&mut marked, index, end); + index = end; + continue; + } + if bytes[index] == b'\'' + && let Some(end) = rust_character_end(bytes, index) + { + index = end; + continue; + } + index += 1; + } + marked +} + +fn rust_raw_string_start(bytes: &[u8], start: usize) -> Option<(usize, usize)> { + let mut index = start; + if bytes.get(index) == Some(&b'b') { + index += 1; + } + if bytes.get(index) != Some(&b'r') { + return None; + } + index += 1; + let hash_start = index; + while bytes.get(index) == Some(&b'#') { + index += 1; + } + (bytes.get(index) == Some(&b'"')).then_some((index + 1, index - hash_start)) +} + +fn quoted_literal_end(bytes: &[u8], start: usize, delimiter: u8) -> usize { + let mut index = start + 1; + let mut escaped = false; + while index < bytes.len() { + if escaped { + escaped = false; + } else if bytes[index] == b'\\' { + escaped = true; + } else if bytes[index] == delimiter { + return index + 1; + } + index += 1; + } + bytes.len() +} + +fn rust_character_end(bytes: &[u8], start: usize) -> Option { + let mut index = start + 1; + let mut escaped = false; + while index < bytes.len() && bytes[index] != b'\n' { + if escaped { + escaped = false; + } else if bytes[index] == b'\\' { + escaped = true; + } else if bytes[index] == b'\'' { + return Some(index + 1); + } + index += 1; + } + None +} + +#[derive(Clone, Copy, Eq, PartialEq)] +enum JavascriptLexicalMode { + Code, + SingleQuoted, + DoubleQuoted, + Template, + LineComment, + BlockComment, + RegularExpression, +} + +fn javascript_literal_and_comment_bytes(text: &str) -> Vec { + let bytes = text.as_bytes(); + let mut marked = vec![false; bytes.len()]; + let mut mode = JavascriptLexicalMode::Code; + let mut escaped = false; + let mut regex_character_class = false; + let mut interpolation_depths = Vec::new(); + let mut index = 0; + let mut previous_code_byte = None; + while index < bytes.len() { + let byte = bytes[index]; + match mode { + JavascriptLexicalMode::Code => { + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"//" { + mode = JavascriptLexicalMode::LineComment; + mark_bytes(&mut marked, index, index + 2); + index += 2; + } else if index + 1 < bytes.len() && &bytes[index..index + 2] == b"/*" { + mode = JavascriptLexicalMode::BlockComment; + mark_bytes(&mut marked, index, index + 2); + index += 2; + } else if matches!(byte, b'\'' | b'"') { + mode = if byte == b'\'' { + JavascriptLexicalMode::SingleQuoted + } else { + JavascriptLexicalMode::DoubleQuoted + }; + marked[index] = true; + index += 1; + } else if byte == b'`' { + mode = JavascriptLexicalMode::Template; + marked[index] = true; + index += 1; + } else if byte == b'/' + && javascript_regex_can_start(text, index, previous_code_byte) + { + mode = JavascriptLexicalMode::RegularExpression; + marked[index] = true; + index += 1; + } else { + if let Some(depth) = interpolation_depths.last_mut() { + if byte == b'{' { + *depth += 1; + } else if byte == b'}' { + *depth -= 1; + if *depth == 0 { + interpolation_depths.pop(); + mode = JavascriptLexicalMode::Template; + marked[index] = true; + index += 1; + continue; + } + } + } + if !byte.is_ascii_whitespace() { + previous_code_byte = Some(byte); + } + index += 1; + } + } + JavascriptLexicalMode::SingleQuoted | JavascriptLexicalMode::DoubleQuoted => { + marked[index] = true; + if escaped { + escaped = false; + } else if byte == b'\\' { + escaped = true; + } else if (mode == JavascriptLexicalMode::SingleQuoted && byte == b'\'') + || (mode == JavascriptLexicalMode::DoubleQuoted && byte == b'"') + { + mode = JavascriptLexicalMode::Code; + } + index += 1; + } + JavascriptLexicalMode::Template => { + marked[index] = true; + if escaped { + escaped = false; + index += 1; + } else if byte == b'\\' { + escaped = true; + index += 1; + } else if index + 1 < bytes.len() && &bytes[index..index + 2] == b"${" { + marked[index + 1] = true; + interpolation_depths.push(1); + mode = JavascriptLexicalMode::Code; + previous_code_byte = Some(b'{'); + index += 2; + } else if byte == b'`' { + mode = JavascriptLexicalMode::Code; + previous_code_byte = Some(b'`'); + index += 1; + } else { + index += 1; + } + } + JavascriptLexicalMode::LineComment => { + if byte == b'\n' { + mode = JavascriptLexicalMode::Code; + } else { + marked[index] = true; + } + index += 1; + } + JavascriptLexicalMode::BlockComment => { + marked[index] = true; + if index + 1 < bytes.len() && &bytes[index..index + 2] == b"*/" { + marked[index + 1] = true; + mode = JavascriptLexicalMode::Code; + index += 2; + } else { + index += 1; + } + } + JavascriptLexicalMode::RegularExpression => { + marked[index] = true; + if escaped { + escaped = false; + } else if byte == b'\\' { + escaped = true; + } else if byte == b'[' { + regex_character_class = true; + } else if byte == b']' { + regex_character_class = false; + } else if byte == b'/' && !regex_character_class { + mode = JavascriptLexicalMode::Code; + previous_code_byte = Some(b'/'); + } + index += 1; + } + } + } + marked +} + +fn javascript_regex_can_start(text: &str, slash: usize, previous: Option) -> bool { + previous.is_none_or(|byte| b"=(:,![{;?+-*%&|^~<>".contains(&byte)) + || javascript_preceding_keyword(text, slash).is_some_and(|keyword| { + matches!( + keyword, + "return" + | "throw" + | "case" + | "delete" + | "void" + | "typeof" + | "yield" + | "await" + | "new" + | "in" + | "of" + | "instanceof" + ) + }) +} + +fn javascript_preceding_keyword(text: &str, offset: usize) -> Option<&str> { + let prefix = text.get(..offset)?.trim_end(); + let start = prefix + .rfind(|character: char| !(character.is_ascii_alphanumeric() || character == '_')) + .map_or(0, |index| index + 1); + prefix.get(start..) +} + +fn bare_domain_has_terminator(text: &str, end: usize) -> bool { + let remainder = &text[end..]; + let Some(next) = remainder.chars().next() else { + return true; + }; + if next.is_whitespace() + || matches!( + next, + ':' | '/' | '?' | '#' | ',' | ';' | ')' | ']' | '}' | '>' | '"' | '\'' | '`' + ) + { + return true; + } + next == '.' + && remainder[1..] + .chars() + .next() + .is_none_or(|after| after.is_whitespace() || ",;)]}>\"'`".contains(after)) +} + +fn overlaps_url_authority(spans: &[(usize, usize)], start: usize, end: usize) -> bool { + spans + .iter() + .any(|(authority_start, authority_end)| start < *authority_end && end > *authority_start) +} + +fn scan_binary(path: &str, contents: &[u8], domain_context: &DomainContext) -> Vec { + printable_strings(contents) + .into_iter() + .flat_map(|(offset, text)| scan_text(path, &text, offset, domain_context)) + .map(|finding| match finding.detector { + Detector::ServiceId => finding, + _ => Finding { + detector: Detector::BinaryString, + ..finding + }, + }) + .collect() +} + +fn scan_media_metadata( + path: &str, + contents: &[u8], + domain_context: &DomainContext, +) -> Result, Report> { + let metadata = if path.ends_with(".png") { + png_metadata(contents)? + } else if path.ends_with(".jpg") || path.ends_with(".jpeg") { + jpeg_metadata(contents) + } else { + Vec::new() + }; + Ok(metadata + .into_iter() + .flat_map(|(offset, text)| scan_text(path, &text, offset, domain_context)) + .map(|finding| match finding.detector { + Detector::ServiceId => finding, + _ => Finding { + detector: Detector::MediaMetadata, + ..finding + }, + }) + .collect()) +} + +fn scan_lockfile(path: &str, text: &str) -> Result, Report> { + if path.ends_with("Cargo.lock") { + let document = TomlDocument::parse(text) + .change_context(ScannerError::Finding) + .attach(format!("cannot parse structured lockfile: {path}"))?; + TomlLockScanner::new(path, text).scan(&document) + } else if path.ends_with("package-lock.json") { + let _value: JsonValue = serde_json::from_str(text) + .change_context(ScannerError::Finding) + .attach(format!("cannot parse structured lockfile: {path}"))?; + scan_json_lock_fields(path, text) + } else { + Ok(Vec::new()) + } +} + +impl<'a> TomlLockScanner<'a> { + fn new(path: &'a str, text: &'a str) -> Self { + Self { + path, + text, + findings: Vec::new(), + } + } + + fn scan(mut self, document: &TomlDocument<&str>) -> Result, Report> { + self.scan_table(document.as_table())?; + Ok(self.findings) + } + + fn scan_table(&mut self, table: &TomlTable) -> Result<(), Report> { + for (key, item) in table.iter() { + self.scan_item(key, item)?; + } + Ok(()) + } + + fn scan_item(&mut self, key: &str, item: &TomlItem) -> Result<(), Report> { + if lock_field(Some(key)) { + let value = item.as_value().ok_or_else(|| self.unsupported_shape(key))?; + return self.scan_lock_value(key, value); + } + match item { + TomlItem::None => Ok(()), + TomlItem::Value(value) => self.scan_nested_value(value), + TomlItem::Table(table) => self.scan_table(table), + TomlItem::ArrayOfTables(tables) => { + for table in tables.iter() { + self.scan_table(table)?; + } + Ok(()) + } + } + } + + fn scan_nested_value(&mut self, value: &TomlValue) -> Result<(), Report> { + match value { + TomlValue::Array(values) => { + for value in values.iter() { + self.scan_nested_value(value)?; + } + Ok(()) + } + TomlValue::InlineTable(table) => { + for (key, value) in table.iter() { + if lock_field(Some(key)) { + self.scan_lock_value(key, value)?; + } else { + self.scan_nested_value(value)?; + } + } + Ok(()) + } + _ => Ok(()), + } + } + + fn scan_lock_value( + &mut self, + key: &str, + value: &TomlValue, + ) -> Result<(), Report> { + let decoded = value.as_str().ok_or_else(|| self.unsupported_shape(key))?; + if !sensitive_lock_value(decoded) { + return Ok(()); + } + let span = value.span().ok_or_else(|| { + Report::new(ScannerError::Finding).attach(format!( + "unmappable structured lockfile field: {}:{key}", + self.path + )) + })?; + let raw_span = toml_string_content_span(self.text, span).ok_or_else(|| { + Report::new(ScannerError::Finding).attach(format!( + "unmappable structured lockfile string: {}:{key}", + self.path + )) + })?; + let raw = self.text.get(raw_span.clone()).ok_or_else(|| { + Report::new(ScannerError::Finding).attach(format!( + "out-of-bounds structured lockfile string: {}:{key}", + self.path + )) + })?; + self.findings.push(finding( + self.path, + Detector::LockfileField, + raw, + raw_span.start, + raw_span.end, + )); + Ok(()) + } + + fn unsupported_shape(&self, key: &str) -> Report { + Report::new(ScannerError::Finding).attach(format!( + "unsupported structured lockfile field shape: {}:{key}", + self.path + )) + } +} + +fn toml_string_content_span( + text: &str, + span: std::ops::Range, +) -> Option> { + let token = text.get(span.clone())?; + let delimiter_length = if token.starts_with("\"\"\"") && token.ends_with("\"\"\"") + || token.starts_with("'''") && token.ends_with("'''") + { + 3 + } else if token.starts_with('"') && token.ends_with('"') + || token.starts_with('\'') && token.ends_with('\'') + { + 1 + } else { + return None; + }; + (token.len() >= delimiter_length * 2) + .then_some(span.start + delimiter_length..span.end - delimiter_length) +} + +fn scan_json_lock_fields(path: &str, text: &str) -> Result, Report> { + scan_json_lock_fields_counted(path, text).map(|(findings, _steps)| findings) +} + +fn scan_json_lock_fields_counted( + path: &str, + text: &str, +) -> Result<(Vec, usize), Report> { + let bytes = text.as_bytes(); + let mut findings = Vec::new(); + let mut objects = Vec::<(usize, u8)>::new(); + let mut i = 0; + let mut steps = 0; + while i < bytes.len() { + steps += 1; + if bytes[i] == b'{' { + objects.push((i, 0)); + i += 1; + continue; + } + if bytes[i] == b'}' { + objects.pop().ok_or_else(|| { + Report::new(ScannerError::Finding) + .attach(format!("unbalanced JSON lockfile object: {path}")) + })?; + i += 1; + continue; + } + if bytes[i] != b'"' { + i += 1; + continue; + } + let Some(end) = quoted_end_counted(bytes, i, &mut steps) else { + return Err(Report::new(ScannerError::Finding) + .attach(format!("unterminated JSON lockfile string: {path}"))); + }; + let raw = &text[i..=end]; + steps += raw.len(); + let value: String = serde_json::from_str(raw).change_context(ScannerError::Finding)?; + let mut cursor = end + 1; + while cursor < bytes.len() && bytes[cursor].is_ascii_whitespace() { + steps += 1; + cursor += 1; + } + if cursor < bytes.len() && bytes[cursor] == b':' && lock_field(Some(&value)) { + let (_object_start, seen) = objects.last_mut().ok_or_else(|| { + Report::new(ScannerError::Finding).attach(format!( + "structured lockfile field outside object: {path}:{value}" + )) + })?; + let bit = lock_field_bit(&value).expect("known lock field should have a bit"); + if *seen & bit != 0 { + return Err(Report::new(ScannerError::Finding).attach(format!( + "duplicate structured lockfile field: {path}:{value}" + ))); + } + *seen |= bit; + cursor += 1; + while cursor < bytes.len() && bytes[cursor].is_ascii_whitespace() { + steps += 1; + cursor += 1; + } + if cursor >= bytes.len() || bytes[cursor] != b'"' { + return Err(Report::new(ScannerError::Finding).attach(format!( + "unsupported structured lockfile field shape: {path}:{value}" + ))); + } + let value_end = quoted_end_counted(bytes, cursor, &mut steps).ok_or_else(|| { + Report::new(ScannerError::Finding) + .attach(format!("unterminated JSON lockfile string: {path}")) + })?; + let raw = &text[cursor + 1..value_end]; + steps += value_end + 1 - cursor; + let decoded: String = serde_json::from_str(&text[cursor..=value_end]) + .change_context(ScannerError::Finding)?; + if sensitive_lock_value(&decoded) { + findings.push(finding( + path, + Detector::LockfileField, + raw, + cursor + 1, + value_end, + )); + } + i = value_end + 1; + } else { + i = end + 1; + } + } + if !objects.is_empty() { + return Err(Report::new(ScannerError::Finding) + .attach(format!("unbalanced JSON lockfile object: {path}"))); + } + Ok((findings, steps)) +} + +fn quoted_end_counted(bytes: &[u8], start: usize, steps: &mut usize) -> Option { + let mut escaped = false; + for (index, byte) in bytes.iter().enumerate().skip(start + 1) { + *steps += 1; + if escaped { + escaped = false; + continue; + } + if *byte == b'\\' { + escaped = true; + continue; + } + if *byte == b'"' { + return Some(index); + } + } + None +} + +fn lock_field(key: Option<&str>) -> bool { + matches!(key, Some("resolved" | "registry" | "source" | "url")) +} + +fn lock_field_bit(key: &str) -> Option { + match key { + "resolved" => Some(1), + "registry" => Some(2), + "source" => Some(4), + "url" => Some(8), + _ => None, + } +} + +fn sensitive_lock_value(value: &str) -> bool { + if value.starts_with("registry+https://github.com/rust-lang/crates.io-index") + || value.starts_with("https://registry.npmjs.org/") + { + return false; + } + value.starts_with("http://") + || value.starts_with("https://") + || value.starts_with("registry+") + || value.starts_with("git+") +} + +fn scan_retired( + path: &str, + contents: &[u8], + identifiers: &[RetiredIdentifier], +) -> Result, Report> { + let tokens = retired_tokens(contents); + let mut result = Vec::new(); + for record in identifiers { + for window in tokens.windows(record.word_count) { + let candidate = window + .iter() + .map(|token| token.text.as_str()) + .collect::>() + .join(" "); + let normalized = candidate.to_ascii_lowercase(); + if normalized.len() == record.normalized_length + && fingerprint(normalized.as_bytes()) == record.fingerprint + { + result.push(finding( + path, + Detector::RetiredIdentifier, + &candidate, + window.first().expect("window should not be empty").start, + window.last().expect("window should not be empty").end, + )); + } + } + } + Ok(result) +} + +fn retired_tokens(contents: &[u8]) -> Vec { + let mut tokens = Vec::new(); + let mut offset = 0; + while offset < contents.len() { + match core::str::from_utf8(&contents[offset..]) { + Ok(text) => { + tokens.extend(retired_tokens_in_text(text, offset)); + break; + } + Err(error) => { + let valid_end = offset + error.valid_up_to(); + if valid_end > offset { + let text = core::str::from_utf8(&contents[offset..valid_end]) + .expect("validated UTF-8 prefix should decode"); + tokens.extend(retired_tokens_in_text(text, offset)); + } + let Some(error_length) = error.error_len() else { + break; + }; + offset = valid_end + error_length; + } + } + } + tokens +} + +fn retired_tokens_in_text(text: &str, base_offset: usize) -> Vec { + non_whitespace_regex() + .find_iter(text) + .filter_map(|matched| { + let raw = matched.as_str(); + let token = raw.trim_matches(|character: char| { + matches!( + character, + '.' | ',' + | ';' + | ':' + | '!' + | '?' + | '(' + | ')' + | '[' + | ']' + | '{' + | '}' + | '<' + | '>' + | '"' + | '\'' + | '`' + | '*' + | '~' + | '|' + ) + }); + if token.is_empty() { + return None; + } + let leading = raw + .find(token) + .expect("trimmed token should be a substring"); + Some(RetiredToken { + text: token.to_owned(), + start: base_offset + matched.start() + leading, + end: base_offset + matched.start() + leading + token.len(), + }) + }) + .collect() +} + +fn validate_findings( + findings: &[Finding], + allowlist: &AllowlistManifest, + now_seconds: u64, +) -> Result<(), Report> { + if allowlist.version != MANIFEST_VERSION { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("sensitive allowlist version must be 1")); + } + if !allowlist.reviewed { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("sensitive-data candidates require review")); + } + let mut exceptions = BTreeMap::new(); + for record in &allowlist.exceptions { + let key = validate_exception(record, now_seconds)?; + if exceptions.insert(key, (record, false)).is_some() { + return Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "duplicate sensitive-data exception: {}", + record.path + ))); + } + } + for finding in findings { + let key = ExceptionKey { + path: finding.path.clone(), + detector: finding.detector, + selector: finding.selector.clone(), + fingerprint: fingerprint(finding.matched.as_bytes()), + }; + if let Some((record, used)) = exceptions.get_mut(&key) { + validate_class_semantics(record, finding)?; + *used = true; + } else { + return Err(Report::new(ScannerError::Finding).attach(format!( + "sensitive finding [{}] in {} (fingerprint {})", + finding.detector.label(), + finding.path, + key.fingerprint + ))); + } + } + if let Some((key, _record)) = exceptions.iter().find(|(_key, (_record, used))| !*used) { + return Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "stale sensitive-data exception: {} [{}] {}", + key.path, + key.detector.label(), + key.fingerprint + ))); + } + Ok(()) +} + +fn validate_exception( + record: &ExceptionRecord, + now_seconds: u64, +) -> Result> { + NormalizedRelativePath::new(Path::new(&record.path)) + .change_context(ScannerError::InvalidGovernance) + .attach("exception path must be an exact normalized path")?; + if record.scope != "exact-occurrence" { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("exception scope must be exact-occurrence")); + } + validate_selector(&record.selector)?; + validate_fingerprint(&record.fingerprint)?; + Owner::new(record.owner.clone()).change_context(ScannerError::InvalidGovernance)?; + Rationale::new(record.rationale.clone()).change_context(ScannerError::InvalidGovernance)?; + Expiry::parse(record.expires_at.clone()).change_context(ScannerError::InvalidGovernance)?; + let expiry_seconds = timestamp_seconds(&record.expires_at).ok_or_else(|| { + Report::new(ScannerError::InvalidGovernance) + .attach(format!("invalid exception expiry: {}", record.expires_at)) + })?; + if now_seconds >= expiry_seconds { + return Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "expired sensitive-data exception: {} at {}", + record.path, record.expires_at + ))); + } + validate_class_pair(record)?; + if record.class == ExceptionClass::ServiceId { + if record.path != SERVICE_PATH { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("service-ID exception path must be exactly fastly.toml")); + } + if record.owner != SERVICE_OWNER { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("service-ID exception owner must be aram356")); + } + if record.expires_at != SERVICE_EXPIRY { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("service-ID exception expiry must be 2026-09-30T00:00:00Z")); + } + } + Ok(ExceptionKey { + path: record.path.clone(), + detector: record.detector, + selector: record.selector.clone(), + fingerprint: record.fingerprint.clone(), + }) +} + +fn validate_class_pair(record: &ExceptionRecord) -> Result<(), Report> { + let valid = match record.class { + ExceptionClass::VendorUrl => { + matches!( + record.detector, + Detector::Domain + | Detector::LockfileField + | Detector::BinaryString + | Detector::MediaMetadata + ) + } + ExceptionClass::HashPinnedFakeCredentialFixture => matches!( + record.detector, + Detector::CredentialShape + | Detector::EncodedToken + | Detector::BinaryString + | Detector::MediaMetadata + ), + ExceptionClass::SettingsSchemaIdentifier => record.detector == Detector::CredentialShape, + ExceptionClass::HistoricalExample => matches!( + record.detector, + Detector::Domain + | Detector::BinaryString + | Detector::Email + | Detector::MediaMetadata + | Detector::RetiredIdentifier + ), + ExceptionClass::ProjectOwnedPublicDomain => record.detector == Detector::Domain, + ExceptionClass::ServiceId => record.detector == Detector::ServiceId, + }; + if valid { + Ok(()) + } else { + Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "exception class is incompatible with detector: {:?}/{}", + record.class, + record.detector.label() + ))) + } +} + +fn validate_class_semantics( + record: &ExceptionRecord, + finding: &Finding, +) -> Result<(), Report> { + let valid = match record.class { + ExceptionClass::VendorUrl => { + finding.detector == Detector::LockfileField + || matches!( + finding.detector, + Detector::Domain | Detector::BinaryString | Detector::MediaMetadata + ) && valid_public_host(&finding.matched.to_ascii_lowercase()) + && !project_owned_host(&finding.matched) + && fingerprint(finding.matched.to_ascii_lowercase().as_bytes()) + != HISTORICAL_CNAME_FINGERPRINT + } + ExceptionClass::HashPinnedFakeCredentialFixture => { + fake_credential_evidence(&finding.path, &finding.matched) + } + ExceptionClass::SettingsSchemaIdentifier => { + finding.path == "tools/docs-parity/manifests/settings-companions.toml" + && matches!( + finding.matched.as_str(), + "store_resolved" | "deliberately_inline" | "accepted_discarded" + ) + } + ExceptionClass::HistoricalExample => historical_example_evidence(record, finding), + ExceptionClass::ProjectOwnedPublicDomain => project_owned_host(&finding.matched), + ExceptionClass::ServiceId => true, + }; + if valid { + Ok(()) + } else { + Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "exception class lacks provable finding semantics: {:?}/{} in {}", + record.class, + finding.detector.label(), + finding.path + ))) + } +} + +fn fake_credential_evidence(path: &str, value: &str) -> bool { + let lower = value.to_ascii_lowercase(); + let tokens = lower + .split(|character: char| !character.is_ascii_alphanumeric()) + .filter(|token| !token.is_empty()) + .collect::>(); + let production_looking = tokens + .iter() + .any(|token| matches!(*token, "production" | "prod" | "live")); + let exact_size_marker = tokens + .windows(3) + .any(|triplet| triplet == ["password", "32", "bytes"]); + let exact_marker = tokens.iter().any(|token| { + matches!( + *token, + "fake" | "test" | "example" | "fixture" | "integration" | "unit" | "placeholder" + ) + }) || tokens.windows(2).any(|pair| pair == ["change", "me"]) + || exact_size_marker; + let exact_placeholder = matches!( + lower.as_str(), + "admin-password" + | "admin_password" + | "handler_password" + | "secure_handler_password" + | "api_handler_password" + | "secret_value" + | "" + | "" + | "{}/{credential_scope}" + | "store.get(\"ts-2025-10-a\")?" + ); + let published_example = lower == "akiaiosfodnn7example/20130524/us-east-1/s3/aws4_request"; + (!production_looking || exact_size_marker) + && (categorized_fixture_path(path) + || path.ends_with(".example.toml") + || exact_marker + || exact_placeholder + || published_example) +} + +fn categorized_fixture_path(path: &str) -> bool { + path.starts_with("tests/") + || path.contains("/tests/") + || path.starts_with("fixtures/") + || path.contains("/fixtures/") +} + +fn historical_example_evidence(record: &ExceptionRecord, finding: &Finding) -> bool { + match finding.detector { + Detector::Domain => { + record.fingerprint == HISTORICAL_CNAME_FINGERPRINT + && matches!( + (record.path.as_str(), record.selector.as_str()), + ( + "docs/internal/audits/documentation-refresh-decisions.md", + "bytes:5027-5049" + ) | ( + "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md", + "bytes:3892-3914" + ) + ) + } + Detector::BinaryString => record.path == HISTORICAL_BINARY_PATH, + Detector::Email => { + categorized_fixture_path(&record.path) + && (record.path != "tools/docs-parity/tests/scanner.rs" + || matches!( + record.fingerprint.as_str(), + HISTORICAL_EMAIL_FINGERPRINT | QUERY_FIXTURE_EMAIL_FINGERPRINT + )) + } + Detector::MediaMetadata => { + record.path == HISTORICAL_BINARY_PATH || categorized_fixture_path(&record.path) + } + Detector::RetiredIdentifier => true, + Detector::CredentialShape + | Detector::ServiceId + | Detector::EncodedToken + | Detector::LockfileField => false, + } +} + +fn validate_retired_manifest(manifest: &RetiredManifest) -> Result<(), Report> { + if manifest.version != MANIFEST_VERSION { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("retired-identifiers manifest version must be 1")); + } + if !manifest.reviewed { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("retired-identifier candidates require review")); + } + let mut values = BTreeSet::new(); + for record in &manifest.identifiers { + validate_fingerprint(&record.fingerprint)?; + if record.normalized_length == 0 || record.word_count == 0 { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("retired identifier shape must not be empty")); + } + if !record.case_insensitive || record.whitespace_tolerant != (record.word_count > 1) { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("retired identifier normalization metadata is inconsistent")); + } + match record.kind { + RetiredKind::Identifier if record.word_count != 1 || record.whitespace_tolerant => { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("identifier denylist record must contain exactly one token")); + } + RetiredKind::AccessPhrase if record.word_count <= 1 || !record.whitespace_tolerant => { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach("access-phrase denylist record must contain multiple words")); + } + RetiredKind::Identifier | RetiredKind::AccessPhrase => {} + } + if !values.insert(record.fingerprint.clone()) { + return Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "duplicate retired identifier fingerprint: {}", + record.fingerprint + ))); + } + } + Ok(()) +} + +fn validate_governance_free_text( + allowlist: &AllowlistManifest, + retired: &[RetiredIdentifier], +) -> Result<(), Report> { + for record in &allowlist.exceptions { + for (field, value) in [("owner", &record.owner), ("rationale", &record.rationale)] { + if !scan_text(ALLOWLIST_MANIFEST, value, 0, &DomainContext::empty()).is_empty() + || !scan_retired(ALLOWLIST_MANIFEST, value.as_bytes(), retired)?.is_empty() + { + return Err(Report::new(ScannerError::InvalidGovernance).attach(format!( + "sensitive value in governance free-text: {ALLOWLIST_MANIFEST}:{field}" + ))); + } + } + } + Ok(()) +} + +fn read_manifest_document( + repository: &Repository, + path: &str, +) -> Result<(T, String), Report> +where + T: for<'de> Deserialize<'de>, +{ + let text = read_manifest_text(repository, path)?; + let manifest = toml::from_str(&text).change_context(ScannerError::Governance)?; + Ok((manifest, text)) +} + +fn read_manifest_text(repository: &Repository, path: &str) -> Result> { + let normalized = + NormalizedRelativePath::new(Path::new(path)).change_context(ScannerError::Governance)?; + let contents = repository + .read_optional(&normalized) + .change_context(ScannerError::Governance)? + .ok_or_else(|| { + Report::new(ScannerError::Governance).attach(format!("missing manifest: {path}")) + })?; + let text = core::str::from_utf8(&contents).change_context(ScannerError::Governance)?; + Ok(text.to_owned()) +} + +fn reject_toml_comments(path: &str, text: &str) -> Result<(), Report> { + let bytes = text.as_bytes(); + let mut string_kind = None; + let mut index = 0; + while index < bytes.len() { + match string_kind { + None if bytes[index] == b'#' => { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach(format!("governance manifest must be comment-free: {path}"))); + } + None if bytes[index..].starts_with(b"\"\"\"") => { + string_kind = Some(TomlStringKind::MultilineBasic); + index += 3; + } + None if bytes[index..].starts_with(b"'''") => { + string_kind = Some(TomlStringKind::MultilineLiteral); + index += 3; + } + None if bytes[index] == b'\"' => { + string_kind = Some(TomlStringKind::Basic); + index += 1; + } + None if bytes[index] == b'\'' => { + string_kind = Some(TomlStringKind::Literal); + index += 1; + } + Some(TomlStringKind::Basic) if bytes[index] == b'\\' => { + index = (index + 2).min(bytes.len()); + } + Some(TomlStringKind::Basic) if bytes[index] == b'\"' => { + string_kind = None; + index += 1; + } + Some(TomlStringKind::Literal) if bytes[index] == b'\'' => { + string_kind = None; + index += 1; + } + Some(TomlStringKind::MultilineBasic) if bytes[index] == b'\\' => { + index = (index + 2).min(bytes.len()); + } + Some(TomlStringKind::MultilineBasic) if bytes[index..].starts_with(b"\"\"\"") => { + string_kind = None; + index += 3; + } + Some(TomlStringKind::MultilineLiteral) if bytes[index..].starts_with(b"'''") => { + string_kind = None; + index += 3; + } + None + | Some(TomlStringKind::Basic) + | Some(TomlStringKind::Literal) + | Some(TomlStringKind::MultilineBasic) + | Some(TomlStringKind::MultilineLiteral) => index += 1, + } + } + Ok(()) +} + +fn write_manifest( + repository: &Repository, + path: &str, + manifest: &T, +) -> Result<(), Report> +where + T: Serialize, +{ + let mut contents = toml::to_string_pretty(manifest) + .change_context(ScannerError::Bootstrap)? + .into_bytes(); + if !contents.ends_with(b"\n") { + contents.push(b'\n'); + } + let normalized = + NormalizedRelativePath::new(Path::new(path)).change_context(ScannerError::Bootstrap)?; + let original = repository + .read_optional(&normalized) + .change_context(ScannerError::Bootstrap)?; + repository + .replace_atomically_after_precommit_validation(&normalized, original.as_deref(), &contents) + .change_context(ScannerError::Bootstrap) +} + +fn candidate_class(finding: &Finding) -> ExceptionClass { + if finding.detector == Detector::CredentialShape + && finding.path == "tools/docs-parity/manifests/settings-companions.toml" + && matches!( + finding.matched.as_str(), + "store_resolved" | "deliberately_inline" | "accepted_discarded" + ) + { + return ExceptionClass::SettingsSchemaIdentifier; + } + if fingerprint(finding.matched.to_ascii_lowercase().as_bytes()) == HISTORICAL_CNAME_FINGERPRINT + { + return ExceptionClass::HistoricalExample; + } + if finding.detector == Detector::BinaryString && finding.path == HISTORICAL_BINARY_PATH { + return ExceptionClass::HistoricalExample; + } + if finding.detector == Detector::Domain && project_owned_host(&finding.matched) { + return ExceptionClass::ProjectOwnedPublicDomain; + } + match finding.detector { + Detector::Domain | Detector::LockfileField => ExceptionClass::VendorUrl, + Detector::BinaryString | Detector::MediaMetadata + if valid_public_host(&finding.matched.to_ascii_lowercase()) => + { + ExceptionClass::VendorUrl + } + Detector::CredentialShape | Detector::EncodedToken => { + ExceptionClass::HashPinnedFakeCredentialFixture + } + Detector::ServiceId => ExceptionClass::ServiceId, + Detector::Email + | Detector::BinaryString + | Detector::MediaMetadata + | Detector::RetiredIdentifier => ExceptionClass::HistoricalExample, + } +} + +fn candidate_exception(finding: Finding) -> ExceptionRecord { + let class = candidate_class(&finding); + ExceptionRecord { + class, + path: finding.path, + detector: finding.detector, + scope: "exact-occurrence".to_owned(), + selector: finding.selector, + fingerprint: fingerprint(finding.matched.as_bytes()), + owner: SERVICE_OWNER.to_owned(), + rationale: candidate_rationale(class, finding.detector).to_owned(), + expires_at: candidate_expiry(class, finding.detector).to_owned(), + } +} + +fn finding_key(finding: &Finding) -> ExceptionKey { + ExceptionKey { + path: finding.path.clone(), + detector: finding.detector, + selector: finding.selector.clone(), + fingerprint: fingerprint(finding.matched.as_bytes()), + } +} + +fn selector_contains(container: &str, nested: &str) -> bool { + let Some((container_start, container_end)) = parse_selector_span(container) else { + return false; + }; + let Some((nested_start, nested_end)) = parse_selector_span(nested) else { + return false; + }; + container_start <= nested_start && nested_end <= container_end +} + +fn parse_selector_span(selector: &str) -> Option<(usize, usize)> { + let (start, end) = selector.strip_prefix("bytes:")?.split_once('-')?; + Some((start.parse().ok()?, end.parse().ok()?)) +} + +fn project_owned_host(value: &str) -> bool { + let remainder = value + .split_once("://") + .map_or(value, |(_scheme, remainder)| remainder); + let authority = remainder + .split(['/', '?', '#']) + .next() + .unwrap_or_default() + .rsplit('@') + .next() + .unwrap_or_default(); + let host = authority + .split(':') + .next() + .unwrap_or_default() + .to_ascii_lowercase(); + ["iabtechlab.com", "iabtechlab.github.io"] + .iter() + .any(|owned| host == *owned || host.ends_with(&format!(".{owned}"))) +} + +fn candidate_rationale(class: ExceptionClass, detector: Detector) -> &'static str { + match class { + ExceptionClass::HistoricalExample if detector == Detector::Domain => { + "Preserve the approved audit's exact record of the deleted placeholder CNAME." + } + ExceptionClass::HistoricalExample => "Reviewed exact historical repository record.", + ExceptionClass::ProjectOwnedPublicDomain => { + "Reviewed exact project-owned public domain reference." + } + ExceptionClass::ServiceId => { + "Preserve the existing Fastly service binding during this refresh; removal is independent." + } + ExceptionClass::HashPinnedFakeCredentialFixture => { + "Reviewed exact hash-pinned synthetic credential fixture." + } + ExceptionClass::SettingsSchemaIdentifier => { + "Reviewed exact non-value settings disposition identifier." + } + ExceptionClass::VendorUrl => match detector { + Detector::Domain | Detector::BinaryString | Detector::LockfileField => { + "Reviewed exact public vendor reference required by repository content." + } + Detector::Email + | Detector::CredentialShape + | Detector::ServiceId + | Detector::EncodedToken + | Detector::MediaMetadata + | Detector::RetiredIdentifier => "Reviewed exact governed repository value.", + }, + } +} + +const fn candidate_expiry(class: ExceptionClass, detector: Detector) -> &'static str { + if matches!(class, ExceptionClass::HistoricalExample) { + "2027-08-31T00:00:00Z" + } else if matches!(detector, Detector::ServiceId) { + SERVICE_EXPIRY + } else { + "2027-09-01T00:00:00Z" + } +} + +fn finding(path: &str, detector: Detector, matched: &str, start: usize, end: usize) -> Finding { + Finding { + path: path.to_owned(), + detector, + selector: format!("bytes:{start}-{end}"), + matched: matched.to_owned(), + } +} + +fn is_lockfile(path: &str) -> bool { + path.ends_with("Cargo.lock") || path.ends_with("package-lock.json") +} + +fn trim_url(value: &str) -> &str { + value.trim_end_matches(|character: char| { + matches!(character, '.' | ',' | ';' | ':' | ')' | ']' | '}') + }) +} + +fn fictional_or_local_url(value: &str) -> bool { + let authority = value + .split_once("://") + .map_or(value, |(_scheme, remainder)| remainder) + .split(['/', '?', '#']) + .next() + .unwrap_or_default() + .rsplit('@') + .next() + .unwrap_or_default(); + let host = if authority.starts_with('[') { + authority + .find(']') + .map_or(authority, |end| &authority[..=end]) + } else { + authority.split(':').next().unwrap_or_default() + } + .to_ascii_lowercase(); + host == "localhost" + || host.ends_with(".localhost") + || host == "example" + || host.ends_with(".example") + || host == "invalid" + || host.ends_with(".invalid") + || host == "test" + || host.ends_with(".test") + || ["example.com", "example.net", "example.org"] + .iter() + .any(|reserved| host == *reserved || host.ends_with(&format!(".{reserved}"))) + || host == "127.0.0.1" + || host == "[::1]" +} + +fn fictional_email(value: &str) -> bool { + value + .rsplit_once('@') + .is_some_and(|(_local, domain)| fictional_or_local_url(domain)) +} + +fn fictional_credential(value: &str) -> bool { + let lower = value.to_ascii_lowercase(); + lower.starts_with("example") || lower.starts_with("your-") || lower.contains("placeholder") +} + +fn printable_strings(contents: &[u8]) -> Vec<(usize, String)> { + let mut strings = Vec::new(); + let mut current = Vec::new(); + let mut start = 0; + for (index, byte) in contents.iter().copied().chain([0]).enumerate() { + if byte.is_ascii_graphic() || byte == b' ' { + if current.is_empty() { + start = index; + } + current.push(byte); + } else { + if current.len() >= 6 { + strings.push((start, String::from_utf8_lossy(¤t).into_owned())); + } + current.clear(); + } + } + strings +} + +fn png_metadata(contents: &[u8]) -> Result, Report> { + if !contents.starts_with(b"\x89PNG\r\n\x1a\n") { + return Err(Report::new(ScannerError::Finding).attach("invalid PNG signature")); + } + let mut offset = 8; + let mut metadata = Vec::new(); + let mut first = true; + let mut saw_end = false; + while offset < contents.len() { + if offset + 12 > contents.len() { + return Err(Report::new(ScannerError::Finding).attach("truncated PNG chunk")); + } + let length = u32::from_be_bytes([ + contents[offset], + contents[offset + 1], + contents[offset + 2], + contents[offset + 3], + ]) as usize; + let Some(end) = offset + .checked_add(12) + .and_then(|value| value.checked_add(length)) + else { + return Err(Report::new(ScannerError::Finding).attach("PNG chunk length overflow")); + }; + if end > contents.len() { + return Err(Report::new(ScannerError::Finding).attach("truncated PNG chunk data")); + } + let chunk_type = &contents[offset + 4..offset + 8]; + let data = &contents[offset + 8..offset + 8 + length]; + let expected_crc = u32::from_be_bytes( + contents[offset + 8 + length..end] + .try_into() + .expect("PNG CRC has four bytes"), + ); + if png_crc32(&contents[offset + 4..offset + 8 + length]) != expected_crc { + return Err(Report::new(ScannerError::Finding).attach("invalid PNG chunk CRC")); + } + if first && chunk_type != b"IHDR" { + return Err(Report::new(ScannerError::Finding).attach("PNG must begin with IHDR")); + } + first = false; + if saw_end { + return Err(Report::new(ScannerError::Finding).attach("PNG data follows IEND")); + } + if chunk_type == b"tEXt" { + let position = png_keyword_end(data)?; + let text = core::str::from_utf8(&data[position + 1..]) + .change_context(ScannerError::Finding) + .attach("PNG tEXt metadata is not byte-mappable UTF-8")?; + metadata.push((offset + 8 + position + 1, text.to_owned())); + } else if chunk_type == b"zTXt" { + let position = png_keyword_end(data)?; + if data.get(position + 1) != Some(&0) || data.len() <= position + 2 { + return Err(Report::new(ScannerError::Finding) + .attach("invalid PNG zTXt compression fields")); + } + return Err(Report::new(ScannerError::Finding) + .attach("compressed PNG zTXt metadata requires review")); + } else if chunk_type == b"iTXt" { + let keyword_end = png_keyword_end(data)?; + let flag = *data.get(keyword_end + 1).ok_or_else(|| { + Report::new(ScannerError::Finding).attach("missing PNG iTXt compression flag") + })?; + let method = *data.get(keyword_end + 2).ok_or_else(|| { + Report::new(ScannerError::Finding).attach("missing PNG iTXt compression method") + })?; + if flag > 1 || method != 0 { + return Err(Report::new(ScannerError::Finding) + .attach("invalid PNG iTXt compression fields")); + } + let language_start = keyword_end + 3; + let language_end = data[language_start..] + .iter() + .position(|byte| *byte == 0) + .map(|position| language_start + position) + .ok_or_else(|| { + Report::new(ScannerError::Finding).attach("missing PNG iTXt language separator") + })?; + let translated_start = language_end + 1; + let translated_end = data[translated_start..] + .iter() + .position(|byte| *byte == 0) + .map(|position| translated_start + position) + .ok_or_else(|| { + Report::new(ScannerError::Finding) + .attach("missing PNG iTXt translated-keyword separator") + })?; + if flag == 1 { + return Err(Report::new(ScannerError::Finding) + .attach("compressed PNG iTXt metadata requires review")); + } + let text_start = translated_end + 1; + let text = core::str::from_utf8(&data[text_start..]) + .change_context(ScannerError::Finding) + .attach("PNG iTXt text is not valid UTF-8")?; + metadata.push((offset + 8 + text_start, text.to_owned())); + } + if chunk_type == b"IEND" { + if length != 0 { + return Err(Report::new(ScannerError::Finding).attach("invalid PNG IEND")); + } + saw_end = true; + } + offset = end; + } + if !saw_end { + return Err(Report::new(ScannerError::Finding).attach("PNG has no IEND")); + } + Ok(metadata) +} + +fn png_keyword_end(data: &[u8]) -> Result> { + let end = data.iter().position(|byte| *byte == 0).ok_or_else(|| { + Report::new(ScannerError::Finding).attach("PNG text keyword has no separator") + })?; + if !(1..=79).contains(&end) { + return Err(Report::new(ScannerError::Finding) + .attach("PNG text keyword length must be 1 through 79 bytes")); + } + let keyword = &data[..end]; + if keyword.first() == Some(&b' ') + || keyword.last() == Some(&b' ') + || keyword.windows(2).any(|pair| pair == b" ") + || keyword + .iter() + .any(|byte| !matches!(*byte, 32..=126 | 161..=255)) + { + return Err(Report::new(ScannerError::Finding) + .attach("PNG text keyword violates printable Latin-1 grammar")); + } + Ok(end) +} + +fn png_crc32(bytes: &[u8]) -> u32 { + let mut crc = u32::MAX; + for byte in bytes { + crc ^= u32::from(*byte); + for _ in 0..8 { + crc = (crc >> 1) ^ (0xedb8_8320 & 0_u32.wrapping_sub(crc & 1)); + } + } + !crc +} + +fn jpeg_metadata(contents: &[u8]) -> Vec<(usize, String)> { + if !contents.starts_with(&[0xff, 0xd8]) { + return Vec::new(); + } + let mut offset = 2; + let mut metadata = Vec::new(); + while offset + 4 <= contents.len() && contents[offset] == 0xff { + let marker = contents[offset + 1]; + if marker == 0xd9 || marker == 0xda { + break; + } + let length = usize::from(u16::from_be_bytes([ + contents[offset + 2], + contents[offset + 3], + ])); + if length < 2 || offset + 2 + length > contents.len() { + break; + } + let data = &contents[offset + 4..offset + 2 + length]; + if marker == 0xe1 || marker == 0xfe { + metadata.extend( + printable_strings(data) + .into_iter() + .map(|(position, text)| (offset + 4 + position, text)), + ); + } + offset += 2 + length; + } + metadata +} + +fn fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +fn validate_fingerprint(value: &str) -> Result<(), Report> { + let valid = value.len() == 71 + && value.starts_with("sha256:") + && value[7..].bytes().all(|byte| byte.is_ascii_hexdigit()); + if valid { + Ok(()) + } else { + Err(Report::new(ScannerError::InvalidGovernance) + .attach(format!("invalid SHA-256 fingerprint: {value}"))) + } +} + +fn validate_selector(value: &str) -> Result<(), Report> { + let Some((start, end)) = value + .strip_prefix("bytes:") + .and_then(|range| range.split_once('-')) + .and_then(|(start, end)| Some((start.parse::().ok()?, end.parse::().ok()?))) + else { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach(format!("invalid exact occurrence selector: {value}"))); + }; + if start >= end { + return Err(Report::new(ScannerError::InvalidGovernance) + .attach(format!("invalid exact occurrence selector: {value}"))); + } + Ok(()) +} + +#[cfg(test)] +fn exception_is_active(expiry: &str, now: &str) -> bool { + match (timestamp_seconds(expiry), timestamp_seconds(now)) { + (Some(expiry), Some(now)) => now < expiry, + _ => false, + } +} + +fn timestamp_seconds(value: &str) -> Option { + Expiry::parse(value.to_owned()).ok()?; + let bytes = value.as_bytes(); + let year = i64::try_from(decimal(bytes, 0, 4)?).ok()?; + let month = i64::try_from(decimal(bytes, 5, 2)?).ok()?; + let day = i64::try_from(decimal(bytes, 8, 2)?).ok()?; + let hour = decimal(bytes, 11, 2)?; + let minute = decimal(bytes, 14, 2)?; + let second = decimal(bytes, 17, 2)?; + let days = days_from_civil(year, month, day); + if days < 0 { + return None; + } + u64::try_from(days) + .ok()? + .checked_mul(86_400)? + .checked_add(hour.checked_mul(3_600)?)? + .checked_add(minute.checked_mul(60)?)? + .checked_add(second) +} + +fn decimal(bytes: &[u8], start: usize, length: usize) -> Option { + bytes + .get(start..start + length)? + .iter() + .try_fold(0_u64, |value, byte| { + byte.is_ascii_digit() + .then(|| value * 10 + u64::from(*byte - b'0')) + }) +} + +fn days_from_civil(mut year: i64, month: i64, day: i64) -> i64 { + if month <= 2 { + year -= 1; + } + let era = if year >= 0 { year } else { year - 399 } / 400; + let year_of_era = year - era * 400; + let adjusted_month = month + if month > 2 { -3 } else { 9 }; + let day_of_year = (153 * adjusted_month + 2) / 5 + day - 1; + let day_of_era = year_of_era * 365 + year_of_era / 4 - year_of_era / 100 + day_of_year; + era * 146_097 + day_of_era - 719_468 +} + +fn url_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new(r#"(?i)https?://[^\s<>\"'`]+"#).expect("URL detector should compile") + }) +} + +fn bare_domain_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new( + r#"(?i)\b(?:[A-Z0-9](?:[A-Z0-9-]*[A-Z0-9])?\.)+(?:XN--[A-Z0-9-]{2,}|[A-Z]{2,63})(?:/[A-Z0-9._~!$&()*+,;=:@%/?#-]*)?"#, + ) + .expect("bare-domain detector should compile") + }) +} + +fn domain_host_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new( + r#"(?i)\b(?:[A-Z0-9](?:[A-Z0-9-]*[A-Z0-9])?\.)+(?:XN--[A-Z0-9-]{2,}|[A-Z]{2,63})\b"#, + ) + .expect("domain-host detector should compile") + }) +} + +fn email_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new(r"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b") + .expect("email detector should compile") + }) +} + +fn service_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new(r#"(?im)\bservice_id\s*=\s*[\"']([A-Za-z0-9]{12,})[\"']"#) + .expect("service-ID detector should compile") + }) +} + +fn credential_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new( + r#"(?im)\b(?:api[_-]?secret|client[_-]?secret|password|secret|credential|access[_-]?token)[\"']?\s*[:=]\s*(?:\"((?:\\.|[^\"\\\r\n]){12,})\"|'((?:\\.|[^'\\\r\n]){12,})'|([^\s#;\"'`,]{12,}))"#, + ) + .expect("credential detector should compile") + }) +} + +fn encoded_token_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| { + Regex::new(r#"(?im)\bencoded_token\s*[:=]\s*[\"']?([A-Za-z0-9+/]{32,}={0,2})"#) + .expect("encoded-token detector should compile") + }) +} + +fn non_whitespace_regex() -> &'static Regex { + static REGEX: OnceLock = OnceLock::new(); + REGEX.get_or_init(|| Regex::new(r"\S+").expect("token detector should compile")) +} + +#[cfg(test)] +mod tests { + use super::{exception_is_active, scan_json_lock_fields_counted}; + + #[test] + fn dense_json_lock_span_association_is_single_pass() { + let mut entries = Vec::new(); + for index in 0..20_000 { + entries.push(format!( + r#"{{"description":"decoy-{index}","resolved":"https://registry.npmjs.org/package-{index}/-/package.tgz"}}"# + )); + } + let text = format!("[{}]", entries.join(",")); + let (findings, steps) = + scan_json_lock_fields_counted("package-lock.json", &text).expect("valid JSON scan"); + assert!(findings.is_empty()); + assert!( + steps <= text.len() * 4, + "accounted lexical work must remain linear: {steps} > 4*{}", + text.len() + ); + } + + #[test] + fn service_exception_fails_at_the_exact_approved_expiry_instant() { + let expiry = "2026-09-30T00:00:00Z"; + + assert!( + exception_is_active(expiry, "2026-09-29T23:59:59Z"), + "exception should remain active one second before expiry" + ); + assert!( + !exception_is_active(expiry, "2026-09-30T00:00:00Z"), + "exception should fail at the exact expiry instant" + ); + assert!( + !exception_is_active(expiry, "2026-09-30T00:00:01Z"), + "exception should remain failed after expiry" + ); + } +} diff --git a/tools/docs-parity/src/settings.rs b/tools/docs-parity/src/settings.rs new file mode 100644 index 000000000..ba9985197 --- /dev/null +++ b/tools/docs-parity/src/settings.rs @@ -0,0 +1,1952 @@ +//! Serde-aware configuration schema extraction and checked companion records. + +use std::collections::{BTreeMap, BTreeSet}; +use std::path::Path as FsPath; + +use error_stack::{Report, ResultExt as _}; +use serde::Deserialize; +use syn::{Attribute, Expr, ExprLit, Fields, Item, Lit, Path, Stmt, Type, UnOp}; + +use crate::repository::{NormalizedRelativePath, Repository}; + +const MAX_SETTINGS_INPUT_BYTES: usize = 4 * 1024 * 1024; +const COMPANION_MANIFEST_PATH: &str = "tools/docs-parity/manifests/settings-companions.toml"; +const SOURCE_TYPES: &[(&str, &str)] = &[ + ("crates/trusted-server-core/src/settings.rs", "Settings"), + ( + "crates/trusted-server-core/src/auction/profile.rs", + "StandardProfileConfig", + ), + ( + "crates/trusted-server-core/src/integrations/aps.rs", + "ApsProfileConfig", + ), + ( + "crates/trusted-server-core/src/integrations/prebid.rs", + "PrebidIntegrationConfig", + ), +]; +const COMPANION_SOURCES: &[&str] = &[ + "crates/trusted-server-core/src/integrations/aps.rs", + "crates/trusted-server-core/src/integrations/prebid.rs", + "crates/trusted-server-core/src/settings.rs", +]; + +/// Failure while extracting checked settings semantics. +#[derive(Debug, derive_more::Display)] +pub enum SettingsError { + /// Rust syntax could not be parsed. + #[display("cannot parse Rust settings source")] + RustSyntax, + /// The companion TOML record could not be parsed. + #[display("cannot parse settings companion manifest")] + CompanionSyntax, + /// The companion record is not explicitly reviewed. + #[display("settings companion manifest must be version 1 and reviewed")] + CompanionReview, + /// A companion entry is malformed or duplicated. + #[display("invalid settings companion for {symbol}: {reason}")] + InvalidCompanion { + /// Companion symbol. + symbol: String, + /// Stable explanation. + reason: &'static str, + }, + /// Custom semantics do not have a checked companion. + #[display("missing {kind} companion for {symbol} in {source}")] + MissingCompanion { + /// Source path. + source: String, + /// Function or method path. + symbol: String, + /// Companion kind. + kind: &'static str, + }, + /// A shape-changing Serde attribute is outside the closed grammar. + #[display("unsupported serde attribute {attribute} on {item}")] + UnsupportedSerdeAttribute { + /// Attribute name. + attribute: String, + /// Affected item. + item: String, + }, + /// A supported attribute has an invalid form. + #[display("invalid {attribute} attribute on {item}")] + InvalidAttribute { + /// Attribute family. + attribute: &'static str, + /// Affected item. + item: String, + }, + /// Repository input could not be read safely. + #[display("cannot read checked settings repository input")] + Repository, + /// A checked settings contract is incomplete or stale. + #[display("invalid checked settings contract: {reason}")] + InvalidContract { + /// Stable explanation of the mismatch. + reason: String, + }, +} + +impl core::error::Error for SettingsError {} + +/// Resolved source of a field default. +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum DefaultValue { + /// Uses the field type's Default implementation. + Trait, + /// A companion-free literal returned by the named default function. + Literal(String), + /// A checked companion value for a nonliteral default function. + Companion(String), + /// Uses the enclosing struct's container-level default. + Container, +} + +/// Default applied when a struct is absent during deserialization. +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ContainerDefault { + /// Uses the struct type's `Default` implementation. + Trait, + /// Uses the exact named function. + Function(String), +} + +/// Field lifecycle independent from its other dispositions. +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum Lifecycle { + /// Current supported field. + Canonical, + /// Accepted for compatibility but discouraged. + Deprecated, + /// Removed field retained as a rejection record. + Rejected, +} + +/// Serialized-key identity independent from lifecycle. +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum KeyIdentity { + /// Canonical key. + Canonical, + /// Deserialization alias of another key. + Alias, +} + +/// Output serialization behavior. +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum SerializationDisposition { + /// Field is serialized. + Serialized, + /// Field is accepted but skipped during serialization. + Skipped, +} + +/// Runtime behavior after deserialization. +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum RuntimeDisposition { + /// Field remains active at runtime. + Active, + /// Field is removed by normalization. + NormalizedAway, + /// Field exists only in the input schema. + DeserializationOnly, +} + +/// Secret-value handling for a field. +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum SecretDisposition { + /// A key name is resolved through the configured store. + StoreResolved, + /// The field deliberately contains an inline secret. + DeliberatelyInline, + /// An accepted compatibility field is discarded before runtime. + AcceptedDiscarded, + /// The field is not secret-bearing. + None, +} + +/// Independent directional dispositions for one setting path. +#[derive(Clone, Debug, Deserialize, Eq, PartialEq)] +#[serde(deny_unknown_fields)] +pub struct FieldDisposition { + /// Exact type-qualified field path. + pub path: String, + /// Lifecycle axis. + pub lifecycle: Lifecycle, + /// Canonical or alias key axis. + pub key_identity: KeyIdentity, + /// Canonical path for aliases. + pub alias_of: Option, + /// Serialization axis. + pub serialization: SerializationDisposition, + /// Runtime axis. + pub runtime: RuntimeDisposition, + /// Secret-handling axis. + pub secret: SecretDisposition, +} + +/// Inclusive numeric validation bounds. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ValidationRange { + /// Inclusive lower bound when declared. + pub min: Option, + /// Inclusive upper bound when declared. + pub max: Option, +} + +/// One deserializable field and its serialization semantics. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExtractedField { + /// Rust identifier before Serde renaming, or the zero-based tuple index. + pub rust_name: String, + /// Canonical serialized key. + pub name: String, + /// Accepted deserialization-only aliases. + pub aliases: Vec, + /// Whether the Rust type is Option. + pub optional: bool, + /// Whether the field merges into its container. + pub flatten: bool, + /// Whether the field is accepted but omitted from serialization. + pub skip_serializing: bool, + /// Whether the field is output-only and ignored during deserialization. + pub skip_deserializing: bool, + /// Conditional serialization predicate, when declared. + pub skip_serializing_if: Option, + /// Resolved default semantics. + pub default: Option, + /// Custom deserializer path, when present. + pub deserializer: Option, + /// Checked custom validator paths. + pub validators: Vec, + /// Inclusive numeric range, when present. + pub range: Option, +} + +/// One Serde enum variant. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExtractedVariant { + /// Rust variant identifier. + pub rust_name: String, + /// Canonical serialized name. + pub name: String, + /// Accepted deserialization-only aliases. + pub aliases: Vec, + /// Rename rule for fields of this struct variant. + pub rename_all: Option, + /// Whether this variant is omitted from serialization. + pub skip_serializing: bool, + /// Whether this variant is ignored during deserialization. + pub skip_deserializing: bool, + /// Whether this variant is untagged inside an otherwise tagged enum. + pub untagged: bool, + /// Fields carried by this variant. + pub fields: Vec, +} + +impl ExtractedVariant { + /// Find a canonical field carried by this variant. + #[must_use] + pub fn field_named(&self, name: &str) -> Option<&ExtractedField> { + self.fields.iter().find(|field| field.name == name) + } +} + +/// Extracted struct or enum semantics. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExtractedType { + /// Rust type name. + pub name: String, + /// Serialized container name after an explicit rename. + pub serialized_name: String, + /// Container rename rule. + pub rename_all: Option, + /// Default rename rule for fields of enum struct variants. + pub rename_all_fields: Option, + /// Struct-level default applied to missing fields. + pub container_default: Option, + /// Whether unknown object keys are rejected. + pub deny_unknown_fields: bool, + /// Adjacent or internal tag field. + pub tag: Option, + /// Adjacent tag content field. + pub content: Option, + /// Whether an enum is untagged. + pub untagged: bool, + /// Extracted deserializable fields. + pub fields: Vec, + /// Extracted enum variants. + pub variants: Vec, +} + +impl ExtractedType { + /// Find a canonical field. + #[must_use] + pub fn field_named(&self, name: &str) -> Option<&ExtractedField> { + self.fields.iter().find(|field| field.name == name) + } + + /// Find a canonical enum variant. + #[must_use] + pub fn variant_named(&self, name: &str) -> Option<&ExtractedVariant> { + self.variants.iter().find(|variant| variant.name == name) + } +} + +/// Extracted settings types from one Rust source. +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExtractedSchema { + /// Structs and enums in source order. + pub types: Vec, +} + +impl ExtractedSchema { + /// Find an extracted Rust type by its source identifier. + #[must_use] + pub fn type_named(&self, name: &str) -> Option<&ExtractedType> { + self.types.iter().find(|item| item.name == name) + } +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(rename_all = "snake_case")] +enum CompanionKind { + Default, + Deserializer, + Validator, +} + +impl CompanionKind { + const fn label(self) -> &'static str { + match self { + Self::Default => "default", + Self::Deserializer => "deserializer", + Self::Validator => "validator", + } + } +} + +fn companion_probe_name(source: &str, symbol: &str, kind: CompanionKind, polarity: &str) -> String { + let mut identity = String::new(); + for character in format!("{source}_{symbol}").chars() { + if character.is_ascii_alphanumeric() { + identity.push(character.to_ascii_lowercase()); + } else if !identity.ends_with('_') { + identity.push('_'); + } + } + let identity = identity.trim_matches('_'); + format!("task7_{identity}_{}_{}", kind.label(), polarity) +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct RawCompanionManifest { + version: u32, + reviewed: bool, + #[serde(default)] + companions: Vec, + #[serde(default)] + fields: Vec, + template: Option, + #[serde(default)] + consumers: Vec, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct TemplateRecord { + source: String, + placeholder_paths: BTreeSet, + integration_ids: BTreeSet, + profile_ids: BTreeSet, + consumer_literals: BTreeSet, + expected_failure_diagnostic: String, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)] +#[serde(rename_all = "snake_case")] +enum ConsumerMode { + LiteralSubstitution, + IncludeOnly, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct ConsumerRecord { + path: String, + mode: ConsumerMode, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Companion { + source: String, + symbol: String, + kind: CompanionKind, + value: Option, + positive_probe: String, + negative_probe: String, +} + +/// Compiled evidence for one exact companion record. +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub struct CompanionReceipt { + /// Exact source-local symbol. + pub symbol: String, + /// Companion kind (`default`, `deserializer`, or `validator`). + pub kind: String, + /// Runtime-observed default value, when applicable. + pub value: Option, + /// Unique positive probe bound to source, symbol, and kind. + pub positive_probe: String, + /// Unique negative probe bound to source, symbol, and kind. + pub negative_probe: String, + /// Whether the compiled positive behavior passed. + pub positive_passed: bool, + /// Whether the compiled negative behavior rejected its input. + pub negative_passed: bool, +} + +/// Reviewed custom-semantics record used by the extractor. +#[derive(Clone, Debug, Default)] +pub struct CompanionManifest { + entries: BTreeMap<(String, String, CompanionKind), Companion>, + fields: BTreeMap, + template: Option, + consumers: BTreeMap, +} + +impl CompanionManifest { + /// Parse and validate a versioned companion manifest. + /// + /// # Errors + /// + /// Returns an error for invalid TOML, missing review attestation, duplicate + /// keys, blank probes, or a default companion without a resolved value. + pub fn parse(source: &str) -> Result> { + let raw: RawCompanionManifest = + toml::from_str(source).change_context(SettingsError::CompanionSyntax)?; + if raw.version != 1 || !raw.reviewed { + return Err(Report::new(SettingsError::CompanionReview)); + } + + let RawCompanionManifest { + version: _, + reviewed: _, + companions, + fields: raw_fields, + template, + consumers: raw_consumers, + } = raw; + + let mut entries = BTreeMap::new(); + for companion in companions { + if companion.source.trim().is_empty() + || companion.symbol.trim().is_empty() + || companion.positive_probe.trim().is_empty() + || companion.negative_probe.trim().is_empty() + { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: companion.symbol, + reason: "source, symbol, and both probes must be nonblank", + })); + } + if companion.kind == CompanionKind::Default + && companion.value.as_deref().is_none_or(str::is_empty) + { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: companion.symbol, + reason: "default companion requires a value", + })); + } + let expected_positive = companion_probe_name( + &companion.source, + &companion.symbol, + companion.kind, + "positive", + ); + let expected_negative = companion_probe_name( + &companion.source, + &companion.symbol, + companion.kind, + "negative", + ); + if companion.positive_probe != expected_positive + || companion.negative_probe != expected_negative + { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: companion.symbol, + reason: "probe names must bind the exact source, symbol, kind, and polarity", + })); + } + let key = ( + companion.source.clone(), + companion.symbol.clone(), + companion.kind, + ); + if entries.insert(key, companion).is_some() { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: "duplicate".to_owned(), + reason: "duplicate source/symbol/kind", + })); + } + } + let mut fields = BTreeMap::new(); + for field in raw_fields { + let alias_shape = match field.key_identity { + KeyIdentity::Alias => field + .alias_of + .as_deref() + .is_some_and(|value| !value.is_empty()), + KeyIdentity::Canonical => field.alias_of.is_none(), + }; + if field.path.trim().is_empty() || !alias_shape { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: field.path, + reason: "alias fields require alias_of and canonical fields prohibit alias_of", + })); + } + if fields.insert(field.path.clone(), field).is_some() { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: "duplicate field".to_owned(), + reason: "duplicate field disposition path", + })); + } + } + let mut consumers = BTreeMap::new(); + for consumer in raw_consumers { + if consumer.path.trim().is_empty() + || consumers + .insert(consumer.path.clone(), consumer.mode) + .is_some() + { + return Err(Report::new(SettingsError::InvalidCompanion { + symbol: consumer.path, + reason: "consumer paths must be nonblank and unique", + })); + } + } + Ok(Self { + entries, + fields, + template, + consumers, + }) + } + + fn require( + &self, + source: &str, + symbol: &str, + kind: CompanionKind, + ) -> Result<&Companion, Report> { + self.entries + .get(&(source.to_owned(), symbol.to_owned(), kind)) + .ok_or_else(|| { + Report::new(SettingsError::MissingCompanion { + source: source.to_owned(), + symbol: symbol.to_owned(), + kind: kind.label(), + }) + }) + } + + /// Find the exact independent dispositions for a setting path. + #[must_use] + pub fn field_disposition(&self, path: &str) -> Option<&FieldDisposition> { + self.fields.get(path) + } + + /// Compare compiled companion evidence with one source's reviewed records. + /// + /// # Errors + /// + /// Returns an error for missing, stale, duplicated, failed, or mismatched + /// source/symbol/kind/value/probe evidence. + pub fn verify_compiled_receipts( + &self, + source: &str, + receipts: &[CompanionReceipt], + ) -> Result<(), Report> { + if receipts + .iter() + .any(|receipt| !receipt.positive_passed || !receipt.negative_passed) + { + return invalid_contract(format!( + "compiled companion receipt failed positive/negative behavior for {source}" + )); + } + let actual = receipts.iter().cloned().collect::>(); + if actual.len() != receipts.len() { + return invalid_contract(format!( + "compiled companion receipt set contains duplicates for {source}" + )); + } + let expected = self + .entries + .values() + .filter(|companion| companion.source == source) + .map(|companion| CompanionReceipt { + symbol: companion.symbol.clone(), + kind: companion.kind.label().to_owned(), + value: companion.value.clone(), + positive_probe: companion.positive_probe.clone(), + negative_probe: companion.negative_probe.clone(), + positive_passed: true, + negative_passed: true, + }) + .collect::>(); + require_equal("compiled companion receipt set", &actual, &expected) + } + + fn verify_discovered_companions( + &self, + source: &str, + discovered: &BTreeSet<(String, CompanionKind)>, + ) -> Result<(), Report> { + let expected = self + .entries + .keys() + .filter(|(entry_source, _symbol, _kind)| entry_source == source) + .map(|(_source, symbol, kind)| (symbol.clone(), *kind)) + .collect::>(); + require_equal("AST companion set", discovered, &expected) + } +} + +/// Check the real settings sources, compiled companions, template sets, and +/// every exact-string consumer without modifying repository bytes. +pub(crate) fn check_repository(repository: &Repository) -> Result<(), Report> { + let manifest_source = read_repository_text(repository, COMPANION_MANIFEST_PATH, false)?; + let companions = CompanionManifest::parse(&manifest_source)?; + + let actual_sources = companions + .entries + .keys() + .map(|(source, _, _)| source.clone()) + .collect::>(); + let expected_sources = COMPANION_SOURCES + .iter() + .map(|source| (*source).to_owned()) + .collect::>(); + require_equal("companion source set", &actual_sources, &expected_sources)?; + + let mut schemas = Vec::new(); + for (source_path, required_type) in SOURCE_TYPES { + let source = read_repository_text(repository, source_path, true)?; + let schema = extract_schema(source_path, &source, &companions)?; + if schema.type_named(required_type).is_none() { + return invalid_contract(format!( + "{source_path} does not extract required type {required_type}" + )); + } + if *required_type == "Settings" { + let actual = schema + .type_named("Settings") + .expect("required Settings type was checked") + .fields + .iter() + .map(|field| field.name.clone()) + .collect::>(); + let expected = [ + "publisher", + "tester_cookie", + "trusted_client_ip", + "ec", + "integrations", + "handlers", + "response_headers", + "request_signing", + "rewrite", + "auction", + "consent", + "cache", + "proxy", + "creative_opportunities", + "image_optimizer", + "tinybird", + "debug", + ] + .into_iter() + .map(str::to_owned) + .collect::>(); + require_equal("Settings root field set", &actual, &expected)?; + } + schemas.push(schema); + } + + let alias_targets = source_alias_targets(&schemas)?; + verify_alias_dispositions(&companions, &alias_targets)?; + check_field_dispositions(&companions, &alias_targets)?; + check_template_contract(repository, &companions) +} + +fn check_field_dispositions( + companions: &CompanionManifest, + aliases: &BTreeMap, +) -> Result<(), Report> { + let store_resolved = string_set(&[ + "DataDomeConfig.server_side_key_secret_name", + "DataDomeProtectionTestBypassConfig.credential_secret_name", + "Ec.passphrase", + "EcPartner.api_token", + "EcPartner.ts_pull_token", + "Handler.password", + "Publisher.proxy_secret", + "S3SigV4AuthConfig.access_key_id", + "S3SigV4AuthConfig.secret_access_key", + "S3SigV4AuthConfig.session_token", + "TinybirdSettings.auction_token_secret", + ]); + let deliberately_inline = string_set(&["TrustedClientIpConfig.shared_secret"]); + let accepted_discarded = string_set(&["TinybirdSettings.access_token_secret"]); + let legacy_selectors = string_set(&[ + "DataDomeConfig.server_side_key_secret_store", + "DataDomeProtectionTestBypassConfig.credential_secret_store", + "S3SigV4AuthConfig.secret_store", + "TinybirdSettings.secret_store", + ]); + let expected_paths = store_resolved + .iter() + .chain(&deliberately_inline) + .chain(&accepted_discarded) + .chain(&legacy_selectors) + .chain(aliases.keys()) + .cloned() + .collect::>(); + let actual_paths = companions.fields.keys().cloned().collect::>(); + require_equal( + "directional field disposition path set", + &actual_paths, + &expected_paths, + )?; + + for (path, disposition) in &companions.fields { + let expected = if store_resolved.contains(path) { + ( + Lifecycle::Canonical, + KeyIdentity::Canonical, + None, + SerializationDisposition::Serialized, + RuntimeDisposition::Active, + SecretDisposition::StoreResolved, + ) + } else if deliberately_inline.contains(path) { + ( + Lifecycle::Canonical, + KeyIdentity::Canonical, + None, + SerializationDisposition::Serialized, + RuntimeDisposition::Active, + SecretDisposition::DeliberatelyInline, + ) + } else if accepted_discarded.contains(path) { + ( + Lifecycle::Deprecated, + KeyIdentity::Canonical, + None, + SerializationDisposition::Skipped, + RuntimeDisposition::NormalizedAway, + SecretDisposition::AcceptedDiscarded, + ) + } else if legacy_selectors.contains(path) { + ( + Lifecycle::Deprecated, + KeyIdentity::Canonical, + None, + SerializationDisposition::Skipped, + RuntimeDisposition::NormalizedAway, + SecretDisposition::None, + ) + } else { + ( + Lifecycle::Deprecated, + KeyIdentity::Alias, + aliases.get(path).map(String::as_str), + SerializationDisposition::Skipped, + RuntimeDisposition::DeserializationOnly, + SecretDisposition::None, + ) + }; + let actual = ( + disposition.lifecycle, + disposition.key_identity, + disposition.alias_of.as_deref(), + disposition.serialization, + disposition.runtime, + disposition.secret, + ); + require_equal(&format!("field disposition {path}"), &actual, &expected)?; + } + Ok(()) +} + +fn source_alias_targets( + schemas: &[ExtractedSchema], +) -> Result, Report> { + let mut targets = BTreeMap::new(); + for schema in schemas { + for item in &schema.types { + for field in &item.fields { + let canonical = format!("{}.{}", item.name, field.name); + for alias in &field.aliases { + insert_source_alias( + &mut targets, + &format!("{}.{}", item.name, alias), + canonical.clone(), + )?; + } + } + for variant in &item.variants { + let canonical = format!("{}.{}", item.name, variant.name); + for alias in &variant.aliases { + insert_source_alias( + &mut targets, + &format!("{}.{}", item.name, alias), + canonical.clone(), + )?; + } + } + } + } + Ok(targets) +} + +fn insert_source_alias( + targets: &mut BTreeMap, + alias: &str, + canonical: String, +) -> Result<(), Report> { + if targets.insert(alias.to_owned(), canonical).is_some() { + return invalid_contract(format!("duplicate source alias {alias}")); + } + Ok(()) +} + +fn verify_alias_dispositions( + companions: &CompanionManifest, + source_targets: &BTreeMap, +) -> Result<(), Report> { + let reviewed_targets = companions + .fields + .values() + .filter(|field| field.key_identity == KeyIdentity::Alias) + .map(|field| { + ( + field.path.clone(), + field + .alias_of + .clone() + .expect("alias target shape was validated while parsing"), + ) + }) + .collect::>(); + require_equal( + "source-derived alias disposition set", + &reviewed_targets, + source_targets, + ) +} + +fn check_template_contract( + repository: &Repository, + companions: &CompanionManifest, +) -> Result<(), Report> { + let template = companions.template.as_ref().ok_or_else(|| { + Report::new(SettingsError::InvalidContract { + reason: "missing [template] record".to_owned(), + }) + })?; + if template.source != "trusted-server.example.toml" { + return invalid_contract("template source must be trusted-server.example.toml".to_owned()); + } + let source_template = read_repository_text(repository, &template.source, true)?; + toml::from_str::(&source_template).map_err(|error| { + Report::new(SettingsError::InvalidContract { + reason: format!("source template does not parse as TOML: {error}"), + }) + })?; + + require_equal( + "placeholder path set", + &template.placeholder_paths, + &string_set(&[ + "publisher.cookie_domain", + "publisher.domain", + "publisher.origin_url", + ]), + )?; + require_equal( + "integration ID set", + &template.integration_ids, + &string_set(&[ + "adserver_mock", + "aps", + "datadome", + "didomi", + "google_tag_manager", + "gpt", + "gpt_diagnostics", + "lockr", + "nextjs", + "osano", + "permutive", + "prebid", + "sourcepoint", + "testlight", + ]), + )?; + require_equal( + "profile ID set", + &template.profile_ids, + &string_set(&["aps", "prebid-server", "standard"]), + )?; + require_equal( + "consumer literal set", + &template.consumer_literals, + &string_set(&[ + "ec_passphrase", + "handler_password", + "publisher_proxy_secret", + ]), + )?; + if template.expected_failure_diagnostic + != "unmodified template rejects publisher.cookie_domain, publisher.domain, publisher.origin_url" + { + return invalid_contract("unexpected template failure diagnostic contract".to_owned()); + } + + let expected_consumers = BTreeMap::from([ + ( + "crates/trusted-server-cli/src/commands/audit/generate/mod.rs".to_owned(), + ConsumerMode::LiteralSubstitution, + ), + ( + "crates/trusted-server-cli/src/commands/audit/generate/validate.rs".to_owned(), + ConsumerMode::LiteralSubstitution, + ), + ( + "crates/trusted-server-cli/src/commands/config/ad_templates.rs".to_owned(), + ConsumerMode::LiteralSubstitution, + ), + ( + "crates/trusted-server-cli/src/commands/config/init.rs".to_owned(), + ConsumerMode::IncludeOnly, + ), + ( + "crates/trusted-server-core/src/config.rs".to_owned(), + ConsumerMode::LiteralSubstitution, + ), + ( + "scripts/template-cache-local-test.sh".to_owned(), + ConsumerMode::LiteralSubstitution, + ), + ]); + require_equal( + "template consumer path/mode set", + &companions.consumers, + &expected_consumers, + )?; + + for (path, mode) in &companions.consumers { + let consumer = read_repository_text(repository, path, true)?; + let required = match mode { + ConsumerMode::LiteralSubstitution => template + .consumer_literals + .iter() + .map(String::as_str) + .collect::>(), + ConsumerMode::IncludeOnly => vec![template.source.as_str()], + }; + for literal in required { + if !consumer.contains(literal) { + return invalid_contract(format!( + "template consumer {path} is missing exact literal {literal}" + )); + } + } + } + Ok(()) +} + +fn read_repository_text( + repository: &Repository, + path: &str, + tracked: bool, +) -> Result> { + let normalized = + NormalizedRelativePath::new(FsPath::new(path)).change_context(SettingsError::Repository)?; + let bytes = if tracked { + repository + .read_tracked(&normalized) + .change_context(SettingsError::Repository)? + } else { + repository + .read_optional(&normalized) + .change_context(SettingsError::Repository)? + .ok_or_else(|| { + Report::new(SettingsError::Repository).attach(format!("missing {path}")) + })? + }; + if bytes.len() > MAX_SETTINGS_INPUT_BYTES { + return invalid_contract(format!("{path} exceeds {MAX_SETTINGS_INPUT_BYTES} bytes")); + } + String::from_utf8(bytes).map_err(|error| { + Report::new(SettingsError::InvalidContract { + reason: format!("{path} is not UTF-8: {error}"), + }) + }) +} + +fn string_set(values: &[&str]) -> BTreeSet { + values.iter().map(|value| (*value).to_owned()).collect() +} + +fn require_equal( + label: &str, + actual: &T, + expected: &T, +) -> Result<(), Report> { + if actual == expected { + Ok(()) + } else { + invalid_contract(format!( + "{label} mismatch: expected {expected:?}, observed {actual:?}" + )) + } +} + +fn invalid_contract(reason: String) -> Result> { + Err(Report::new(SettingsError::InvalidContract { reason })) +} + +#[derive(Default)] +struct SerdeAttributes { + rename: Option, + rename_all: Option, + rename_all_fields: Option, + aliases: Vec, + deny_unknown_fields: bool, + tag: Option, + content: Option, + untagged: bool, + flatten: bool, + skip: bool, + skip_serializing: bool, + skip_deserializing: bool, + skip_serializing_if: Option, + default: Option>, + deserialize_with: Option, +} + +#[derive(Default)] +struct ValidationAttributes { + validators: BTreeSet, + range: Option, +} + +/// Parse one Rust source and extract its closed Serde/settings grammar. +/// +/// # Errors +/// +/// Returns an error for invalid Rust syntax, unsupported shape-changing Serde +/// attributes, malformed supported attributes, or missing custom-semantics +/// companions. +pub fn extract_schema( + source_path: &str, + source: &str, + companions: &CompanionManifest, +) -> Result> { + let file = syn::parse_file(source).change_context(SettingsError::RustSyntax)?; + let literal_defaults = literal_default_functions(&file.items)?; + let mut types = Vec::new(); + let mut discovered_companions = BTreeSet::new(); + + for item in &file.items { + match item { + Item::Struct(item) => { + let name = item.ident.to_string(); + if !is_production_item(&item.attrs, &name)? { + continue; + } + let serde = parse_serde_attributes( + &item.attrs, + &name, + AttributeSite::StructContainer { + has_fields: !matches!(&item.fields, Fields::Unit), + named_fields: matches!(&item.fields, Fields::Named(_)), + }, + )?; + let validation = parse_validation_attributes(&item.attrs, &name)?; + require_validators( + source_path, + companions, + &validation.validators, + &mut discovered_companions, + )?; + let container_default = serde.default.as_ref().map(|symbol| match symbol { + None => ContainerDefault::Trait, + Some(symbol) => ContainerDefault::Function(symbol.clone()), + }); + if let Some(ContainerDefault::Function(symbol)) = &container_default { + discovered_companions.insert((symbol.clone(), CompanionKind::Default)); + companions.require(source_path, symbol, CompanionKind::Default)?; + } + let fields = extract_fields( + &mut FieldExtractionContext { + source_path, + literal_defaults: &literal_defaults, + companions, + discovered_companions: &mut discovered_companions, + }, + &name, + &item.fields, + serde.rename_all.as_deref(), + container_default.as_ref(), + )?; + types.push(ExtractedType { + serialized_name: serde.rename.clone().unwrap_or_else(|| name.clone()), + name, + rename_all: serde.rename_all, + rename_all_fields: serde.rename_all_fields, + container_default, + deny_unknown_fields: serde.deny_unknown_fields, + tag: serde.tag, + content: serde.content, + untagged: serde.untagged, + fields, + variants: Vec::new(), + }); + } + Item::Enum(item) => { + let name = item.ident.to_string(); + if !is_production_item(&item.attrs, &name)? { + continue; + } + let serde = + parse_serde_attributes(&item.attrs, &name, AttributeSite::EnumContainer)?; + let mut variants = Vec::new(); + for variant in &item.variants { + let rust_name = variant.ident.to_string(); + let context = format!("{name}::{rust_name}"); + if !is_production_item(&variant.attrs, &context)? { + continue; + } + let attributes = + parse_serde_attributes(&variant.attrs, &context, AttributeSite::Variant)?; + if attributes.skip { + continue; + } + let variant_name = attributes.rename.unwrap_or_else(|| { + apply_rename_rule( + &rust_name, + serde.rename_all.as_deref(), + RenameTarget::Variant, + ) + }); + let field_rename = attributes + .rename_all + .as_deref() + .or(serde.rename_all_fields.as_deref()); + let fields = extract_fields( + &mut FieldExtractionContext { + source_path, + literal_defaults: &literal_defaults, + companions, + discovered_companions: &mut discovered_companions, + }, + &format!("{name}::{rust_name}"), + &variant.fields, + field_rename, + None, + )?; + variants.push(ExtractedVariant { + rust_name, + name: variant_name, + aliases: attributes.aliases, + rename_all: attributes.rename_all, + skip_serializing: attributes.skip_serializing, + skip_deserializing: attributes.skip_deserializing, + untagged: attributes.untagged, + fields, + }); + } + types.push(ExtractedType { + serialized_name: serde.rename.clone().unwrap_or_else(|| name.clone()), + name, + rename_all: serde.rename_all, + rename_all_fields: serde.rename_all_fields, + container_default: None, + deny_unknown_fields: serde.deny_unknown_fields, + tag: serde.tag, + content: serde.content, + untagged: serde.untagged, + fields: Vec::new(), + variants, + }); + } + _ => {} + } + } + + companions.verify_discovered_companions(source_path, &discovered_companions)?; + Ok(ExtractedSchema { types }) +} + +struct FieldExtractionContext<'a> { + source_path: &'a str, + literal_defaults: &'a BTreeMap, + companions: &'a CompanionManifest, + discovered_companions: &'a mut BTreeSet<(String, CompanionKind)>, +} + +fn extract_fields( + context: &mut FieldExtractionContext<'_>, + container: &str, + fields: &Fields, + rename_all: Option<&str>, + container_default: Option<&ContainerDefault>, +) -> Result, Report> { + let mut extracted = Vec::new(); + for (index, field) in fields.iter().enumerate() { + let rust_name = field + .ident + .as_ref() + .map(ToString::to_string) + .unwrap_or_else(|| index.to_string()); + let field_context = format!("{container}.{rust_name}"); + if !is_production_item(&field.attrs, &field_context)? { + continue; + } + let serde = parse_serde_attributes( + &field.attrs, + &field_context, + AttributeSite::Field { + named: field.ident.is_some(), + }, + )?; + if serde.skip { + continue; + } + let validation = parse_validation_attributes(&field.attrs, &field_context)?; + require_validators( + context.source_path, + context.companions, + &validation.validators, + context.discovered_companions, + )?; + if let Some(symbol) = &serde.deserialize_with { + context + .discovered_companions + .insert((symbol.clone(), CompanionKind::Deserializer)); + context + .companions + .require(context.source_path, symbol, CompanionKind::Deserializer)?; + } + let default = match serde.default { + None => None, + Some(None) => Some(DefaultValue::Trait), + Some(Some(symbol)) => match context.literal_defaults.get(&symbol) { + Some(value) => Some(DefaultValue::Literal(value.clone())), + None => { + context + .discovered_companions + .insert((symbol.clone(), CompanionKind::Default)); + let companion = context.companions.require( + context.source_path, + &symbol, + CompanionKind::Default, + )?; + Some(DefaultValue::Companion( + companion.value.clone().expect("validated default value"), + )) + } + }, + }; + let default = default + .or_else(|| container_default.map(|_default| DefaultValue::Container)) + .or_else(|| serde.skip_deserializing.then_some(DefaultValue::Trait)); + extracted.push(ExtractedField { + rust_name: rust_name.clone(), + name: serde + .rename + .unwrap_or_else(|| apply_rename_rule(&rust_name, rename_all, RenameTarget::Field)), + aliases: serde.aliases, + optional: option_inner(&field.ty), + flatten: serde.flatten, + skip_serializing: serde.skip_serializing, + skip_deserializing: serde.skip_deserializing, + skip_serializing_if: serde.skip_serializing_if, + default, + deserializer: serde.deserialize_with, + validators: validation.validators.into_iter().collect(), + range: validation.range, + }); + } + Ok(extracted) +} + +fn require_validators( + source_path: &str, + companions: &CompanionManifest, + validators: &BTreeSet, + discovered_companions: &mut BTreeSet<(String, CompanionKind)>, +) -> Result<(), Report> { + for validator in validators { + discovered_companions.insert((validator.clone(), CompanionKind::Validator)); + companions.require(source_path, validator, CompanionKind::Validator)?; + } + Ok(()) +} + +#[derive(Clone, Copy)] +enum AttributeSite { + StructContainer { + has_fields: bool, + named_fields: bool, + }, + EnumContainer, + Field { + named: bool, + }, + Variant, +} + +fn parse_serde_attributes( + attributes: &[Attribute], + item: &str, + site: AttributeSite, +) -> Result> { + let mut parsed = SerdeAttributes::default(); + let mut invalid_site = false; + let mut invalid_form = false; + for attribute in attributes + .iter() + .filter(|value| value.path().is_ident("serde")) + { + attribute + .parse_nested_meta(|meta| { + let Some(name) = meta.path.get_ident().map(ToString::to_string) else { + return Err(meta.error("unsupported serde attribute path")); + }; + if serde_attribute_intentionally_unsupported(&name) { + return Err(meta.error(format!("unsupported serde attribute {name}"))); + } + if !serde_attribute_allowed(&name, site) { + invalid_site = true; + return Err(meta.error(format!("invalid serde attribute {name} for this site"))); + } + invalid_form = false; + match name.as_str() { + "rename" => { + invalid_form = true; + parsed.rename = Some(parse_string_value(&meta)?); + } + "rename_all" => { + invalid_form = true; + parsed.rename_all = Some(parse_string_value(&meta)?); + } + "rename_all_fields" => { + invalid_form = true; + parsed.rename_all_fields = Some(parse_string_value(&meta)?); + } + "alias" => { + invalid_form = true; + parsed.aliases.push(parse_string_value(&meta)?); + } + "deny_unknown_fields" => parsed.deny_unknown_fields = true, + "tag" => { + invalid_form = true; + parsed.tag = Some(parse_string_value(&meta)?); + } + "content" => { + invalid_form = true; + parsed.content = Some(parse_string_value(&meta)?); + } + "untagged" => parsed.untagged = true, + "flatten" => parsed.flatten = true, + "skip" => parsed.skip = true, + "skip_serializing" => parsed.skip_serializing = true, + "skip_deserializing" => parsed.skip_deserializing = true, + "skip_serializing_if" => { + invalid_form = true; + parsed.skip_serializing_if = Some(parse_serde_path_string_value(&meta)?); + } + "default" if meta.input.peek(syn::Token![=]) => { + invalid_form = true; + parsed.default = Some(Some(parse_serde_path_string_value(&meta)?)); + } + "default" => parsed.default = Some(None), + "deserialize_with" => { + invalid_form = true; + parsed.deserialize_with = Some(parse_serde_path_string_value(&meta)?); + } + "serialize_with" | "bound" | "borrow" | "crate" | "expecting" | "other" + | "from" | "try_from" | "into" | "remote" | "transparent" | "with" + | "getter" => { + return Err(meta.error(format!("unsupported serde attribute {name}"))); + } + _ => return Err(meta.error(format!("unsupported serde attribute {name}"))), + } + invalid_form = false; + Ok(()) + }) + .map_err(|error| { + if invalid_site || invalid_form { + Report::new(SettingsError::InvalidAttribute { + attribute: "serde", + item: item.to_owned(), + }) + } else { + let attribute = unsupported_attribute_name(&error.to_string()); + Report::new(SettingsError::UnsupportedSerdeAttribute { + attribute, + item: item.to_owned(), + }) + } + })?; + } + + for (attribute, rule) in [ + ("rename_all", parsed.rename_all.as_deref()), + ("rename_all_fields", parsed.rename_all_fields.as_deref()), + ] { + if let Some(rule) = rule + && !valid_rename_rule(rule) + { + return Err(Report::new(SettingsError::InvalidAttribute { + attribute, + item: item.to_owned(), + })); + } + } + if parsed.content.is_some() && parsed.tag.is_none() + || parsed.untagged && (parsed.tag.is_some() || parsed.content.is_some()) + { + return Err(Report::new(SettingsError::InvalidAttribute { + attribute: "serde", + item: item.to_owned(), + })); + } + Ok(parsed) +} + +fn serde_attribute_allowed(name: &str, site: AttributeSite) -> bool { + match site { + AttributeSite::StructContainer { + has_fields, + named_fields, + } => match name { + "rename" | "rename_all" | "deny_unknown_fields" => true, + "default" => has_fields, + "tag" => named_fields, + _ => false, + }, + AttributeSite::EnumContainer => matches!( + name, + "rename" + | "rename_all" + | "rename_all_fields" + | "deny_unknown_fields" + | "tag" + | "content" + | "untagged" + ), + AttributeSite::Field { named } => { + matches!( + name, + "rename" + | "alias" + | "default" + | "skip" + | "skip_serializing" + | "skip_deserializing" + | "skip_serializing_if" + | "deserialize_with" + ) || name == "flatten" && named + } + AttributeSite::Variant => matches!( + name, + "rename" + | "alias" + | "rename_all" + | "skip" + | "skip_serializing" + | "skip_deserializing" + | "untagged" + ), + } +} + +fn serde_attribute_intentionally_unsupported(name: &str) -> bool { + matches!( + name, + "serialize_with" + | "bound" + | "borrow" + | "crate" + | "expecting" + | "other" + | "from" + | "try_from" + | "into" + | "remote" + | "transparent" + | "with" + | "getter" + ) +} + +fn unsupported_attribute_name(message: &str) -> String { + message + .split("unsupported serde attribute ") + .nth(1) + .and_then(|rest| rest.split_whitespace().next()) + .unwrap_or("syntax") + .to_owned() +} + +fn consume_optional_value(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result<()> { + if meta.input.peek(syn::Token![=]) { + let _ = meta.value()?.parse::()?; + } + Ok(()) +} + +fn parse_string_value(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result { + Ok(meta.value()?.parse::()?.value()) +} + +fn parse_serde_path_string_value(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result { + let value = meta.value()?.parse::()?.value(); + syn::parse_str::(&value) + .map_err(|_| meta.error("expected a string containing a function path"))?; + Ok(value) +} + +fn parse_validation_path_value(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result { + let expression = meta.value()?.parse::()?; + match expression { + Expr::Lit(ExprLit { + lit: Lit::Str(value), + .. + }) => Ok(value.value()), + Expr::Path(value) => Ok(path_text(&value.path)), + _ => Err(meta.error("expected a string or path")), + } +} + +fn parse_validation_attributes( + attributes: &[Attribute], + item: &str, +) -> Result> { + let mut parsed = ValidationAttributes::default(); + for attribute in attributes + .iter() + .filter(|value| value.path().is_ident("validate")) + { + attribute + .parse_nested_meta(|meta| { + if meta.path.is_ident("custom") || meta.path.is_ident("schema") { + meta.parse_nested_meta(|nested| { + if nested.path.is_ident("function") { + parsed + .validators + .insert(parse_validation_path_value(&nested)?); + } else { + consume_optional_value(&nested)?; + } + Ok(()) + })?; + } else if meta.path.is_ident("range") { + let mut range = ValidationRange { + min: None, + max: None, + }; + meta.parse_nested_meta(|nested| { + if nested.path.is_ident("min") { + range.min = Some(parse_integer_value(&nested)?); + } else if nested.path.is_ident("max") { + range.max = Some(parse_integer_value(&nested)?); + } else { + consume_optional_value(&nested)?; + } + Ok(()) + })?; + parsed.range = Some(range); + } else if meta.input.peek(syn::token::Paren) { + meta.parse_nested_meta(|nested| consume_optional_value(&nested))?; + } else { + consume_optional_value(&meta)?; + } + Ok(()) + }) + .map_err(|_| { + Report::new(SettingsError::InvalidAttribute { + attribute: "validate", + item: item.to_owned(), + }) + })?; + } + Ok(parsed) +} + +fn parse_integer_value(meta: &syn::meta::ParseNestedMeta<'_>) -> syn::Result { + let expression = meta.value()?.parse::()?; + match expression { + Expr::Lit(ExprLit { + lit: Lit::Int(value), + .. + }) => value.base10_parse(), + _ => Err(meta.error("expected integer literal")), + } +} + +fn literal_default_functions( + items: &[Item], +) -> Result, Report> { + let mut defaults = BTreeMap::new(); + for item in items { + let Item::Fn(function) = item else { + continue; + }; + let name = function.sig.ident.to_string(); + if !is_production_item(&function.attrs, &name)? { + continue; + } + let [Stmt::Expr(expression, None)] = function.block.stmts.as_slice() else { + continue; + }; + if let Some(value) = literal_expression(expression) { + defaults.insert(name, value); + } + } + Ok(defaults) +} + +fn is_production_item(attributes: &[Attribute], item: &str) -> Result> { + let conditional = attributes + .iter() + .filter(|attribute| { + attribute.path().is_ident("cfg") || attribute.path().is_ident("cfg_attr") + }) + .collect::>(); + if conditional.is_empty() { + return Ok(true); + } + if conditional.len() != 1 || !conditional[0].path().is_ident("cfg") { + return Err(Report::new(SettingsError::InvalidAttribute { + attribute: "cfg", + item: item.to_owned(), + })); + } + let syn::Meta::List(predicate) = &conditional[0].meta else { + return Err(Report::new(SettingsError::InvalidAttribute { + attribute: "cfg", + item: item.to_owned(), + })); + }; + let Ok(identifier) = syn::parse2::(predicate.tokens.clone()) else { + return Err(Report::new(SettingsError::InvalidAttribute { + attribute: "cfg", + item: item.to_owned(), + })); + }; + if identifier == "test" { + Ok(false) + } else { + Err(Report::new(SettingsError::InvalidAttribute { + attribute: "cfg", + item: item.to_owned(), + })) + } +} + +fn literal_expression(expression: &Expr) -> Option { + match expression { + Expr::Lit(ExprLit { lit, .. }) => match lit { + Lit::Str(value) => Some(value.value()), + Lit::ByteStr(value) => Some(String::from_utf8_lossy(&value.value()).into_owned()), + Lit::Byte(value) => Some(value.value().to_string()), + Lit::Char(value) => Some(value.value().to_string()), + Lit::Int(value) => Some(value.base10_digits().to_owned()), + Lit::Float(value) => Some(value.base10_digits().to_owned()), + Lit::Bool(value) => Some(value.value.to_string()), + _ => None, + }, + Expr::Unary(unary) if matches!(unary.op, UnOp::Neg(_)) => match unary.expr.as_ref() { + Expr::Lit(ExprLit { + lit: Lit::Int(value), + .. + }) => Some(format!("-{}", value.base10_digits())), + Expr::Lit(ExprLit { + lit: Lit::Float(value), + .. + }) => Some(format!("-{}", value.base10_digits())), + _ => None, + }, + _ => None, + } +} + +fn option_inner(field_type: &Type) -> bool { + let Type::Path(path) = field_type else { + return false; + }; + path.path + .segments + .last() + .is_some_and(|segment| segment.ident == "Option") +} + +fn path_text(path: &Path) -> String { + path.segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::>() + .join("::") +} + +#[derive(Clone, Copy)] +enum RenameTarget { + Field, + Variant, +} + +fn valid_rename_rule(rule: &str) -> bool { + matches!( + rule, + "lowercase" + | "UPPERCASE" + | "PascalCase" + | "camelCase" + | "snake_case" + | "SCREAMING_SNAKE_CASE" + | "kebab-case" + | "SCREAMING-KEBAB-CASE" + ) +} + +fn apply_rename_rule(name: &str, rule: Option<&str>, target: RenameTarget) -> String { + let Some(rule) = rule else { + return name.to_owned(); + }; + debug_assert!(valid_rename_rule(rule), "rename rules should be validated"); + match target { + RenameTarget::Field => apply_field_rename_rule(name, rule), + RenameTarget::Variant => apply_variant_rename_rule(name, rule), + } +} + +fn apply_field_rename_rule(name: &str, rule: &str) -> String { + match rule { + "lowercase" | "snake_case" => name.to_owned(), + "UPPERCASE" => name.to_ascii_uppercase(), + "PascalCase" => { + let mut output = String::new(); + let mut capitalize = true; + for character in name.chars() { + if character == '_' { + capitalize = true; + } else if capitalize { + output.push(character.to_ascii_uppercase()); + capitalize = false; + } else { + output.push(character); + } + } + output + } + "camelCase" => { + let pascal = apply_field_rename_rule(name, "PascalCase"); + let mut characters = pascal.chars(); + match characters.next() { + Some(first) => first.to_ascii_lowercase().to_string() + characters.as_str(), + None => String::new(), + } + } + "SCREAMING_SNAKE_CASE" => name.to_ascii_uppercase(), + "kebab-case" => name.replace('_', "-"), + "SCREAMING-KEBAB-CASE" => name.to_ascii_uppercase().replace('_', "-"), + _ => unreachable!("validated rename rule should be complete"), + } +} + +fn apply_variant_rename_rule(name: &str, rule: &str) -> String { + match rule { + "PascalCase" => name.to_owned(), + "lowercase" => name.to_ascii_lowercase(), + "UPPERCASE" => name.to_ascii_uppercase(), + "camelCase" => { + let mut characters = name.chars(); + match characters.next() { + Some(first) => first.to_ascii_lowercase().to_string() + characters.as_str(), + None => String::new(), + } + } + "snake_case" => { + let mut output = String::new(); + for (index, character) in name.char_indices() { + if index > 0 && character.is_uppercase() { + output.push('_'); + } + output.push(character.to_ascii_lowercase()); + } + output + } + "SCREAMING_SNAKE_CASE" => { + apply_variant_rename_rule(name, "snake_case").to_ascii_uppercase() + } + "kebab-case" => apply_variant_rename_rule(name, "snake_case").replace('_', "-"), + "SCREAMING-KEBAB-CASE" => { + apply_variant_rename_rule(name, "SCREAMING_SNAKE_CASE").replace('_', "-") + } + _ => unreachable!("validated rename rule should be complete"), + } +} + +#[cfg(test)] +mod alias_tests { + use super::*; + + fn alias_manifest(rows: &[(&str, &str)]) -> CompanionManifest { + let mut source = "version = 1\nreviewed = true\n".to_owned(); + for (path, target) in rows { + source.push_str(&format!( + r#" + [[fields]] + path = "{path}" + lifecycle = "deprecated" + key_identity = "alias" + alias_of = "{target}" + serialization = "skipped" + runtime = "deserialization_only" + secret = "none" + "# + )); + } + CompanionManifest::parse(&source).expect("alias fixture manifest should parse") + } + + #[test] + fn source_alias_targets_cover_struct_fields_and_enum_variants() { + let source = r#" + struct FieldFixture { + #[serde(rename = "current", alias = "legacy")] + value: String, + } + + enum AssetOriginAuth { + #[serde(rename = "s3_sigv4", alias = "s3_sig_v4")] + S3, + } + "#; + let schema = extract_schema("fixture.rs", source, &empty_manifest()) + .expect("alias fixture should extract"); + let targets = source_alias_targets(&[schema]).expect("aliases should be unique"); + assert_eq!( + targets, + BTreeMap::from([ + ( + "AssetOriginAuth.s3_sig_v4".to_owned(), + "AssetOriginAuth.s3_sigv4".to_owned(), + ), + ( + "FieldFixture.legacy".to_owned(), + "FieldFixture.current".to_owned(), + ), + ]) + ); + verify_alias_dispositions( + &alias_manifest(&[ + ("AssetOriginAuth.s3_sig_v4", "AssetOriginAuth.s3_sigv4"), + ("FieldFixture.legacy", "FieldFixture.current"), + ]), + &targets, + ) + .expect("reviewed alias targets should equal source-derived targets"); + } + + #[test] + fn alias_dispositions_reject_stale_nonexistent_and_wrong_canonical_targets() { + let targets = BTreeMap::from([("Fixture.legacy".to_owned(), "Fixture.current".to_owned())]); + for manifest in [ + alias_manifest(&[ + ("Fixture.legacy", "Fixture.current"), + ("Fixture.stale", "Fixture.current"), + ]), + alias_manifest(&[("Fixture.legacy", "Fixture.missing")]), + alias_manifest(&[("Fixture.legacy", "Other.current")]), + ] { + let error = verify_alias_dispositions(&manifest, &targets) + .expect_err("stale or incorrect alias truth must fail closed"); + assert!( + error + .to_string() + .contains("source-derived alias disposition set") + ); + } + } + + #[test] + fn source_alias_targets_reject_duplicate_aliases() { + let source = r#" + struct Fixture { + #[serde(alias = "legacy")] + first: String, + #[serde(alias = "legacy")] + second: String, + } + "#; + let schema = extract_schema("fixture.rs", source, &empty_manifest()) + .expect("field extraction should retain both alias declarations"); + let error = source_alias_targets(&[schema]) + .expect_err("duplicate source aliases must be rejected as ambiguous"); + assert!(error.to_string().contains("duplicate source alias")); + } + + #[test] + fn alias_manifest_rejects_duplicate_paths() { + let source = r#" + version = 1 + reviewed = true + + [[fields]] + path = "Fixture.legacy" + lifecycle = "deprecated" + key_identity = "alias" + alias_of = "Fixture.current" + serialization = "skipped" + runtime = "deserialization_only" + secret = "none" + + [[fields]] + path = "Fixture.legacy" + lifecycle = "deprecated" + key_identity = "alias" + alias_of = "Fixture.other" + serialization = "skipped" + runtime = "deserialization_only" + secret = "none" + "#; + let error = CompanionManifest::parse(source) + .expect_err("duplicate reviewed alias paths must fail closed"); + assert!( + error + .to_string() + .contains("duplicate field disposition path") + ); + } + + fn empty_manifest() -> CompanionManifest { + CompanionManifest::parse("version = 1\nreviewed = true\n") + .expect("empty fixture manifest should parse") + } +} diff --git a/tools/docs-parity/tests/classification.rs b/tools/docs-parity/tests/classification.rs new file mode 100644 index 000000000..0143ee4b6 --- /dev/null +++ b/tools/docs-parity/tests/classification.rs @@ -0,0 +1,988 @@ +use std::env; +use std::fs; +#[cfg(unix)] +use std::os::unix::fs::symlink; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; + +use sha2::{Digest as _, Sha256}; +use tempfile::TempDir; + +const SUCCESS: i32 = 0; +const ERROR: i32 = 2; + +struct TestRepository { + directory: TempDir, +} + +impl TestRepository { + fn new() -> Self { + let directory = tempfile::tempdir().expect("should create test repository"); + run_git(directory.path(), &["init", "--quiet"]); + Self { directory } + } + + fn path(&self) -> &Path { + self.directory.path() + } + + fn track(&self, path: &str, contents: &[u8]) { + let absolute = self.path().join(path); + if let Some(parent) = absolute.parent() { + fs::create_dir_all(parent).expect("should create tracked file parent"); + } + fs::write(&absolute, contents).expect("should write tracked file"); + run_git(self.path(), &["add", "--", path]); + } + + fn manifests(&self, tracked: &str, maintained: &str) { + let directory = self.path().join("tools/docs-parity/manifests"); + fs::create_dir_all(&directory).expect("should create manifest directory"); + fs::write(directory.join("tracked-files.toml"), tracked) + .expect("should write tracked-files manifest"); + fs::write(directory.join("maintained-sources.toml"), maintained) + .expect("should write maintained-sources manifest"); + } + + fn classify(&self) -> Output { + Command::new(binary()) + .current_dir(self.path()) + .args(["classify", "--check"]) + .output() + .expect("should execute docs-parity") + } + + fn update_classification(&self) -> Output { + Command::new(binary()) + .current_dir(self.path()) + .args(["classify", "--update"]) + .output() + .expect("should execute docs-parity") + } +} + +fn binary() -> PathBuf { + PathBuf::from(env!("CARGO_BIN_EXE_docs-parity")) +} + +fn run_git(repository: &Path, arguments: &[&str]) { + let status = Command::new("git") + .args(arguments) + .current_dir(repository) + .status() + .expect("should execute git"); + assert!(status.success(), "git command should succeed"); +} + +fn status_code(output: &Output) -> i32 { + output.status.code().expect("should exit normally") +} + +fn diagnostic(output: &Output) -> String { + String::from_utf8(output.stderr.clone()).expect("diagnostic should be UTF-8") +} + +fn text_manifest(path: &str, maximum: usize) -> String { + format!( + "version = 1\nreviewed = true\nmax_text_bytes = {maximum}\n\n[[files]]\npath = \"{path}\"\nkind = \"text\"\n" + ) +} + +fn binary_manifest(path: &str) -> String { + format!( + "version = 1\nreviewed = true\nmax_text_bytes = 1024\n\n[[files]]\npath = \"{path}\"\nkind = \"binary\"\n" + ) +} + +fn whole_source(path: &str) -> String { + format!( + "version = 1\nreviewed = true\n\n[[sources]]\npath = \"{path}\"\nmode = \"whole\"\ndisposition = \"include\"\n" + ) +} + +fn comment_source(path: &str, grammar: &str, comments: &[(&str, &str)]) -> String { + let mut manifest = format!( + "version = 1\nreviewed = true\n\n[[sources]]\npath = \"{path}\"\nmode = \"comments\"\ngrammar = \"{grammar}\"\n" + ); + for (selector, contents) in comments { + manifest.push_str(&format!( + "\n[[comments]]\npath = \"{path}\"\nselector = \"{selector}\"\nfingerprint = \"{}\"\ndisposition = \"include\"\n", + fingerprint(contents.as_bytes()) + )); + } + manifest +} + +fn fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +#[test] +fn tracked_manifest_requires_explicit_review_attestation() { + let repository = TestRepository::new(); + repository.track("notes.txt", b"reviewed text\n"); + repository.manifests( + "version = 1\nmax_text_bytes = 1024\n\n[[files]]\npath = \"notes.txt\"\nkind = \"text\"\n", + &whole_source("notes.txt"), + ); + let result = repository.classify(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("reviewed")); +} + +#[test] +fn maintained_manifest_requires_explicit_review_attestation() { + let repository = TestRepository::new(); + repository.track("notes.txt", b"reviewed text\n"); + repository.manifests( + &text_manifest("notes.txt", 1024), + "version = 1\n\n[[sources]]\npath = \"notes.txt\"\nmode = \"whole\"\ndisposition = \"include\"\n", + ); + let result = repository.classify(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("reviewed")); +} + +#[test] +fn complete_text_and_binary_classification_passes() { + let repository = TestRepository::new(); + repository.track("notes.txt", b"reviewed text\n"); + repository.track("image.bin", &[0, 1, 2, 255]); + repository.manifests( + "version = 1\nreviewed = true\nmax_text_bytes = 1024\n\n[[files]]\npath = \"image.bin\"\nkind = \"binary\"\n\n[[files]]\npath = \"notes.txt\"\nkind = \"text\"\n", + &whole_source("notes.txt"), + ); + + let result = repository.classify(); + + assert_eq!( + status_code(&result), + SUCCESS, + "complete classification should pass: {}", + diagnostic(&result) + ); +} + +#[test] +fn unknown_text_extension_fails_closed() { + assert_unclassified("notes.unknown", b"human text\n"); +} + +#[test] +fn unknown_binary_fails_closed() { + assert_unclassified("blob.dat", &[0, 159, 146, 150]); +} + +#[test] +fn new_dockerfile_fails_closed() { + assert_unclassified("nested/Dockerfile", b"FROM scratch\n"); +} + +#[test] +fn new_mjs_file_fails_closed() { + assert_unclassified("scripts/new-build.mjs", b"export default {};\n"); +} + +#[test] +fn new_proto_file_fails_closed() { + assert_unclassified("schema/new.proto", b"syntax = \"proto3\";\n"); +} + +fn assert_unclassified(path: &str, contents: &[u8]) { + let repository = TestRepository::new(); + repository.track("known.txt", b"known\n"); + repository.track(path, contents); + repository.manifests( + &text_manifest("known.txt", 1024), + &whole_source("known.txt"), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "unknown path should fail"); + assert!( + diagnostic(&result).contains(&format!("unclassified tracked path: {path}")), + "diagnostic should identify the unknown path: {}", + diagnostic(&result) + ); +} + +#[test] +fn invalid_utf8_in_expected_text_fails_closed() { + let repository = TestRepository::new(); + repository.track("notes.txt", &[0xff, 0xfe]); + repository.manifests( + &text_manifest("notes.txt", 1024), + &whole_source("notes.txt"), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "invalid UTF-8 should fail"); + assert!( + diagnostic(&result).contains("expected text is not valid UTF-8: notes.txt"), + "diagnostic should identify invalid UTF-8: {}", + diagnostic(&result) + ); +} + +#[test] +fn oversized_expected_text_fails_closed() { + let repository = TestRepository::new(); + repository.track("notes.txt", b"nine bytes"); + repository.manifests(&text_manifest("notes.txt", 4), &whole_source("notes.txt")); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "oversized text should fail"); + assert!( + diagnostic(&result).contains("expected text exceeds 4 bytes: notes.txt"), + "diagnostic should identify the size boundary: {}", + diagnostic(&result) + ); +} + +#[test] +fn human_facing_comment_outside_selector_fails_closed() { + let repository = TestRepository::new(); + repository.track("script.sh", b"# reviewed\necho ok\n# newly added\n"); + repository.manifests( + &text_manifest("script.sh", 1024), + &comment_source("script.sh", "shell", &[("bytes:0-10", "# reviewed")]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "new comment should fail"); + assert!( + diagnostic(&result).contains("unclassified comment span: script.sh:bytes:19-32"), + "diagnostic should identify the new span: {}", + diagnostic(&result) + ); +} + +#[test] +fn comment_syntax_without_an_extractor_fails_closed() { + let repository = TestRepository::new(); + repository.track("workflow.weird", b"%% operator guidance\n"); + repository.manifests( + &text_manifest("workflow.weird", 1024), + &comment_source("workflow.weird", "percent-pairs", &[]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "unknown grammar should fail"); + assert!( + diagnostic(&result).contains("unsupported comment grammar: percent-pairs"), + "diagnostic should identify the grammar: {}", + diagnostic(&result) + ); +} + +#[test] +fn an_unclassified_extracted_comment_span_fails_closed() { + let repository = TestRepository::new(); + repository.track("config.toml", b"# operator guidance\nkey = \"value\"\n"); + repository.manifests( + &text_manifest("config.toml", 1024), + &comment_source("config.toml", "toml", &[]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "unclassified span should fail"); + assert!( + diagnostic(&result).contains("unclassified comment span: config.toml:bytes:0-19"), + "diagnostic should identify the span: {}", + diagnostic(&result) + ); +} + +#[test] +fn trailing_comments_are_extracted_without_treating_string_markers_as_comments() { + for (path, grammar, contents, comment) in [ + ( + "script.sh", + "shell", + "value=\"# literal\" # shell note\n", + "# shell note", + ), + ( + "config.toml", + "toml", + "value = \"# literal\" # toml note\n", + "# toml note", + ), + ( + "config.yaml", + "yaml", + "value: \"# literal\" # yaml note\n", + "# yaml note", + ), + ( + "script.js", + "javascript", + "const x = \"// literal\"; // js note\n", + "// js note", + ), + ( + "schema.proto", + "protobuf", + "string x = 1; // proto note\n", + "// proto note", + ), + ] { + let start = contents.find(comment).expect("comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track(path, contents.as_bytes()); + repository.manifests( + &text_manifest(path, 1024), + &comment_source(path, grammar, &[(&selector, comment)]), + ); + let result = repository.classify(); + assert_eq!( + status_code(&result), + SUCCESS, + "{grammar}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn multiple_block_comments_on_one_line_have_distinct_byte_selectors() { + let contents = "let x = /* first */ 1 + /* second */ 2;\n"; + let repository = TestRepository::new(); + repository.track("script.js", contents.as_bytes()); + repository.manifests( + &text_manifest("script.js", 1024), + &comment_source( + "script.js", + "javascript", + &[ + ("bytes:8-19", "/* first */"), + ("bytes:24-36", "/* second */"), + ], + ), + ); + let result = repository.classify(); + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); +} + +#[test] +fn grammar_specific_comment_states_handle_templates_escapes_and_multiline_scalars() { + for (path, grammar, contents, comment) in [ + ( + "build.mjs", + "javascript", + "const x = `raw /* no */ ${input /* operator */}`;\n", + "/* operator */", + ), + ( + "script.sh", + "shell", + "echo value \\# literal # operator\n", + "# operator", + ), + ( + "config.toml", + "toml", + "value = \"\"\"# literal\ntext\"\"\" # operator\n", + "# operator", + ), + ( + "config.yaml", + "yaml", + "value: |\n # scalar text\nnext: ok # operator\n", + "# operator", + ), + ] { + let start = contents.find(comment).expect("comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track(path, contents.as_bytes()); + repository.manifests( + &text_manifest(path, 2048), + &comment_source(path, grammar, &[(&selector, comment)]), + ); + let result = repository.classify(); + assert_eq!( + status_code(&result), + SUCCESS, + "{grammar}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn multiline_quotes_and_nested_templates_close_before_guidance_comments() { + for (path, grammar, contents, comment) in [ + ( + "script.sh", + "shell", + "value='literal\n# string content\n' # operator guidance\n", + "# operator guidance", + ), + ( + "config.yaml", + "yaml", + "value: 'literal\n# string content\n' # operator guidance\n", + "# operator guidance", + ), + ( + "build.mjs", + "javascript", + "const x = `${outer ? `${inner}` : value}`; // operator guidance\n", + "// operator guidance", + ), + ] { + let start = contents.find(comment).expect("comment"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track(path, contents.as_bytes()); + repository.manifests( + &text_manifest(path, 2048), + &comment_source(path, grammar, &[(&selector, comment)]), + ); + let result = repository.classify(); + assert_eq!( + status_code(&result), + SUCCESS, + "{grammar}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn unterminated_comment_grammar_states_fail_closed() { + for (path, grammar, contents) in [ + ("script.sh", "shell", "value='open\n"), + ("config.yaml", "yaml", "value: 'open\n"), + ("build.mjs", "javascript", "const x = `open ${value;"), + ("build.js", "javascript", "/* open"), + ] { + let repository = TestRepository::new(); + repository.track(path, contents.as_bytes()); + repository.manifests( + &text_manifest(path, 2048), + &comment_source(path, grammar, &[]), + ); + let result = repository.classify(); + assert_eq!( + status_code(&result), + ERROR, + "{grammar} unterminated state must fail" + ); + } +} + +#[test] +fn toml_comment_lexer_handles_every_string_form_and_escape_rule() { + for (contents, comment) in [ + ( + "value = \"escaped \\\"# literal\" # guidance\n", + "# guidance", + ), + ("value = '# literal' # guidance\n", "# guidance"), + ( + "value = \"\"\"first \\\n+# literal\nlast\"\"\" # guidance\n", + "# guidance", + ), + ( + "value = '''first\n# literal\nlast''' # guidance\n", + "# guidance", + ), + ] { + let start = contents + .rfind(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("config.toml", contents.as_bytes()); + repository.manifests( + &text_manifest("config.toml", 2048), + &comment_source("config.toml", "toml", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + } +} + +#[test] +fn every_unterminated_toml_string_form_fails_closed() { + for contents in [ + "value = \"open\n", + "value = 'open\n", + "value = \"\"\"open\n", + "value = '''open\n", + "value = \"escaped \\", + ] { + let repository = TestRepository::new(); + repository.track("config.toml", contents.as_bytes()); + repository.manifests( + &text_manifest("config.toml", 2048), + &comment_source("config.toml", "toml", &[]), + ); + + let result = repository.classify(); + + assert_eq!( + status_code(&result), + ERROR, + "unterminated TOML lexical state must fail: {contents}" + ); + } +} + +#[test] +fn javascript_comment_lexer_tracks_regex_and_nested_template_interpolation() { + let contents = + "const value = `${outer ? /[/*]/.test(input) : `${inner ? \"}\" : value}`}`; // guidance\n"; + let comment = "// guidance"; + let start = contents + .find(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("build.mjs", contents.as_bytes()); + repository.manifests( + &text_manifest("build.mjs", 2048), + &comment_source("build.mjs", "javascript", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); +} + +#[test] +fn javascript_keyword_led_regex_and_division_preserve_trailing_comment_boundaries() { + for contents in [ + "function check(input) { return /[/*]/.test(input); } // guidance\n", + "const ratio = numerator / denominator; // guidance\n", + ] { + let comment = "// guidance"; + let start = contents + .rfind(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("build.mjs", contents.as_bytes()); + repository.manifests( + &text_manifest("build.mjs", 2048), + &comment_source("build.mjs", "javascript", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + } +} + +#[test] +fn toml_multiline_strings_accept_four_and_five_quote_terminators() { + for contents in [ + "value = \"\"\"foo\"\"\"\" # guidance\n", + "value = \"\"\"foo\"\"\"\"\" # guidance\n", + ] { + let comment = "# guidance"; + let start = contents + .rfind(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("config.toml", contents.as_bytes()); + repository.manifests( + &text_manifest("config.toml", 2048), + &comment_source("config.toml", "toml", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + } +} + +#[test] +fn shell_hash_requires_a_comment_boundary() { + let contents = "echo foo#bar\necho foo # guidance\n"; + let comment = "# guidance"; + let start = contents + .rfind(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("script.sh", contents.as_bytes()); + repository.manifests( + &text_manifest("script.sh", 2048), + &comment_source("script.sh", "shell", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); +} + +#[test] +fn yaml_chomping_block_scalars_keep_hash_lines_literal() { + for indicator in ["|-", "|+", ">-", ">+"] { + let contents = format!("value: {indicator}\n # scalar text\nnext: ok # guidance\n"); + let comment = "# guidance"; + let start = contents + .rfind(comment) + .expect("guidance comment should exist"); + let selector = format!("bytes:{start}-{}", start + comment.len()); + let repository = TestRepository::new(); + repository.track("config.yaml", contents.as_bytes()); + repository.manifests( + &text_manifest("config.yaml", 2048), + &comment_source("config.yaml", "yaml", &[(&selector, comment)]), + ); + + let result = repository.classify(); + + assert_eq!( + status_code(&result), + SUCCESS, + "{indicator}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn malformed_javascript_template_escape_fails_closed() { + let contents = "const value = `${value\\``;\n"; + let repository = TestRepository::new(); + repository.track("build.mjs", contents.as_bytes()); + repository.manifests( + &text_manifest("build.mjs", 2048), + &comment_source("build.mjs", "javascript", &[]), + ); + + let result = repository.classify(); + + assert_eq!( + status_code(&result), + ERROR, + "escaped template delimiter inside interpolation must not close the outer template" + ); +} + +#[test] +fn comment_records_cannot_reference_unknown_or_whole_file_sources() { + for maintained in [ + format!( + "{}\n[[comments]]\npath = \"deleted.sh\"\nselector = \"bytes:0-3\"\nfingerprint = \"{}\"\ndisposition = \"include\"\n", + whole_source("notes.txt"), + fingerprint(b"# x") + ), + format!( + "{}\n[[comments]]\npath = \"notes.txt\"\nselector = \"bytes:0-3\"\nfingerprint = \"{}\"\ndisposition = \"include\"\n", + whole_source("notes.txt"), + fingerprint(b"# x") + ), + ] { + let repository = TestRepository::new(); + repository.track("notes.txt", b"text\n"); + repository.manifests(&text_manifest("notes.txt", 1024), &maintained); + let result = repository.classify(); + assert_eq!(status_code(&result), ERROR); + } +} + +#[test] +fn a_stale_comment_fingerprint_fails_closed() { + let repository = TestRepository::new(); + repository.track("script.sh", b"# changedx\necho ok\n"); + repository.manifests( + &text_manifest("script.sh", 1024), + &comment_source("script.sh", "shell", &[("bytes:0-10", "# reviewed")]), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "stale selector should fail"); + assert!( + diagnostic(&result).contains("comment fingerprint mismatch: script.sh:bytes:0-10"), + "diagnostic should identify stale content: {}", + diagnostic(&result) + ); +} + +#[cfg(unix)] +#[test] +fn tracked_symlink_escape_fails_closed() { + let repository = TestRepository::new(); + let outside = tempfile::tempdir().expect("should create outside directory"); + fs::write(outside.path().join("outside.txt"), "outside\n") + .expect("should write outside target"); + symlink( + outside.path().join("outside.txt"), + repository.path().join("escape.txt"), + ) + .expect("should create escaping symlink"); + run_git(repository.path(), &["add", "escape.txt"]); + repository.manifests( + &text_manifest("escape.txt", 1024), + &whole_source("escape.txt"), + ); + + let result = repository.classify(); + + assert_eq!(status_code(&result), ERROR, "symlink escape should fail"); + assert!( + diagnostic(&result).contains("repository path escapes through a symlink"), + "diagnostic should identify the repository boundary: {}", + diagnostic(&result) + ); +} + +#[test] +fn binary_entries_do_not_use_utf8_sniffing_as_authority() { + let repository = TestRepository::new(); + repository.track("plain-looking.bin", b"valid UTF-8 is still binary\n"); + repository.manifests( + &binary_manifest("plain-looking.bin"), + "version = 1\nreviewed = true\n", + ); + + let result = repository.classify(); + + assert_eq!( + status_code(&result), + SUCCESS, + "manifest binary authority should pass: {}", + diagnostic(&result) + ); +} + +#[test] +fn update_marks_new_and_moved_comment_spans_for_review() { + let repository = TestRepository::new(); + repository.track("script.sh", b"\n# reviewed\necho ok\n# new\n"); + repository.manifests( + &text_manifest("script.sh", 1024), + &comment_source("script.sh", "shell", &[("bytes:0-10", "# reviewed")]), + ); + + let updated = repository.update_classification(); + let maintained = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/maintained-sources.toml"), + ) + .expect("should read refreshed maintained manifest"); + let checked = repository.classify(); + + assert_eq!( + status_code(&updated), + SUCCESS, + "candidate update should succeed: {}", + diagnostic(&updated) + ); + assert!( + maintained.contains("selector = \"bytes:1-11\"") + && maintained.contains("selector = \"bytes:20-25\"") + && maintained.contains("reviewed = false") + && maintained.matches("disposition = \"include\"").count() == 2, + "moved and new spans should require review: {maintained}" + ); + assert_eq!( + status_code(&checked), + ERROR, + "review-required comment candidates should fail check" + ); +} + +#[test] +fn update_never_silently_approves_a_sniffed_binary_kind() { + let repository = TestRepository::new(); + repository.track("unknown.payload", &[0xff, 0xfe, 0xfd]); + repository.manifests( + "version = 1\nreviewed = true\nmax_text_bytes = 1024\n", + "version = 1\nreviewed = true\n", + ); + + let updated = repository.update_classification(); + let tracked = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/tracked-files.toml"), + ) + .expect("should read refreshed tracked manifest"); + let checked = repository.classify(); + + assert_eq!( + status_code(&updated), + SUCCESS, + "candidate update should succeed: {}", + diagnostic(&updated) + ); + assert!( + tracked.contains("path = \"unknown.payload\"") + && tracked.contains("kind = \"binary\"") + && tracked.contains("reviewed = false"), + "sniffed kind should be an explicit unreviewed candidate: {tracked}" + ); + assert_eq!( + status_code(&checked), + ERROR, + "unreviewed kind should fail check" + ); + assert!( + diagnostic(&checked).contains("tracked-file candidates require review"), + "diagnostic should require manual path classification: {}", + diagnostic(&checked) + ); +} + +#[test] +fn update_rejects_malformed_reviewed_prior_manifests() { + let cases = [ + ( + "version = 1\nreviewed = true\nmax_text_bytes = 1024\n\n[[files]]\npath = \"notes.txt\"\nkind = \"text\"\n\n[[files]]\npath = \"notes.txt\"\nkind = \"binary\"\n".to_owned(), + whole_source("notes.txt"), + ), + ( + text_manifest("notes.txt", 1024), + format!("{}\n[[sources]]\npath = \"notes.txt\"\nmode = \"whole\"\ndisposition = \"exclude\"\nexclude_kind = \"historical\"\n", whole_source("notes.txt")), + ), + ( + text_manifest("notes.txt", 1024), + "version = 2\nreviewed = true\n".to_owned(), + ), + ]; + for (tracked, maintained) in cases { + let repository = TestRepository::new(); + repository.track("notes.txt", b"guidance\n"); + repository.manifests(&tracked, &maintained); + let before_tracked = fs::read( + repository + .path() + .join("tools/docs-parity/manifests/tracked-files.toml"), + ) + .expect("read tracked"); + let before_maintained = fs::read( + repository + .path() + .join("tools/docs-parity/manifests/maintained-sources.toml"), + ) + .expect("read maintained"); + let result = repository.update_classification(); + assert_eq!(status_code(&result), ERROR, "{}", diagnostic(&result)); + assert_eq!( + fs::read( + repository + .path() + .join("tools/docs-parity/manifests/tracked-files.toml") + ) + .expect("read tracked"), + before_tracked + ); + assert_eq!( + fs::read( + repository + .path() + .join("tools/docs-parity/manifests/maintained-sources.toml") + ) + .expect("read maintained"), + before_maintained + ); + } +} + +#[test] +fn github_operational_unknown_formats_fail_update() { + for path in [ + ".github/actions/run.unknown", + ".github/workflows/build.weird", + ] { + let repository = TestRepository::new(); + repository.track(path, b"# guidance\n"); + repository.manifests( + "version = 1\nreviewed = true\nmax_text_bytes = 1024\n", + "version = 1\nreviewed = true\n", + ); + let result = repository.update_classification(); + assert_eq!( + status_code(&result), + ERROR, + "{path}: {}", + diagnostic(&result) + ); + assert!(diagnostic(&result).contains("unsupported GitHub operational format")); + } +} + +#[test] +fn real_maintained_manifest_preserves_reader_facing_sets_and_typed_excludes() { + let manifest = fs::read_to_string( + Path::new(env!("CARGO_MANIFEST_DIR")).join("manifests/maintained-sources.toml"), + ) + .expect("should read real maintained-source manifest"); + + for path in [ + ".claude/agents/build-validator.md", + ".claude/skills/deploying-trusted-server-to-fastly/SKILL.md", + ".github/pull_request_template.md", + "README.md", + "docs/guide/index.md", + ] { + let record = source_record(&manifest, path); + assert!( + record.contains("mode = \"whole\"") && record.contains("disposition = \"include\""), + "reader-facing Markdown must be whole-file included: {path}\n{record}" + ); + } + + for (path, kind) in [ + ("Cargo.lock", "machine_data"), + ("crates/trusted-server-core/src/lib.rs", "source_code"), + ( + "crates/trusted-server-integration-tests/fixtures/frameworks/nextjs/package.json", + "test_fixture", + ), + ( + "docs/superpowers/specs/2026-08-19-documentation-refresh-design.md", + "historical", + ), + ] { + let record = source_record(&manifest, path); + assert!( + record.contains("disposition = \"exclude\"") + && record.contains(&format!("exclude_kind = \"{kind}\"")), + "non-maintained text must carry its precise typed exclusion: {path}\n{record}" + ); + } + + for (path, grammar) in [ + ( + "crates/trusted-server-openrtb/proto/openrtb.proto", + "protobuf", + ), + ("crates/trusted-server-js/lib/build-all.mjs", "javascript"), + ("scripts/test-cli.sh", "shell"), + ] { + let record = source_record(&manifest, path); + assert!( + record.contains("mode = \"comments\"") + && record.contains(&format!("grammar = \"{grammar}\"")), + "operational comment surface must use an extractor: {path}\n{record}" + ); + } +} + +fn source_record<'a>(manifest: &'a str, path: &str) -> &'a str { + let marker = format!("[[sources]]\npath = \"{path}\"\n"); + manifest + .split_once(&marker) + .and_then(|(_before, after)| after.split("\n[[sources]]").next()) + .expect("source record should exist") +} diff --git a/tools/docs-parity/tests/cli.rs b/tools/docs-parity/tests/cli.rs new file mode 100644 index 000000000..d3a23550c --- /dev/null +++ b/tools/docs-parity/tests/cli.rs @@ -0,0 +1,677 @@ +use std::env; +use std::fs; +#[cfg(unix)] +use std::os::unix::fs::{PermissionsExt as _, symlink}; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; + +use docs_parity::model::{Expiry, Governance, Owner, Rationale}; +use tempfile::TempDir; + +const SUCCESS: i32 = 0; +const DRIFT: i32 = 1; +const ERROR: i32 = 2; + +struct TestRepository { + directory: TempDir, +} + +impl TestRepository { + fn new(paths: &[&str]) -> Self { + let directory = tempfile::tempdir().expect("should create test repository directory"); + run_git(directory.path(), &["init", "--quiet"]); + + for path in paths { + let absolute = directory.path().join(path); + if let Some(parent) = absolute.parent() { + fs::create_dir_all(parent).expect("should create tracked file parent"); + } + fs::write(&absolute, format!("contents for {path}\n")) + .expect("should write tracked file"); + } + + run_git(directory.path(), &["add", "--all"]); + Self { directory } + } + + fn path(&self) -> &Path { + self.directory.path() + } + + fn command(&self) -> Command { + command_in(self.path()) + } +} + +fn binary() -> PathBuf { + PathBuf::from(env!("CARGO_BIN_EXE_docs-parity")) +} + +fn command_in(directory: &Path) -> Command { + let mut command = Command::new(binary()); + command.current_dir(directory); + command +} + +fn output(command: &mut Command) -> Output { + command.output().expect("should execute docs-parity") +} + +fn run_git(repository: &Path, arguments: &[&str]) { + let status = Command::new("git") + .args(arguments) + .current_dir(repository) + .status() + .expect("should execute git"); + assert!(status.success(), "git command should succeed"); +} + +fn status_code(output: &Output) -> i32 { + output.status.code().expect("should exit normally") +} + +#[test] +fn governance_requires_typed_owner_rationale_and_expiry() { + let owner = Owner::new("documentation-maintainers").expect("owner should be valid"); + let rationale = Rationale::new("Bounded exception for a checked fixture") + .expect("rationale should be valid"); + let expiry = Expiry::parse("2027-01-02T03:04:05Z").expect("expiry should be valid"); + + let governance = Governance::new(owner, rationale, expiry); + + assert_eq!(governance.owner().as_str(), "documentation-maintainers"); + assert_eq!( + governance.rationale().as_str(), + "Bounded exception for a checked fixture" + ); + assert_eq!(governance.expiry().as_str(), "2027-01-02T03:04:05Z"); + assert!(Owner::new(" ").is_err(), "blank owner should fail"); + assert!(Rationale::new("").is_err(), "blank rationale should fail"); + assert!( + Expiry::parse("2027-01-02").is_err(), + "date-only expiry should fail" + ); +} + +#[test] +fn expiry_rejects_invalid_calendar_and_clock_components() { + assert!( + Expiry::parse("2024-02-29T23:59:59Z").is_ok(), + "leap day should be valid in a leap year" + ); + for invalid in [ + "0000-01-01T00:00:00Z", + "2024-00-01T00:00:00Z", + "2024-13-01T00:00:00Z", + "2024-01-00T00:00:00Z", + "2024-04-31T00:00:00Z", + "2023-02-29T00:00:00Z", + "2024-01-01T24:00:00Z", + "2024-01-01T00:60:00Z", + "2024-01-01T00:00:60Z", + ] { + assert!( + Expiry::parse(invalid).is_err(), + "invalid expiry should fail: {invalid}" + ); + } +} + +#[test] +fn help_is_deterministic() { + let first = output( + command_in( + env::current_dir() + .expect("should read current directory") + .as_path(), + ) + .arg("--help"), + ); + let second = output( + command_in( + env::current_dir() + .expect("should read current directory") + .as_path(), + ) + .arg("--help"), + ); + + assert_eq!(status_code(&first), SUCCESS, "help should succeed"); + assert_eq!(first.stdout, second.stdout, "help should be byte-stable"); + assert!( + String::from_utf8(first.stdout) + .expect("help should be UTF-8") + .contains("check"), + "help should list the check subcommand" + ); +} + +#[test] +fn unknown_subcommand_uses_the_cli_error_exit_code() { + let result = output( + command_in( + env::current_dir() + .expect("should read current directory") + .as_path(), + ) + .arg("unknown"), + ); + + assert_eq!( + status_code(&result), + ERROR, + "unknown subcommand should fail" + ); + assert!( + String::from_utf8(result.stderr) + .expect("diagnostic should be UTF-8") + .contains("unrecognized subcommand"), + "diagnostic should identify the unknown subcommand" + ); +} + +#[test] +fn repository_root_is_discovered_from_a_nested_directory() { + let repository = TestRepository::new(&["nested/deeper/source.txt"]); + let nested = repository.path().join("nested/deeper"); + + let updated = output(command_in(&nested).args([ + "update", + "--tracked-paths-record", + "generated/tracked-paths.txt", + ])); + let checked = output(command_in(&nested).args([ + "check", + "--tracked-paths-record", + "generated/tracked-paths.txt", + ])); + + assert_eq!( + status_code(&updated), + SUCCESS, + "update should find the repository root" + ); + assert_eq!( + status_code(&checked), + SUCCESS, + "check should find the repository root" + ); + assert!( + repository + .path() + .join("generated/tracked-paths.txt") + .is_file(), + "record should be rooted at the repository, not the nested directory" + ); +} + +#[test] +fn repository_root_preserves_trailing_whitespace() { + let parent = tempfile::tempdir().expect("should create repository parent"); + for root_name in ["repository ", "repository\r"] { + let repository = parent.path().join(root_name); + let nested = repository.join("nested"); + fs::create_dir_all(&nested).expect("should create trailing-whitespace repository"); + fs::write(repository.join("source.txt"), "source\n").expect("should write tracked file"); + run_git(&repository, &["init", "--quiet"]); + run_git(&repository, &["add", "--all"]); + + let result = output(command_in(&nested).args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + + assert_eq!( + status_code(&result), + SUCCESS, + "Git root with trailing whitespace should be preserved: {}", + String::from_utf8_lossy(&result.stderr) + ); + assert!( + repository.join("tracked-paths.txt").is_file(), + "record should be written inside the exact trailing-whitespace root" + ); + } +} + +#[test] +fn check_reports_drift_without_writing_and_update_repairs_it() { + let repository = TestRepository::new(&["source.txt"]); + let record = repository.path().join("tracked-paths.txt"); + + let missing = + output( + repository + .command() + .args(["check", "--tracked-paths-record", "tracked-paths.txt"]), + ); + assert_eq!( + status_code(&missing), + DRIFT, + "missing record should be drift" + ); + assert!( + !record.exists(), + "check mode should not create a missing record" + ); + + let updated = output(repository.command().args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + assert_eq!( + status_code(&updated), + SUCCESS, + "update should write the record" + ); + + fs::write(&record, "hand edited\n").expect("should alter generated record"); + let before = fs::read(&record).expect("should read altered record"); + let drift = + output( + repository + .command() + .args(["check", "--tracked-paths-record", "tracked-paths.txt"]), + ); + + assert_eq!(status_code(&drift), DRIFT, "stale record should be drift"); + assert_eq!( + fs::read(&record).expect("should reread altered record"), + before, + "check mode should not rewrite drift" + ); +} + +#[test] +fn absolute_paths_outside_the_repository_are_rejected() { + let repository = TestRepository::new(&["source.txt"]); + let outside = tempfile::tempdir().expect("should create outside directory"); + let outside_record = outside.path().join("tracked-paths.txt"); + + let result = output( + repository.command().args([ + "update", + "--tracked-paths-record", + outside_record + .to_str() + .expect("outside path should be UTF-8"), + ]), + ); + + assert_eq!(status_code(&result), ERROR, "outside path should fail"); + assert!( + !outside_record.exists(), + "outside path should not be written" + ); +} + +#[test] +fn unsafe_relative_paths_are_rejected() { + let repository = TestRepository::new(&["source.txt"]); + let outside_record = repository + .path() + .parent() + .expect("repository should have a parent") + .join("outside.txt"); + + let result = + output( + repository + .command() + .args(["update", "--tracked-paths-record", "../outside.txt"]), + ); + + assert_eq!(status_code(&result), ERROR, "parent traversal should fail"); + assert!( + !outside_record.exists(), + "parent traversal should not be written" + ); +} + +#[test] +fn git_admin_paths_are_rejected_without_writes() { + let check_repository = TestRepository::new(&["source.txt"]); + let update_repository = TestRepository::new(&["source.txt"]); + let check_config = check_repository.path().join(".git/config"); + let update_config = update_repository.path().join(".git/config"); + let check_before = fs::read(&check_config).expect("should read check Git config"); + let update_before = fs::read(&update_config).expect("should read update Git config"); + + let checked = + output( + check_repository + .command() + .args(["check", "--tracked-paths-record", ".git/config"]), + ); + let updated = output(update_repository.command().args([ + "update", + "--tracked-paths-record", + ".git/config", + ])); + + assert_eq!( + status_code(&checked), + ERROR, + "check should reject the Git administrative directory" + ); + assert_eq!( + status_code(&updated), + ERROR, + "update should reject the Git administrative directory" + ); + assert_eq!( + fs::read(&check_config).expect("should reread check Git config"), + check_before, + "check should preserve exact Git config bytes" + ); + assert_eq!( + fs::read(&update_config).expect("should reread update Git config"), + update_before, + "update should preserve exact Git config bytes" + ); +} + +#[test] +fn portable_ambiguous_paths_are_rejected() { + let repository = TestRepository::new(&["source.txt"]); + let git_config = repository.path().join(".git/config"); + let git_config_before = fs::read(&git_config).expect("should read Git config"); + let mut unsafe_paths = vec![ + "C:outside.txt".to_owned(), + "directory\\outside.txt".to_owned(), + "line\nbreak.txt".to_owned(), + "control\u{001f}.txt".to_owned(), + "record.txt:stream".to_owned(), + "record.txt".to_owned(), + "record>copy.txt".to_owned(), + "record\"copy.txt".to_owned(), + "record|copy.txt".to_owned(), + "record?copy.txt".to_owned(), + "record*copy.txt".to_owned(), + "record.".to_owned(), + "record ".to_owned(), + ".GiT/config".to_owned(), + "nested/.GIT/record.txt".to_owned(), + "COM¹.txt".to_owned(), + "com²".to_owned(), + "CoM³.log".to_owned(), + "LPT¹".to_owned(), + "lpt².txt".to_owned(), + "lpt³.log".to_owned(), + ]; + for device in [ + "CON", "PRN", "AUX", "NUL", "CLOCK$", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", + "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", + "LPT9", + ] { + unsafe_paths.push(device.to_owned()); + unsafe_paths.push(format!("{}.txt", device.to_ascii_lowercase())); + } + + for unsafe_path in unsafe_paths { + let result = + output( + repository + .command() + .args(["update", "--tracked-paths-record", &unsafe_path]), + ); + + assert_eq!( + status_code(&result), + ERROR, + "portable unsafe path should fail: {unsafe_path}" + ); + if !unsafe_path.to_ascii_lowercase().contains(".git/") { + assert!( + !repository.path().join(&unsafe_path).exists(), + "portable unsafe path should not be written: {unsafe_path}" + ); + } + } + assert_eq!( + fs::read(&git_config).expect("should reread Git config"), + git_config_before, + "case-insensitive Git administrative paths should preserve config bytes" + ); +} + +#[test] +fn portable_regular_lookalikes_are_allowed() { + let repository = TestRepository::new(&["source.txt"]); + + for record in [ + ".gitignore", + ".gitmodules", + "COM10.txt", + "COM¹extra.txt", + "lpt³more.log", + ] { + let result = + output( + repository + .command() + .args(["update", "--tracked-paths-record", record]), + ); + + assert_eq!( + status_code(&result), + SUCCESS, + "non-reserved portable file should be allowed: {record}" + ); + } +} + +#[test] +fn tracked_path_update_never_deletes_an_unknown_peer_stage() { + let repository = TestRepository::new(&["source.txt"]); + let record = repository.path().join("tracked-paths.txt"); + let staged = repository.path().join(".tracked-paths.txt.docs-parity.tmp"); + fs::write(&record, "previous complete record\n").expect("should write existing record"); + fs::write(&staged, "interrupted partial record\n").expect("should stage interrupted write"); + + let result = output(repository.command().args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + + assert_eq!( + status_code(&result), + SUCCESS, + "an unrelated stage name must not block the owned update: {}", + String::from_utf8_lossy(&result.stderr) + ); + assert_eq!( + fs::read_to_string(&staged).expect("should retain unknown peer stage"), + "interrupted partial record\n" + ); + assert_ne!( + fs::read_to_string(&record).expect("should read updated record"), + "previous complete record\n", + "the owned unique stage should replace the target" + ); +} + +#[test] +fn tracked_paths_are_written_in_stable_order() { + let repository = TestRepository::new(&["z-last.txt", "middle/value.txt", "a-first.txt"]); + let record = repository.path().join("tracked-paths.txt"); + + let first = output(repository.command().args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + let first_bytes = fs::read(&record).expect("should read first record"); + let second = output(repository.command().args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + + assert_eq!(status_code(&first), SUCCESS, "first update should succeed"); + assert_eq!( + status_code(&second), + SUCCESS, + "second update should succeed: {}", + String::from_utf8_lossy(&second.stderr) + ); + assert_eq!( + fs::read(&record).expect("should read second record"), + first_bytes, + "second update should be byte-stable" + ); + assert_eq!( + String::from_utf8(first_bytes).expect("record should be UTF-8"), + "a-first.txt\nmiddle/value.txt\nz-last.txt\n", + "tracked paths should use lexical ordering" + ); +} + +#[cfg(unix)] +#[test] +fn symlink_escape_is_rejected_at_the_repository_boundary() { + let repository = TestRepository::new(&["source.txt"]); + let outside = tempfile::tempdir().expect("should create outside directory"); + symlink(outside.path(), repository.path().join("escape")) + .expect("should create escaping symlink"); + + let result = output(repository.command().args([ + "update", + "--tracked-paths-record", + "escape/tracked-paths.txt", + ])); + + assert_eq!(status_code(&result), ERROR, "symlink escape should fail"); + assert!( + !outside.path().join("tracked-paths.txt").exists(), + "symlink escape should not be written" + ); +} + +#[cfg(unix)] +#[test] +fn dangling_output_symlink_is_rejected_without_replacement() { + let repository = TestRepository::new(&["source.txt"]); + let update_record = repository.path().join("update-record.txt"); + let check_record = repository.path().join("check-record.txt"); + let missing_target = Path::new("missing-target.txt"); + symlink(missing_target, &update_record).expect("should create update symlink"); + symlink(missing_target, &check_record).expect("should create check symlink"); + + let updated = output(repository.command().args([ + "update", + "--tracked-paths-record", + "update-record.txt", + ])); + let checked = + output( + repository + .command() + .args(["check", "--tracked-paths-record", "check-record.txt"]), + ); + + assert_eq!( + status_code(&updated), + ERROR, + "update should reject a dangling final symlink" + ); + assert_eq!( + status_code(&checked), + ERROR, + "check should reject a dangling final symlink" + ); + for record in [&update_record, &check_record] { + assert!( + fs::symlink_metadata(record) + .expect("should inspect final entry") + .file_type() + .is_symlink(), + "final entry should remain a symlink" + ); + assert_eq!( + fs::read_link(record).expect("should read final symlink"), + missing_target, + "final symlink target should remain unchanged" + ); + } + assert!( + !repository.path().join(missing_target).exists(), + "dangling target should not be created" + ); +} + +#[cfg(unix)] +#[test] +fn tracked_symlink_to_an_internal_regular_file_is_allowed() { + let repository = TestRepository::new(&["target.txt"]); + symlink("target.txt", repository.path().join("link.txt")) + .expect("should create internal symlink"); + run_git(repository.path(), &["add", "link.txt"]); + + let result = output(repository.command().args([ + "update", + "--tracked-paths-record", + "tracked-paths.txt", + ])); + + assert_eq!( + status_code(&result), + SUCCESS, + "internal tracked symlink should be allowed: {}", + String::from_utf8_lossy(&result.stderr) + ); +} + +#[cfg(unix)] +#[test] +fn unsafe_intermediate_parent_mode_is_rejected_for_tracked_and_output_paths() { + let repository = TestRepository::new(&["unsafe/safe/source.txt"]); + let unsafe_parent = repository.path().join("unsafe"); + fs::set_permissions(&unsafe_parent, fs::Permissions::from_mode(0o777)) + .expect("should make intermediate parent unsafe"); + + let checked = output(repository.command().arg("check")); + let updated = output(repository.command().args([ + "update", + "--tracked-paths-record", + "unsafe/safe/tracked-paths.txt", + ])); + + assert_eq!( + status_code(&checked), + ERROR, + "unsafe tracked parent should fail" + ); + assert_eq!( + status_code(&updated), + ERROR, + "unsafe output parent should fail" + ); + assert!( + !repository + .path() + .join("unsafe/safe/tracked-paths.txt") + .exists(), + "unsafe output parent should not be written" + ); +} + +#[cfg(unix)] +#[test] +fn unsafe_tracked_file_mode_is_rejected() { + let repository = TestRepository::new(&["unsafe.txt"]); + let path = repository.path().join("unsafe.txt"); + fs::set_permissions(&path, fs::Permissions::from_mode(0o666)) + .expect("should make tracked file unsafe"); + + let result = output(repository.command().arg("check")); + + assert_eq!( + status_code(&result), + ERROR, + "world-writable tracked file should fail" + ); +} diff --git a/tools/docs-parity/tests/integrations.rs b/tools/docs-parity/tests/integrations.rs new file mode 100644 index 000000000..9388e5a80 --- /dev/null +++ b/tools/docs-parity/tests/integrations.rs @@ -0,0 +1,1417 @@ +use std::collections::{BTreeMap, BTreeSet}; + +use docs_parity::integrations::{ + CapabilityRecord, IntegrationInventory, InventorySources, LoadingMode, OperationalRecord, + extract_source_inventory, validate_inventory, +}; + +const VALIDATION_ENTRYPOINTS: &str = r#" + fn validate_enabled_integrations(_: &T, _: &P, _: bool) {} + fn validate_settings_for_deploy(settings: &Settings) { + validate_enabled_integrations(settings, &plan, false)?; + } + fn validate_settings_for_runtime(settings: &Settings) { + validate_enabled_integrations(settings, &plan, true)?; + } +"#; + +fn set(values: &[&str]) -> BTreeSet { + values.iter().map(|value| (*value).to_owned()).collect() +} + +fn minimal_manifest() -> String { + r#" + version = 1 + reviewed = true + deploy_ids = ["deploy"] + builder_ids = ["builder"] + plan_registration_ids = ["plan"] + profile_ids = ["profile"] + mediator_ids = ["mediator"] + js_source_module_ids = ["source"] + js_bundle_ids = ["bundle"] + "# + .to_owned() +} + +macro_rules! duplicate_static_axis_test { + ($name:ident, $axis:literal, $value:literal) => { + #[test] + fn $name() { + let source = minimal_manifest().replace( + concat!($axis, " = [\"", $value, "\"]"), + concat!($axis, " = [\"", $value, "\", \"", $value, "\"]"), + ); + let error = IntegrationInventory::parse(&source).expect_err(concat!( + "duplicate ", + $axis, + " values must fail" + )); + assert!( + error.to_string().contains(concat!("duplicate ", $axis)), + "duplicate {} should identify its static axis: {error:?}", + $axis + ); + } + }; +} + +duplicate_static_axis_test!(duplicate_deploy_ids_fail_closed, "deploy_ids", "deploy"); +duplicate_static_axis_test!(duplicate_builder_ids_fail_closed, "builder_ids", "builder"); +duplicate_static_axis_test!( + duplicate_plan_registration_ids_fail_closed, + "plan_registration_ids", + "plan" +); +duplicate_static_axis_test!(duplicate_profile_ids_fail_closed, "profile_ids", "profile"); +duplicate_static_axis_test!( + duplicate_mediator_ids_fail_closed, + "mediator_ids", + "mediator" +); +duplicate_static_axis_test!( + duplicate_js_source_module_ids_fail_closed, + "js_source_module_ids", + "source" +); +duplicate_static_axis_test!( + duplicate_js_bundle_ids_fail_closed, + "js_bundle_ids", + "bundle" +); + +#[test] +fn source_inventory_extracts_each_authoritative_registration_surface() { + let sources = InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: r#" + fn validate_enabled_integrations(settings: &Settings, plan: &Plan, resolved_secrets: bool) { + validate_prebid(settings, plan)?; + validate_integration::(settings, "aps")?; + if let Some(config) = settings.integration_config::("datadome")? { + if resolved_secrets { + crate::integrations::datadome::DataDomeIntegration::validate_config_for_startup(config)?; + } else { + crate::integrations::datadome::DataDomeIntegration::validate_config_for_deploy(config)?; + } + } + } + "#, + builders: r#" + fn builders() -> &'static [IntegrationBuilder] { + &[IntegrationBuilder { id: "testlight", build: testlight::register }] + } + "#, + plan_registrations: include_str!( + "../../../crates/trusted-server-core/src/integrations/registry.rs" + ), + profiles: r#" + const STANDARD_PROFILE_ID: &str = "standard"; + const APS_PROFILE_ID: &str = "aps"; + const PROFILE_REGISTRATIONS: [Registration; 2] = [ + Registration { id: STANDARD_PROFILE_ID, compile: compile_standard }, + Registration { id: APS_PROFILE_ID, compile: compile_aps }, + ]; + "#, + mediator: include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"), + tracked_paths: &[ + "crates/trusted-server-js/lib/src/integrations/creative/index.ts", + "crates/trusted-server-js/lib/src/integrations/prebid/index.ts", + "crates/trusted-server-js/lib/src/integrations/aps/render.ts", + ], + }; + + let inventory = extract_source_inventory(&sources).expect("known source grammar should parse"); + assert_eq!(inventory.deploy_ids, set(&["aps", "datadome", "prebid"])); + assert_eq!(inventory.builder_ids, set(&["testlight"])); + assert_eq!(inventory.plan_registration_ids, set(&["aps", "prebid"])); + assert_eq!(inventory.profile_ids, set(&["aps", "standard"])); + assert_eq!(inventory.mediator_ids, set(&["adserver_mock"])); + assert_eq!(inventory.js_source_module_ids, set(&["creative", "prebid"])); + assert_eq!( + inventory.js_bundle_ids, + set(&["core", "creative", "prebid"]) + ); +} + +fn closed_grammar_sources<'a>(deploy_validation: &'a str) -> InventorySources<'a> { + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation, + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + } +} + +fn production_registration_sources<'a>( + deploy_validation: &'a str, + plan_registrations: &'a str, + mediator: &'a str, +) -> InventorySources<'a> { + InventorySources { + validation_entrypoints: deploy_validation, + deploy_validation, + builders: include_str!("../../../crates/trusted-server-core/src/integrations/mod.rs"), + plan_registrations, + profiles: include_str!("../../../crates/trusted-server-core/src/auction/profile.rs"), + mediator, + tracked_paths: &[], + } +} + +#[test] +fn source_inventory_resolves_the_exact_owner_and_rejects_ambiguous_production_symbols() { + let decoy = closed_grammar_sources( + r#" + mod decoy { fn validate_enabled_integrations() { validate_integration::(settings, "gpt")?; } } + fn validate_enabled_integrations() { validate_integration::(settings, "aps")?; } + "#, + ); + assert_eq!( + extract_source_inventory(&decoy) + .expect("a nested decoy must not own the production inventory") + .deploy_ids, + set(&["aps"]) + ); + + let mut impl_decoy = closed_grammar_sources("fn validate_enabled_integrations() {}"); + impl_decoy.plan_registrations = concat!( + "impl Decoy { fn with_plan() { bad::register_for_plan()?; } }\n", + include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs") + ); + assert_eq!( + extract_source_inventory(&impl_decoy) + .expect("only IntegrationRegistry owns plan registration") + .plan_registration_ids, + set(&["aps", "prebid"]) + ); + + for source in [ + r#" + fn validate_enabled_integrations() {} + fn validate_enabled_integrations() {} + "#, + r#" + #[cfg(unix)] + fn validate_enabled_integrations() {} + "#, + ] { + assert!( + extract_source_inventory(&closed_grammar_sources(source)) + .expect_err("ambiguous or conditionally compiled owners must fail closed") + .to_string() + .contains("deploy") + ); + } + + let mut duplicate_plan = closed_grammar_sources("fn validate_enabled_integrations() {}"); + duplicate_plan.plan_registrations = r#" + impl IntegrationRegistry { fn with_plan() {} } + impl IntegrationRegistry { fn with_plan() {} } + "#; + assert!( + extract_source_inventory(&duplicate_plan) + .expect_err("duplicate exact-owner methods must fail") + .to_string() + .contains("plan") + ); + + let mut duplicate_mediator = closed_grammar_sources("fn validate_enabled_integrations() {}"); + duplicate_mediator.mediator = r#" + fn build_orchestrator_with_plan() {} + fn build_orchestrator_with_plan() {} + "#; + assert!( + extract_source_inventory(&duplicate_mediator) + .expect_err("duplicate mediator owners must fail") + .to_string() + .contains("mediator") + ); +} + +#[test] +fn source_inventory_excludes_cfg_test_decoys_and_rejects_hidden_registration_constructs() { + let cfg_test = closed_grammar_sources( + r#" + #[cfg(test)] + fn validate_enabled_integrations() { validate_integration::(settings, "bad")?; } + fn validate_enabled_integrations() { validate_integration::(settings, "aps")?; } + "#, + ); + assert_eq!( + extract_source_inventory(&cfg_test) + .expect("cfg(test) decoys must be excluded") + .deploy_ids, + set(&["aps"]) + ); + + for hidden in [ + "register_hidden!();", + "let hidden = || validate_integration::(settings, \"bad\");", + "if false { validate_integration::(settings, \"bad\")?; }", + ] { + let source = format!( + "fn validate_enabled_integrations() {{ validate_integration::(settings, \"aps\")?; {hidden} }}" + ); + assert!( + extract_source_inventory(&closed_grammar_sources(&source)) + .expect_err("hidden registration constructs must fail closed") + .to_string() + .contains("deploy") + ); + } + + for (axis, plan, mediator) in [ + ( + "plan", + "impl IntegrationRegistry { fn with_plan() { register_hidden!(); } }", + "fn build_orchestrator_with_plan() {}", + ), + ( + "plan", + "impl IntegrationRegistry { fn with_plan() { if false { bad::register_for_plan()?; } } }", + "fn build_orchestrator_with_plan() {}", + ), + ( + "mediator", + "impl IntegrationRegistry { fn with_plan() {} }", + "fn build_orchestrator_with_plan() { register_hidden!(); }", + ), + ( + "mediator", + "impl IntegrationRegistry { fn with_plan() {} }", + "fn build_orchestrator_with_plan() { if false { bad::register_providers()?; } }", + ), + ] { + let mut sources = closed_grammar_sources("fn validate_enabled_integrations() {}"); + sources.plan_registrations = plan; + sources.mediator = mediator; + assert!( + extract_source_inventory(&sources) + .expect_err("plan and mediator hidden constructs must fail closed") + .to_string() + .contains(axis) + ); + } + + let mut dropped_plan = closed_grammar_sources("fn validate_enabled_integrations() {}"); + dropped_plan.plan_registrations = r#" + impl IntegrationRegistry { + fn with_plan() { + if let Some(registration) = good::register_for_plan()? { drop(registration); } + } + } + "#; + assert!(extract_source_inventory(&dropped_plan).is_err()); + + let mut dropped_mediator = closed_grammar_sources("fn validate_enabled_integrations() {}"); + dropped_mediator.mediator = r#" + fn build_orchestrator_with_plan() { + let mediator = if let Some(expected) = plan.mediator() { + let provider = good::register_providers()?; + None + } else { None }; + let orchestrator = AuctionOrchestrator::from_plan(plan, mediator); + Ok(orchestrator) + } + "#; + assert!(extract_source_inventory(&dropped_mediator).is_err()); +} + +#[test] +fn source_inventory_rejects_registration_dataflow_and_macro_token_decoys() { + let mut cases = Vec::new(); + + let mut cleared_plan = closed_grammar_sources("fn validate_enabled_integrations() {}"); + cleared_plan.plan_registrations = r#" + impl IntegrationRegistry { + fn with_plan() { + if let Some(registration) = good::register_for_plan()? { + registrations.push(registration); + } + registrations.clear(); + } + } + "#; + cases.push(cleared_plan); + + let mut macro_plan = closed_grammar_sources("fn validate_enabled_integrations() {}"); + macro_plan.plan_registrations = r#" + impl IntegrationRegistry { + fn with_plan() { + debug_assert_eq!(bad::register_for_plan(), None); + } + } + "#; + cases.push(macro_plan); + + let mut extra_plan_statement = closed_grammar_sources("fn validate_enabled_integrations() {}"); + extra_plan_statement.plan_registrations = r#" + impl IntegrationRegistry { + fn with_plan() { + if let Some(registration) = good::register_for_plan()? { + registrations.push(registration); + drop(registration); + } + } + } + "#; + cases.push(extra_plan_statement); + + for sources in cases { + assert!( + extract_source_inventory(&sources).is_err(), + "unbound, hidden, or subsequently discarded plan registrations must fail" + ); + } + + let mut false_mediator = closed_grammar_sources("fn validate_enabled_integrations() {}"); + false_mediator.mediator = r#" + fn build_orchestrator_with_plan() { + let mediator = if false { + let provider = good::register_providers()?; + Some(provider) + } else { None }; + let orchestrator = AuctionOrchestrator::from_plan(plan, mediator); + Ok(orchestrator) + } + "#; + assert!( + extract_source_inventory(&false_mediator).is_err(), + "mediator registration must be controlled by the exact plan predicate" + ); + + let mut macro_mediator = closed_grammar_sources("fn validate_enabled_integrations() {}"); + macro_mediator.mediator = r#" + fn build_orchestrator_with_plan() { + log::info!("{:?}", evil()); + } + "#; + assert!( + extract_source_inventory(¯o_mediator).is_err(), + "allowlisted diagnostic macros must not hide registrations" + ); +} + +#[test] +fn source_inventory_binds_registration_paths_types_receivers_and_arguments() { + let deploy = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + + let deploy_mutations = [ + deploy.replacen( + "validate_integration::(settings, \"aps\")?;", + "validate_integration::(settings, \"aps\")?;", + 1, + ), + deploy.replacen( + "validate_integration::(settings, \"aps\")?;", + "decoy::validate_integration::(settings, \"aps\")?;", + 1, + ), + deploy.replacen( + "validate_integration::(settings, \"aps\")?;", + "validate_integration::(other_settings, \"aps\")?;", + 1, + ), + deploy.replacen( + "validate_prebid(settings, plan)?;", + "validate_prebid(settings, other_plan)?;", + 1, + ), + deploy.replace( + "settings.integration_config::(\"datadome\")?", + "other_settings.integration_config::(\"datadome\")?", + ), + deploy.replace( + "crate::integrations::datadome::DataDomeIntegration::validate_config_for_startup", + "decoy::DataDomeIntegration::validate_config_for_startup", + ), + ]; + for changed in &deploy_mutations { + assert!( + extract_source_inventory(&production_registration_sources(changed, plan, mediator)) + .is_err(), + "deploy registration authority mutation must fail" + ); + } + + let plan_mutations = [ + plan.replacen( + "crate::integrations::prebid::register_for_plan(settings, &plan)?", + "decoy::prebid::register_for_plan(settings, &plan)?", + 1, + ), + plan.replacen( + "crate::integrations::prebid::register_for_plan(settings, &plan)?", + "crate::integrations::prebid::register_for_plan(settings, &other_plan)?", + 1, + ), + plan.replacen("crate::integrations::builders()", "decoy::builders()", 1), + ]; + for changed in &plan_mutations { + assert!( + extract_source_inventory(&production_registration_sources(deploy, changed, mediator)) + .is_err(), + "plan registration authority mutation must fail" + ); + } + + let mediator_mutations = [ + mediator.replacen( + "crate::integrations::adserver_mock::register_providers(settings)?", + "decoy::adserver_mock::register_providers(settings)?", + 1, + ), + mediator.replacen( + "crate::integrations::adserver_mock::register_providers(settings)?", + "crate::integrations::adserver_mock::register_providers(other_settings)?", + 1, + ), + mediator.replacen( + " } else {\n None\n };", + " } else {\n non_register_helper();\n None\n };", + 1, + ), + ]; + for changed in &mediator_mutations { + assert!( + extract_source_inventory(&production_registration_sources(deploy, plan, changed)) + .is_err(), + "mediator registration authority mutation must fail" + ); + } +} + +#[test] +fn source_inventory_binds_both_validation_entrypoints_to_the_exact_validator_call() { + let configuration = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + let deploy_call = " validate_enabled_integrations(settings, &plan, false)?;"; + let runtime_call = " validate_enabled_integrations(settings, &plan, true)?;"; + let changes = [ + configuration.replacen(deploy_call, "", 1), + configuration.replacen( + deploy_call, + " validate_enabled_integrations(settings, &plan, false)?;\n validate_enabled_integrations(settings, &plan, false)?;", + 1, + ), + configuration.replacen( + deploy_call, + " if true { validate_enabled_integrations(settings, &plan, false)?; }", + 1, + ), + configuration.replacen( + deploy_call, + " { validate_enabled_integrations(settings, &plan, false)?; }", + 1, + ), + configuration.replacen( + deploy_call, + " decoy::validate_enabled_integrations(settings, &plan, false)?;", + 1, + ), + configuration.replacen(runtime_call, "", 1), + configuration.replacen( + runtime_call, + " validate_enabled_integrations(settings, &plan, false)?;", + 1, + ), + ]; + + for changed in &changes { + assert_ne!( + changed, configuration, + "fixture must alter configuration source" + ); + assert!( + extract_source_inventory(&production_registration_sources(changed, plan, mediator)) + .is_err(), + "deploy and runtime entrypoints must each contain one exact live validator call" + ); + } +} + +#[test] +fn source_inventory_rejects_shadowed_or_bypassed_validation_entrypoints() { + let configuration = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + let deploy_call = " validate_enabled_integrations(settings, &plan, false)?;"; + let runtime_call = " validate_enabled_integrations(settings, &plan, true)?;"; + let local_shadow = " fn validate_enabled_integrations(_: &T, _: &P, _: bool) -> Result<(), Report> { Ok(()) }\n"; + let changes = [ + configuration.replacen( + deploy_call, + &format!(" if settings.auction.enabled {{ return Ok(()); }}\n{deploy_call}"), + 1, + ), + configuration.replacen( + runtime_call, + &format!(" if settings.auction.enabled {{ return Ok(()); }}\n{runtime_call}"), + 1, + ), + configuration.replacen(deploy_call, &format!("{local_shadow}{deploy_call}"), 1), + configuration.replacen(runtime_call, &format!("{local_shadow}{runtime_call}"), 1), + ]; + + for changed in &changes { + assert_ne!(changed, configuration, "fixture must alter configuration"); + assert!( + extract_source_inventory(&production_registration_sources(changed, plan, mediator)) + .is_err(), + "validation entrypoints must reach the module-level validator without a bypass or lexical shadow" + ); + } + + let mut missing_module_owner = closed_grammar_sources("fn validate_enabled_integrations() {}"); + missing_module_owner.validation_entrypoints = r#" + fn validate_settings_for_deploy(settings: &Settings) { + validate_enabled_integrations(settings, &plan, false)?; + } + fn validate_settings_for_runtime(settings: &Settings) { + validate_enabled_integrations(settings, &plan, true)?; + } + "#; + assert!( + extract_source_inventory(&missing_module_owner).is_err(), + "entrypoint calls must resolve to a module-level validator in the same source" + ); +} + +#[test] +fn source_inventory_rejects_block_scoped_validator_import_shadows() { + let configuration = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + let deploy_call = " validate_enabled_integrations(settings, &plan, false)?;"; + let runtime_call = " validate_enabled_integrations(settings, &plan, true)?;"; + let changes = [ + configuration.replacen( + deploy_call, + &format!(" use decoy::validate_enabled_integrations;\n{deploy_call}"), + 1, + ), + configuration.replacen( + runtime_call, + &format!(" use decoy::validate_enabled_integrations;\n{runtime_call}"), + 1, + ), + configuration.replacen( + deploy_call, + &format!(" use decoy::noop as validate_enabled_integrations;\n{deploy_call}"), + 1, + ), + configuration.replacen( + runtime_call, + &format!(" use decoy::noop as validate_enabled_integrations;\n{runtime_call}"), + 1, + ), + ]; + for changed in &changes { + assert_ne!(changed, configuration, "fixture must alter configuration"); + assert!( + extract_source_inventory(&production_registration_sources(changed, plan, mediator)) + .is_err(), + "entrypoint calls must not resolve through block-scoped imports" + ); + } +} + +#[test] +fn source_inventory_requires_exact_plan_initializers_and_return_constructors() { + let configuration = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + let changes = [ + plan.replacen( + "let mut inner = IntegrationRegistryInner::default();", + "let mut inner = decoy::IntegrationRegistryInner::default();", + 1, + ), + plan.replacen( + "let mut inner = IntegrationRegistryInner::default();", + "let mut inner = IntegrationRegistryInner::default::<()>();", + 1, + ), + plan.replacen( + "let mut inner = IntegrationRegistryInner::default();", + "let mut inner = IntegrationRegistryInner::default(evil());", + 1, + ), + plan.replacen( + "let mut registrations = Vec::new();", + "let mut registrations = decoy::Vec::new();", + 1, + ), + plan.replacen( + "let mut registrations = Vec::new();", + "let mut registrations = Vec::new::<()>();", + 1, + ), + plan.replacen( + "let mut registrations = Vec::new();", + "let mut registrations = Vec::new(evil());", + 1, + ), + plan.replacen("inner: Arc::new(inner)", "inner: decoy::Arc::new(inner)", 1), + plan.replacen("inner: Arc::new(inner)", "inner: Arc::new::<()>(inner)", 1), + plan.replacen( + "inner: Arc::new(inner)", + "inner: Arc::new(inner, evil())", + 1, + ), + plan.replacen("plan: Some(plan)", "plan: decoy::Some(plan)", 1), + plan.replacen("plan: Some(plan)", "plan: Some::<()>(plan)", 1), + plan.replacen("plan: Some(plan)", "plan: Some(plan, evil())", 1), + ]; + + for changed in &changes { + assert_ne!(changed, plan, "fixture must alter plan registration source"); + assert!( + extract_source_inventory(&production_registration_sources( + configuration, + changed, + mediator, + )) + .is_err(), + "plan initializers and returned constructors must use exact paths and arity" + ); + } +} + +#[test] +fn source_inventory_requires_the_exact_mediator_error_closure() { + let configuration = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + let changes = [ + mediator.replacen( + ".ok_or_else(|| {\n Report::new(", + ".ok_or_else(|| {\n evil();\n Report::new(", + 1, + ), + mediator.replacen( + "Report::new(TrustedServerError::Configuration", + "decoy_report::new(TrustedServerError::Configuration", + 1, + ), + mediator.replacen( + "Report::new(TrustedServerError::Configuration", + "Report::new(decoy::TrustedServerError::Configuration", + 1, + ), + mediator.replacen("message: format!(", "message: decoy::format!(", 1), + mediator.replacen( + "with the exact same ID\"\n ),", + "with the exact same ID\", evil()\n ),", + 1, + ), + ]; + + for changed in &changes { + assert_ne!(changed, mediator, "fixture must alter mediator source"); + assert!( + extract_source_inventory(&production_registration_sources( + configuration, + plan, + changed, + )) + .is_err(), + "mediator error closure must be one exact Report construction expression" + ); + } +} + +#[test] +fn source_inventory_rejects_plan_consumption_statement_replacement() { + let production = + include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let changed = production.replace( + "inner.script_rewriters.extend(registration.script_rewriters);", + "let _decoy = ®istration.script_rewriters;", + ); + let mut sources = closed_grammar_sources("fn validate_enabled_integrations() {}"); + sources.plan_registrations = &changed; + + assert!( + extract_source_inventory(&sources).is_err(), + "every registration-consumption statement must preserve exact dataflow" + ); +} + +#[test] +fn source_inventory_rejects_nested_plan_route_dataflow_replacements() { + let production = + include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let changes = [ + ( + "let value = (proxy.clone(), registration.integration_id);", + "let value = ();", + ), + ( + "let matchit_path = if route.path.ends_with(\"/*\") {", + "let matchit_path = if false {", + ), + ( + "let router = match route.method {", + "let router = match Method::GET {", + ), + ( + "if let Err(e) = router.insert(&matchit_path, value) {", + "if false {", + ), + ( + "inner.routes.push((route, registration.integration_id));", + "inner.routes.push((route, \"decoy\"));", + ), + ]; + + for (original, replacement) in changes { + let changed = production.replacen(original, replacement, 1); + assert_ne!( + changed, production, + "fixture must alter the production source" + ); + let mut sources = closed_grammar_sources("fn validate_enabled_integrations() {}"); + sources.plan_registrations = &changed; + assert!( + extract_source_inventory(&sources).is_err(), + "nested route-registration dataflow replacement must fail: {replacement}" + ); + } +} + +#[test] +fn source_inventory_requires_the_exact_datadome_validation_branch() { + let source = r#" + fn validate_enabled_integrations(settings: &Settings, resolved_secrets: bool) { + if let Some(config) = settings.integration_config::("datadome")? { + if resolved_secrets { + crate::integrations::datadome::DataDomeIntegration::validate_config_for_startup(config)?; + } else { + crate::integrations::datadome::DataDomeIntegration::validate_config_for_deploy(config)?; + } + } + } + "#; + extract_source_inventory(&closed_grammar_sources(source)) + .expect("the exact DataDome deploy/startup validation branch should parse"); + + for changed in [ + source.replace("if resolved_secrets", "if false"), + source.replace( + "crate::integrations::datadome::DataDomeIntegration::validate_config_for_deploy(config)?;", + "drop(config);", + ), + source.replace( + "crate::integrations::datadome::DataDomeIntegration::validate_config_for_startup(config)?;", + "crate::integrations::datadome::DataDomeIntegration::validate_config_for_deploy(config)?;", + ), + ] { + assert!( + extract_source_inventory(&closed_grammar_sources(&changed)).is_err(), + "DataDome predicate and both validation branches are authoritative" + ); + } +} + +#[test] +fn source_inventory_rejects_oversize_rust_inputs_before_parsing() { + const LIMIT: usize = 4 * 1024 * 1024; + let base = "fn validate_enabled_integrations() {}"; + let exact = format!("{base}/*{}*/", " ".repeat(LIMIT - base.len() - 4)); + extract_source_inventory(&closed_grammar_sources(&exact)) + .expect("an exact-limit source must be accepted"); + let oversized = format!("{exact} "); + assert!( + extract_source_inventory(&closed_grammar_sources(&oversized)) + .expect_err("an over-limit source must fail before parsing") + .to_string() + .contains("4 MiB") + ); +} + +#[test] +fn source_inventory_rejects_unknown_builder_shape() { + let sources = InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: "fn validate_enabled_integrations() { validate_prebid(settings, plan)?; }", + builders: r#" + fn builders() -> &'static [IntegrationBuilder] { + &[make_builder("testlight")] + } + "#, + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }; + + assert!( + extract_source_inventory(&sources) + .expect_err("unknown builder expressions must fail closed") + .to_string() + .contains("builder") + ); +} + +#[test] +fn source_inventory_rejects_an_unclassified_deploy_validator() { + let sources = InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: r#" + fn validate_enabled_integrations() { + validate_prebid(settings, plan)?; + validate_integration::(settings, "aps")?; + validate_future_integration(settings)?; + } + "#, + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }; + + assert!( + extract_source_inventory(&sources) + .expect_err("an unclassified deploy validator must fail closed") + .to_string() + .contains("deploy validator") + ); +} + +#[test] +fn source_inventory_rejects_duplicate_registrations_on_every_rust_axis() { + let cases = [ + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: r#" + fn validate_enabled_integrations() { + validate_integration::(settings, "aps")?; + validate_integration::(settings, "aps")?; + } + "#, + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }, + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: "fn validate_enabled_integrations() {}", + builders: r#" + fn builders() -> &'static [IntegrationBuilder] { + &[ + IntegrationBuilder { id: "same", build: a::register }, + IntegrationBuilder { id: "same", build: b::register }, + ] + } + "#, + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }, + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: "fn validate_enabled_integrations() {}", + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: r#" + impl IntegrationRegistry { + fn with_plan() { + if true { + let first = crate::integrations::prebid::register_for_plan(settings, &plan)?; + let second = crate::integrations::prebid::register_for_plan(settings, &plan)?; + } + } + } + "#, + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }, + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: "fn validate_enabled_integrations() {}", + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: r#" + const PROFILE_REGISTRATIONS: [Registration; 2] = [ + Registration { id: "same", compile: compile_a }, + Registration { id: "same", compile: compile_b }, + ]; + "#, + mediator: "fn build_orchestrator_with_plan() {}", + tracked_paths: &[], + }, + InventorySources { + validation_entrypoints: VALIDATION_ENTRYPOINTS, + deploy_validation: "fn validate_enabled_integrations() {}", + builders: "fn builders() -> &'static [IntegrationBuilder] { &[] }", + plan_registrations: "impl IntegrationRegistry { fn with_plan() {} }", + profiles: "const PROFILE_REGISTRATIONS: [Registration; 0] = [];", + mediator: r#" + fn build_orchestrator_with_plan() { + let mediator = if let Some(expected) = plan.mediator() { + let provider = same::register_providers()?; + let duplicate = same::register_providers()?; + Some(provider) + } else { None }; + let orchestrator = AuctionOrchestrator::from_plan(plan, mediator); + Ok(orchestrator) + } + "#, + tracked_paths: &[], + }, + ]; + + for sources in cases { + assert!( + extract_source_inventory(&sources) + .expect_err("duplicate Rust registrations must fail") + .to_string() + .contains("duplicate") + ); + } +} + +#[test] +fn repository_source_inventory_has_the_exact_checked_cardinality() { + let js_paths = [ + "crates/trusted-server-js/lib/src/integrations/creative/index.ts", + "crates/trusted-server-js/lib/src/integrations/datadome/index.ts", + "crates/trusted-server-js/lib/src/integrations/didomi/index.ts", + "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts", + "crates/trusted-server-js/lib/src/integrations/gpt/index.ts", + "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/index.ts", + "crates/trusted-server-js/lib/src/integrations/lockr/index.ts", + "crates/trusted-server-js/lib/src/integrations/osano/index.ts", + "crates/trusted-server-js/lib/src/integrations/permutive/index.ts", + "crates/trusted-server-js/lib/src/integrations/prebid/index.ts", + "crates/trusted-server-js/lib/src/integrations/sourcepoint/index.ts", + "crates/trusted-server-js/lib/src/integrations/testlight/index.ts", + ]; + let sources = InventorySources { + validation_entrypoints: include_str!("../../../crates/trusted-server-core/src/config.rs"), + deploy_validation: include_str!("../../../crates/trusted-server-core/src/config.rs"), + builders: include_str!("../../../crates/trusted-server-core/src/integrations/mod.rs"), + plan_registrations: include_str!( + "../../../crates/trusted-server-core/src/integrations/registry.rs" + ), + profiles: include_str!("../../../crates/trusted-server-core/src/auction/profile.rs"), + mediator: include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"), + tracked_paths: &js_paths, + }; + + let inventory = extract_source_inventory(&sources).expect("repository grammar should parse"); + assert_eq!(inventory.deploy_ids.len(), 14); + assert_eq!(inventory.builder_ids.len(), 11); + assert_eq!(inventory.plan_registration_ids, set(&["aps", "prebid"])); + assert_eq!( + inventory.profile_ids, + set(&["aps", "prebid-server", "standard"]) + ); + assert_eq!(inventory.mediator_ids, set(&["adserver_mock"])); + assert_eq!(inventory.js_source_module_ids.len(), 12); + assert_eq!(inventory.js_bundle_ids.len(), 13); +} + +fn inventory() -> IntegrationInventory { + IntegrationInventory { + deploy_ids: set(&["aps", "prebid"]), + builder_ids: set(&["testlight"]), + plan_registration_ids: set(&["aps", "prebid"]), + profile_ids: set(&["aps", "prebid-server", "standard"]), + mediator_ids: set(&["adserver_mock"]), + js_source_module_ids: set(&["creative", "prebid"]), + js_bundle_ids: set(&["core", "creative", "prebid"]), + loading_modes: BTreeMap::from([ + ("creative".to_owned(), LoadingMode::Bundled), + ("prebid".to_owned(), LoadingMode::Deferred), + ]), + capabilities: BTreeSet::from([ + CapabilityRecord::new( + "creative", + "always", + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + "bundled", + ), + CapabilityRecord::new( + "prebid", + "enabled", + ["GET /integrations/prebid/bundle.js"], + ["attribute"], + &[] as &[&str], + ["head"], + &[] as &[&str], + &[] as &[&str], + &[] as &[&str], + "deferred", + ), + ]), + operational: BTreeSet::from([ + OperationalRecord { + id: "creative".to_owned(), + status: "development".to_owned(), + owner: "reviewer".to_owned(), + reviewed_at: "2026-09-05".to_owned(), + }, + OperationalRecord { + id: "prebid".to_owned(), + status: "production".to_owned(), + owner: "reviewer".to_owned(), + reviewed_at: "2026-09-05".to_owned(), + }, + ]), + } +} + +#[test] +fn inventory_equality_rejects_missing_and_extra_entries_on_every_axis() { + type InventoryMutation = (&'static str, Box); + + let expected = inventory(); + validate_inventory(&expected, &expected).expect("identical inventory should pass"); + + let mut mutations: Vec = vec![ + ( + "deploy", + Box::new(|value| { + value.deploy_ids.insert("extra".to_owned()); + }), + ), + ("builder", Box::new(|value| value.builder_ids.clear())), + ( + "plan", + Box::new(|value| value.plan_registration_ids.clear()), + ), + ( + "profile", + Box::new(|value| { + value.profile_ids.insert("extra".to_owned()); + }), + ), + ("mediator", Box::new(|value| value.mediator_ids.clear())), + ( + "js source", + Box::new(|value| value.js_source_module_ids.clear()), + ), + ( + "js bundle", + Box::new(|value| { + value.js_bundle_ids.insert("extra".to_owned()); + }), + ), + ( + "loading", + Box::new(|value| { + value + .loading_modes + .insert("prebid".to_owned(), LoadingMode::Bundled); + }), + ), + ("capability", Box::new(|value| value.capabilities.clear())), + ("operational", Box::new(|value| value.operational.clear())), + ]; + + for (axis, mutate) in mutations.drain(..) { + let mut observed = expected.clone(); + mutate(&mut observed); + let error = validate_inventory(&expected, &observed) + .expect_err("inventory drift must fail exact equality"); + assert!( + error.to_string().contains(axis), + "{axis} drift should identify its inventory axis: {error:?}" + ); + } +} + +#[test] +fn duplicate_manifest_rows_and_unknown_shapes_fail_closed() { + let duplicate = r#" + version = 1 + reviewed = true + deploy_ids = ["prebid"] + builder_ids = [] + plan_registration_ids = [] + profile_ids = [] + mediator_ids = [] + js_source_module_ids = [] + js_bundle_ids = [] + + [[loading_modes]] + id = "prebid" + mode = "deferred" + + [[loading_modes]] + id = "prebid" + mode = "bundled" + "#; + assert!( + IntegrationInventory::parse(duplicate) + .expect_err("duplicate loading rows must fail") + .to_string() + .contains("duplicate") + ); + + let unknown = duplicate.replace("reviewed = true", "reviewed = true\nunknown = true"); + assert!( + IntegrationInventory::parse(&unknown) + .expect_err("unknown manifest fields must fail") + .to_string() + .contains("unknown") + ); +} + +#[test] +fn duplicate_capability_members_and_keyed_rows_fail_closed() { + let base = format!( + "{}\n[[capabilities]]\nid = \"integration\"\npredicate = \"enabled\"\nproxy_routes = [\"route\"]\nattribute_rewriters = [\"attribute\"]\nscript_rewriters = [\"script\"]\nhead_injectors = [\"head\"]\npost_processors = [\"post\"]\nrequest_filters = [\"filter\"]\nproviders = [\"provider\"]\njs_mode = \"bundled\"\n", + minimal_manifest() + ); + for (field, value) in [ + ("proxy_routes", "route"), + ("attribute_rewriters", "attribute"), + ("script_rewriters", "script"), + ("head_injectors", "head"), + ("post_processors", "post"), + ("request_filters", "filter"), + ("providers", "provider"), + ] { + let source = base.replace( + &format!("{field} = [\"{value}\"]"), + &format!("{field} = [\"{value}\", \"{value}\"]"), + ); + let error = IntegrationInventory::parse(&source) + .expect_err("duplicate capability members must fail"); + assert!( + error.to_string().contains(field), + "duplicate {field} should identify its capability axis: {error:?}" + ); + } + + let duplicate_key = format!( + "{base}\n[[capabilities]]\nid = \"integration\"\npredicate = \"enabled\"\njs_mode = \"none\"\n" + ); + assert!( + IntegrationInventory::parse(&duplicate_key) + .expect_err("duplicate capability id/predicate keys must fail") + .to_string() + .contains("duplicate capability key") + ); +} + +#[test] +fn duplicate_loading_and_operational_assignments_fail_closed() { + let duplicate_loading = format!( + "{}\n[[loading_modes]]\nid = \"source\"\nmode = \"bundled\"\n[[loading_modes]]\nid = \"source\"\nmode = \"bundled\"\n", + minimal_manifest() + ); + assert!( + IntegrationInventory::parse(&duplicate_loading) + .expect_err("duplicate loading assignments must fail") + .to_string() + .contains("duplicate loading") + ); + + let duplicate_operational = format!( + "{}\n[[operational]]\nid = \"integration\"\nstatus = \"production\"\nowner = \"reviewer\"\nreviewed_at = \"2026-09-05\"\n[[operational]]\nid = \"integration\"\nstatus = \"development\"\nowner = \"reviewer\"\nreviewed_at = \"2026-09-05\"\n", + minimal_manifest() + ); + assert!( + IntegrationInventory::parse(&duplicate_operational) + .expect_err("duplicate operational assignments must fail") + .to_string() + .contains("duplicate operational integration ID") + ); +} + +#[test] +fn integration_manifest_caps_list_and_string_cardinality() { + let too_many = (0..=4096) + .map(|index| format!("\"id-{index}\"")) + .collect::>() + .join(","); + let source = minimal_manifest().replace( + "deploy_ids = [\"deploy\"]", + &format!("deploy_ids = [{too_many}]"), + ); + assert!( + IntegrationInventory::parse(&source) + .expect_err("oversized integration lists must fail") + .to_string() + .contains("cardinality") + ); + let long = "x".repeat(16 * 1024 + 1); + let source = minimal_manifest().replace("\"deploy\"", &format!("\"{long}\"")); + assert!( + IntegrationInventory::parse(&source) + .expect_err("oversized integration strings must fail") + .to_string() + .contains("string") + ); +} + +#[test] +fn integration_manifest_caps_every_record_string() { + let long = "x".repeat(16 * 1024 + 1); + let record_sources = [ + format!( + "{}\n[[loading_modes]]\nid = \"{long}\"\nmode = \"bundled\"\n", + minimal_manifest() + ), + format!( + "{}\n[[capabilities]]\nid = \"{long}\"\npredicate = \"enabled\"\njs_mode = \"none\"\n", + minimal_manifest() + ), + format!( + "{}\n[[capabilities]]\nid = \"integration\"\npredicate = \"{long}\"\njs_mode = \"none\"\n", + minimal_manifest() + ), + format!( + "{}\n[[capabilities]]\nid = \"integration\"\npredicate = \"enabled\"\njs_mode = \"{long}\"\n", + minimal_manifest() + ), + format!( + "{}\n[[operational]]\nid = \"integration\"\nstatus = \"production\"\nowner = \"{long}\"\nreviewed_at = \"2026-09-05\"\n", + minimal_manifest() + ), + ]; + for source in record_sources { + assert!( + IntegrationInventory::parse(&source).is_err(), + "every integration record string must observe the same bound" + ); + } +} + +#[test] +fn reviewed_manifest_matches_repository_sources_and_behavior_domains() { + let expected = IntegrationInventory::parse(include_str!("../manifests/integrations.toml")) + .expect("reviewed integration manifest should parse"); + let tracked_paths = [ + "crates/trusted-server-js/lib/src/integrations/creative/index.ts", + "crates/trusted-server-js/lib/src/integrations/datadome/index.ts", + "crates/trusted-server-js/lib/src/integrations/didomi/index.ts", + "crates/trusted-server-js/lib/src/integrations/google_tag_manager/index.ts", + "crates/trusted-server-js/lib/src/integrations/gpt/index.ts", + "crates/trusted-server-js/lib/src/integrations/gpt_diagnostics/index.ts", + "crates/trusted-server-js/lib/src/integrations/lockr/index.ts", + "crates/trusted-server-js/lib/src/integrations/osano/index.ts", + "crates/trusted-server-js/lib/src/integrations/permutive/index.ts", + "crates/trusted-server-js/lib/src/integrations/prebid/index.ts", + "crates/trusted-server-js/lib/src/integrations/sourcepoint/index.ts", + "crates/trusted-server-js/lib/src/integrations/testlight/index.ts", + ]; + let source = extract_source_inventory(&InventorySources { + validation_entrypoints: include_str!("../../../crates/trusted-server-core/src/config.rs"), + deploy_validation: include_str!("../../../crates/trusted-server-core/src/config.rs"), + builders: include_str!("../../../crates/trusted-server-core/src/integrations/mod.rs"), + plan_registrations: include_str!( + "../../../crates/trusted-server-core/src/integrations/registry.rs" + ), + profiles: include_str!("../../../crates/trusted-server-core/src/auction/profile.rs"), + mediator: include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"), + tracked_paths: &tracked_paths, + }) + .expect("repository integration sources should parse"); + let observed = IntegrationInventory { + deploy_ids: source.deploy_ids, + builder_ids: source.builder_ids, + plan_registration_ids: source.plan_registration_ids, + profile_ids: source.profile_ids, + mediator_ids: source.mediator_ids, + js_source_module_ids: source.js_source_module_ids, + js_bundle_ids: source.js_bundle_ids, + loading_modes: expected.loading_modes.clone(), + capabilities: expected.capabilities.clone(), + operational: expected.operational.clone(), + }; + validate_inventory(&expected, &observed) + .expect("every source-derived static set should equal the reviewed inventory"); + + assert_eq!( + expected + .loading_modes + .keys() + .cloned() + .collect::>(), + expected.js_source_module_ids, + "every browser source module needs one exact loading disposition" + ); + let capability_ids = expected + .capabilities + .iter() + .map(|record| record.id.clone()) + .collect::>(); + let mut expected_capability_ids = expected.deploy_ids.clone(); + expected_capability_ids.insert("creative".to_owned()); + assert_eq!(capability_ids, expected_capability_ids); + assert_eq!( + expected + .operational + .iter() + .map(|record| record.id.clone()) + .collect::>(), + capability_ids, + "manual owner/status/date rows cover every capability and no extras" + ); + for capability in &expected.capabilities { + match expected.loading_modes.get(&capability.id) { + Some(mode) => assert_eq!( + capability.js_mode, + match mode { + LoadingMode::Bundled => "bundled", + LoadingMode::Deferred => "deferred", + LoadingMode::Standalone => "standalone", + } + ), + None => assert_eq!(capability.js_mode, "none"), + } + } +} + +#[test] +fn deploy_validation_helpers_are_exact_and_cannot_swallow_errors() { + let deploy = include_str!("../../../crates/trusted-server-core/src/config.rs"); + let plan = include_str!("../../../crates/trusted-server-core/src/integrations/registry.rs"); + let mediator = include_str!("../../../crates/trusted-server-core/src/auction/mod.rs"); + + let swallowed = deploy.replacen( + "settings\n .integration_config::(integration_id)\n .map(|config| config.is_some())", + "Ok(settings.integration_config::(integration_id).is_ok())", + 1, + ); + assert_ne!(swallowed, deploy, "fixture must alter validate_integration"); + assert!( + extract_source_inventory(&production_registration_sources(&swallowed, plan, mediator)) + .is_err(), + "validate_integration must preserve configuration errors" + ); + + let prebid = deploy.replacen( + "prebid::validate_browser_bidder_ownership(&config, plan)", + "Ok(())", + 1, + ); + assert_ne!(prebid, deploy, "fixture must alter validate_prebid"); + assert!( + extract_source_inventory(&production_registration_sources(&prebid, plan, mediator)) + .is_err(), + "validate_prebid must preserve browser and ownership validation" + ); +} diff --git a/tools/docs-parity/tests/links.rs b/tools/docs-parity/tests/links.rs new file mode 100644 index 000000000..8fa66a6de --- /dev/null +++ b/tools/docs-parity/tests/links.rs @@ -0,0 +1,2171 @@ +use std::collections::VecDeque; +use std::env; +use std::fs; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; +use std::time::Duration; + +use docs_parity::markdown::{ + CommandOutput, CommandRunner, CurlTransport, ExternalException, ExternalHeader, + ExternalRequest, ExternalResponse, ExternalTransport, LinkSource, LinkSourceSet, + ProcessCommandRunner, Sleeper, check_external_links, check_local_links, +}; +use sha2::{Digest as _, Sha256}; +use tempfile::TempDir; + +const SUCCESS: i32 = 0; +const ERROR: i32 = 2; + +struct PublicationRepository { + directory: TempDir, +} + +impl PublicationRepository { + fn new() -> Self { + let directory = tempfile::tempdir().expect("should create publication repository"); + run_git(directory.path(), &["init", "--quiet"]); + let files = [ + ("README.md", "# Repository\n[public guide](/guide/)\n"), + ( + "docs/.vitepress/config.mts", + "export default { srcExclude: ['internal/**', 'private.md'], themeConfig: { nav: [{ link: '/' }] } }\n", + ), + ( + "docs/index.md", + concat!( + "---\nlayout: home\nhero:\n image:\n", + " src: /images/hero.jpeg\n", + " actions:\n - text: Guide\n link: /guide/\n", + "---\n# Home\n[guide](/guide/)\n", + ), + ), + ("docs/public/images/hero.jpeg", "binary hero fixture"), + ("docs/private.md", "# Private\n"), + ( + "docs/guide/index.md", + "# Guide\n## Flow\n```mermaid\ngraph TD\n```\n", + ), + ( + "docs/internal/note.md", + "# Internal\n[repository](/README.md)\n", + ), + ("notes/included.md", "# Included repository note\n"), + ("static/logo.png", "not really a png fixture"), + ( + "tools/docs-parity/manifests/pages.toml", + concat!( + "version = 1\nreviewed = true\nsite_root = \"docs\"\n", + "vitepress_config = \"docs/.vitepress/config.mts\"\n\n", + "[[pages]]\nkind = \"live\"\npath = \"docs/index.md\"\nroute = \"/\"\nnavigation = true\n\n", + "[[pages]]\nkind = \"live\"\npath = \"docs/guide/index.md\"\nroute = \"/guide/\"\nnavigation = false\n", + ), + ), + ( + "tools/docs-parity/manifests/diagrams.toml", + concat!( + "version = 1\nreviewed = true\n\n", + "[[diagrams]]\npath = \"docs/guide/index.md\"\nselector = \"mermaid:1\"\n", + "fingerprint = \"sha256:228e1f41f3c2674cf342c6df608dd87f63c034682c6575017585c9eec08ceb37\"\n", + "prose_anchor = \"flow\"\nowner = \"docs-team\"\n", + ), + ), + ( + "tools/docs-parity/manifests/orphans.toml", + "version = 1\nreviewed = true\n", + ), + ]; + for (path, contents) in files { + write_file(directory.path(), path, contents); + } + let all_paths = [ + "README.md", + "docs/.vitepress/config.mts", + "docs/guide/index.md", + "docs/index.md", + "docs/internal/note.md", + "docs/private.md", + "docs/public/images/hero.jpeg", + "notes/included.md", + "static/logo.png", + "tools/docs-parity/manifests/diagrams.toml", + "tools/docs-parity/manifests/maintained-sources.toml", + "tools/docs-parity/manifests/orphans.toml", + "tools/docs-parity/manifests/pages.toml", + "tools/docs-parity/manifests/tracked-files.toml", + ]; + let mut tracked = "version = 1\nmax_text_bytes = 4194304\nreviewed = true\n".to_owned(); + let mut maintained = "version = 1\nreviewed = true\n".to_owned(); + for path in all_paths { + tracked.push_str(&format!( + "\n[[files]]\npath = \"{path}\"\nkind = \"{}\"\n", + if path.ends_with(".png") || path.ends_with(".jpeg") { + "binary" + } else { + "text" + } + )); + if path.ends_with(".png") || path.ends_with(".jpeg") { + continue; + } + let include = path.ends_with(".md") && path != "docs/private.md"; + maintained.push_str(&format!( + "\n[[sources]]\npath = \"{path}\"\nmode = \"whole\"\ndisposition = \"{}\"\n{}", + if include { "include" } else { "exclude" }, + if include { + "" + } else { + "exclude_kind = \"non_documentation\"\n" + } + )); + } + write_file( + directory.path(), + "tools/docs-parity/manifests/tracked-files.toml", + &tracked, + ); + write_file( + directory.path(), + "tools/docs-parity/manifests/maintained-sources.toml", + &maintained, + ); + run_git(directory.path(), &["add", "--all"]); + Self { directory } + } + + fn path(&self) -> &Path { + self.directory.path() + } + + fn check(&self) -> Output { + Command::new(binary()) + .current_dir(self.path()) + .args(["links", "--local", "--check"]) + .output() + .expect("should execute local links") + } +} + +fn binary() -> PathBuf { + PathBuf::from(env!("CARGO_BIN_EXE_docs-parity")) +} + +fn write_file(root: &Path, relative: &str, contents: &str) { + let path = root.join(relative); + fs::create_dir_all(path.parent().expect("path should have a parent")) + .expect("should create fixture parent"); + fs::write(path, contents).expect("should write fixture"); +} + +fn run_git(repository: &Path, arguments: &[&str]) { + let status = Command::new("git") + .args(arguments) + .current_dir(repository) + .status() + .expect("should execute git"); + assert!(status.success(), "git command should succeed"); +} + +fn status_code(output: &Output) -> i32 { + output.status.code().expect("should exit normally") +} + +fn diagnostic(output: &Output) -> String { + String::from_utf8(output.stderr.clone()).expect("diagnostic should be UTF-8") +} + +fn fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +fn source(path: &str, set: LinkSourceSet, markdown: &str) -> LinkSource { + LinkSource { + path: path.to_owned(), + set, + markdown: markdown.to_owned(), + } +} + +fn local_error(sources: &[LinkSource]) -> String { + format!( + "{:?}", + check_local_links(sources, &[], &[]).expect_err("links should fail") + ) +} + +#[test] +fn every_active_source_set_checks_missing_local_targets() { + for set in [ + LinkSourceSet::Repository, + LinkSourceSet::MaintainedInternal, + LinkSourceSet::Public, + ] { + let missing = format!("missing.{}", "md"); + let markdown = format!("[missing]({missing})\n"); + let sources = [source("docs/source.md", set, &markdown)]; + assert!( + local_error(&sources).contains(&missing), + "dead link should fail in {set:?}" + ); + } +} + +#[test] +fn semantic_image_destinations_are_checked() { + let sources = [source( + "docs/guide/source.md", + LinkSourceSet::Public, + "![missing diagram](missing.png)\n", + )]; + + assert!(local_error(&sources).contains("missing.png")); +} + +#[test] +fn public_frontmatter_missing_hero_asset_uses_the_link_checker() { + let repository = PublicationRepository::new(); + let index = repository.path().join("docs/index.md"); + fs::write( + &index, + concat!( + "---\n", + "layout: home\n", + "hero:\n", + " image: /images/missing-hero.jpeg\n", + " actions:\n", + " - text: Guide\n", + " link: /guide/\n", + "---\n", + "# Home\n[guide](/guide/)\n", + ), + ) + .expect("should write real-shaped frontmatter"); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR); + let error = diagnostic(&result); + assert!(error.contains("missing-hero.jpeg")); +} + +#[test] +fn public_frontmatter_broken_internal_action_uses_the_link_checker() { + let repository = PublicationRepository::new(); + let index = repository.path().join("docs/index.md"); + let markdown = fs::read_to_string(&index).expect("should read home fixture"); + fs::write( + &index, + markdown.replace("link: /guide/", "link: /missing-action"), + ) + .expect("should break frontmatter action"); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("missing-action")); +} + +#[test] +fn public_frontmatter_external_actions_are_in_external_inventory() { + let sources = [source( + "docs/index.md", + LinkSourceSet::Public, + concat!( + "---\nhero:\n actions:\n - text: Project\n", + " link: https://docs.example.invalid/project\n---\n# Home\n", + ), + )]; + let mut transport = FakeTransport { + responses: vec![response(200, None, None)].into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("frontmatter external action should be checked"); + + assert_eq!(transport.requests.len(), 1); + assert_eq!( + transport.requests[0].url, + "https://docs.example.invalid/project" + ); +} + +#[test] +fn public_frontmatter_themeable_images_check_both_variants() { + let markdown = concat!( + "---\nlayout: home\nhero:\n image:\n", + " light: /images/hero.jpeg\n", + " dark: https://dark.example.invalid/hero.jpeg\n", + " actions:\n - text: Guide\n link: /guide/\n", + "features:\n - title: Themeable\n icon:\n", + " light: https://light.example.invalid/icon.svg\n", + " dark: /images/hero.jpeg\n", + " - title: Source object\n icon:\n", + " src: https://source.example.invalid/icon.svg\n", + " - title: Inline icon\n icon: '🛡️'\n", + "---\n# Home\n[guide](/guide/)\n", + ); + let repository = PublicationRepository::new(); + fs::write(repository.path().join("docs/index.md"), markdown) + .expect("should write themeable frontmatter"); + + let local = repository.check(); + assert_eq!( + status_code(&local), + SUCCESS, + "local theme variants should resolve: {}", + diagnostic(&local) + ); + + let sources = [source("docs/index.md", LinkSourceSet::Public, markdown)]; + let mut transport = FakeTransport { + responses: vec![ + response(200, None, None), + response(200, None, None), + response(200, None, None), + ] + .into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("external theme variants should be checked"); + assert_eq!( + transport + .requests + .iter() + .map(|request| request.url.as_str()) + .collect::>(), + [ + "https://dark.example.invalid/hero.jpeg", + "https://light.example.invalid/icon.svg", + "https://source.example.invalid/icon.svg", + ] + ); +} + +#[test] +fn public_frontmatter_themeable_images_require_complete_string_pairs() { + let cases = [ + "---\nhero:\n image:\n light: /images/hero.jpeg\n---\n# Home\n[guide](/guide/)\n", + "---\nhero:\n image:\n light: /images/hero.jpeg\n dark: 42\n---\n# Home\n[guide](/guide/)\n", + "---\nhero:\n image:\n light: /images/hero.jpeg\n dark: /../secret.png\n---\n# Home\n[guide](/guide/)\n", + "---\nfeatures:\n - title: Missing\n icon:\n dark: /images/hero.jpeg\n---\n# Home\n[guide](/guide/)\n", + "---\nfeatures:\n - title: Wrong\n icon:\n light: false\n dark: /images/hero.jpeg\n---\n# Home\n[guide](/guide/)\n", + ]; + for markdown in cases { + let repository = PublicationRepository::new(); + fs::write(repository.path().join("docs/index.md"), markdown) + .expect("should write invalid themeable frontmatter"); + + let result = repository.check(); + + assert_eq!( + status_code(&result), + ERROR, + "invalid theme pair must fail: {markdown}" + ); + assert!(!diagnostic(&result).contains("orphan inventory")); + } +} + +#[test] +fn public_frontmatter_is_bounded_typed_closed_and_strictly_decoded() { + let cases = [ + "---\nhero:\n image:\n src: /../secret.png\n---\n# Home\n".to_owned(), + "---\nhero:\n image:\n src: /images/%252e%252e/secret.png\n---\n# Home\n".to_owned(), + "---\nhero:\n image:\n src: [wrong]\n---\n# Home\n".to_owned(), + "---\nhero:\n actions:\n - text: Wrong\n link: 42\n---\n# Home\n".to_owned(), + "---\nfeatures:\n - title: Wrong\n link: [wrong]\n---\n# Home\n".to_owned(), + "---\nfeatures:\n - title: Wrong\n icon:\n src: 42\n---\n# Home\n".to_owned(), + "---\nhero:\n image:\n src: /images/hero.png\n# Home\n".to_owned(), + format!("---\nsummary: {}\n---\n# Home\n", "x".repeat(64 * 1024)), + ]; + for markdown in cases { + let repository = PublicationRepository::new(); + fs::write(repository.path().join("docs/index.md"), markdown) + .expect("should write invalid frontmatter"); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR, "frontmatter must fail closed"); + assert!( + !diagnostic(&result).contains("orphan inventory"), + "frontmatter must fail before unrelated reachability: {}", + diagnostic(&result) + ); + } +} + +#[cfg(unix)] +#[test] +fn public_frontmatter_assets_reject_symlinks() { + use std::os::unix::fs::symlink; + + let repository = PublicationRepository::new(); + let asset = repository.path().join("docs/public/images/hero.jpeg"); + fs::remove_file(&asset).expect("should remove regular hero asset"); + symlink("../../index.md", &asset).expect("should replace hero with internal symlink"); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("hero.jpeg")); +} + +#[test] +fn public_frontmatter_assets_honor_a_literal_configured_public_directory() { + let repository = PublicationRepository::new(); + let old_asset = repository.path().join("docs/public/images/hero.jpeg"); + let new_asset = repository.path().join("docs/assets/images/hero.jpeg"); + fs::create_dir_all(new_asset.parent().expect("asset should have parent")) + .expect("should create configured public directory"); + fs::rename(&old_asset, &new_asset).expect("should move public asset"); + let config_path = repository.path().join("docs/.vitepress/config.mts"); + let config = fs::read_to_string(&config_path).expect("should read config"); + fs::write( + &config_path, + config.replace("export default {", "export default { publicDir: 'assets',"), + ) + .expect("should configure public directory"); + for manifest in [ + "tools/docs-parity/manifests/tracked-files.toml", + "tools/docs-parity/manifests/maintained-sources.toml", + ] { + let path = repository.path().join(manifest); + let contents = fs::read_to_string(&path).expect("should read classification manifest"); + fs::write( + path, + contents.replace( + "docs/public/images/hero.jpeg", + "docs/assets/images/hero.jpeg", + ), + ) + .expect("should update classification manifest"); + } + run_git(repository.path(), &["add", "--all"]); + + let result = repository.check(); + + assert_eq!( + status_code(&result), + SUCCESS, + "configured public directory should pass: {}", + diagnostic(&result) + ); +} + +#[test] +fn semantic_markdown_links_resolve_files_queries_and_vitepress_routes() { + let target = format!("target.{}", "md"); + let markdown = format!( + "# Guide\n[relative]({target}?mode=full#two)\n[route](/guide/target#explicit)\n`[not a link](missing.{})`\n```md\n[also not a link](missing.{})\n```\n", + "md", "md" + ); + let sources = [ + source("docs/guide/index.md", LinkSourceSet::Public, &markdown), + source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# Two\n# Two\n\n", + ), + ]; + + check_local_links(&sources, &[], &[]).expect("semantic links should resolve"); +} + +#[test] +fn root_relative_repository_links_resolve_from_the_repository_root() { + let sources = [ + source( + ".claude/commands/check.md", + LinkSourceSet::Repository, + "[rules](/CLAUDE.md#build-and-test-commands)\n", + ), + source( + "CLAUDE.md", + LinkSourceSet::Repository, + "# Build and Test Commands\n", + ), + source( + "docs/internal/note.md", + LinkSourceSet::MaintainedInternal, + "[public route](/guide/)\n", + ), + source("docs/guide/index.md", LinkSourceSet::Public, "# Guide\n"), + ]; + + check_local_links(&sources, &[], &[]).expect("repository-root link should resolve"); +} + +#[test] +fn public_links_reject_every_spelling_of_an_excluded_markdown_source() { + for destination in ["private.md", "/docs/private.md", "/private"] { + let repository = PublicationRepository::new(); + write_file( + repository.path(), + "docs/index.md", + &format!("# Home\n[private]({destination})\n[guide](/guide/)\n"), + ); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR, "{destination} must fail"); + assert!( + diagnostic(&result).contains("excluded source"), + "{destination} must identify the excluded source: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn included_repository_and_binary_targets_remain_distinct_from_exclusions() { + let repository = PublicationRepository::new(); + write_file( + repository.path(), + "README.md", + concat!( + "# Repository\n", + "[included](notes/included.md)\n", + "[binary](static/logo.png)\n", + "[public](/guide/)\n", + ), + ); + + let clean = repository.check(); + assert_eq!( + status_code(&clean), + SUCCESS, + "included text and binary paths must resolve: {}", + diagnostic(&clean) + ); + + write_file( + repository.path(), + "README.md", + "# Repository\n[bad binary anchor](static/logo.png#bytes)\n[public](/guide/)\n", + ); + let anchored_binary = repository.check(); + assert_eq!(status_code(&anchored_binary), ERROR); + assert!(diagnostic(&anchored_binary).contains("non-Markdown target")); +} + +#[test] +fn anchors_use_duplicate_slugs_explicit_ids_and_strict_percent_decoding() { + let target_name = format!("target.{}", "md"); + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# Same heading\n# Same heading\n# Build & Deployment Errors\n\n", + ); + let valid = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!( + "[duplicate]({target_name}#same-heading-1) [encoded]({target_name}#named%2Danchor) [punctuation]({target_name}#build-deployment-errors)\n" + ), + ); + check_local_links(&[valid, target.clone()], &[], &[]) + .expect("duplicate and explicit anchors should resolve"); + + let missing = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[bad]({target_name}#same-heading-2)\n"), + ); + assert!(local_error(&[missing, target.clone()]).contains("same-heading-2")); + + let malformed = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[bad]({target_name}#bad%2)\n"), + ); + assert!(local_error(&[malformed, target]).contains("percent")); +} + +#[test] +fn public_and_repository_heading_slugs_follow_their_renderers() { + let public_name = format!("public.{}", "md"); + let public_target = source( + "docs/guide/public.md", + LinkSourceSet::Public, + concat!( + "# 123 Déjà vu & API\n", + "# **Formatted** `code` & _text_ {#exact-id}\n", + "# Repeat\n", + "# Repeat\n", + ), + ); + let public_source = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!( + "[normalized]({public_name}#_123-deja-vu-api)\n[explicit]({public_name}#exact-id)\n[duplicate]({public_name}#repeat-1)\n" + ), + ); + check_local_links(&[public_source, public_target], &[], &[]) + .expect("VitePress heading slugs should resolve"); + + let repository_target = source( + "notes/target.md", + LinkSourceSet::Repository, + "# Build & Deployment Errors\n# 123 Start\n", + ); + let repository_source = source( + "README.md", + LinkSourceSet::Repository, + concat!( + "[GitHub punctuation](notes/target.md#build--deployment-errors)\n", + "[GitHub digit](notes/target.md#123-start)\n", + ), + ); + check_local_links(&[repository_source, repository_target], &[], &[]) + .expect("GitHub heading slugs should resolve"); +} + +#[test] +fn vitepress_unicode_lowercase_uses_contextual_final_sigma() { + let target_name = format!("target.{}", "md"); + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# ΟΣ\n# ΟΣΑ\n# ΌΣ\n# ΟΣ́\n", + ); + let links = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!( + "[final]({target_name}#ος)\n[medial]({target_name}#οσα)\n[decomposed before]({target_name}#ος-1)\n[decomposed after]({target_name}#ος-2)\n" + ), + ); + + check_local_links(&[links, target], &[], &[]) + .expect("VitePress lowercase should apply the Unicode Final_Sigma context"); +} + +#[test] +fn vitepress_slugging_uses_ecmascript_whitespace_not_rust_unicode_whitespace() { + let extension = "md"; + let bom_target = source("docs/guide/bom.md", LinkSourceSet::Public, "# A\u{feff}B\n"); + let c1_target = source("docs/guide/c1.md", LinkSourceSet::Public, "# A\u{0085}B\n"); + let correct = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[bom](bom.{extension}#a-b)\n[c1](c1.{extension}#a%C2%85b)\n"), + ); + check_local_links(&[correct, bom_target.clone(), c1_target.clone()], &[], &[]) + .expect("VitePress whitespace should match ECMAScript regular-expression semantics"); + + for (target_name, wrong_fragment, target) in + [("bom", "a%EF%BB%BFb", bom_target), ("c1", "a-b", c1_target)] + { + let wrong = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[wrong]({target_name}.{extension}#{wrong_fragment})\n"), + ); + assert!( + check_local_links(&[wrong, target], &[], &[]).is_err(), + "non-VitePress whitespace anchor must stay dead: {wrong_fragment}" + ); + } +} + +#[test] +fn vitepress_heading_text_omits_soft_and_hard_break_events() { + let target_name = format!("target.{}", "md"); + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + "Foo\nBar\n---\n\nHard \nBreak\n---\n", + ); + let links = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[soft]({target_name}#foobar)\n[hard]({target_name}#hardbreak)\n"), + ); + + check_local_links(&[links, target], &[], &[]) + .expect("VitePress token text should join heading text and code without break content"); +} + +#[test] +fn vitepress_heading_text_ignores_image_alt_but_keeps_rendered_inline_text() { + let target_name = format!("target.{}", "md"); + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + concat!( + "# Before ![alt](https://example.invalid/image.png) After\n", + "# **Bold** [linked](https://example.invalid/) `code` _after_\n", + ), + ); + let links = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!( + "[image heading]({target_name}#before-after)\n[inline text]({target_name}#bold-linked-code-after)\n" + ), + ); + + check_local_links(&[links, target], &[], &[]) + .expect("heading text should match the pinned VitePress renderer"); + + let repository_target = source( + "notes/target.md", + LinkSourceSet::Repository, + "# Before ![alt](https://example.invalid/image.png) After\n", + ); + let repository_source = source( + "README.md", + LinkSourceSet::Repository, + "[image heading](notes/target.md#before-alt-after)\n", + ); + check_local_links(&[repository_source, repository_target], &[], &[]) + .expect("GitHub heading text should retain image alt text"); +} + +#[test] +fn vitepress_explicit_heading_ids_reject_collisions_without_auto_suffixing() { + for markdown in ["# Foo\n# Bar {#foo}\n", "# Bar {#foo}\n# Baz {#foo}\n"] { + let target = source("docs/guide/target.md", LinkSourceSet::Public, markdown); + let error = local_error(&[target]); + assert!( + error.contains("duplicate explicit heading id"), + "explicit collision must fail: {error}" + ); + } + + let target_name = format!("target.{}", "md"); + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# Bar {#foo}\n# Foo\n", + ); + let links = source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[custom]({target_name}#foo) [auto]({target_name}#foo-1)\n"), + ); + check_local_links(&[links, target], &[], &[]) + .expect("an auto heading after a custom ID should receive a suffix"); +} + +#[test] +fn invalid_explicit_heading_ids_fail_closed() { + let target = source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# Unsafe {#two words}\n", + ); + let error = local_error(&[target]); + assert!(error.contains("explicit heading id")); +} + +#[test] +fn setext_headings_are_available_as_semantic_anchors() { + let target_name = format!("target.{}", "md"); + let sources = [ + source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[target]({target_name}#setext-heading)\n"), + ), + source( + "docs/guide/target.md", + LinkSourceSet::Public, + "Setext Heading\n==============\n", + ), + ]; + + check_local_links(&sources, &[], &[]).expect("setext heading should resolve"); +} + +#[test] +fn commonmark_events_cover_multiline_references_html_images_and_code() { + let target = format!("target.{}", "md"); + let missing = format!("missing.{}", "md"); + let sources = [ + source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!( + concat!( + "[multiline](\n {target}#target-heading\n)\n", + "[reference][target]\n\n[target]: {target}#html-anchor\n\n", + "\n", + " HTML link\n\n", + "![image](../asset.png)\n\n", + "\n", + " [indented code]({missing})\n", + "`[inline code]({missing})`\n", + "```md\n[code fence]({missing})\n```\n", + ), + target = target, + missing = missing, + ), + ), + source( + "docs/guide/target.md", + LinkSourceSet::Public, + "# Target *heading*\n\n", + ), + source( + "docs/asset.png", + LinkSourceSet::Repository, + "not parsed as an image fixture", + ), + ]; + + check_local_links(&sources, &[], &[]).expect("CommonMark destinations should resolve"); +} + +#[test] +fn percent_decoding_rejects_invalid_utf8_and_residual_encoded_octets() { + let target = format!("target.{}", "md"); + for fragment in ["%FF", "%252D"] { + let sources = [ + source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[bad]({target}#{fragment})\n"), + ), + source("docs/guide/target.md", LinkSourceSet::Public, "# Target\n"), + ]; + let error = local_error(&sources); + assert!(error.contains("percent"), "{fragment} must fail: {error}"); + } +} + +#[test] +fn query_percent_encoding_is_validated_with_one_strict_decode() { + let target = format!("target.{}", "md"); + let valid = [ + source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[valid]({target}?next=%2Fguide%2F#target)\n"), + ), + source("docs/guide/target.md", LinkSourceSet::Public, "# Target\n"), + ]; + check_local_links(&valid, &[], &[]).expect("one encoded query pass should be valid"); + + for query in ["bad=%ZZ", "bad=%", "bad=%FF", "bad=%252F"] { + let sources = [ + source( + "docs/guide/source.md", + LinkSourceSet::Public, + &format!("[invalid]({target}?{query}#target)\n"), + ), + source("docs/guide/target.md", LinkSourceSet::Public, "# Target\n"), + ]; + let error = local_error(&sources); + assert!(error.contains("percent"), "{query} must fail: {error}"); + } +} + +#[test] +fn tombstones_orphans_and_excluded_source_links_fail_closed() { + let public = source( + "docs/index.md", + LinkSourceSet::Public, + "[gone](/guide/retired) [source](../private.md)\n", + ); + let private = source("private.md", LinkSourceSet::Repository, "# Not published\n"); + let error = local_error(&[public, private]); + assert!(error.contains("retired") || error.contains("private")); + + let orphan = source( + "docs/guide/orphan.md", + LinkSourceSet::Public, + "# Unlisted\n", + ); + let error = format!( + "{:?}", + check_local_links(&[orphan], &["docs/guide/listed.md".to_owned()], &[]) + .expect_err("unlisted page should fail") + ); + assert!(error.contains("orphan")); +} + +#[derive(Default)] +struct FakeTransport { + responses: VecDeque, + requests: Vec, +} + +impl ExternalTransport for FakeTransport { + fn send(&mut self, request: &ExternalRequest) -> Result { + self.requests.push(request.clone()); + self.responses + .pop_front() + .ok_or_else(|| "no scripted response".to_owned()) + } +} + +#[derive(Default)] +struct FakeSleeper { + delays: Vec, +} + +impl Sleeper for FakeSleeper { + fn sleep_seconds(&mut self, seconds: u64) { + self.delays.push(seconds); + } +} + +fn response(status: u16, location: Option<&str>, retry_after: Option<&str>) -> ExternalResponse { + let mut headers = Vec::new(); + if let Some(location) = location { + headers.push(header("location", location)); + } + if let Some(retry_after) = retry_after { + headers.push(header("retry-after", retry_after)); + } + ExternalResponse { + status, + headers, + header_bytes: 0, + body_bytes: 0, + } +} + +fn header(name: &str, value: &str) -> ExternalHeader { + ExternalHeader { + name: name.to_owned(), + value: value.to_owned(), + } +} + +#[derive(Default)] +struct FakeCommandRunner { + outputs: VecDeque>, + invocations: Vec<(String, Vec, usize, Duration)>, +} + +struct FileHeadCommandRunner { + file_url: String, + observed_header_copies: usize, +} + +impl CommandRunner for FileHeadCommandRunner { + fn run( + &mut self, + program: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + ) -> Result { + if program != "/usr/bin/curl" + || arguments.first().map(String::as_str) != Some("--disable") + || arguments.iter().any(|argument| argument == "--dump-header") + || !arguments.iter().any(|argument| argument == "--head") + { + return Err("HEAD command framing is not isolated and singular".to_owned()); + } + let mut local = arguments.to_vec(); + for option in ["--proto", "--proto-redir"] { + let index = local + .iter() + .position(|argument| argument == option) + .ok_or_else(|| format!("missing {option}"))?; + local[index + 1] = "=file".to_owned(); + } + let url_index = local + .iter() + .position(|argument| argument == "--url") + .ok_or_else(|| "missing --url".to_owned())?; + local[url_index + 1] = self.file_url.clone(); + + let mut runner = ProcessCommandRunner; + let actual = runner.run(program, &local, maximum_output_bytes, timeout)?; + let marker = b"\nDOCS_PARITY_COUNTS:"; + let marker_start = actual + .stdout + .windows(marker.len()) + .rposition(|window| window == marker) + .ok_or_else(|| "file HEAD output has no count trailer".to_owned())?; + if actual.stdout.get(marker_start + marker.len()..) != Some(b"0:0\n") { + return Err("file HEAD output has unexpected write-out counts".to_owned()); + } + let file_headers = &actual.stdout[..marker_start]; + self.observed_header_copies = file_headers + .windows(b"Content-Length:".len()) + .filter(|window| *window == b"Content-Length:") + .count(); + + let mut headers = b"HTTP/1.1 200 OK\r\n".to_vec(); + headers.extend_from_slice(file_headers); + if !headers.ends_with(b"\r\n\r\n") { + headers.extend_from_slice(b"\r\n"); + } + let mut stdout = headers.clone(); + stdout.extend_from_slice(format!("\nDOCS_PARITY_COUNTS:{}:0\n", headers.len()).as_bytes()); + Ok(CommandOutput { + success: actual.success, + status_code: actual.status_code, + stdout, + }) + } +} + +impl CommandRunner for FakeCommandRunner { + fn run( + &mut self, + program: &str, + arguments: &[String], + maximum_output_bytes: usize, + timeout: Duration, + ) -> Result { + self.invocations.push(( + program.to_owned(), + arguments.to_vec(), + maximum_output_bytes, + timeout, + )); + self.outputs + .pop_front() + .ok_or_else(|| "no scripted command output".to_owned())? + } +} + +fn curl_output(status: &str, headers: &[(&str, &str)], body: &[u8]) -> CommandOutput { + let mut header = format!("HTTP/1.1 {status}\r\n").into_bytes(); + for (name, value) in headers { + header.extend_from_slice(format!("{name}: {value}\r\n").as_bytes()); + } + header.extend_from_slice(b"\r\n"); + let mut stdout = header.clone(); + stdout.extend_from_slice(body); + stdout.extend_from_slice( + format!("\nDOCS_PARITY_COUNTS:{}:{}\n", header.len(), body.len()).as_bytes(), + ); + CommandOutput { + success: true, + status_code: Some(0), + stdout, + } +} + +fn curl_output_blocks(blocks: &[(&str, &[(&str, &str)])], body: &[u8]) -> CommandOutput { + let mut header = Vec::new(); + for (status, headers) in blocks { + header.extend_from_slice(format!("HTTP/1.1 {status}\r\n").as_bytes()); + for (name, value) in *headers { + header.extend_from_slice(format!("{name}: {value}\r\n").as_bytes()); + } + header.extend_from_slice(b"\r\n"); + } + let mut stdout = header.clone(); + stdout.extend_from_slice(body); + stdout.extend_from_slice( + format!("\nDOCS_PARITY_COUNTS:{}:{}\n", header.len(), body.len()).as_bytes(), + ); + CommandOutput { + success: true, + status_code: Some(0), + stdout, + } +} + +fn external_error( + markdown: &str, + responses: Vec, +) -> (String, FakeTransport, FakeSleeper) { + let sources = [source("README.md", LinkSourceSet::Repository, markdown)]; + let mut transport = FakeTransport { + responses: responses.into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + let error = format!( + "{:?}", + check_external_links(&sources, &[], 1_788_220_800, &mut transport, &mut sleeper) + .expect_err("external links should fail") + ); + (error, transport, sleeper) +} + +#[test] +fn external_checker_uses_head_then_get_only_when_head_is_unsupported() { + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.com/page)\n", + )]; + let mut transport = FakeTransport { + responses: vec![response(405, None, None), response(200, None, None)].into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 1_788_220_800, &mut transport, &mut sleeper) + .expect("GET fallback should pass"); + assert_eq!(transport.requests.len(), 2); + assert_eq!(transport.requests[0].method, "HEAD"); + assert_eq!(transport.requests[1].method, "GET"); +} + +#[test] +fn external_checker_bounds_redirects_and_rejects_loops_and_credentials() { + let (loop_error, _, _) = external_error( + "[site](https://docs.example.com/a)\n", + vec![ + response(302, Some("https://docs.example.com/b"), None), + response(302, Some("https://docs.example.com/a"), None), + ], + ); + assert!(loop_error.contains("loop")); + + let redirects = (0..6) + .map(|index| { + response( + 302, + Some(&format!("https://docs.example.com/{index}")), + None, + ) + }) + .collect(); + let (depth_error, _, _) = external_error("[site](https://docs.example.com/start)\n", redirects); + assert!(depth_error.contains("redirect")); + + let (credential_error, transport, _) = + external_error("[site](https://user:password@docs.example.com/)\n", vec![]); + assert!(credential_error.contains("credential")); + assert!(transport.requests.is_empty()); +} + +#[test] +fn external_checker_retries_at_most_three_times_with_bounded_delays() { + let (error, transport, sleeper) = external_error( + "[site](https://docs.example.com/)\n", + vec![ + response(429, None, Some("5")), + response(500, None, Some("invalid")), + response(503, None, Some("31")), + ], + ); + assert!(error.contains("attempt")); + assert_eq!(transport.requests.len(), 3); + assert_eq!(sleeper.delays, vec![5, 2]); +} + +#[test] +fn external_checker_covers_all_sets_and_enforces_request_bounds() { + let sources = [ + source( + "README.md", + LinkSourceSet::Repository, + "[a](https://a.example.com/)\n", + ), + source( + "docs/internal/note.md", + LinkSourceSet::MaintainedInternal, + "[b](https://b.example.com/)\n", + ), + source( + "docs/index.md", + LinkSourceSet::Public, + "[c](https://c.example.com/)\n", + ), + ]; + let mut transport = FakeTransport { + responses: vec![ + response(200, None, None), + response(200, None, None), + response(200, None, None), + ] + .into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("all source sets should pass"); + assert_eq!(transport.requests.len(), 3); + assert!(transport.requests.iter().all(|request| { + request.timeout_seconds == 15 && request.maximum_body_bytes == 64 * 1024 + })); +} + +#[test] +fn valid_http_date_retry_after_is_honored_only_within_the_bound() { + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.com/)\n", + )]; + let mut transport = FakeTransport { + responses: vec![ + response(429, None, Some("Thu, 01 Jan 1970 00:00:05 GMT")), + response(200, None, None), + ] + .into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("bounded HTTP-date retry should pass"); + assert_eq!(sleeper.delays, vec![5]); +} + +#[test] +fn malformed_or_inconsistent_http_date_retry_after_uses_local_delay() { + for value in [ + "Xxx, 01 Jan 1970 00:00:05 GMT", + "Fri, 01 Jan 1970 00:00:05 GMT", + "Thu, 1 Jan 1970 00:00:05 GMT", + "Thu, 01 Jan 01970 00:00:05 GMT", + "Thu, 01 Jan 1970 0:00:05 GMT", + ] { + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.com/)\n", + )]; + let mut transport = FakeTransport { + responses: vec![response(429, None, Some(value)), response(200, None, None)].into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("malformed date should fall back to the local retry delay"); + assert_eq!(sleeper.delays, vec![1], "{value} must not be honored"); + } +} + +#[test] +fn external_checker_accepts_relative_redirects_and_rejects_final_errors() { + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.com/start)\n", + )]; + let mut transport = FakeTransport { + responses: vec![ + response(302, Some("/final"), None), + response(204, None, None), + ] + .into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("relative HTTPS redirect should pass"); + assert_eq!(transport.requests[1].url, "https://docs.example.com/final"); + + let (error, transport, _) = external_error( + "[site](https://docs.example.com/start)\n", + vec![response(404, None, None)], + ); + assert!(error.contains("final status 404")); + assert_eq!(transport.requests.len(), 1); +} + +#[test] +fn curl_transport_get_uses_exact_bounded_nonredirecting_arguments_and_counts_bytes() { + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output( + "200 OK", + &[("Content-Type", "text/plain")], + b"body", + ))] + .into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "GET".to_owned(), + url: "https://docs.example.com/path".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + + let response = transport.send(&request).expect("curl output should parse"); + let runner = transport.into_runner(); + + assert_eq!(response.status, 200); + assert!(response.header_bytes > 0); + assert_eq!(response.body_bytes, 4); + assert_eq!(runner.invocations.len(), 1); + let (program, arguments, maximum_output_bytes, timeout) = &runner.invocations[0]; + assert_eq!(program, "/usr/bin/curl"); + assert_eq!( + arguments, + &[ + "--disable", + "--silent", + "--show-error", + "--proto", + "=https", + "--proto-redir", + "=https", + "--max-redirs", + "0", + "--connect-timeout", + "5", + "--max-time", + "15", + "--max-filesize", + "65536", + "--dump-header", + "-", + "--output", + "-", + "--write-out", + "\nDOCS_PARITY_COUNTS:%{size_header}:%{size_download}\n", + "--request", + "GET", + "--url", + "https://docs.example.com/path", + ] + ); + assert_eq!(*maximum_output_bytes, 64 * 1024 + 64 * 1024 + 128); + assert_eq!(*timeout, Duration::from_secs(15)); +} + +#[test] +fn curl_transport_head_emits_headers_exactly_once() { + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output( + "204 No Content", + &[("Content-Length", "0")], + b"", + ))] + .into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.com/path".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + + let response = transport.send(&request).expect("HEAD output should parse"); + let runner = transport.into_runner(); + + assert_eq!(response.status, 204); + assert_eq!(response.body_bytes, 0); + assert_eq!( + runner.invocations[0].1, + [ + "--disable", + "--silent", + "--show-error", + "--proto", + "=https", + "--proto-redir", + "=https", + "--max-redirs", + "0", + "--connect-timeout", + "5", + "--max-time", + "15", + "--max-filesize", + "65536", + "--output", + "-", + "--write-out", + "\nDOCS_PARITY_COUNTS:%{size_header}:%{size_download}\n", + "--head", + "--url", + "https://docs.example.com/path", + ] + ); +} + +#[test] +fn curl_transport_accepts_legal_repeated_headers_and_selects_the_final_http_block() { + let repeated = [ + ("Set-Cookie", "first=1"), + ("Set-Cookie", "second=2"), + ("Link", "; rel=preload"), + ("Link", "; rel=preload"), + ("Warning", "199 example.invalid stale"), + ("Warning", "299 example.invalid transformed"), + ]; + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output_blocks( + &[ + ("200 Connection established", &[("Proxy-Agent", "fixture")]), + ("100 Continue", &[("X-Interim", "accepted")]), + ("204 No Content", &repeated), + ], + b"", + ))] + .into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + + let response = transport + .send(&ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }) + .expect("legal repeats and intermediate blocks should parse"); + + assert_eq!(response.status, 204); +} + +#[test] +fn curl_transport_rejects_duplicate_security_headers_and_malformed_intermediate_blocks() { + for headers in [ + [("Location", "/one"), ("Location", "/two")], + [("Retry-After", "1"), ("Retry-After", "2")], + [("Content-Length", "0"), ("Content-Length", "0")], + [ + ("Transfer-Encoding", "chunked"), + ("Transfer-Encoding", "chunked"), + ], + [("Content-Encoding", "gzip"), ("Content-Encoding", "gzip")], + ] { + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output("200 OK", &headers, b""))].into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + assert!( + transport + .send(&ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }) + .is_err(), + "duplicate policy/security-rejected header must fail: {headers:?}" + ); + } + + let malformed = curl_output_blocks( + &[ + ("100 Continue", &[("Bad Header", "value")]), + ("200 OK", &[]), + ], + b"", + ); + let runner = FakeCommandRunner { + outputs: vec![Ok(malformed)].into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + assert!( + transport + .send(&ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }) + .is_err(), + "malformed intermediate headers must fail" + ); +} + +#[test] +fn injected_responses_apply_the_same_repeated_header_policy() { + let source = "[site](https://docs.example.invalid/)\n"; + let legal = ExternalResponse { + status: 200, + headers: vec![ + header("Set-Cookie", "first=1"), + header("Set-Cookie", "second=2"), + header("Link", "; rel=preload"), + header("Link", "; rel=preload"), + ], + header_bytes: 128, + body_bytes: 0, + }; + let sources = [self::source("README.md", LinkSourceSet::Repository, source)]; + let mut transport = FakeTransport { + responses: vec![legal].into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("legal repeats should pass through an injected response"); + + let duplicate = ExternalResponse { + status: 200, + headers: vec![header("Content-Length", "0"), header("content-length", "0")], + header_bytes: 64, + body_bytes: 0, + }; + let (error, _, _) = external_error(source, vec![duplicate]); + assert!(error.contains("header")); +} + +#[test] +fn curl_transport_parses_head_fallback_statuses_through_the_shared_state_machine() { + for unsupported in ["405 Method Not Allowed", "501 Not Implemented"] { + let runner = FakeCommandRunner { + outputs: vec![ + Ok(curl_output(unsupported, &[], b"")), + Ok(curl_output("200 OK", &[], b"body")), + ] + .into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.invalid/)\n", + )]; + let mut sleeper = FakeSleeper::default(); + + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("parsed unsupported HEAD should fall back to GET"); + let runner = transport.into_runner(); + assert!( + runner.invocations[0] + .1 + .iter() + .any(|value| value == "--head") + ); + assert!( + !runner.invocations[0] + .1 + .iter() + .any(|value| value == "--dump-header") + ); + assert!(runner.invocations[1].1.iter().any(|value| value == "GET")); + assert!( + runner.invocations[1] + .1 + .iter() + .any(|value| value == "--dump-header") + ); + } +} + +#[test] +fn actual_file_curl_head_uses_one_header_frame_and_the_production_parser_path() { + let directory = tempfile::tempdir().expect("should create file HEAD fixture"); + let payload = directory.path().join("payload.bin"); + fs::write(&payload, b"bounded local payload").expect("should write file HEAD payload"); + let runner = FileHeadCommandRunner { + file_url: format!("file://{}", payload.display()), + observed_header_copies: 0, + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "HEAD".to_owned(), + url: "https://file-head.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + + let response = transport + .send(&request) + .expect("actual file HEAD framing should pass the production parser"); + let runner = transport.into_runner(); + + assert_eq!(response.status, 200); + assert!(response.header_bytes > 0); + assert_eq!(response.body_bytes, 0); + assert_eq!(runner.observed_header_copies, 1); +} + +#[test] +fn curl_transport_rejects_unsafe_requests_and_malformed_command_output() { + for request in [ + ExternalRequest { + method: "POST".to_owned(), + url: "https://docs.example.com/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }, + ExternalRequest { + method: "GET".to_owned(), + url: "http://docs.example.com/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }, + ExternalRequest { + method: "GET".to_owned(), + url: "https://user:password@docs.example.com/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }, + ] { + let mut transport = CurlTransport::new(FakeCommandRunner::default()); + assert!(transport.send(&request).is_err()); + assert!(transport.into_runner().invocations.is_empty()); + } + + for output in [ + CommandOutput { + success: true, + status_code: Some(0), + stdout: b"not HTTP\nDOCS_PARITY_COUNTS:8:0\n".to_vec(), + }, + curl_output("999 Nope", &[], b""), + CommandOutput { + success: false, + status_code: Some(7), + stdout: Vec::new(), + }, + ] { + let runner = FakeCommandRunner { + outputs: vec![Ok(output)].into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.com/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + assert!(transport.send(&request).is_err()); + } +} + +#[test] +fn production_command_runner_stops_reading_at_the_stdout_bound() { + let mut runner = ProcessCommandRunner; + + let error = runner + .run( + "/usr/bin/curl", + &["--version".to_owned()], + 32, + Duration::from_secs(1), + ) + .expect_err("oversized stdout must be terminated"); + + assert!(error.contains("stdout exceeds 32 bytes")); +} + +#[test] +fn production_command_runner_rejects_path_substitution() { + let mut runner = ProcessCommandRunner; + + let error = runner + .run( + "curl", + &["--version".to_owned()], + 4096, + Duration::from_secs(1), + ) + .expect_err("production execution must require the fixed curl path"); + + assert!(error.contains("executable")); +} + +#[test] +fn curl_disable_first_ignores_ambient_curlrc_without_network_access() { + let directory = tempfile::tempdir().expect("should create curl home"); + let payload = directory.path().join("payload.txt"); + let side_effect = directory.path().join("curlrc-output.txt"); + fs::write(&payload, "local payload").expect("should write local payload"); + fs::write( + directory.path().join(".curlrc"), + format!("output = \"{}\"\n", side_effect.display()), + ) + .expect("should write isolated curl config"); + let url = format!("file://{}", payload.display()); + + let control = Command::new("curl") + .env("CURL_HOME", directory.path()) + .args(["--silent", "--show-error", "--url", &url]) + .output() + .expect("should execute curl control"); + assert!(control.status.success()); + assert_eq!( + fs::read_to_string(&side_effect).expect("curlrc should affect control"), + "local payload" + ); + fs::remove_file(&side_effect).expect("should reset bounded fixture side effect"); + + let isolated = Command::new("curl") + .env("CURL_HOME", directory.path()) + .args(["--disable", "--silent", "--show-error", "--url", &url]) + .output() + .expect("should execute isolated curl"); + assert!(isolated.status.success()); + assert_eq!(isolated.stdout, b"local payload"); + assert!(!side_effect.exists(), "--disable must ignore .curlrc"); +} + +#[test] +fn response_header_names_use_the_complete_nonempty_rfc_token_grammar() { + let source = "[site](https://docs.example.invalid/)\n"; + let valid_name = "x!#$%&'*+-.^_`|~"; + let valid = ExternalResponse { + status: 200, + headers: vec![header(valid_name, "ok")], + header_bytes: 64, + body_bytes: 0, + }; + let sources = [self::source("README.md", LinkSourceSet::Repository, source)]; + let mut transport = FakeTransport { + responses: vec![valid].into(), + requests: Vec::new(), + }; + let mut sleeper = FakeSleeper::default(); + check_external_links(&sources, &[], 0, &mut transport, &mut sleeper) + .expect("every RFC field-name token character should be accepted"); + + for name in ["", "bad name", "bad\u{0001}name", "tést"] { + let response = ExternalResponse { + status: 200, + headers: vec![header(name, "ok")], + header_bytes: 64, + body_bytes: 0, + }; + let (error, _, _) = external_error(source, vec![response]); + assert!(error.contains("header"), "{name:?} must fail: {error}"); + } + + for name in ["", "bad name", "bad\u{0001}name", "tést"] { + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output("200 OK", &[(name, "value")], b""))].into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + assert!(transport.send(&request).is_err(), "{name:?} must fail"); + } + + let runner = FakeCommandRunner { + outputs: vec![Ok(curl_output("200 OK", &[(valid_name, "value")], b""))].into(), + invocations: Vec::new(), + }; + let mut transport = CurlTransport::new(runner); + let request = ExternalRequest { + method: "HEAD".to_owned(), + url: "https://docs.example.invalid/".to_owned(), + timeout_seconds: 15, + maximum_body_bytes: 64 * 1024, + }; + transport + .send(&request) + .expect("curl parsing should accept the same RFC token grammar"); +} + +#[test] +fn external_response_header_and_body_bounds_fail_closed() { + let source = "[site](https://docs.example.com/)\n"; + let mut cases = Vec::new(); + + let mut too_many = Vec::new(); + for index in 0..129 { + too_many.push(ExternalHeader { + name: format!("x-{index}"), + value: "ok".to_owned(), + }); + } + cases.push(ExternalResponse { + status: 200, + headers: too_many, + header_bytes: 1024, + body_bytes: 0, + }); + cases.push(ExternalResponse { + status: 200, + headers: vec![ExternalHeader { + name: "x".repeat(257), + value: "ok".to_owned(), + }], + header_bytes: 1024, + body_bytes: 0, + }); + cases.push(ExternalResponse { + status: 200, + headers: vec![ExternalHeader { + name: "x-test".to_owned(), + value: "x".repeat(8 * 1024 + 1), + }], + header_bytes: 16 * 1024, + body_bytes: 0, + }); + cases.push(ExternalResponse { + status: 200, + headers: Vec::new(), + header_bytes: 64 * 1024 + 1, + body_bytes: 0, + }); + cases.push(ExternalResponse { + status: 200, + headers: Vec::new(), + header_bytes: 32, + body_bytes: 64 * 1024 + 1, + }); + cases.push(ExternalResponse { + status: 200, + headers: vec![header("bad name", "ok")], + header_bytes: 32, + body_bytes: 0, + }); + cases.push(ExternalResponse { + status: 200, + headers: vec![ExternalHeader { + name: "x".repeat(256), + value: "v".repeat(8 * 1024 - 255), + }], + header_bytes: 16 * 1024, + body_bytes: 0, + }); + + for response in cases { + let (error, _, _) = external_error(source, vec![response]); + assert!( + error.contains("header") || error.contains("body"), + "bound failure must be specific: {error}" + ); + } +} + +#[test] +fn external_exceptions_are_exact_typed_owned_and_expiring() { + let sources = [source( + "README.md", + LinkSourceSet::Repository, + "[site](https://docs.example.com/)\n", + )]; + let exception = ExternalException { + url: "https://docs.example.com/".to_owned(), + owner: "docs-team".to_owned(), + reason: "Host blocks automated HEAD and GET requests".to_owned(), + expires_at: "2026-09-02T00:00:00Z".to_owned(), + }; + let mut transport = FakeTransport::default(); + let mut sleeper = FakeSleeper::default(); + check_external_links( + &sources, + std::slice::from_ref(&exception), + 1_788_307_199, + &mut transport, + &mut sleeper, + ) + .expect("active exact exception should pass"); + assert!(transport.requests.is_empty()); + + let error = format!( + "{:?}", + check_external_links( + &sources, + &[exception], + 1_788_307_200, + &mut transport, + &mut sleeper, + ) + .expect_err("exception should fail at expiry") + ); + assert!(error.contains("expired")); +} + +#[test] +fn publication_records_check_pages_navigation_reachability_and_diagrams() { + let repository = PublicationRepository::new(); + let clean = repository.check(); + assert_eq!( + status_code(&clean), + SUCCESS, + "complete publication fixture should pass: {}", + diagnostic(&clean) + ); + + let pages_path = repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let pages = fs::read_to_string(&pages_path).expect("should read pages manifest"); + fs::write( + &pages_path, + pages.replacen("navigation = true", "navigation = false", 1), + ) + .expect("should break navigation record"); + let navigation = repository.check(); + assert_eq!(status_code(&navigation), ERROR); + assert!(diagnostic(&navigation).contains("navigation inventory mismatch")); +} + +#[test] +fn unlisted_orphan_and_missing_diagram_prose_fail_closed() { + let repository = PublicationRepository::new(); + let index_path = repository.path().join("docs/index.md"); + fs::write(&index_path, "# Home\n").expect("should remove guide reachability"); + let orphan = repository.check(); + assert_eq!(status_code(&orphan), ERROR); + assert!(diagnostic(&orphan).contains("orphan inventory mismatch")); + + fs::write(&index_path, "# Home\n[guide](/guide/)\n").expect("should restore guide link"); + let diagram_path = repository + .path() + .join("tools/docs-parity/manifests/diagrams.toml"); + let diagrams = fs::read_to_string(&diagram_path).expect("should read diagrams manifest"); + fs::write( + diagram_path, + diagrams.replace("prose_anchor = \"flow\"", "prose_anchor = \"missing\""), + ) + .expect("should break diagram prose record"); + let diagram = repository.check(); + assert_eq!(status_code(&diagram), ERROR); + assert!(diagnostic(&diagram).contains("missing prose heading")); +} + +#[test] +fn diagram_records_bind_the_exact_semantic_mermaid_content() { + let repository = PublicationRepository::new(); + let diagram_path = repository + .path() + .join("tools/docs-parity/manifests/diagrams.toml"); + let diagrams = fs::read_to_string(&diagram_path).expect("should read diagram manifest"); + assert!( + diagrams.contains(&format!("fingerprint = \"{}\"", fingerprint(b"graph TD\n"))), + "fixture fingerprint should bind semantic content" + ); + + let clean = repository.check(); + assert_eq!( + status_code(&clean), + SUCCESS, + "matching diagram fingerprint should pass: {}", + diagnostic(&clean) + ); + + let guide_path = repository.path().join("docs/guide/index.md"); + let guide = fs::read_to_string(&guide_path).expect("should read guide"); + fs::write(&guide_path, guide.replace("graph TD", "graph LR")) + .expect("should change semantic diagram content"); + let stale = repository.check(); + assert_eq!(status_code(&stale), ERROR); + assert!( + diagnostic(&stale).contains("fingerprint"), + "stale diagram must report fingerprint mismatch: {}", + diagnostic(&stale) + ); +} + +#[test] +fn swapping_mermaid_content_between_selectors_reopens_review() { + let repository = PublicationRepository::new(); + let guide_path = repository.path().join("docs/guide/index.md"); + let first = "graph TD\n"; + let second = "graph LR\n"; + fs::write( + &guide_path, + format!( + "# Guide\n## Flow One\n```mermaid\n{first}```\n## Flow Two\n```mermaid\n{second}```\n" + ), + ) + .expect("should write two diagrams"); + let diagram_path = repository + .path() + .join("tools/docs-parity/manifests/diagrams.toml"); + fs::write( + &diagram_path, + format!( + concat!( + "version = 1\nreviewed = true\n\n", + "[[diagrams]]\npath = \"docs/guide/index.md\"\nselector = \"mermaid:1\"\n", + "fingerprint = \"{}\"\nprose_anchor = \"flow-one\"\nowner = \"docs-team\"\n\n", + "[[diagrams]]\npath = \"docs/guide/index.md\"\nselector = \"mermaid:2\"\n", + "fingerprint = \"{}\"\nprose_anchor = \"flow-two\"\nowner = \"docs-team\"\n", + ), + fingerprint(first.as_bytes()), + fingerprint(second.as_bytes()), + ), + ) + .expect("should bind both diagram selectors"); + let clean = repository.check(); + assert_eq!(status_code(&clean), SUCCESS, "{}", diagnostic(&clean)); + + fs::write( + &guide_path, + format!( + "# Guide\n## Flow One\n```mermaid\n{second}```\n## Flow Two\n```mermaid\n{first}```\n" + ), + ) + .expect("should swap diagram content"); + let swapped = repository.check(); + assert_eq!(status_code(&swapped), ERROR); + assert!(diagnostic(&swapped).contains("fingerprint mismatch")); +} + +#[test] +fn typed_page_tombstones_are_exact_and_require_live_replacements() { + let repository = PublicationRepository::new(); + let pages_path = repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let pages = fs::read_to_string(&pages_path).expect("should read pages manifest"); + let typed_pages = pages + + concat!( + "\n[[pages]]\n", + "kind = \"tombstone\"\n", + "route = \"/retired\"\n", + "replacement = \"/guide/\"\n", + ); + fs::write(&pages_path, typed_pages).expect("should write typed page manifest"); + write_file( + repository.path(), + "tools/docs-parity/manifests/orphans.toml", + concat!( + "version = 1\nreviewed = true\n\n", + "[[exceptions]]\n", + "kind = \"tombstone\"\n", + "route = \"/retired\"\n", + "replacement = \"/guide/\"\n", + "owner = \"docs-team\"\n", + "reason = \"Route retained for a bounded migration.\"\n", + "expires_at = \"2099-01-01T00:00:00Z\"\n", + ), + ); + + let clean = repository.check(); + assert_eq!( + status_code(&clean), + SUCCESS, + "matching typed tombstone should pass: {}", + diagnostic(&clean) + ); + + let orphans_path = repository + .path() + .join("tools/docs-parity/manifests/orphans.toml"); + let orphans = fs::read_to_string(&orphans_path).expect("should read orphans"); + fs::write(&orphans_path, orphans.replace("/retired", "/extra-retired")) + .expect("should make tombstone inventories differ"); + let mismatch = repository.check(); + assert_eq!(status_code(&mismatch), ERROR); + assert!(diagnostic(&mismatch).contains("tombstone inventory mismatch")); +} + +#[test] +fn tombstones_reject_live_collisions_missing_replacements_and_stale_targets() { + for tombstone in [ + "kind = \"tombstone\"\nroute = \"/guide/\"\nreplacement = \"/\"\n", + "kind = \"tombstone\"\nroute = \"/retired\"\n", + "kind = \"tombstone\"\nroute = \"/retired\"\nreplacement = \"/missing\"\n", + ] { + let repository = PublicationRepository::new(); + let pages_path = repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let pages = fs::read_to_string(&pages_path).expect("should read pages"); + let typed_pages = pages + &format!("\n[[pages]]\n{tombstone}"); + fs::write(&pages_path, typed_pages).expect("should write pages"); + + let result = repository.check(); + assert_eq!(status_code(&result), ERROR, "{tombstone} must fail"); + } + + let repository = PublicationRepository::new(); + let pages_path = repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let pages = fs::read_to_string(&pages_path).expect("should read pages"); + fs::write( + &pages_path, + pages + + concat!( + "\n[[pages]]\nkind = \"tombstone\"\nroute = \"/retired\"\n", + "replacement = \"/\"\n\n", + "[[pages]]\nkind = \"tombstone\"\nroute = \"/retired\"\n", + "replacement = \"/guide/\"\n", + ), + ) + .expect("should write duplicate tombstones"); + let duplicate = repository.check(); + assert_eq!(status_code(&duplicate), ERROR); + assert!( + diagnostic(&duplicate).contains("duplicate tombstone page"), + "duplicate routes must fail before inventory comparison: {}", + diagnostic(&duplicate) + ); +} + +#[test] +fn mermaid_inventory_uses_semantic_exact_and_closed_fences() { + for replacement in [ + "```mermaid-extra\ngraph TD\n```", + "```mermaid {}\ngraph TD\n```", + "```mermaid {naked}\ngraph TD\n```", + "```mermaid {#}\ngraph TD\n```", + "```mermaid\ngraph TD", + "```mermaid\ngraph TD\n~~~", + ] { + let repository = PublicationRepository::new(); + let guide_path = repository.path().join("docs/guide/index.md"); + let guide = fs::read_to_string(&guide_path).expect("should read guide"); + fs::write( + &guide_path, + guide.replace("```mermaid\ngraph TD\n```", replacement), + ) + .expect("should replace diagram fence"); + + let result = repository.check(); + assert_eq!(status_code(&result), ERROR, "{replacement} must fail"); + assert!(diagnostic(&result).contains("mermaid")); + } + + let repository = PublicationRepository::new(); + let guide_path = repository.path().join("docs/guide/index.md"); + let guide = fs::read_to_string(&guide_path).expect("should read guide"); + fs::write( + &guide_path, + guide.replace( + "```mermaid", + "``` mermaid {#flow-diagram .wide data-role=flow}", + ), + ) + .expect("should add supported fence attributes"); + let valid = repository.check(); + assert_eq!( + status_code(&valid), + SUCCESS, + "valid mermaid attributes should pass: {}", + diagnostic(&valid) + ); +} + +#[test] +fn diagram_prose_must_be_a_heading_not_an_arbitrary_html_anchor() { + let repository = PublicationRepository::new(); + write_file( + repository.path(), + "docs/guide/index.md", + "# Guide\n\n```mermaid\ngraph TD\n```\n", + ); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("prose heading")); +} + +#[test] +fn pages_manifest_is_bounded_before_deserialization() { + let repository = PublicationRepository::new(); + let pages_path = repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let pages = fs::read_to_string(&pages_path).expect("should read pages"); + fs::write( + &pages_path, + format!("{pages}\n# {}\n", "x".repeat(4 * 1024 * 1024)), + ) + .expect("should write oversized pages manifest"); + + let result = repository.check(); + + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("pages manifest exceeds")); +} diff --git a/tools/docs-parity/tests/markdown.rs b/tools/docs-parity/tests/markdown.rs new file mode 100644 index 000000000..08e098bad --- /dev/null +++ b/tools/docs-parity/tests/markdown.rs @@ -0,0 +1,432 @@ +use std::env; +use std::fs; +#[cfg(unix)] +use std::os::unix::fs::{PermissionsExt as _, symlink}; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; + +use docs_parity::markdown::{ + GeneratedRegion, GeneratedRow, OwnershipRecord, render_generated_document, +}; +use tempfile::TempDir; + +const SUCCESS: i32 = 0; +const DRIFT: i32 = 1; +const ERROR: i32 = 2; + +struct TestRepository { + directory: TempDir, +} + +impl TestRepository { + fn new(document: &str, target: &str) -> Self { + let directory = tempfile::tempdir().expect("should create test repository"); + run_git(directory.path(), &["init", "--quiet"]); + write(directory.path(), target, document); + let manifest = format!( + "version = 1\nreviewed = true\nsite_root = \"docs\"\n\ + vitepress_config = \"docs/.vitepress/config.mts\"\n\n\ + [[regions]]\nname = \"adapter-support\"\npath = \"{}\"\n\ + columns = [\"Adapter\", \"Health\"]\n\n\ + [[regions.rows]]\nkey = \"spin\"\ncells = [\"Spin\", \"yes\"]\n\n\ + [[regions.rows]]\nkey = \"axum\"\ncells = [\"Axum\", \"yes\"]\n", + target + ); + write( + directory.path(), + "tools/docs-parity/manifests/pages.toml", + &manifest, + ); + run_git(directory.path(), &["add", "--all"]); + Self { directory } + } + + fn path(&self) -> &Path { + self.directory.path() + } + + fn command(&self) -> Command { + let mut command = Command::new(binary()); + command.current_dir(self.path()); + command + } +} + +fn binary() -> PathBuf { + PathBuf::from(env!("CARGO_BIN_EXE_docs-parity")) +} + +fn write(root: &Path, relative: &str, contents: &str) { + let path = root.join(relative); + fs::create_dir_all(path.parent().expect("path should have a parent")) + .expect("should create parent"); + fs::write(path, contents).expect("should write fixture"); +} + +fn run_git(repository: &Path, arguments: &[&str]) { + let status = Command::new("git") + .args(arguments) + .current_dir(repository) + .status() + .expect("should execute git"); + assert!(status.success(), "git command should succeed"); +} + +fn output(command: &mut Command) -> Output { + command.output().expect("should execute docs-parity") +} + +fn status_code(output: &Output) -> i32 { + output.status.code().expect("should exit normally") +} + +fn region() -> GeneratedRegion { + GeneratedRegion { + name: "adapter-support".to_owned(), + columns: vec!["Adapter".to_owned(), "Health".to_owned()], + rows: vec![ + GeneratedRow { + key: "spin".to_owned(), + cells: vec!["Spin".to_owned(), "yes".to_owned()], + }, + GeneratedRow { + key: "axum".to_owned(), + cells: vec!["Axum".to_owned(), "yes".to_owned()], + }, + ], + } +} + +fn render(source: &str, regions: &[GeneratedRegion], ownership: &[OwnershipRecord]) -> String { + String::from_utf8( + render_generated_document(source.as_bytes(), regions, ownership) + .expect("document should render"), + ) + .expect("rendered document should be UTF-8") +} + +fn error(source: &str, regions: &[GeneratedRegion], ownership: &[OwnershipRecord]) -> String { + format!( + "{:?}", + render_generated_document(source.as_bytes(), regions, ownership) + .expect_err("document should fail") + ) +} + +#[test] +fn generated_regions_sort_rows_and_preserve_every_outside_byte() { + let source = concat!( + "prefix\r\n", + "\r\n", + "hand drift\r\n", + "\r\n", + "suffix without newline", + ); + + let rendered = render(source, &[region()], &[]); + + assert!(rendered.starts_with("prefix\r\n\r\n")); + assert!( + rendered.ends_with("\r\nsuffix without newline") + ); + assert!( + rendered + .find("| Axum | yes |") + .expect("Axum row should exist") + < rendered + .find("| Spin | yes |") + .expect("Spin row should exist"), + "rows should use stable key ordering" + ); + assert_eq!( + render(&rendered, &[region()], &[]), + rendered, + "a second update should be byte-identical" + ); +} + +#[test] +fn generated_marker_grammar_fails_closed() { + let fixtures = [ + ( + "duplicate", + "\nold\n\n\nold\n\n", + ), + ( + "missing end", + "\nold\n", + ), + ( + "mismatched", + "\nold\n\n", + ), + ( + "nested", + "\n\n\n\n", + ), + ( + "unsafe placement", + "prefix \nold\n\n", + ), + ]; + + for (name, source) in fixtures { + assert!( + !error(source, &[region()], &[]).is_empty(), + "{name} should fail" + ); + } +} + +#[test] +fn unknown_marker_and_unknown_record_names_fail_closed() { + let unknown_marker = concat!( + "\n", + "old\n", + "\n", + ); + assert!(error(unknown_marker, &[region()], &[]).contains("unknown")); + + let known_marker = concat!( + "\n", + "old\n", + "\n", + ); + let mut unbound = region(); + unbound.name = "unbound-record".to_owned(); + assert!(error(known_marker, &[region(), unbound], &[]).contains("unbound")); +} + +#[test] +fn generated_rows_require_unique_keys_and_exact_cell_counts() { + let source = concat!( + "\n", + "old\n", + "\n", + ); + let mut duplicate = region(); + duplicate.rows[1].key = duplicate.rows[0].key.clone(); + assert!(error(source, &[duplicate], &[]).contains("duplicate")); + + let mut wrong_width = region(); + wrong_width.rows[0].cells.pop(); + assert!(error(source, &[wrong_width], &[]).contains("cells")); +} + +#[test] +fn adjacent_manual_prose_requires_an_exact_owned_marker() { + let source = concat!( + "\n", + "old\n", + "\n", + "\n", + "Manual endpoint contract.\n", + ); + let ownership = OwnershipRecord { + name: "endpoint-contract".to_owned(), + owner: "docs-team".to_owned(), + }; + assert_eq!( + render(source, &[region()], std::slice::from_ref(&ownership)) + .lines() + .last(), + Some("Manual endpoint contract.") + ); + + let missing = source.replace( + "\n", + "", + ); + assert!(error(&missing, &[region()], std::slice::from_ref(&ownership)).contains("ownership")); + + let wrong_owner = source.replace("owner=docs-team", "owner=other-team"); + assert!(error(&wrong_owner, &[region()], &[ownership]).contains("owner")); +} + +#[test] +fn generate_check_never_writes_and_update_is_atomic_and_idempotent() { + let document = concat!( + "before\n", + "\n", + "hand edit\n", + "\n", + "after\n", + ); + let repository = TestRepository::new(document, "docs/generated.md"); + let target = repository.path().join("docs/generated.md"); + let before = fs::read(&target).expect("should read original"); + + let checked = output(repository.command().args(["generate", "--check"])); + assert_eq!(status_code(&checked), DRIFT, "hand drift should fail check"); + assert_eq!(fs::read(&target).expect("should reread target"), before); + + let updated = output(repository.command().args(["generate", "--update"])); + assert_eq!( + status_code(&updated), + SUCCESS, + "update should pass: {}", + String::from_utf8_lossy(&updated.stderr) + ); + let first = fs::read(&target).expect("should read updated target"); + let clean = output(repository.command().args(["generate", "--check"])); + let second = output(repository.command().args(["generate", "--update"])); + assert_eq!(status_code(&clean), SUCCESS, "updated bytes should check"); + assert_eq!(status_code(&second), SUCCESS, "second update should pass"); + assert_eq!(fs::read(&target).expect("should reread target"), first); +} + +#[test] +fn generated_update_never_deletes_an_unknown_peer_stage() { + let document = concat!( + "\n", + "old\n", + "\n", + ); + let repository = TestRepository::new(document, "docs/generated.md"); + let target = repository.path().join("docs/generated.md"); + let staged = repository.path().join("docs/.generated.md.docs-parity.tmp"); + fs::write(&staged, "interrupted stage\n").expect("should create stale stage"); + let result = output(repository.command().args(["generate", "--update"])); + + assert_eq!( + status_code(&result), + SUCCESS, + "an unrelated stage name must not block the owned update: {}", + String::from_utf8_lossy(&result.stderr) + ); + assert_eq!( + fs::read_to_string(&staged).expect("should retain unknown peer stage"), + "interrupted stage\n" + ); + assert_ne!( + fs::read(target).expect("should read generated target"), + b"\nold\n\n" + ); +} + +#[cfg(unix)] +#[test] +fn generated_atomic_update_preserves_the_original_safe_mode() { + let document = concat!( + "\n", + "old\n", + "\n", + ); + let repository = TestRepository::new(document, "docs/generated.md"); + let target = repository.path().join("docs/generated.md"); + fs::set_permissions(&target, fs::Permissions::from_mode(0o644)) + .expect("should set safe original mode"); + + let result = output( + Command::new("/bin/sh") + .current_dir(repository.path()) + .args([ + "-c", + "umask 077; exec \"$1\" generate --update", + "docs-parity-umask-fixture", + ]) + .arg(binary()), + ); + + assert_eq!(status_code(&result), SUCCESS); + assert_eq!( + fs::metadata(target) + .expect("should inspect updated target") + .permissions() + .mode() + & 0o777, + 0o644 + ); +} + +#[cfg(unix)] +#[test] +fn generated_targets_reject_symlinks_unsafe_modes_and_path_escape() { + let document = concat!( + "\n", + "old\n", + "\n", + ); + let symlink_repository = TestRepository::new(document, "docs/real.md"); + symlink( + "real.md", + symlink_repository.path().join("docs/generated.md"), + ) + .expect("should create internal symlink"); + let manifest = fs::read_to_string( + symlink_repository + .path() + .join("tools/docs-parity/manifests/pages.toml"), + ) + .expect("should read pages manifest") + .replace("docs/real.md", "docs/generated.md"); + fs::write( + symlink_repository + .path() + .join("tools/docs-parity/manifests/pages.toml"), + manifest, + ) + .expect("should update pages manifest"); + let symlink_result = output(symlink_repository.command().args(["generate", "--update"])); + assert_eq!(status_code(&symlink_result), ERROR); + + let unsafe_repository = TestRepository::new(document, "docs/generated.md"); + fs::set_permissions( + unsafe_repository.path().join("docs/generated.md"), + fs::Permissions::from_mode(0o666), + ) + .expect("should make target unsafe"); + let unsafe_result = output(unsafe_repository.command().args(["generate", "--update"])); + assert_eq!(status_code(&unsafe_result), ERROR); + + let escape_repository = TestRepository::new(document, "docs/generated.md"); + let manifest_path = escape_repository + .path() + .join("tools/docs-parity/manifests/pages.toml"); + let manifest = fs::read_to_string(&manifest_path) + .expect("should read pages manifest") + .replace("docs/generated.md", "../outside.md"); + fs::write(manifest_path, manifest).expect("should update pages manifest"); + let escape_result = output(escape_repository.command().args(["generate", "--update"])); + assert_eq!(status_code(&escape_result), ERROR); +} + +#[test] +fn generated_target_rejects_oversized_input_before_writing() { + let document = format!( + "\n{}\n", + "x".repeat(4 * 1024 * 1024), + ); + let repository = TestRepository::new(&document, "docs/generated.md"); + let before = fs::metadata(repository.path().join("docs/generated.md")) + .expect("should inspect original") + .len(); + + let result = output(repository.command().args(["generate", "--update"])); + + assert_eq!(status_code(&result), ERROR); + assert_eq!( + fs::metadata(repository.path().join("docs/generated.md")) + .expect("should inspect preserved original") + .len(), + before + ); +} + +#[test] +fn generated_target_rejects_oversized_rendered_output_before_writing() { + let source = concat!( + "\n", + "old\n", + "\n", + ); + let mut oversized = region(); + oversized.rows[0].cells[0] = "x".repeat(4 * 1024 * 1024); + + let result = render_generated_document(source.as_bytes(), &[oversized], &[]); + + assert!( + format!("{:?}", result.expect_err("oversized output should fail")) + .contains("rendered document exceeds") + ); +} diff --git a/tools/docs-parity/tests/routes.rs b/tools/docs-parity/tests/routes.rs new file mode 100644 index 000000000..84f50f9af --- /dev/null +++ b/tools/docs-parity/tests/routes.rs @@ -0,0 +1,2824 @@ +use std::collections::BTreeSet; + +use docs_parity::routes::{ + AdapterSupportManifest, RouteManifest, RouteRecord, RouteShape, RouteSources, RouteStatus, + extract_cloudflare_routes, extract_named_routes, extract_repository_routes, + validate_adapter_support, validate_routes, +}; + +fn route( + adapter: &str, + path: &str, + methods: &[&str], + shape: RouteShape, + predicate: &str, + status: RouteStatus, + startup_router: bool, +) -> RouteRecord { + RouteRecord::new( + adapter, + path, + methods, + shape, + predicate, + status, + startup_router, + ) +} + +fn with_publisher_path_constants(adapter_source: &str) -> String { + let constants = include_str!("../../../crates/trusted-server-core/src/publisher.rs") + .lines() + .filter(|line| { + line.contains("pub const PAGE_BIDS_PATH:") + || line.contains("pub const PAGE_BIDS_LEGACY_PATH:") + }) + .collect::>() + .join("\n"); + format!("{adapter_source}\n{constants}") +} + +#[test] +fn route_set_equality_rejects_every_semantic_axis() { + let expected = BTreeSet::from([ + route( + "fastly", + "/health", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + true, + ), + route( + "cloudflare", + "/{*rest}", + &["GET", "POST"], + RouteShape::Template, + "publisher_fallback", + RouteStatus::PublisherFallback, + false, + ), + ]); + validate_routes(&expected, &expected).expect("identical routes should pass"); + + for (axis, changed) in [ + ( + "method", + route( + "fastly", + "/health", + &["POST"], + RouteShape::Literal, + "always", + RouteStatus::Real, + true, + ), + ), + ( + "shape", + route( + "fastly", + "/health", + &["GET"], + RouteShape::Conditional, + "always", + RouteStatus::Real, + true, + ), + ), + ( + "predicate", + route( + "fastly", + "/health", + &["GET"], + RouteShape::Literal, + "settings.debug.enabled", + RouteStatus::Real, + true, + ), + ), + ( + "status", + route( + "fastly", + "/health", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Unsupported, + true, + ), + ), + ( + "startup-router", + route( + "fastly", + "/health", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false, + ), + ), + ] { + let mut observed = expected.clone(); + observed.retain(|record| record.adapter != "fastly"); + observed.insert(changed); + let error = validate_routes(&expected, &observed) + .expect_err("every route semantic change must fail exact equality"); + assert!(error.to_string().contains(axis), "{axis}: {error:?}"); + } + + let mut missing = expected.clone(); + missing.pop_first(); + assert!( + validate_routes(&expected, &missing) + .expect_err("a missing route must fail") + .to_string() + .contains("route") + ); + let mut extra = expected.clone(); + extra.insert(route( + "spin", + "/extra", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false, + )); + assert!( + validate_routes(&expected, &extra) + .expect_err("an extra route must fail") + .to_string() + .contains("route") + ); +} + +#[test] +fn cloudflare_closed_grammar_expands_constants_loops_methods_and_fallback() { + let source = r#" + const PAGE_BIDS_PATH: &str = "/_ts/page-bids"; + const PAGE_BIDS_LEGACY_PATH: &str = "/__ts/page-bids"; + fn publisher_fallback_methods() -> [Method; 2] { + [Method::GET, Method::POST] + } + fn build_router(state: &State) -> RouterService { + let mut router = RouterService::builder() + .get("/.well-known/trusted-server.json", discovery) + .post("/auction", auction); + for path in [PAGE_BIDS_PATH, PAGE_BIDS_LEGACY_PATH] { + router = router.route(path, Method::GET, page_bids.clone()); + router = router.route(path, Method::OPTIONS, page_bids_preflight.clone()); + } + for method in publisher_fallback_methods() { + router = router.route("/", method.clone(), fallback.clone()); + router = router.route("/{*rest}", method, fallback.clone()); + } + router.build() + } + "#; + + let observed = extract_cloudflare_routes(source).expect("known builder grammar should parse"); + assert_eq!( + observed, + BTreeSet::from([ + route( + "cloudflare", + "/.well-known/trusted-server.json", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + route( + "cloudflare", + "/auction", + &["POST"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + route( + "cloudflare", + "/_ts/page-bids", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + route( + "cloudflare", + "/_ts/page-bids", + &["OPTIONS"], + RouteShape::Literal, + "always", + RouteStatus::Guarded, + false + ), + route( + "cloudflare", + "/__ts/page-bids", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + route( + "cloudflare", + "/__ts/page-bids", + &["OPTIONS"], + RouteShape::Literal, + "always", + RouteStatus::Guarded, + false + ), + route( + "cloudflare", + "/", + &["GET", "POST"], + RouteShape::Literal, + "publisher_fallback", + RouteStatus::PublisherFallback, + false + ), + route( + "cloudflare", + "/{*rest}", + &["GET", "POST"], + RouteShape::Template, + "publisher_fallback", + RouteStatus::PublisherFallback, + false + ), + ]) + ); +} + +#[test] +fn cloudflare_unknown_builder_construct_fails_closed() { + let source = r#" + fn publisher_fallback_methods() -> [Method; 1] { [Method::GET] } + fn build_router() { + let mut router = RouterService::builder().get("/known", handler); + register_hidden_route(&mut router, "/hidden"); + router.build() + } + "#; + assert!( + extract_cloudflare_routes(source) + .expect_err("an unknown route builder construct must fail closed") + .to_string() + .contains("unsupported Cloudflare") + ); +} + +#[test] +fn cloudflare_follows_the_builder_returned_by_build_router() { + let source = r#" + fn build_router() { + let mut actual = RouterService::builder().get("/actual", actual_handler); + actual = actual.post("/post", post_handler); + actual.build() + } + "#; + let routes = extract_cloudflare_routes(source) + .expect("the returned builder, not a variable spelling, is authoritative"); + assert_eq!( + routes, + BTreeSet::from([ + route( + "cloudflare", + "/actual", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + route( + "cloudflare", + "/post", + &["POST"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + ), + ]) + ); +} + +#[test] +fn cloudflare_accepts_a_unique_returned_builder_chain() { + let source = r#" + fn build_router() { + RouterService::builder().get("/actual", handler).build() + } + "#; + assert_eq!( + extract_cloudflare_routes(source).expect("a returned builder chain is authoritative"), + BTreeSet::from([route( + "cloudflare", + "/actual", + &["GET"], + RouteShape::Literal, + "always", + RouteStatus::Real, + false + )]) + ); +} + +#[test] +fn cloudflare_rejects_ambiguous_or_hidden_builder_dataflow() { + for source in [ + r#"fn build_router() { let decoy = RouterService::builder().get("/decoy", handler); let actual = RouterService::builder().get("/actual", handler); actual.build() }"#, + r#"fn build_router() { let a = RouterService::builder(); let b = RouterService::builder(); a.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); let alias = actual; alias.build() }"#, + r#"fn build_router() { let actual = make_router!(); actual.build() }"#, + r#"fn build_router() { fn hidden() { let hidden = RouterService::builder(); } let actual = RouterService::builder(); actual.build() }"#, + r#"fn build_router() { let hidden = || RouterService::builder(); let actual = RouterService::builder(); actual.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); loop { break; } actual.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); return actual.build(); }"#, + r#"fn build_router() { RouterService::builder(); let actual = RouterService::builder().get("/actual", handler); actual.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); actual = RouterService::builder().get("/replacement", handler); actual.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); let _hidden = conceal!(RouterService::builder()); actual.build() }"#, + r#"fn build_router() { let actual = RouterService::builder(); unused = RouterService::builder(); actual.build() }"#, + ] { + assert!( + extract_cloudflare_routes(source) + .expect_err("ambiguous or hidden router dataflow must fail closed") + .to_string() + .contains("Cloudflare") + ); + } +} + +#[test] +fn route_extractors_reject_handler_swaps_on_every_adapter() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + + let fastly_swap = fastly.replacen( + "handler: NamedRouteHandler::TrustedServerDiscovery", + "handler: NamedRouteHandler::VerifySignature", + 1, + ); + assert!(extract_named_routes("fastly", &fastly_swap).is_err()); + + let axum_swap = axum.replacen( + "handler: NamedRouteHandler::TrustedServerDiscovery", + "handler: NamedRouteHandler::VerifySignature", + 1, + ); + assert!(extract_named_routes("axum", &axum_swap).is_err()); + + let spin_swap = spin.replacen( + ".get(\"/.well-known/trusted-server.json\", discovery_handler)", + ".get(\"/.well-known/trusted-server.json\", verify_handler)", + 1, + ); + assert!( + extract_repository_routes(&RouteSources { + publisher_routes: include_str!("../../../crates/trusted-server-core/src/publisher.rs"), + admin_routes: include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"), + fastly_app: fastly, + fastly_entrypoint: include_str!( + "../../../crates/trusted-server-adapter-fastly/src/main.rs" + ), + axum_app: axum, + cloudflare_app: cloudflare, + spin_app: &spin_swap, + }) + .is_err() + ); + + let cloudflare_swap = cloudflare.replacen( + "handle_trusted_server_discovery(&s.settings, &services, req)", + "handle_verify_signature(&s.settings, &services, req)", + 1, + ); + assert!(extract_cloudflare_routes(&cloudflare_swap).is_err()); + + let cloudflare_preflight = cloudflare.replace( + "router = router.route(path, Method::OPTIONS, page_bids_preflight.clone());", + "router = router.route(path, Method::OPTIONS, page_bids.clone());", + ); + assert!(extract_cloudflare_routes(&cloudflare_preflight).is_err()); + + let cloudflare_legacy = + cloudflare.replacen("legacy_admin_deny.clone(),", "fallback.clone(),", 1); + assert!(extract_cloudflare_routes(&cloudflare_legacy).is_err()); +} + +#[test] +fn route_extractors_ignore_cfg_test_decoys_and_reject_other_collection_cfgs() { + let named = r#" + #[cfg(test)] + const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { path: "/bad", primary_methods: &[Method::GET], handler: NamedRouteHandler::VerifySignature }, + ]; + const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { path: "/.well-known/trusted-server.json", primary_methods: &[Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }, + ]; + "#; + let routes = extract_named_routes("fastly", named) + .expect("cfg(test) named collections must not own production evidence"); + assert!(routes.iter().all(|route| route.path != "/bad")); + assert!( + extract_named_routes("fastly", &named.replace("#[cfg(test)]", "#[cfg(unix)]")).is_err() + ); + + let axum = r#" + #[cfg(test)] + fn named_routes() -> [NamedRoute; 1] { + [NamedRoute { path: "/bad", primary_methods: &[Method::GET], handler: NamedRouteHandler::VerifySignature }] + } + fn named_routes() -> [NamedRoute; 1] { + [NamedRoute { path: "/.well-known/trusted-server.json", primary_methods: &[Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }] + } + "#; + let routes = extract_named_routes("axum", axum) + .expect("cfg(test) Axum named collections must be excluded"); + assert!(routes.iter().all(|route| route.path != "/bad")); + + let spin = r#" + #[cfg(test)] + fn named_fallback_paths() -> [(&'static str, &'static [Method]); 1] { + [("/bad", &[Method::GET])] + } + fn named_fallback_paths() -> [(&'static str, &'static [Method]); 1] { + [("/.well-known/trusted-server.json", &[Method::GET])] + } + "#; + let routes = extract_named_routes("spin", spin) + .expect("cfg(test) Spin named collections must be excluded"); + assert!(routes.iter().all(|route| route.path != "/bad")); + + let cloudflare = r#" + #[cfg(test)] + fn build_router() { RouterService::builder().get("/bad", handler).build() } + fn build_router() { RouterService::builder().get("/.well-known/trusted-server.json", discovery).build() } + "#; + let routes = extract_cloudflare_routes(cloudflare) + .expect("cfg(test) Cloudflare builders must not own production evidence"); + assert!(routes.iter().all(|route| route.path != "/bad")); + assert!( + extract_cloudflare_routes(&cloudflare.replace("#[cfg(test)]", "#[cfg(unix)]")).is_err() + ); +} + +#[test] +fn repository_route_extraction_ignores_cfg_test_method_inventory_decoys() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let method_decoy = + "\n#[cfg(test)]\nfn publisher_fallback_methods() -> [Method; 1] { [Method::TRACE] }\n"; + let constant_decoy = + "\n#[cfg(test)]\nconst LEGACY_ADMIN_DENY_METHODS: &[Method] = &[Method::TRACE];\n"; + + for (fastly_variant, axum_variant, cloudflare_variant, spin_variant) in [ + ( + format!("{fastly_app}{method_decoy}{constant_decoy}"), + axum.to_owned(), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + fastly_app.to_owned(), + format!("{axum}{method_decoy}{constant_decoy}"), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + fastly_app.to_owned(), + axum.to_owned(), + format!("{cloudflare}{method_decoy}"), + spin.to_owned(), + ), + ( + fastly_app.to_owned(), + axum.to_owned(), + cloudflare.to_owned(), + format!("{spin}{method_decoy}{constant_decoy}"), + ), + ] { + extract_repository_routes(&RouteSources { + publisher_routes: include_str!("../../../crates/trusted-server-core/src/publisher.rs"), + admin_routes: include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"), + fastly_app: &fastly_variant, + fastly_entrypoint: entry, + axum_app: &axum_variant, + cloudflare_app: &cloudflare_variant, + spin_app: &spin_variant, + }) + .expect("cfg(test) method inventories must not alter production route evidence"); + } +} + +#[test] +fn route_identity_rejects_conflicting_metadata_assignments() { + let base = r#" + version = 1 + reviewed = true + [[routes]] + adapters = ["fastly"] + path = "/same" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + startup_router = false + "#; + for conflict in [ + "shape = \"template\"", + "predicate = \"settings.enabled\"", + "status = \"guarded\"", + ] { + let second = base + .replace("shape = \"literal\"", conflict) + .replace("version = 1\n reviewed = true", ""); + let source = format!("{base}\n{second}"); + assert!( + RouteManifest::parse(&source) + .expect_err("raw route identity cannot be assigned twice") + .to_string() + .contains("duplicate") + ); + } +} + +#[test] +fn route_parsers_enforce_four_mibibyte_input_bounds() { + const LIMIT: usize = 4 * 1024 * 1024; + let manifest = "version = 1\nreviewed = true\n"; + let exact_manifest = format!("{manifest}#{}", " ".repeat(LIMIT - manifest.len() - 1)); + RouteManifest::parse(&exact_manifest).expect("an exact-limit manifest must parse"); + assert!( + RouteManifest::parse(&format!("{exact_manifest} ")) + .expect_err("an oversized manifest must fail") + .to_string() + .contains("4 MiB") + ); + + let rust = "fn build_router() { let actual = RouterService::builder().get(\"/ok\", handler); actual.build() }"; + let exact_rust = format!("{rust}/*{}*/", " ".repeat(LIMIT - rust.len() - 4)); + extract_cloudflare_routes(&exact_rust).expect("an exact-limit Rust source must parse"); + assert!( + extract_cloudflare_routes(&format!("{exact_rust} ")) + .expect_err("an oversized Rust source must fail") + .to_string() + .contains("4 MiB") + ); +} + +#[test] +fn route_manifest_caps_rows_lists_and_strings() { + let adapters = (0..=4096) + .map(|_| "\"fastly\"") + .collect::>() + .join(","); + let source = format!( + r#" + version = 1 + reviewed = true + [[routes]] + adapters = [{adapters}] + path = "/ok" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + "# + ); + assert!( + RouteManifest::parse(&source) + .expect_err("oversized route lists must fail") + .to_string() + .contains("cardinality") + ); + let long = "x".repeat(16 * 1024 + 1); + let source = source + .replace(&format!("[{adapters}]"), "[\"fastly\"]") + .replace("/ok", &long); + assert!( + RouteManifest::parse(&source) + .expect_err("oversized route strings must fail") + .to_string() + .contains("string") + ); +} + +#[test] +fn cloudflare_route_affecting_local_and_macro_constructs_fail_closed() { + for source in [ + r#" + fn build_router() { + let mut router = RouterService::builder().get("/known", handler); + let _receipt = register_hidden(&mut router, "/hidden"); + router.build() + } + "#, + r#" + fn build_router() { + let mut router = RouterService::builder().get("/known", handler); + register_routes!(router, "/hidden"); + router.build() + } + "#, + ] { + assert!( + extract_cloudflare_routes(source) + .expect_err("unknown route-affecting syntax must fail closed") + .to_string() + .contains("Cloudflare") + ); + } +} + +#[test] +fn repository_cloudflare_builder_is_accepted_by_the_closed_grammar() { + let source = with_publisher_path_constants(include_str!( + "../../../crates/trusted-server-adapter-cloudflare/src/app.rs" + )); + let routes = extract_cloudflare_routes(&source) + .expect("the production Cloudflare builder must stay inside the closed grammar"); + assert_eq!( + routes.len(), + 20, + "16 named paths, split page-bids semantics, and root/rest fallback" + ); +} + +#[test] +fn repository_private_named_collections_have_the_prechange_route_sets() { + let fastly_source = with_publisher_path_constants(include_str!( + "../../../crates/trusted-server-adapter-fastly/src/app.rs" + )); + let axum_source = with_publisher_path_constants(include_str!( + "../../../crates/trusted-server-adapter-axum/src/app.rs" + )); + let spin_source = with_publisher_path_constants(include_str!( + "../../../crates/trusted-server-adapter-spin/src/app.rs" + )); + let fastly = extract_named_routes("fastly", &fastly_source) + .expect("Fastly named route collection should parse"); + let axum = extract_named_routes("axum", &axum_source) + .expect("Axum named route collection should parse"); + let spin = extract_named_routes("spin", &spin_source) + .expect("Spin named route collection should parse"); + + assert_eq!(fastly.len(), 22); + assert_eq!(axum.len(), 18); + assert_eq!(spin.len(), 18); + assert_eq!( + fastly + .iter() + .filter(|record| record.path.starts_with("/_ts/api/v1/") + || record.path.starts_with("/_ts/set-") + || record.path.starts_with("/_ts/clear-")) + .count(), + 4, + "the Fastly-only EC and tester routes are the exact four-path delta" + ); + let fastly_shared = fastly + .iter() + .filter(|record| { + !record.path.starts_with("/_ts/api/v1/") + && !record.path.starts_with("/_ts/set-") + && !record.path.starts_with("/_ts/clear-") + }) + .map(|record| (record.path.clone(), record.methods.clone())) + .collect::>(); + let axum_paths = axum + .iter() + .map(|record| (record.path.clone(), record.methods.clone())) + .collect::>(); + let spin_paths = spin + .iter() + .map(|record| (record.path.clone(), record.methods.clone())) + .collect::>(); + assert_eq!(fastly_shared, axum_paths); + assert_eq!(axum_paths, spin_paths); +} + +#[test] +fn reviewed_route_and_adapter_support_manifests_equal_all_repository_surfaces() { + let sources = RouteSources { + publisher_routes: include_str!("../../../crates/trusted-server-core/src/publisher.rs"), + admin_routes: include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"), + fastly_app: include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"), + fastly_entrypoint: include_str!( + "../../../crates/trusted-server-adapter-fastly/src/main.rs" + ), + axum_app: include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"), + cloudflare_app: include_str!( + "../../../crates/trusted-server-adapter-cloudflare/src/app.rs" + ), + spin_app: include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"), + }; + let observed = extract_repository_routes(&sources) + .expect("all adapter route source shapes should remain supported"); + assert_eq!( + observed.len(), + 103, + "the expanded adapter route set is exact" + ); + let expected = RouteManifest::parse(include_str!("../manifests/routes.toml")) + .expect("checked route manifest should parse"); + assert_eq!(expected.routes().len(), 103); + validate_routes(expected.routes(), &observed) + .expect("source route set should equal the checked inventory"); + + let support = AdapterSupportManifest::parse(include_str!("../manifests/adapter-support.toml")) + .expect("checked adapter support manifest should parse"); + validate_adapter_support(&support).expect("support records must cover all adapters exactly"); +} + +fn extract_with_mutation( + fastly_app: &str, + fastly_entrypoint: &str, + axum_app: &str, + cloudflare_app: &str, + spin_app: &str, +) -> Result, String> { + extract_repository_routes(&RouteSources { + publisher_routes: include_str!("../../../crates/trusted-server-core/src/publisher.rs"), + admin_routes: include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"), + fastly_app, + fastly_entrypoint, + axum_app, + cloudflare_app, + spin_app, + }) + .map_err(|error| error.to_string()) +} + +fn extract_with_core_mutation( + publisher_routes: &str, + admin_routes: &str, + fastly_app: &str, + fastly_entrypoint: &str, + axum_app: &str, + cloudflare_app: &str, + spin_app: &str, +) -> Result, String> { + extract_repository_routes(&RouteSources { + publisher_routes, + admin_routes, + fastly_app, + fastly_entrypoint, + axum_app, + cloudflare_app, + spin_app, + }) + .map_err(|error| error.to_string()) +} + +#[test] +fn fastly_main_health_dispatch_rejects_a_preceding_terminal_branch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let changed = entry.replacen( + " if let Some(response) = health_response(&req) {", + " if req.get_path() == \"/health\" { return; }\n if let Some(response) = health_response(&req) {", + 1, + ); + assert_ne!(changed, entry, "fixture must alter Fastly main"); + assert!( + extract_with_mutation(fastly, &changed, axum, cloudflare, spin).is_err(), + "health_response must be the first reachable health terminal after receiving req" + ); +} + +#[test] +fn router_construction_rejects_reachable_bypasses_on_every_adapter() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_healthy = fastly.replacen( + " for route in NAMED_ROUTES {", + " if true { return router.build(); }\n for route in NAMED_ROUTES {", + 1, + ); + assert!(extract_with_mutation(&fastly_healthy, entry, axum, cloudflare, spin).is_err()); + let axum_healthy = axum.replacen( + " router = router.route(\"/health\"", + " if true { return router.build(); }\n router = router.route(\"/health\"", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_healthy, cloudflare, spin).is_err()); + let cloudflare_healthy = cloudflare.replacen( + " let page_bids = make_handler(", + " if true { return router.build(); }\n let page_bids = make_handler(", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_healthy, spin).is_err()); + let spin_healthy = spin.replacen( + " for (path, primary_methods) in named_fallback_paths() {", + " if true { return builder.build(); }\n for (path, primary_methods) in named_fallback_paths() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_healthy).is_err()); + + let fastly_startup = fastly.replacen( + " for method in publisher_fallback_methods() {", + " if true { return router.build(); }\n for method in publisher_fallback_methods() {", + 1, + ); + assert!(extract_with_mutation(&fastly_startup, entry, axum, cloudflare, spin).is_err()); + let axum_startup = axum.replacen( + " for method in publisher_fallback_methods() {", + " if true { return router.build(); }\n for method in publisher_fallback_methods() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_startup, cloudflare, spin).is_err()); + let cloudflare_startup = cloudflare.replacen( + " for method in publisher_fallback_methods() {", + " if true { return router.build(); }\n for method in publisher_fallback_methods() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_startup, spin).is_err()); + let spin_startup = spin.replacen( + " for method in publisher_fallback_methods() {", + " if true { return builder.build(); }\n for method in publisher_fallback_methods() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_startup).is_err()); +} + +#[test] +fn named_route_inventories_must_feed_the_live_registration_authority() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_empty = fastly.replacen( + " for route in NAMED_ROUTES {", + " let _unused = NAMED_ROUTES;\n for route in std::iter::empty::<&NamedRoute>() {", + 1, + ); + assert!(extract_with_mutation(&fastly_empty, entry, axum, cloudflare, spin).is_err()); + let fastly_wrong_path = fastly.replacen( + " route.path,\n method.clone(),\n named_route_handler(Arc::clone(state), route.handler),", + " \"/decoy\",\n method.clone(),\n named_route_handler(Arc::clone(state), route.handler),", + 1, + ); + assert!(extract_with_mutation(&fastly_wrong_path, entry, axum, cloudflare, spin).is_err()); + let fastly_wrong_handler = fastly.replacen( + "named_route_handler(Arc::clone(state), route.handler)", + "named_route_handler(Arc::clone(state), NamedRouteHandler::Auction)", + 1, + ); + assert!(extract_with_mutation(&fastly_wrong_handler, entry, axum, cloudflare, spin).is_err()); + let axum_empty = axum.replacen( + " for route in named_routes() {", + " let _unused = named_routes();\n for route in std::iter::empty::() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_empty, cloudflare, spin).is_err()); + let axum_wrong_method = axum.replacen( + " route.path,\n method.clone(),\n named_route_handler(Arc::clone(state), route.handler),", + " route.path,\n Method::GET,\n named_route_handler(Arc::clone(state), route.handler),", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_wrong_method, cloudflare, spin).is_err()); + let axum_wrong_handler = axum.replacen( + "named_route_handler(Arc::clone(state), route.handler)", + "named_route_handler(Arc::clone(state), NamedRouteHandler::Auction)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_wrong_handler, cloudflare, spin).is_err()); + let spin_empty = spin.replacen( + " for (path, primary_methods) in named_fallback_paths() {", + " let _unused = named_fallback_paths();\n for (path, primary_methods) in std::iter::empty::<(&str, &[Method])>() {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_empty).is_err()); +} + +#[test] +fn named_handler_authorities_require_closed_reachable_exact_calls() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_early = fastly.replacen( + " NamedRouteHandler::TrustedServerDiscovery => {\n handle_trusted_server_discovery(&state.settings, services, req)", + " NamedRouteHandler::TrustedServerDiscovery => {\n return handle_verify_signature(&state.settings, services, req);\n handle_trusted_server_discovery(&state.settings, services, req)", + 1, + ); + assert_ne!( + fastly_early, fastly, + "fixture must alter Fastly discovery arm" + ); + assert!(extract_with_mutation(&fastly_early, entry, axum, cloudflare, spin).is_err()); + let fastly_swapped = fastly.replacen( + "handle_trusted_server_discovery(&state.settings, services, req)", + "handle_trusted_server_discovery(services, &state.settings, req)", + 1, + ); + assert_ne!(fastly_swapped, fastly, "fixture must swap Fastly arguments"); + assert!(extract_with_mutation(&fastly_swapped, entry, axum, cloudflare, spin).is_err()); + + let axum_early = axum.replacen( + " NamedRouteHandler::TrustedServerDiscovery => {\n handle_trusted_server_discovery(&state.settings, &services, req)", + " NamedRouteHandler::TrustedServerDiscovery => {\n return handle_verify_signature(&state.settings, &services, req);\n handle_trusted_server_discovery(&state.settings, &services, req)", + 1, + ); + assert_ne!(axum_early, axum, "fixture must alter Axum discovery arm"); + assert!(extract_with_mutation(fastly, entry, &axum_early, cloudflare, spin).is_err()); + let axum_swapped = axum.replacen( + "handle_trusted_server_discovery(&state.settings, &services, req)", + "handle_trusted_server_discovery(&services, &state.settings, req)", + 1, + ); + assert_ne!(axum_swapped, axum, "fixture must swap Axum arguments"); + assert!(extract_with_mutation(fastly, entry, &axum_swapped, cloudflare, spin).is_err()); + + let cloudflare_early = cloudflare.replacen( + " handle_trusted_server_discovery(&s.settings, &services, req)", + " return handle_verify_signature(&s.settings, &services, req);\n handle_trusted_server_discovery(&s.settings, &services, req)", + 1, + ); + assert_ne!( + cloudflare_early, cloudflare, + "fixture must alter Cloudflare discovery closure" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_early, spin).is_err()); + let cloudflare_swapped = cloudflare.replacen( + "handle_trusted_server_discovery(&s.settings, &services, req)", + "handle_trusted_server_discovery(&services, &s.settings, req)", + 1, + ); + assert_ne!( + cloudflare_swapped, cloudflare, + "fixture must swap Cloudflare arguments" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_swapped, spin).is_err()); + + let spin_early = spin.replacen( + " Ok(handle_trusted_server_discovery(&s.settings, &services, req)", + " return Ok(handle_verify_signature(&s.settings, &services, req).unwrap_or_else(|e| http_error(&e)));\n Ok(handle_trusted_server_discovery(&s.settings, &services, req)", + 1, + ); + assert_ne!( + spin_early, spin, + "fixture must alter Spin discovery closure" + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_early).is_err()); + let spin_swapped = spin.replacen( + "handle_trusted_server_discovery(&s.settings, &services, req)", + "handle_trusted_server_discovery(&services, &s.settings, req)", + 1, + ); + assert_ne!(spin_swapped, spin, "fixture must swap Spin arguments"); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_swapped).is_err()); +} + +#[test] +fn route_blocks_reject_block_scoped_fallback_import_shadows() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let decoy = "\nmod decoy { fn publisher_fallback_methods() -> [Method; 0] { [] } }"; + let with_decoy = |source: String| format!("{source}{decoy}"); + + let fastly_healthy = with_decoy(fastly.replacen( + " fn routes_for_state(state: &Arc) -> RouterService {\n let mut router", + " fn routes_for_state(state: &Arc) -> RouterService {\n use decoy::publisher_fallback_methods;\n let mut router", + 1, + )); + assert!(extract_with_mutation(&fastly_healthy, entry, axum, cloudflare, spin).is_err()); + let axum_healthy = with_decoy(axum.replacen( + "fn build_router(state: &Arc) -> RouterService {\n let fallback", + "fn build_router(state: &Arc) -> RouterService {\n use decoy::publisher_fallback_methods;\n let fallback", + 1, + )); + assert!(extract_with_mutation(fastly, entry, &axum_healthy, cloudflare, spin).is_err()); + let cloudflare_healthy = with_decoy(cloudflare.replacen( + "fn build_router(state: &Arc) -> RouterService {\n {\n let state", + "fn build_router(state: &Arc) -> RouterService {\n {\n use decoy::publisher_fallback_methods;\n let state", + 1, + )); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_healthy, spin).is_err()); + let spin_healthy = with_decoy(spin.replacen( + "fn build_router(state: &Arc) -> RouterService {\n {\n let state", + "fn build_router(state: &Arc) -> RouterService {\n {\n use decoy::publisher_fallback_methods;\n let state", + 1, + )); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_healthy).is_err()); + + let fastly_startup = with_decoy(fastly.replacen( + " for method in publisher_fallback_methods() {", + " use decoy::publisher_fallback_methods;\n for method in publisher_fallback_methods() {", + 1, + )); + assert!(extract_with_mutation(&fastly_startup, entry, axum, cloudflare, spin).is_err()); + let axum_startup = with_decoy(axum.replacen( + " for method in publisher_fallback_methods() {", + " use decoy::publisher_fallback_methods;\n for method in publisher_fallback_methods() {", + 1, + )); + assert!(extract_with_mutation(fastly, entry, &axum_startup, cloudflare, spin).is_err()); + let cloudflare_startup = with_decoy(cloudflare.replacen( + " for method in publisher_fallback_methods() {", + " use decoy::publisher_fallback_methods;\n for method in publisher_fallback_methods() {", + 1, + )); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_startup, spin).is_err()); + let spin_startup = with_decoy(spin.replacen( + " for method in publisher_fallback_methods() {", + " use decoy::publisher_fallback_methods;\n for method in publisher_fallback_methods() {", + 1, + )); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_startup).is_err()); +} + +#[test] +fn registered_handler_bodies_reject_preceding_terminal_paths() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_early = axum.replacen( + " NamedRouteHandler::VerifySignature => {\n handle_verify_signature(&state.settings, &services, req)", + " NamedRouteHandler::VerifySignature => {\n if true { return Ok(legacy_admin_alias_denied()); }\n handle_verify_signature(&state.settings, &services, req)", + 1, + ); + assert_ne!(axum_early, axum, "fixture must alter Axum verify arm"); + assert!(extract_with_mutation(fastly, entry, &axum_early, cloudflare, spin).is_err()); + + let cloudflare_early = cloudflare.replacen( + " Ok(page_bids_preflight_denied())", + " if true { return Ok(admin_key_management_not_supported()); }\n Ok(page_bids_preflight_denied())", + 1, + ); + assert_ne!( + cloudflare_early, cloudflare, + "fixture must alter Cloudflare page-bids OPTIONS" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_early, spin).is_err()); + + let spin_early = spin.replacen( + " Ok::(page_bids_preflight_denied())", + " if true { return Ok::(admin_key_management_not_supported()); }\n Ok::(page_bids_preflight_denied())", + 1, + ); + assert_ne!( + spin_early, spin, + "fixture must alter Spin page-bids OPTIONS" + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_early).is_err()); +} + +#[test] +fn route_ast_receipts_reject_tsjs_or_and_unrelated_predicates() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let fastly_entrypoint = + include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let get_or_head = axum.replace( + "method == Method::GET && path.starts_with(\"/static/tsjs=\")", + "matches!(method, Method::GET | Method::HEAD) && path.starts_with(\"/static/tsjs=\")", + ); + assert!( + extract_with_mutation( + fastly_app, + fastly_entrypoint, + &get_or_head, + cloudflare, + spin + ) + .is_err() + ); + let unrelated = axum.replace( + "if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + "let _unrelated_get = method == Method::GET;\n if path.starts_with(\"/static/tsjs=\") {", + ); + assert!( + extract_with_mutation(fastly_app, fastly_entrypoint, &unrelated, cloudflare, spin).is_err() + ); +} + +#[test] +fn route_ast_receipts_reject_health_ja4_asset_and_comment_decoys() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let health_path = entry.replacen( + "req.get_path() == \"/health\"", + "req.get_path() == \"/live\" // req.get_path() == \"/health\"", + 1, + ); + assert!(extract_with_mutation(fastly_app, &health_path, axum, cloudflare, spin).is_err()); + let health_status = entry.replacen("from_status(200)", "from_status(201)", 1); + assert!(extract_with_mutation(fastly_app, &health_status, axum, cloudflare, spin).is_err()); + let ja4 = entry.replace( + "Ok(settings) if settings.debug.ja4_endpoint_enabled =>", + "Ok(settings) if true =>", + ) + "\nfn unrelated(settings: &Settings) { let _ = settings.debug.ja4_endpoint_enabled; }\n"; + assert!(extract_with_mutation(fastly_app, &ja4, axum, cloudflare, spin).is_err()); + let asset = fastly_app.replacen( + "matches!(method, Method::GET | Method::HEAD)", + "matches!(method, Method::GET)", + 1, + ); + assert!(extract_with_mutation(&asset, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn route_ast_receipts_reject_fallback_handler_path_and_startup_status_mutations() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let fallback_path = cloudflare.replace( + "router = router.route(\"/\", method.clone(), fallback.clone());", + "router = router.route(\"/changed\", method.clone(), fallback.clone());", + ); + assert!(extract_with_mutation(fastly_app, entry, axum, &fallback_path, spin).is_err()); + let fallback_handler = cloudflare.replace( + "router = router.route(\"/\", method.clone(), fallback.clone());", + "router = router.route(\"/\", method.clone(), legacy_admin_deny.clone());", + ); + assert!(extract_with_mutation(fastly_app, entry, axum, &fallback_handler, spin).is_err()); + let startup_status = spin.replace("StatusCode::SERVICE_UNAVAILABLE", "StatusCode::BAD_GATEWAY"); + assert!(extract_with_mutation(fastly_app, entry, axum, cloudflare, &startup_status).is_err()); +} + +#[test] +fn route_ast_receipts_reject_dead_or_unused_route_registrations() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let dead_health = axum + .replacen( + " router = router.route(\"/health\", Method::GET,", + " if false { router = router.route(\"/health\", Method::GET,", + 1, + ) + .replacen( + " });\n\n for route in named_routes()", + " }); }\n\n for route in named_routes()", + 1, + ); + assert!(extract_with_mutation(fastly_app, entry, &dead_health, cloudflare, spin).is_err()); + + let unused_fallback = cloudflare.replace( + r#" for method in publisher_fallback_methods() { + router = router.route("/", method.clone(), fallback.clone()); + router = router.route("/{*rest}", method, fallback.clone()); + }"#, + r#" let _unused = || { + for method in publisher_fallback_methods() { + router = router.route("/", method.clone(), fallback.clone()); + router = router.route("/{*rest}", method, fallback.clone()); + } + };"#, + ); + assert!(extract_with_mutation(fastly_app, entry, axum, &unused_fallback, spin).is_err()); +} + +#[test] +fn route_ast_receipts_bind_health_handlers_and_cross_surface_identity() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_status = axum.replacen(".status(StatusCode::OK)", ".status(StatusCode::CREATED)", 1); + assert!(extract_with_mutation(fastly_app, entry, &axum_status, cloudflare, spin).is_err()); + let spin_body = spin.replacen( + "Response::new(edgezero_core::body::Body::from(\"ok\"))", + "Response::new(edgezero_core::body::Body::from(\"changed\"))", + 1, + ); + assert!(extract_with_mutation(fastly_app, entry, axum, cloudflare, &spin_body).is_err()); + + let duplicate_named_health = fastly_app.replacen( + "const NAMED_ROUTES: &[NamedRoute] = &[", + r#"const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { + path: "/health", + primary_methods: &[Method::GET], + handler: NamedRouteHandler::TrustedServerDiscovery, + },"#, + 1, + ); + assert!( + extract_with_mutation(&duplicate_named_health, entry, axum, cloudflare, spin).is_err(), + "a named route must not duplicate the identity of a synthetic route" + ); +} + +#[test] +fn route_ast_receipts_require_special_routes_to_update_returned_authorities() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_unused = axum.replacen( + "router = router.route(\"/health\", Method::GET,", + "unused = router.route(\"/health\", Method::GET,", + 1, + ); + assert!(extract_with_mutation(fastly_app, entry, &axum_unused, cloudflare, spin).is_err()); + + let spin_unused = spin.replacen( + "builder = builder.get(\"/health\", |_ctx: RequestContext| async {", + "unused = builder.get(\"/health\", |_ctx: RequestContext| async {", + 1, + ); + assert!(extract_with_mutation(fastly_app, entry, axum, cloudflare, &spin_unused).is_err()); + + let startup_unbound = cloudflare.replacen( + "*resp.status_mut() = status;", + "let _unbound = status; *resp.status_mut() = StatusCode::OK;", + 1, + ); + assert!(extract_with_mutation(fastly_app, entry, axum, &startup_unbound, spin).is_err()); +} + +#[test] +fn route_ast_receipts_reject_disconnected_fastly_health_ja4_asset_and_tsjs_facts() { + let fastly_app = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let dead_health = entry.replacen( + "if req.get_method() == FastlyMethod::GET && req.get_path() == \"/health\" {", + "if req.get_method() == FastlyMethod::GET && req.get_path() == \"/health\" { return None;", + 1, + ); + assert!(extract_with_mutation(fastly_app, &dead_health, axum, cloudflare, spin).is_err()); + + let disconnected_health_call = entry.replace( + r#"if let Some(response) = health_response(&req) { + response.send_to_client(); + return; + }"#, + "if false { return; }", + ); + assert!( + extract_with_mutation( + fastly_app, + &disconnected_health_call, + axum, + cloudflare, + spin, + ) + .is_err() + ); + + let dead_ja4_predicate = entry.replace( + "Ok(settings) if settings.debug.ja4_endpoint_enabled => {", + "Ok(settings) if true => { let _unused = settings.debug.ja4_endpoint_enabled;", + ); + assert!( + extract_with_mutation(fastly_app, &dead_ja4_predicate, axum, cloudflare, spin).is_err() + ); + + let disconnected_tsjs = fastly_app.replacen( + "if uses_dynamic_tsjs_fallback(&method, &path) {", + "if false {", + 1, + ); + assert!(extract_with_mutation(&disconnected_tsjs, entry, axum, cloudflare, spin).is_err()); + + let disconnected_asset = fastly_app.replace( + r#"let matched_asset_route = matches!(method, Method::GET | Method::HEAD) + .then(|| state.settings.asset_route_for_path(&path)) + .flatten();"#, + r#"let matched_asset_route = { + let _unused = matches!(method, Method::GET | Method::HEAD) + .then(|| state.settings.asset_route_for_path(&path)) + .flatten(); + None + };"#, + ); + assert!(extract_with_mutation(&disconnected_asset, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn route_health_receipts_require_the_exact_returned_response() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_tuple = entry.replacen( + "return Some(FastlyResponse::from_status(200).with_body_text_plain(\"ok\"));", + "return Some((FastlyResponse::from_status(200).with_body_text_plain(\"ok\"), FastlyResponse::from_status(201).with_body_text_plain(\"changed\")).1);", + 1, + ); + assert!(extract_with_mutation(fastly, &fastly_tuple, axum, cloudflare, spin).is_err()); + + let axum_decoy = axum + .replacen(".status(StatusCode::OK)", ".status(StatusCode::CREATED)", 1) + .replacen( + ".body(edgezero_core::body::Body::from(\"ok\"))", + ".body(edgezero_core::body::Body::from(\"changed\"))", + 1, + ) + .replacen( + " Ok::(\n edgezero_core::http::response_builder()", + " let _unused = edgezero_core::http::response_builder().status(StatusCode::OK).body(edgezero_core::body::Body::from(\"ok\"));\n Ok::(\n edgezero_core::http::response_builder()", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_decoy, cloudflare, spin).is_err()); + + let spin_tuple = spin.replacen( + "let mut resp = Response::new(edgezero_core::body::Body::from(\"ok\"));", + "let mut resp = Response::new((edgezero_core::body::Body::from(\"ok\"), edgezero_core::body::Body::from(\"changed\")).1);", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_tuple).is_err()); +} + +#[test] +fn route_tsjs_receipts_require_terminal_flow_and_unshadowed_bindings() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_override = axum.replacen( + " return handle_tsjs_dynamic(&req, &state.registry, EdgeCacheHeader::SMaxageFallback);", + " handle_tsjs_dynamic(&req, &state.registry, EdgeCacheHeader::SMaxageFallback);", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_override, cloudflare, spin).is_err()); + + let axum_early = axum.replacen( + " if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + " return Err(Report::new(TrustedServerError::BadRequest { message: String::new() }));\n if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_early, cloudflare, spin).is_err()); + + let cloudflare_shadow = cloudflare.replacen( + " let allow_tsjs = method == Method::GET;", + " let allow_tsjs = method == Method::GET;\n let allow_tsjs = false;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_shadow, spin).is_err()); + + let cloudflare_reassign = cloudflare.replacen( + " let allow_tsjs = method == Method::GET;", + " let mut allow_tsjs = method == Method::GET;\n allow_tsjs = false;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_reassign, spin).is_err()); + + let spin_cfg_decoy = spin.replacen( + " async fn dispatch(", + " #[cfg(test)]\n async fn dispatch(", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_cfg_decoy).is_err()); +} + +#[test] +fn cloudflare_rejects_shadowed_authorities_and_opaque_route_initializers() { + for source in [ + r#" + fn build_router() { + let mut router = RouterService::builder().get("/actual", handler); + let spare_router = make_router(); + { + let mut router = spare_router; + router = router.get("/shadow", shadow_handler); + } + router.build() + } + "#, + r#" + fn build_router() { + let mut router = RouterService::builder().get("/actual", handler); + let mut spare_router = make_router(); + spare_router = spare_router.get("/shadow", shadow_handler); + router.build() + } + "#, + r#" + fn build_router() { + let mut router = RouterService::builder().get("/actual", handler); + let _hidden = hidden_route!(router); + router.build() + } + "#, + ] { + assert!( + extract_cloudflare_routes(source).is_err(), + "shadowed, competing, or opaque route authority must fail" + ); + } +} + +#[test] +fn fastly_asset_receipt_rejects_shadowed_selected_route() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let shadowed = fastly.replacen( + " .flatten();\n if let Some(asset_route) = matched_asset_route {", + " .flatten();\n let matched_asset_route = None;\n if let Some(asset_route) = matched_asset_route {", + 1, + ); + assert!(extract_with_mutation(&shadowed, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn route_handler_receipts_bind_registered_identifiers_to_behavior() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_tester = fastly.replacen( + "NamedRouteHandler::SetTester => handle_set_tester(&state.settings)", + "NamedRouteHandler::SetTester => handle_clear_tester(&state.settings)", + 1, + ); + assert!(extract_with_mutation(&fastly_tester, entry, axum, cloudflare, spin).is_err()); + + let fastly_discovery = fastly.replacen( + "handle_trusted_server_discovery(&state.settings, services, req)", + "handle_verify_signature(&state.settings, services, req)", + 1, + ); + assert!(extract_with_mutation(&fastly_discovery, entry, axum, cloudflare, spin).is_err()); + + let axum_discovery = axum.replacen( + "handle_trusted_server_discovery(&state.settings, &services, req)", + "handle_verify_signature(&state.settings, &services, req)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_discovery, cloudflare, spin).is_err()); + + let spin_discovery = spin.replacen( + "handle_trusted_server_discovery(&s.settings, &services, req)", + "handle_verify_signature(&s.settings, &services, req)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_discovery).is_err()); + + let cloudflare_preflight = cloudflare.replacen( + " Ok(page_bids_preflight_denied())\n });", + " Ok(handle_verify_signature(&s.settings, &_services, _req)?)\n });", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_preflight, spin).is_err()); + + let cloudflare_page_bids = cloudflare.replacen( + "handle_page_bids(&s.settings, &services, None, auction, &ec_context, req).await", + "handle_verify_signature(&s.settings, &services, req)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_page_bids, spin).is_err()); +} + +#[test] +fn route_handler_receipts_bind_denials_and_unsupported_statuses() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_preflight = fastly.replacen( + " return Ok(page_bids_preflight_denied());", + " page_bids_preflight_denied();\n return handle_verify_signature(&state.settings, services, req);", + 1, + ); + assert!(extract_with_mutation(&fastly_preflight, entry, axum, cloudflare, spin).is_err()); + + let axum_status = axum.replacen( + "*resp.status_mut() = StatusCode::NOT_IMPLEMENTED;", + "*resp.status_mut() = StatusCode::OK;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_status, cloudflare, spin).is_err()); + + let cloudflare_status = cloudflare.replacen( + "*response.status_mut() = StatusCode::NOT_IMPLEMENTED;", + "*response.status_mut() = StatusCode::OK;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_status, spin).is_err()); + + let spin_status = spin.replacen( + "*response.status_mut() = StatusCode::NOT_IMPLEMENTED;", + "*response.status_mut() = StatusCode::OK;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_status).is_err()); +} + +#[test] +fn fastly_named_handlers_bind_every_early_and_method_specific_behavior() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let changes = [ + fastly.replacen( + "return Ok(run_batch_sync(&state, &services, req));", + "return Ok(legacy_admin_alias_denied());", + 1, + ), + fastly.replacen( + "handle_admin_ec_lookup(kv.as_ref(), ®istry, &req)", + "legacy_admin_alias_denied()", + 1, + ), + fastly.replacen( + "handle_admin_eids_lookup(®istry, &req)", + "legacy_admin_alias_denied()", + 1, + ), + fastly.replacen( + "cors_preflight_identify(&state.settings, &req)", + "Ok(legacy_admin_alias_denied())", + 1, + ), + fastly.replacen("handle_identify(", "legacy_admin_alias_denied(", 1), + ]; + + for changed in changes { + assert_ne!(changed, fastly, "fixture must alter Fastly source"); + assert!( + extract_with_mutation(&changed, entry, axum, cloudflare, spin).is_err(), + "every Fastly early and Identify dispatch behavior must be source-bound" + ); + } +} + +#[test] +fn fastly_fallback_result_authority_is_unique_and_terminal() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let changes = [ + fastly.replacen( + "let result = if uses_dynamic_tsjs_fallback(&method, &path) {", + "let result = if uses_dynamic_tsjs_fallback(&method, &path) { let result = legacy_admin_alias_denied();", + 1, + ), + fastly.replacen( + "let response = result.unwrap_or_else(|e| http_error(&e));", + "result = Err(Report::new(TrustedServerError::BadRequest { message: String::new() }));\n let response = result.unwrap_or_else(|e| http_error(&e));", + 1, + ), + fastly.replacen( + "let response = result.unwrap_or_else(|e| http_error(&e));", + "let response = result.unwrap_or_else(|e| legacy_admin_alias_denied());", + 1, + ), + fastly.replacen( + "attach_dispatch_extensions(response, ec, effects)\n}", + "legacy_admin_alias_denied()\n}", + 1, + ), + ]; + + for changed in changes { + assert_ne!(changed, fastly, "fixture must alter Fastly source"); + assert!( + extract_with_mutation(&changed, entry, axum, cloudflare, spin).is_err(), + "Fastly result must be unique, unassigned, unshadowed, and returned through the exact terminal pipeline" + ); + } +} + +#[test] +fn nested_fallback_dispatch_is_lexical_unique_and_directly_called() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + for changed in [ + format!("{cloudflare}\nasync fn dispatch(state: Arc, ctx: RequestContext) {{}}"), + cloudflare.replacen("dispatch(s, ctx)", "decoy::dispatch(s, ctx)", 1), + ] { + assert!( + extract_with_mutation(fastly, entry, axum, &changed, spin).is_err(), + "Cloudflare fallback must call its one direct lexical dispatch" + ); + } + for changed in [ + format!("{spin}\nasync fn dispatch(state: Arc, ctx: RequestContext) {{}}"), + spin.replacen("dispatch(s, ctx)", "decoy::dispatch(s, ctx)", 1), + ] { + assert!( + extract_with_mutation(fastly, entry, axum, cloudflare, &changed).is_err(), + "Spin fallback must call its one direct lexical dispatch" + ); + } +} + +#[test] +fn dynamic_tsjs_branch_rejects_prior_terminating_control_flow() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let prefixes = [ + "if true { return legacy_admin_alias_denied(); }", + "match true { _ => return legacy_admin_alias_denied() }", + "loop { return legacy_admin_alias_denied(); }", + ]; + + for prefix in prefixes { + let changed = axum.replacen( + " if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + &format!(" {prefix}\n if method == Method::GET && path.starts_with(\"/static/tsjs=\") {{"), + 1, + ); + assert!(extract_with_mutation(fastly, entry, &changed, cloudflare, spin).is_err()); + + let changed = cloudflare.replacen( + " let result = if allow_tsjs && path.starts_with(\"/static/tsjs=\") {", + &format!(" {prefix}\n let result = if allow_tsjs && path.starts_with(\"/static/tsjs=\") {{"), + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &changed, spin).is_err()); + + let changed = spin.replacen( + " let result = if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + &format!(" {prefix}\n let result = if method == Method::GET && path.starts_with(\"/static/tsjs=\") {{"), + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &changed).is_err()); + } +} + +#[test] +fn fastly_special_routes_require_live_request_and_settings_receivers() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let entry_changes = [ + entry.replacen( + "req.get_method()", + "FastlyRequest::from_client().get_method()", + 1, + ), + entry.replacen( + "req.get_path()", + "FastlyRequest::from_client().get_path()", + 1, + ), + entry.replacen( + "health_response(&req)", + "health_response(&FastlyRequest::from_client())", + 1, + ), + entry.replacen( + "build_ja4_debug_response(&req)", + "build_ja4_debug_response(&FastlyRequest::from_client())", + 1, + ), + ]; + for changed in entry_changes { + assert!(extract_with_mutation(fastly, &changed, axum, cloudflare, spin).is_err()); + } + + let wrong_settings = fastly.replacen( + "state.settings.asset_route_for_path(&path)", + "other.settings.asset_route_for_path(&path)", + 1, + ); + assert!(extract_with_mutation(&wrong_settings, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn handler_behavior_paths_must_be_exact_and_unqualified() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_decoy = fastly.replacen( + "handle_trusted_server_discovery(&state.settings, services, req)", + "decoy::handle_trusted_server_discovery(&state.settings, services, req)", + 1, + ); + assert!(extract_with_mutation(&fastly_decoy, entry, axum, cloudflare, spin).is_err()); + let axum_decoy = axum.replacen( + "handle_trusted_server_discovery(&state.settings, &services, req)", + "decoy::handle_trusted_server_discovery(&state.settings, &services, req)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_decoy, cloudflare, spin).is_err()); + let cloudflare_decoy = cloudflare.replacen( + "admin_key_management_not_supported()", + "decoy::admin_key_management_not_supported()", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_decoy, spin).is_err()); +} + +#[test] +fn fallback_loops_require_the_unqualified_authoritative_method_iterator() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let decoy = + "\nmod decoy { fn publisher_fallback_methods() -> [Method; 1] { [Method::GET] } }\n"; + + let changed = format!( + "{}{decoy}", + fastly.replace( + "for method in publisher_fallback_methods()", + "for method in decoy::publisher_fallback_methods()" + ) + ); + assert!(extract_with_mutation(&changed, entry, axum, cloudflare, spin).is_err()); + let changed = format!( + "{}{decoy}", + axum.replace( + "for method in publisher_fallback_methods()", + "for method in decoy::publisher_fallback_methods()" + ) + ); + assert!(extract_with_mutation(fastly, entry, &changed, cloudflare, spin).is_err()); + let changed = format!( + "{}{decoy}", + cloudflare.replace( + "for method in publisher_fallback_methods()", + "for method in decoy::publisher_fallback_methods()" + ) + ); + assert!(extract_with_mutation(fastly, entry, axum, &changed, spin).is_err()); + let changed = format!( + "{}{decoy}", + spin.replace( + "for method in publisher_fallback_methods()", + "for method in decoy::publisher_fallback_methods()" + ) + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &changed).is_err()); +} + +#[test] +fn route_extractors_do_not_invent_imported_page_bid_constants() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + assert!(extract_named_routes("fastly", fastly).is_err()); + assert!(extract_cloudflare_routes(cloudflare).is_err()); +} + +#[test] +fn repository_routes_resolve_page_bid_paths_only_from_the_core_publisher() { + let publisher = include_str!("../../../crates/trusted-server-core/src/publisher.rs"); + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let extract = |publisher_routes: &str| { + extract_repository_routes(&RouteSources { + publisher_routes, + admin_routes: include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"), + fastly_app: fastly, + fastly_entrypoint: entry, + axum_app: axum, + cloudflare_app: cloudflare, + spin_app: spin, + }) + }; + + let changed = publisher.replacen( + "pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";", + "pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids-v2\";", + 1, + ); + let routes = extract(&changed).expect("changed authoritative path should be extracted"); + assert!(routes.iter().any(|route| route.path == "/_ts/page-bids-v2")); + assert!( + validate_routes( + RouteManifest::parse(include_str!("../manifests/routes.toml")) + .expect("reviewed routes should parse") + .routes(), + &routes, + ) + .is_err(), + "an authoritative path change must cause manifest drift" + ); + + let duplicate = format!("{publisher}\npub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";"); + assert!(extract(&duplicate).is_err()); + let test_decoy = + format!("{publisher}\n#[cfg(test)] pub const PAGE_BIDS_PATH: &str = \"/test-decoy\";"); + extract(&test_decoy).expect("cfg(test) publisher constant must not own production evidence"); + let cfg_unix = publisher.replacen( + "pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";", + "#[cfg(unix)] pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";", + 1, + ); + assert!(extract(&cfg_unix).is_err()); + let cfg_attr = publisher.replacen( + "pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";", + "#[cfg_attr(test, allow(dead_code))] pub const PAGE_BIDS_PATH: &str = \"/_ts/page-bids\";", + 1, + ); + assert!(extract(&cfg_attr).is_err()); +} + +#[test] +fn route_authorities_reject_resets_shadows_and_dead_closure_registrations() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_reset = fastly.replacen( + " router.build()\n }\n}\n\nimpl Hooks", + " router = RouterService::builder();\n router.build()\n }\n}\n\nimpl Hooks", + 1, + ); + assert!(extract_with_mutation(&fastly_reset, entry, axum, cloudflare, spin).is_err()); + + let axum_reset = axum.replacen( + " router.build()\n}\n\n#[cfg(test)]\nmod task8_route_tests", + " router = RouterService::builder();\n router.build()\n}\n\n#[cfg(test)]\nmod task8_route_tests", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_reset, cloudflare, spin).is_err()); + + let spin_reset = spin.replacen( + " builder.build()\n }\n}\n\n#[cfg(test)]", + " builder = RouterService::builder();\n builder.build()\n }\n}\n\n#[cfg(test)]", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_reset).is_err()); + + let fastly_dead = fastly.replacen( + " router.build()\n }\n}\n\nimpl Hooks", + " let _dead = || { router = router.route(\"/hidden\", Method::GET, fallback_handler.clone()); };\n router.build()\n }\n}\n\nimpl Hooks", + 1, + ); + assert!(extract_with_mutation(&fastly_dead, entry, axum, cloudflare, spin).is_err()); + + let axum_dead = axum.replacen( + " router.build()\n}\n\n#[cfg(test)]\nmod task8_route_tests", + " let _dead = || { router = router.route(\"/hidden\", Method::GET, fallback.clone()); };\n router.build()\n}\n\n#[cfg(test)]\nmod task8_route_tests", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_dead, cloudflare, spin).is_err()); + + let spin_dead = spin.replacen( + " builder.build()\n }\n}\n\n#[cfg(test)]", + " let _dead = || { builder = builder.route(\"/hidden\", Method::GET, fallback.clone()); };\n builder.build()\n }\n}\n\n#[cfg(test)]", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_dead).is_err()); + + let cloudflare_dead = cloudflare.replacen( + " router.build()\n }\n}\n\n#[cfg(test)]", + " let _dead = || { router = router.route(\"/hidden\", Method::GET, fallback.clone()); };\n router.build()\n }\n}\n\n#[cfg(test)]", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_dead, spin).is_err()); + + let axum_discarded = axum.replacen( + "router = router.route(\"/\", method.clone(), fallback.clone());", + "discarded = router.route(\"/\", method.clone(), fallback.clone());", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_discarded, cloudflare, spin).is_err()); +} + +#[test] +fn startup_fallback_receipts_bind_status_and_loop_routes_to_returned_values() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_status_receiver = fastly.replacen( + "*resp.status_mut() = status;", + "*decoy.status_mut() = status;", + 1, + ); + assert!(extract_with_mutation(&fastly_status_receiver, entry, axum, cloudflare, spin).is_err()); + + let axum_status_source = axum.replacen( + "let status = e.current_context().status_code();", + "let status = other.current_context().status_code();", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_status_source, cloudflare, spin).is_err()); + + let spin_status_receiver = spin.replacen( + "*resp.status_mut() = StatusCode::SERVICE_UNAVAILABLE;", + "*decoy.status_mut() = StatusCode::SERVICE_UNAVAILABLE;", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_status_receiver).is_err()); + + let cloudflare_discarded = cloudflare.replacen( + "router = router.route(\"/\", method.clone(), make(Arc::clone(&message)));", + "discarded = router.route(\"/\", method.clone(), make(Arc::clone(&message)));", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_discarded, spin).is_err()); +} + +#[test] +fn fastly_healthy_fallback_handler_binds_to_the_selected_dispatch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_handler = fastly.replacen( + "Box::pin(execute_fallback(state, ctx))", + "Box::pin(execute_named(state, ctx, NamedRouteHandler::Auction))", + 1, + ); + assert!(extract_with_mutation(&fastly_handler, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn axum_healthy_fallback_handler_binds_to_the_selected_dispatch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let axum_handler = axum.replacen( + "dispatch_fallback(&state, &services, req).await", + "handle_verify_signature(&state.settings, &services, req)", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_handler, cloudflare, spin).is_err()); +} + +#[test] +fn cloudflare_healthy_fallback_handler_binds_to_the_selected_dispatch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let cloudflare_handler = cloudflare.replacen("dispatch(s, ctx)", "other(s, ctx)", 1); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_handler, spin).is_err()); +} + +#[test] +fn spin_healthy_fallback_handler_binds_to_the_selected_dispatch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let spin_handler = spin.replacen("dispatch(s, ctx)", "other(s, ctx)", 1); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_handler).is_err()); +} + +#[test] +fn route_path_constants_enforce_production_cfg_and_uniqueness() { + let base = r#" + const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { path: ROUTE_PATH, primary_methods: &[Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }, + ]; + "#; + for declaration in [ + "#[cfg(test)] const ROUTE_PATH: &str = \"/.well-known/trusted-server.json\";", + "#[cfg(unix)] const ROUTE_PATH: &str = \"/.well-known/trusted-server.json\";", + "#[cfg_attr(test, allow(dead_code))] const ROUTE_PATH: &str = \"/.well-known/trusted-server.json\";", + "const ROUTE_PATH: &str = \"/.well-known/trusted-server.json\"; const ROUTE_PATH: &str = \"/.well-known/trusted-server.json\";", + ] { + let source = format!("{declaration}{base}"); + assert!( + extract_named_routes("fastly", &source).is_err(), + "conditionally owned or duplicate route constant must fail" + ); + } +} + +#[test] +fn route_ast_receipts_reject_page_bids_and_legacy_handler_swaps_in_all_adapters() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_preflight = fastly.replace( + "if req.method() == Method::OPTIONS {", + "if false && req.method() == Method::OPTIONS {", + ); + assert!(extract_with_mutation(&fastly_preflight, entry, axum, cloudflare, spin).is_err()); + + let axum_preflight = axum.replacen( + "if req.method() == Method::OPTIONS {", + "if false && req.method() == Method::OPTIONS {", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_preflight, cloudflare, spin).is_err()); + + let spin_preflight = spin.replace( + "Method::OPTIONS, page_bids_options_handler", + "Method::OPTIONS, page_bids_handler.clone()", + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_preflight).is_err()); + + let spin_legacy = spin.replacen( + "method.clone(), legacy_admin_deny", + "method.clone(), fallback.clone()", + 1, + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_legacy).is_err()); + + let fastly_legacy = fastly.replacen( + "handler: NamedRouteHandler::LegacyAdminDenied", + "handler: NamedRouteHandler::Auction", + 1, + ); + assert!(extract_with_mutation(&fastly_legacy, entry, axum, cloudflare, spin).is_err()); + + let axum_legacy = axum.replacen( + "handler: NamedRouteHandler::LegacyAdminDenied", + "handler: NamedRouteHandler::Auction", + 1, + ); + assert!(extract_with_mutation(fastly, entry, &axum_legacy, cloudflare, spin).is_err()); +} + +#[test] +fn route_and_support_manifests_reject_duplicates_unknown_fields_and_bad_ownership() { + let duplicate_routes = r#" + version = 1 + reviewed = true + [[routes]] + adapters = ["fastly"] + path = "/health" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + [[routes]] + adapters = ["fastly"] + path = "/health" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + "#; + assert!( + RouteManifest::parse(duplicate_routes) + .expect_err("duplicate expanded routes must fail") + .to_string() + .contains("duplicate") + ); + assert!( + RouteManifest::parse( + &duplicate_routes.replace("status = \"real\"", "status = \"real\"\nunknown = true") + ) + .expect_err("unknown route fields must fail") + .to_string() + .contains("unknown") + ); + + let support = r#" + version = 1 + reviewed = true + [[adapters]] + id = "fastly" + release_status = "production" + owner = "" + reviewed_at = "2026-99-99" + health = "pre_router" + startup_status = 500 + startup_health = true + provider_fanout = "multiple" + "#; + assert!( + AdapterSupportManifest::parse(support) + .expect_err("blank owner must fail") + .to_string() + .contains("ownership") + ); + assert!( + AdapterSupportManifest::parse(&support.replace("owner = \"\"", "owner = \"reviewer\"")) + .expect_err("invalid calendar review date must fail") + .to_string() + .contains("ownership") + ); +} + +#[test] +fn adapter_support_manifest_caps_rows_and_every_string() { + let row = r#" + [[adapters]] + id = "fastly" + release_status = "production" + owner = "reviewer" + reviewed_at = "2026-09-05" + health = "pre_router" + startup_status = 500 + startup_health = true + provider_fanout = "multiple" + "#; + let too_many = format!("version = 1\nreviewed = true\n{}", row.repeat(4097)); + assert!(AdapterSupportManifest::parse(&too_many).is_err()); + + let long = "x".repeat(16 * 1024 + 1); + for (field, original) in [ + ("id", "fastly"), + ("release_status", "production"), + ("owner", "reviewer"), + ("reviewed_at", "2026-09-05"), + ("health", "pre_router"), + ("provider_fanout", "multiple"), + ] { + let source = format!("version = 1\nreviewed = true\n{row}").replace( + &format!("{field} = \"{original}\""), + &format!("{field} = \"{long}\""), + ); + assert!( + AdapterSupportManifest::parse(&source).is_err(), + "adapter support {field} must observe the string bound" + ); + } +} + +#[test] +fn route_manifest_rejects_duplicate_adapters_and_methods_before_expansion() { + let source = r#" + version = 1 + reviewed = true + [[routes]] + adapters = ["fastly", "fastly"] + path = "/health" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + "#; + assert!( + RouteManifest::parse(source) + .expect_err("duplicate adapters must fail before set conversion") + .to_string() + .contains("duplicate route adapter") + ); + + let source = source + .replace("[\"fastly\", \"fastly\"]", "[\"fastly\"]") + .replace("[\"GET\"]", "[\"GET\", \"GET\"]"); + assert!( + RouteManifest::parse(&source) + .expect_err("duplicate methods must fail before set conversion") + .to_string() + .contains("duplicate route method") + ); +} + +#[test] +fn route_manifest_rejects_overlapping_expanded_method_semantics() { + let source = r#" + version = 1 + reviewed = true + [[routes]] + adapters = ["fastly"] + path = "/health" + methods = ["GET"] + shape = "literal" + predicate = "always" + status = "real" + [[routes]] + adapters = ["fastly"] + path = "/health" + methods = ["GET", "HEAD"] + shape = "literal" + predicate = "always" + status = "real" + "#; + assert!( + RouteManifest::parse(source) + .expect_err("overlapping expanded method semantics must fail") + .to_string() + .contains("duplicate expanded route semantic") + ); +} + +#[test] +fn named_and_cloudflare_sources_reject_duplicate_semantic_routes() { + let named = r#" + const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { path: "/.well-known/trusted-server.json", primary_methods: &[Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }, + NamedRoute { path: "/.well-known/trusted-server.json", primary_methods: &[Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }, + ]; + "#; + assert!( + extract_named_routes("fastly", named) + .expect_err("duplicate named routes must fail") + .to_string() + .contains("duplicate") + ); + + let duplicate_method = r#" + const NAMED_ROUTES: &[NamedRoute] = &[ + NamedRoute { path: "/.well-known/trusted-server.json", primary_methods: &[Method::GET, Method::GET], handler: NamedRouteHandler::TrustedServerDiscovery }, + ]; + "#; + assert!( + extract_named_routes("fastly", duplicate_method) + .expect_err("duplicate source methods must fail") + .to_string() + .contains("duplicate") + ); + + let cloudflare = r#" + fn build_router() { + let mut router = RouterService::builder().get("/health", handler); + router = router.get("/health", handler); + router.build() + } + "#; + assert!( + extract_cloudflare_routes(cloudflare) + .expect_err("duplicate Cloudflare routes must fail") + .to_string() + .contains("duplicate") + ); +} + +#[test] +fn adapter_support_rejects_duplicate_operational_rows() { + let row = r#" + [[adapters]] + id = "fastly" + release_status = "production" + owner = "reviewer" + reviewed_at = "2026-09-05" + health = "pre_router" + startup_status = 500 + startup_health = true + provider_fanout = "multiple" + "#; + let source = format!("version = 1\nreviewed = true\n{row}\n{row}"); + assert!( + AdapterSupportManifest::parse(&source) + .expect_err("duplicate adapter operational rows must fail") + .to_string() + .contains("duplicate adapter support row") + ); +} + +#[test] +fn local_initializers_cannot_divert_registered_handlers_or_tsjs_dispatch() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_handler = axum.replacen( + " let ec_context = build_ec_context(&state, &services, &req);", + " let _divert = if black_box(true) { return Ok(legacy_admin_alias_denied()); } else { () };\n let ec_context = build_ec_context(&state, &services, &req);", + 1, + ); + assert_ne!(axum_handler, axum, "fixture must alter Axum auction"); + assert!( + extract_with_mutation(fastly, entry, &axum_handler, cloudflare, spin).is_err(), + "a local initializer must not hide an earlier Axum handler return" + ); + + let axum_tsjs = axum.replacen( + " if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + " let _divert = if black_box(true) { return Ok(legacy_admin_alias_denied()); } else { () };\n if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + 1, + ); + assert_ne!(axum_tsjs, axum, "fixture must alter Axum TSJS flow"); + assert!(extract_with_mutation(fastly, entry, &axum_tsjs, cloudflare, spin).is_err()); + + let cloudflare_tsjs = cloudflare.replacen( + " let result = if allow_tsjs && path.starts_with(\"/static/tsjs=\") {", + " let _divert = if black_box(true) { return Ok(legacy_admin_alias_denied()); } else { () };\n let result = if allow_tsjs && path.starts_with(\"/static/tsjs=\") {", + 1, + ); + assert_ne!( + cloudflare_tsjs, cloudflare, + "fixture must alter Cloudflare TSJS flow" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_tsjs, spin).is_err()); + + let spin_tsjs = spin.replacen( + " let result = if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + " let _divert = if black_box(true) { return Ok(legacy_admin_alias_denied()); } else { () };\n let result = if method == Method::GET && path.starts_with(\"/static/tsjs=\") {", + 1, + ); + assert_ne!(spin_tsjs, spin, "fixture must alter Spin TSJS flow"); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_tsjs).is_err()); +} + +#[test] +fn preceding_local_try_cannot_divert_a_named_handler() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let changed = axum.replacen( + " NamedRouteHandler::VerifySignature => {\n handle_verify_signature(&state.settings, &services, req)", + " NamedRouteHandler::VerifySignature => {\n let _divert = Err::<(), Report>(Report::new(TrustedServerError::BadRequest { message: \"diverted\".to_owned() }))?;\n handle_verify_signature(&state.settings, &services, req)", + 1, + ); + assert_ne!(changed, axum, "fixture must alter Axum VerifySignature"); + assert!( + extract_with_mutation(fastly, entry, &changed, cloudflare, spin).is_err(), + "a preceding local try must not divert the registered handler" + ); +} + +#[test] +fn preceding_local_call_cannot_divert_a_named_handler() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + let changed = format!( + "{}\nfn divert() -> ! {{ panic!(\"diverted\") }}", + axum.replacen( + " NamedRouteHandler::VerifySignature => {\n handle_verify_signature(&state.settings, &services, req)", + " NamedRouteHandler::VerifySignature => {\n let _divert = divert();\n handle_verify_signature(&state.settings, &services, req)", + 1, + ) + ); + assert_ne!(changed, axum, "fixture must alter Axum VerifySignature"); + assert!( + extract_with_mutation(fastly, entry, &changed, cloudflare, spin).is_err(), + "an arbitrary preceding call must not divert the registered handler" + ); +} + +#[test] +fn response_receipts_reject_unchecked_headers_and_preceding_branches() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let spin_health = spin.replacen( + "HeaderValue::from_static(\"text/plain\"))", + "HeaderValue::from_static(\"application/json\"))", + 1, + ); + assert_ne!( + spin_health, spin, + "fixture must alter Spin health content type" + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_health).is_err()); + + let axum_unsupported = axum.replacen( + " let body = edgezero_core::body::Body::from(", + " if black_box(true) { return Ok(legacy_admin_alias_denied()); }\n let body = edgezero_core::body::Body::from(", + 1, + ); + assert_ne!( + axum_unsupported, axum, + "fixture must alter Axum unsupported response" + ); + assert!(extract_with_mutation(fastly, entry, &axum_unsupported, cloudflare, spin).is_err()); + + let cloudflare_unsupported = cloudflare.replacen( + "fn admin_key_management_not_supported() -> Response {\n", + "fn admin_key_management_not_supported() -> Response {\n if black_box(true) { return legacy_admin_alias_denied(); }\n", + 1, + ); + assert_ne!( + cloudflare_unsupported, cloudflare, + "fixture must alter Cloudflare unsupported response" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_unsupported, spin).is_err()); + + let spin_unsupported = spin.replacen( + "fn admin_key_management_not_supported() -> Response {\n", + "fn admin_key_management_not_supported() -> Response {\n if black_box(true) { return legacy_admin_alias_denied(); }\n", + 1, + ); + assert_ne!( + spin_unsupported, spin, + "fixture must alter Spin unsupported response" + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_unsupported).is_err()); +} + +#[test] +fn router_blocks_reject_shadows_of_every_consumed_named_collection() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let fastly_shadow = format!( + "{}\nmod decoy {{ const NAMED_ROUTES: &[NamedRoute] = &[]; }}", + fastly.replacen( + " fn routes_for_state(state: &Arc) -> RouterService {\n", + " fn routes_for_state(state: &Arc) -> RouterService {\n use decoy::NAMED_ROUTES;\n", + 1, + ) + ); + assert!(extract_with_mutation(&fastly_shadow, entry, axum, cloudflare, spin).is_err()); + + let axum_shadow = format!( + "{}\nmod decoy {{ fn named_routes() -> [NamedRoute; 0] {{ [] }} }}", + axum.replacen( + "fn build_router(state: &Arc) -> RouterService {\n", + "fn build_router(state: &Arc) -> RouterService {\n use decoy::named_routes;\n", + 1, + ) + ); + assert!(extract_with_mutation(fastly, entry, &axum_shadow, cloudflare, spin).is_err()); + + let spin_shadow = format!( + "{}\nmod decoy {{ fn named_fallback_paths() -> [(&'static str, &'static [Method]); 0] {{ [] }} }}", + spin.replacen( + "fn build_router(state: &Arc) -> RouterService {\n {\n", + "fn build_router(state: &Arc) -> RouterService {\n {\n use decoy::named_fallback_paths;\n", + 1, + ) + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_shadow).is_err()); +} + +#[test] +fn named_handlers_bind_exact_arguments_and_fastly_prior_flow() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let axum_auction = axum.replacen( + " &ec_context,\n &services,", + " &EcContext::default(),\n &services,", + 1, + ); + assert_ne!( + axum_auction, axum, + "fixture must alter Axum auction context" + ); + assert!(extract_with_mutation(fastly, entry, &axum_auction, cloudflare, spin).is_err()); + + let fastly_admin_arguments = fastly.replacen( + "handle_admin_eids_lookup(®istry, &req)", + "handle_admin_eids_lookup(&req, ®istry)", + 1, + ); + assert_ne!( + fastly_admin_arguments, fastly, + "fixture must swap Fastly admin EIDs arguments" + ); + assert!(extract_with_mutation(&fastly_admin_arguments, entry, axum, cloudflare, spin).is_err()); + + let fastly_admin = fastly.replacen( + " if matches!(\n handler,\n NamedRouteHandler::AdminEcLookup | NamedRouteHandler::AdminEidsLookup\n ) {\n", + " if matches!(\n handler,\n NamedRouteHandler::AdminEcLookup | NamedRouteHandler::AdminEidsLookup\n ) {\n if black_box(true) { return Ok(legacy_admin_alias_denied()); }\n", + 1, + ); + assert_ne!( + fastly_admin, fastly, + "fixture must alter Fastly early admin flow" + ); + assert!(extract_with_mutation(&fastly_admin, entry, axum, cloudflare, spin).is_err()); + + let fastly_identify = fastly.replacen( + " } else {\n let kv = crate::require_identity_graph(&state.settings)?;", + " } else {\n if black_box(true) { return Ok(legacy_admin_alias_denied()); }\n let kv = crate::require_identity_graph(&state.settings)?;", + 1, + ); + assert_ne!( + fastly_identify, fastly, + "fixture must alter Fastly Identify GET flow" + ); + assert!(extract_with_mutation(&fastly_identify, entry, axum, cloudflare, spin).is_err()); + + let fastly_page_bids = fastly.replacen( + " // Like the auction, page-bids reads consent data, so the consent KV", + " if black_box(true) { return Ok(legacy_admin_alias_denied()); }\n // Like the auction, page-bids reads consent data, so the consent KV", + 1, + ); + assert_ne!( + fastly_page_bids, fastly, + "fixture must alter Fastly page-bids GET flow" + ); + assert!(extract_with_mutation(&fastly_page_bids, entry, axum, cloudflare, spin).is_err()); +} + +#[test] +fn audited_constructors_status_paths_and_fastly_none_are_exact() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let cases = [ + ( + "Box::pin", + fastly.replacen( + "Box::pin(execute_fallback(state, ctx))", + "decoy::Box::pin(execute_fallback(state, ctx))", + 1, + ), + entry.to_owned(), + axum.to_owned(), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + "Arc::clone", + fastly.replacen( + "let state = Arc::clone(&state);\n Box::pin(execute_fallback", + "let state = decoy::Arc::clone(&state);\n Box::pin(execute_fallback", + 1, + ), + entry.to_owned(), + axum.to_owned(), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + "Body::from", + fastly.to_owned(), + entry.to_owned(), + axum.replacen( + "edgezero_core::body::Body::from(\"ok\")", + "decoy::edgezero_core::body::Body::from(\"ok\")", + 1, + ), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + "Response::new", + fastly.to_owned(), + entry.to_owned(), + axum.to_owned(), + cloudflare.to_owned(), + spin.replacen( + "Response::new(edgezero_core::body::Body::from(\"ok\"))", + "decoy::Response::new(edgezero_core::body::Body::from(\"ok\"))", + 1, + ), + ), + ( + "response_builder", + fastly.to_owned(), + entry.to_owned(), + axum.replacen( + "edgezero_core::http::response_builder()\n .status(StatusCode::OK)", + "decoy::http::response_builder()\n .status(StatusCode::OK)", + 1, + ), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + "RouterService::builder", + fastly.to_owned(), + entry.to_owned(), + axum.replacen("RouterService::builder()", "::RouterService::builder()", 1), + cloudflare.to_owned(), + spin.to_owned(), + ), + ( + "StatusCode::OK", + fastly.to_owned(), + entry.to_owned(), + axum.to_owned(), + cloudflare.to_owned(), + spin.replacen( + "*resp.status_mut() = StatusCode::OK;", + "*resp.status_mut() = decoy::StatusCode::OK;", + 1, + ), + ), + ]; + for (name, changed_fastly, changed_entry, changed_axum, changed_cloudflare, changed_spin) in + cases + { + assert!( + extract_with_mutation( + &changed_fastly, + &changed_entry, + &changed_axum, + &changed_cloudflare, + &changed_spin, + ) + .is_err(), + "suffix-only {name} constructor/status paths must fail" + ); + } + + let fastly_response = entry.replacen( + "FastlyResponse::from_status(200)", + "decoy::FastlyResponse::from_status(200)", + 1, + ); + assert!(extract_with_mutation(fastly, &fastly_response, axum, cloudflare, spin).is_err()); + let fastly_none = entry.replacen("\n None\n}", "\n decoy::None\n}", 1); + assert_ne!(fastly_none, entry, "fixture must alter Fastly health None"); + assert!(extract_with_mutation(fastly, &fastly_none, axum, cloudflare, spin).is_err()); +} + +#[test] +fn guarded_response_statuses_are_bound_to_authoritative_bodies() { + let publisher = include_str!("../../../crates/trusted-server-core/src/publisher.rs"); + let admin = include_str!("../../../crates/trusted-server-core/src/ec/admin.rs"); + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let publisher_ok = publisher.replacen( + "*response.status_mut() = StatusCode::FORBIDDEN;", + "*response.status_mut() = StatusCode::OK;", + 1, + ); + assert_ne!( + publisher_ok, publisher, + "fixture must alter page-bids denial" + ); + assert!( + extract_with_core_mutation(&publisher_ok, admin, fastly, entry, axum, cloudflare, spin) + .is_err() + ); + + let admin_ok = admin.replacen( + " StatusCode::NOT_IMPLEMENTED,\n \"EC identity graph is not configured on this deployment\"", + " StatusCode::OK,\n \"EC identity graph is not configured on this deployment\"", + 1, + ); + assert_ne!( + admin_ok, admin, + "fixture must alter portable admin EC denial" + ); + assert!( + extract_with_core_mutation(publisher, &admin_ok, fastly, entry, axum, cloudflare, spin) + .is_err() + ); + + let cloudflare_ok = cloudflare.replacen( + "*response.status_mut() = edgezero_core::http::StatusCode::NOT_FOUND;", + "*response.status_mut() = edgezero_core::http::StatusCode::OK;", + 1, + ); + assert_ne!( + cloudflare_ok, cloudflare, + "fixture must alter Cloudflare legacy denial" + ); + assert!( + extract_with_core_mutation(publisher, admin, fastly, entry, axum, &cloudflare_ok, spin) + .is_err() + ); + + let cloudflare_wrapper = cloudflare.replacen( + "fn admin_ec_lookup_not_supported() -> Response {\n core_admin_ec_lookup_not_supported()\n}", + "fn admin_ec_lookup_not_supported() -> Response {\n legacy_admin_alias_denied()\n}", + 1, + ); + assert_ne!( + cloudflare_wrapper, cloudflare, + "fixture must alter portable admin EC wrapper" + ); + assert!( + extract_with_core_mutation( + publisher, + admin, + fastly, + entry, + axum, + &cloudflare_wrapper, + spin + ) + .is_err() + ); +} + +#[test] +fn cloudflare_named_handler_aliases_bind_to_exact_local_bodies() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let cloudflare = cloudflare + .replacen( + " let mut router = RouterService::builder()", + " let verify = fallback.clone();\n let mut router = RouterService::builder()", + 1, + ) + .replacen( + " make_handler(Arc::clone(&state), |s, services, req| async move {\n handle_verify_signature(&s.settings, &services, req)\n }),", + " verify,", + 1, + ); + assert_ne!( + cloudflare, + include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"), + "fixture must bind Cloudflare verify to fallback" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare, spin).is_err()); +} + +#[test] +fn portable_named_handlers_require_exact_settings_arguments() { + let fastly = include_str!("../../../crates/trusted-server-adapter-fastly/src/app.rs"); + let entry = include_str!("../../../crates/trusted-server-adapter-fastly/src/main.rs"); + let axum = include_str!("../../../crates/trusted-server-adapter-axum/src/app.rs"); + let cloudflare = include_str!("../../../crates/trusted-server-adapter-cloudflare/src/app.rs"); + let spin = include_str!("../../../crates/trusted-server-adapter-spin/src/app.rs"); + + let cloudflare_default = cloudflare.replacen( + "handle_first_party_proxy(&s.settings, &services, req).await", + "handle_first_party_proxy(&Settings::default(), &services, req).await", + 1, + ); + assert_ne!( + cloudflare_default, cloudflare, + "fixture must alter Cloudflare first-party settings" + ); + assert!(extract_with_mutation(fastly, entry, axum, &cloudflare_default, spin).is_err()); + + let spin_default = spin.replacen( + "handle_first_party_proxy(&s.settings, &services, req)", + "handle_first_party_proxy(&Settings::default(), &services, req)", + 1, + ); + assert_ne!( + spin_default, spin, + "fixture must alter Spin first-party settings" + ); + assert!(extract_with_mutation(fastly, entry, axum, cloudflare, &spin_default).is_err()); +} diff --git a/tools/docs-parity/tests/scanner.rs b/tools/docs-parity/tests/scanner.rs new file mode 100644 index 000000000..51251fc2a --- /dev/null +++ b/tools/docs-parity/tests/scanner.rs @@ -0,0 +1,2403 @@ +use std::env; +use std::fs; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; + +use sha2::{Digest as _, Sha256}; +use tempfile::TempDir; + +const SUCCESS: i32 = 0; +const ERROR: i32 = 2; + +struct TestRepository { + directory: TempDir, +} + +impl TestRepository { + fn new(path: &str, contents: &[u8], kind: &str) -> Self { + let directory = tempfile::tempdir().expect("should create test repository"); + run_git(directory.path(), &["init", "--quiet"]); + let absolute = directory.path().join(path); + if let Some(parent) = absolute.parent() { + fs::create_dir_all(parent).expect("should create tracked file parent"); + } + fs::write(&absolute, contents).expect("should write tracked file"); + run_git(directory.path(), &["add", "--", path]); + + let manifests = directory.path().join("tools/docs-parity/manifests"); + fs::create_dir_all(&manifests).expect("should create manifest directory"); + fs::write( + manifests.join("tracked-files.toml"), + format!( + "version = 1\nmax_text_bytes = 1048576\nreviewed = true\n\n[[files]]\npath = \"{path}\"\nkind = \"{kind}\"\n" + ), + ) + .expect("should write tracked-files manifest"); + let maintained = if kind == "text" { + format!( + "version = 1\nreviewed = true\ncomments = []\n\n[[sources]]\npath = \"{path}\"\nmode = \"whole\"\ndisposition = \"include\"\n" + ) + } else { + "version = 1\nreviewed = true\nsources = []\ncomments = []\n".to_owned() + }; + fs::write(manifests.join("maintained-sources.toml"), maintained) + .expect("should write maintained-sources manifest"); + fs::write( + manifests.join("sensitive-allowlist.toml"), + "version = 1\nreviewed = true\nexceptions = []\n", + ) + .expect("should write allowlist"); + fs::write( + manifests.join("retired-identifiers.toml"), + "version = 1\nreviewed = true\nidentifiers = []\n", + ) + .expect("should write denylist"); + Self { directory } + } + + fn path(&self) -> &Path { + self.directory.path() + } + + fn add_text(&self, path: &str, contents: &str) { + let absolute = self.path().join(path); + if let Some(parent) = absolute.parent() { + fs::create_dir_all(parent).expect("should create tracked file parent"); + } + fs::write(&absolute, contents).expect("should write additional tracked file"); + run_git(self.path(), &["add", "-f", "--", path]); + + let manifests = self.path().join("tools/docs-parity/manifests"); + let tracked_path = manifests.join("tracked-files.toml"); + let mut tracked = fs::read_to_string(&tracked_path).expect("should read tracked manifest"); + tracked.push_str(&format!( + "\n[[files]]\npath = \"{path}\"\nkind = \"text\"\n" + )); + fs::write(tracked_path, tracked).expect("should extend tracked manifest"); + + let maintained_path = manifests.join("maintained-sources.toml"); + let mut maintained = + fs::read_to_string(&maintained_path).expect("should read maintained manifest"); + maintained.push_str(&format!( + "\n[[sources]]\npath = \"{path}\"\nmode = \"whole\"\ndisposition = \"include\"\n" + )); + fs::write(maintained_path, maintained).expect("should extend maintained manifest"); + } + + fn write_allowlist(&self, contents: &str) { + fs::write( + self.path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + contents, + ) + .expect("should write allowlist"); + } + + fn write_denylist(&self, contents: &str) { + fs::write( + self.path() + .join("tools/docs-parity/manifests/retired-identifiers.toml"), + contents, + ) + .expect("should write denylist"); + } + + fn scan(&self) -> Output { + Command::new(binary()) + .current_dir(self.path()) + .args(["scan", "--check"]) + .output() + .expect("should execute docs-parity") + } + + fn bootstrap(&self) -> Output { + Command::new(binary()) + .current_dir(self.path()) + .args(["scan", "--bootstrap"]) + .output() + .expect("should execute docs-parity") + } +} + +fn binary() -> PathBuf { + PathBuf::from(env!("CARGO_BIN_EXE_docs-parity")) +} + +fn run_git(repository: &Path, arguments: &[&str]) { + let status = Command::new("git") + .args(arguments) + .current_dir(repository) + .status() + .expect("should execute git"); + assert!(status.success(), "git command should succeed"); +} + +fn status_code(output: &Output) -> i32 { + output.status.code().expect("should exit normally") +} + +fn diagnostic(output: &Output) -> String { + String::from_utf8(output.stderr.clone()).expect("diagnostic should be UTF-8") +} + +fn exception( + class: &str, + path: &str, + detector: &str, + matched_content: &str, + expiry: &str, +) -> String { + let governed = governed_match(detector, matched_content); + format!( + "version = 1\nreviewed = true\n\n[[exceptions]]\nclass = \"{class}\"\npath = \"{path}\"\ndetector = \"{detector}\"\nscope = \"exact-occurrence\"\nselector = \"bytes:0-{}\"\nfingerprint = \"{}\"\nowner = \"docs-owner\"\nrationale = \"Reviewed fixture with an exact content boundary.\"\nexpires_at = \"{expiry}\"\n", + governed.len(), + fingerprint(governed.as_bytes()) + ) +} + +fn exception_for_contents( + class: &str, + path: &str, + detector: &str, + contents: &[u8], + matched_content: &str, + expiry: &str, +) -> String { + let governed = governed_match(detector, matched_content); + let start = contents + .windows(governed.len()) + .position(|window| window == governed.as_bytes()) + .expect("matched fixture content should exist"); + exception(class, path, detector, &governed, expiry).replace( + &format!("selector = \"bytes:0-{}\"", governed.len()), + &format!("selector = \"bytes:{start}-{}\"", start + governed.len()), + ) +} + +fn governed_match(detector: &str, value: &str) -> String { + let domain_value = detector == "domain"; + let embedded_url = + matches!(detector, "binary_string" | "media_metadata") && value.contains("://"); + if !domain_value && !embedded_url { + return value.to_owned(); + } + value + .split_once("://") + .map_or(value, |(_scheme, remainder)| remainder) + .split(['/', '?', '#']) + .next() + .expect("host") + .rsplit('@') + .next() + .expect("host") + .split(':') + .next() + .expect("host") + .to_owned() +} + +fn fingerprint(contents: &[u8]) -> String { + format!("sha256:{:x}", Sha256::digest(contents)) +} + +#[test] +fn allowlist_requires_explicit_review_attestation() { + let repository = TestRepository::new("notes.txt", b"safe text\n", "text"); + repository.write_allowlist("version = 1\nexceptions = []\n"); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("reviewed")); +} + +#[test] +fn service_id_cannot_use_historical_example_class() { + let value = "AbCdEf1234567890GhIj"; + let contents = format!("service_id = \"{value}\"\n"); + let repository = TestRepository::new("fastly.toml", contents.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "historical_example", + "fastly.toml", + "service_id", + contents.as_bytes(), + value, + "2099-01-01T00:00:00Z", + )); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("incompatible")); +} + +#[test] +fn binary_and_media_service_ids_cannot_bypass_service_governance() { + let value = "AbCdEf1234567890GhIj"; + let text = format!("service_id = \"{value}\""); + let mut binary = vec![0]; + binary.extend_from_slice(text.as_bytes()); + binary.push(0); + let media = png_text_chunk("Service", &text); + for (path, contents) in [("asset.bin", binary), ("asset.png", media)] { + let repository = TestRepository::new(path, &contents, "binary"); + let mut record = exception_for_contents( + "historical_example", + path, + "service_id", + &contents, + value, + "2099-01-01T00:00:00Z", + ); + record = record.replace("owner = \"docs-owner\"", "owner = \"wrong-owner\""); + repository.write_allowlist(&record); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR, "{path} must fail"); + assert!(diagnostic(&result).contains("incompatible")); + } +} + +#[test] +fn modern_long_and_punycode_domains_are_detected() { + let modern = ["getpurpose", ".ai"].concat(); + for value in [ + modern.as_str(), + "service.technology", + "host.xn--p1ai", + "service.co.uk", + ] { + assert_detected("notes.txt", value.as_bytes(), "text", "domain"); + } +} + +#[test] +fn retired_manifest_requires_explicit_true_attestation() { + for contents in [ + "version = 1\nidentifiers = []\n", + "version = 1\nreviewed = false\nidentifiers = []\n", + ] { + let repository = TestRepository::new("notes.txt", b"safe text", "text"); + repository.write_denylist(contents); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("review")); + } +} + +fn assert_detected(path: &str, contents: &[u8], kind: &str, detector: &str) { + let repository = TestRepository::new(path, contents, kind); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "finding should fail"); + assert!( + diagnostic(&result).contains(&format!("sensitive finding [{detector}] in {path}")), + "diagnostic should identify detector and path: {}", + diagnostic(&result) + ); +} + +fn assert_allowlisted( + path: &str, + contents: &[u8], + kind: &str, + detector: &str, + matched_content: &str, + class: &str, +) { + let repository = TestRepository::new(path, contents, kind); + repository.write_allowlist(&exception_for_contents( + class, + path, + detector, + contents, + matched_content, + "2099-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "typed exception should pass: {}", + diagnostic(&result) + ); +} + +#[test] +fn domain_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("https://portal.{}", "private-corp.internal/path"); + assert_detected("notes.txt", value.as_bytes(), "text", "domain"); + assert_allowlisted( + "tests/email.txt", + value.as_bytes(), + "text", + "domain", + &value, + "vendor_url", + ); +} + +#[test] +fn bare_domain_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("portal.{}", "private-corp.internal/path"); + assert_detected("notes.txt", value.as_bytes(), "text", "domain"); + assert_allowlisted( + "notes.txt", + value.as_bytes(), + "text", + "domain", + &value, + "vendor_url", + ); +} + +#[test] +fn bare_domain_findings_select_only_host_bytes() { + let value = format!("portal.{}/docs", "private-corp.internal"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + let host = format!("portal.{}", "private-corp.internal"); + assert!( + manifest.contains(&format!( + "selector = \"bytes:0-{}\"\nfingerprint = \"{}\"", + host.len(), + fingerprint(host.as_bytes()) + )), + "bare-domain selector and fingerprint must cover only host bytes: {manifest}" + ); +} + +#[test] +fn domain_fingerprint_matches_exact_selected_host_bytes() { + let host = "Portal.Private-Corp.Internal"; + let value = format!("HTTPS://{host}/docs"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + let start = value.find(host).expect("host should exist"); + assert!( + manifest.contains(&format!( + "selector = \"bytes:{start}-{}\"\nfingerprint = \"{}\"", + start + host.len(), + fingerprint(host.as_bytes()) + )), + "fingerprint must cover the exact selected bytes without case normalization: {manifest}" + ); +} + +#[test] +fn bare_domain_detector_does_not_match_source_member_prefixes() { + let contents = b"result.contains(value); output.status.code(); document.body.append(node);\nexample.com.evil\n"; + let repository = TestRepository::new("fixture.rs", contents, "text"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "source member names are not bare domains: {}", + diagnostic(&result) + ); +} + +#[test] +fn domain_detector_rejects_template_path_and_code_member_false_positives() { + for (path, contents) in [ + ("main.rs", ["format!(\"http", "://{}\");"].concat()), + ("build.rs", ["let path = \"build", ".rs\";"].concat()), + ("platform.rs", ["let x = prediction", ".name;"].concat()), + ( + "app.rs", + ["let x = state.settings.ec", ".partners;"].concat(), + ), + ] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + let result = repository.scan(); + assert_eq!( + status_code(&result), + SUCCESS, + "{path}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn domain_detector_rejects_non_code_paths_and_markup_tokens_but_keeps_link_hosts() { + for (path, contents, references) in [ + ( + "docs/README.md", + ["See build", ".rs and `CONTRIBUTING", ".md`."].concat(), + vec![ + ["crates/example/build", ".rs"].concat(), + "CONTRIBUTING.md".to_owned(), + ], + ), + ( + "docs/README.md", + ["[guide](getting-started", ".md) and configuration", ".md"].concat(), + vec![ + ["docs/guide/getting-started", ".md"].concat(), + ["docs/guide/configuration", ".md"].concat(), + ], + ), + ( + ".dockerignore", + ["dist/cache", ".name\n"].concat(), + vec![["dist/cache", ".name"].concat()], + ), + ( + "config.txt", + ["relative/path", ".name"].concat(), + vec![["relative/path", ".name"].concat()], + ), + ( + "script.sh", + ["# generated path build", ".rs\n"].concat(), + vec![["build", ".rs"].concat()], + ), + ] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + for reference in references { + repository.add_text(&reference, "no findings\n"); + } + let result = repository.scan(); + assert_eq!( + status_code(&result), + SUCCESS, + "{path}: {}", + diagnostic(&result) + ); + } + let project_host = ["getpurpose", ".ai"].concat(); + let link = format!("[purpose](https://{project_host}/docs)"); + assert_detected("README.md", link.as_bytes(), "text", "domain"); +} + +#[test] +fn domain_detector_uses_repository_paths_instead_of_suffix_or_markup_suppression() { + let service_host = ["service.example", ".rs"].concat(); + let project_host = ["getpurpose", ".ai"].concat(); + let untracked = ["untracked-guide", ".md"].concat(); + let configuration = ["docs/configuration", ".md"].concat(); + let contents = format!( + "README.md `build.rs` [configuration]({configuration}) CONTRIBUTING.md\n\ + `{service_host}`\n\ + {untracked}\n\ + ```text\n{project_host}\n```\n\ + `{project_host}` and {project_host}\n" + ); + let repository = TestRepository::new("README.md", contents.as_bytes(), "text"); + for path in ["build.rs", configuration.as_str(), "CONTRIBUTING.md"] { + repository.add_text(path, "no findings\n"); + } + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 5, + "two non-path public hosts and all three project hosts must remain findings: {manifest}" + ); + assert_eq!( + manifest + .matches(&fingerprint(project_host.as_bytes())) + .count(), + 3, + "Markdown markup must not suppress project domains: {manifest}" + ); + assert!( + manifest.contains(&fingerprint(service_host.as_bytes())), + "source-looking public suffix must remain detectable when it is not a repository path: {manifest}" + ); + assert!( + manifest.contains(&fingerprint(untracked.as_bytes())), + "a source-like suffix is not repository-path evidence by itself: {manifest}" + ); +} + +#[test] +fn domain_detector_resolves_root_and_current_relative_path_tokens() { + let dot_md = ".md"; + let dot_rs = ".rs"; + for (path, contents, referenced_paths) in [ + ( + ["README", dot_md].concat(), + format!("See README{dot_md} and `CONTRIBUTING{dot_md}`.\n"), + vec![["CONTRIBUTING", dot_md].concat()], + ), + ( + ["build", dot_rs].concat(), + format!("let path = \"build{dot_rs}\";\n"), + Vec::new(), + ), + ( + ["docs/configuration", dot_md].concat(), + format!("[start](getting-started{dot_md}) and ../CONTRIBUTING{dot_md}\n"), + vec![ + ["docs/getting-started", dot_md].concat(), + ["CONTRIBUTING", dot_md].concat(), + ], + ), + ( + ".gitignore".to_owned(), + format!("docs/configuration{dot_md}\n"), + vec![["docs/configuration", dot_md].concat()], + ), + ( + "script.sh".to_owned(), + format!("cat README{dot_md}\n"), + vec![["README", dot_md].concat()], + ), + ] { + let repository = TestRepository::new(&path, contents.as_bytes(), "text"); + for referenced_path in referenced_paths { + repository.add_text(&referenced_path, "no findings\n"); + } + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "{path}: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn source_domain_context_persists_across_lines_and_rejects_members() { + let member_one = ["prediction", ".name"].concat(); + let member_two = ["state.settings.ec", ".partners"].concat(); + let member_three = ["document", ".body"].concat(); + let member_four = ["result", ".contains"].concat(); + let host = ["service.example", ".rs"].concat(); + for (path, contents) in [ + ( + "main.rs", + format!( + "let plain = {member_one};\nlet nested = {member_two};\nlet body = {member_three};\nlet result = {member_four}(value);\nlet host = \"\n{host}\";\n// {host}\n" + ), + ), + ( + "app.js", + format!( + "const plain = {member_one};\nconst nested = {member_two};\nconst body = {member_three};\nconst result = {member_four}(value);\nconst host = `\n{host}`;\n// {host}\n" + ), + ), + ] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!( + status_code(&result), + SUCCESS, + "{path}: {}", + diagnostic(&result) + ); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 2, + "only the string and comment hosts must be findings: {manifest}" + ); + } +} + +#[test] +fn source_member_evidence_does_not_suppress_documented_host_shaped_tokens() { + let member_one = ["prediction", ".name"].concat(); + let member_two = ["state.settings.ec", ".partners"].concat(); + let host = ["service.example", ".rs"].concat(); + let contents = format!("`{member_one}` and `{member_two}` are members; `{host}` is a host.\n"); + let repository = TestRepository::new("README.md", contents.as_bytes(), "text"); + repository.add_text( + "src/main.rs", + &format!("let first = {member_one};\nlet second = {member_two};\n"), + ); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 3, + "source expressions must not suppress separate README occurrences: {manifest}" + ); + assert!(manifest.contains(&fingerprint(host.as_bytes()))); +} + +#[test] +fn markdown_prose_grammar_never_substitutes_for_harvested_member_evidence() { + let project = ["getpurpose", ".ai"].concat(); + let vendor = ["vendor.example", ".co.uk"].concat(); + let internal = ["Portal.Private-Corp", ".Internal"].concat(); + let assignment = ["endpoint.example", ".co.uk"].concat(); + let member = ["model", ".name"].concat(); + let readme = format!( + "{project} is the project host.\n{vendor}:443\n{internal} is reachable.\n\ + {assignment} = documented endpoint\n\ + `{member}`\n```js\n{member}\n```\n{member} is a reachable host.\n" + ); + let repository = TestRepository::new("README.md", readme.as_bytes(), "text"); + repository.add_text( + "src/main.js", + &format!("const first = {member};\nconst second = {member};\n"), + ); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 5, + "four prose hosts and the identical member-shaped prose host must remain; harvested inline/fenced expressions must be suppressed: {manifest}" + ); + for host in [&project, &vendor, &internal, &assignment, &member] { + assert!( + manifest.contains(&fingerprint(host.as_bytes())), + "missing prose host {host}" + ); + } +} + +#[test] +fn source_member_suppression_is_occurrence_specific() { + let host = ["service.example", ".rs"].concat(); + let readme = format!("{host} in prose, `{host}` in code markup.\n"); + let source = format!("let member = {host};\nlet string = \"{host}\";\n// {host}\n"); + let repository = TestRepository::new("README.md", readme.as_bytes(), "text"); + repository.add_text("src/main.rs", &source); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 4, + "README prose/markup and source string/comment must remain findings; only the expression is suppressed: {manifest}" + ); +} + +#[test] +fn invalid_url_templates_do_not_create_domain_findings() { + let repository = TestRepository::new("main.rs", b"let url = \"http://{\";\n", "text"); + + let result = repository.scan(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); +} + +#[test] +fn reserved_and_local_domain_hosts_do_not_require_exceptions() { + let contents = b"https://service.example/path\nhttps://service.invalid/path\nhttps://service.test/path\nhttps://service.localhost/path\nhttps://example.com/path\nhttps://example.net/path\nhttps://example.org/path\nperson@service.example\nperson@service.invalid\nperson@service.test\nperson@service.localhost\n"; + let repository = TestRepository::new("notes.txt", contents, "text"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "RFC-reserved and local hosts are synthetic: {}", + diagnostic(&result) + ); +} + +#[test] +fn email_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("person@{}", "private-corp.internal"); + assert_detected("notes.txt", value.as_bytes(), "text", "email"); + assert_allowlisted( + "tests/email.txt", + value.as_bytes(), + "text", + "email", + &value, + "historical_example", + ); +} + +#[test] +fn email_detector_ignores_url_userinfo_and_at_sign_filenames() { + let value = format!("https://user:pass@portal.{}", "private-corp.internal"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "vendor_url", + "notes.txt", + "domain", + value.as_bytes(), + &value, + "2099-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "URL substrings are not email addresses: {}", + diagnostic(&result) + ); + + let path_email = format!( + "https://cdn.{}/{}@{}", + "private-corp.internal", "banner", "2x.jpg" + ); + let repository = TestRepository::new("notes.txt", path_email.as_bytes(), "text"); + assert_eq!(status_code(&repository.bootstrap()), SUCCESS); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert!(!manifest.contains("detector = \"email\"")); +} + +#[test] +fn url_authority_overlap_does_not_hide_query_or_fragment_findings() { + let value = format!( + "https://example.com/path/{0}?host={0} https://example.com/#contact=person@{0}", + "private-corp.internal" + ); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + assert_eq!(status_code(&repository.bootstrap()), SUCCESS); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!(manifest.matches("detector = \"email\"").count(), 1); + assert_eq!(manifest.matches("detector = \"domain\"").count(), 2); +} + +#[test] +fn url_path_components_use_normal_domain_context_rules() { + let value = "https://example.com/rust-lang/crates.io-index/CONTRIBUTING.md/function.prototype.name/gpt.rs/mod.rs/prebid.rs"; + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + assert_eq!(status_code(&repository.bootstrap()), SUCCESS); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!(manifest.matches("detector = \"domain\"").count(), 0); +} + +#[test] +fn credential_shape_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = "super-secret-value-123"; + let contents = format!("api_secret = \"{value}\"\n"); + assert_detected( + "fixture.toml", + contents.as_bytes(), + "text", + "credential_shape", + ); + assert_allowlisted( + "tests/fixture.toml", + contents.as_bytes(), + "text", + "credential_shape", + value, + "hash_pinned_fake_credential_fixture", + ); +} + +#[test] +fn credential_shape_detects_quoted_and_unquoted_digitless_values() { + let key = ["pass", "word"].concat(); + for contents in [ + format!("{key}=abcdefghijklmnop\n"), + format!("{key}='abcdefghijklmnop'\n"), + format!("{key}=abcdefghijklmnop123\n"), + format!("{key}=\"abcdefghijklmnop123\"\n"), + ] { + assert_detected(".env", contents.as_bytes(), "text", "credential_shape"); + } +} + +#[test] +fn credential_shape_keeps_config_punctuation_values() { + for value in [ + "abcdefghijkl::mn", + "abcdefghijkl.mn", + "abcdefghijkl-mn", + "!abcdefghijklmnop", + "abc!def@ghi$jklmnop", + ] { + let contents = format!("password={value}\n"); + for path in [".env", "notes.txt"] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + assert_eq!(status_code(&repository.bootstrap()), SUCCESS); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert!( + manifest.contains("detector = \"credential_shape\""), + "punctuation-bearing credential must be retained in {path}: {manifest}" + ); + } + } +} + +#[test] +fn credential_shape_detector_ignores_source_expressions() { + let contents = br#" +let password = credentials_parts.next()?.to_owned(); +let credential = bypass.credential_secret_name.as_ref(); +original.handlers[0].password = Redacted::new("true".to_string()); +"#; + let repository = TestRepository::new("fixture.rs", contents, "text"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "source expressions are not credential values: {}", + diagnostic(&result) + ); +} + +#[test] +fn service_id_detector_has_positive_and_exact_expiry_allowlisted_fixtures() { + let value = "AbCdEf1234567890GhIj"; + let contents = format!("service_id = \"{value}\"\n"); + assert_detected("fastly.toml", contents.as_bytes(), "text", "service_id"); + + let repository = TestRepository::new("fastly.toml", contents.as_bytes(), "text"); + let mut record = exception_for_contents( + "service_id", + "fastly.toml", + "service_id", + contents.as_bytes(), + value, + "2026-09-30T00:00:00Z", + ); + record = record.replace("owner = \"docs-owner\"", "owner = \"aram356\""); + repository.write_allowlist(&record); + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "approved service exception should pass before expiry: {}", + diagnostic(&result) + ); +} + +#[test] +fn encoded_token_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = "QWxhZGRpbjpvcGVuIHNlc2FtZTEyMzQ1Njc4OTA="; + let contents = format!("encoded_token = \"{value}\"\n"); + assert_detected("fixture.toml", contents.as_bytes(), "text", "encoded_token"); + assert_allowlisted( + "tests/fixture.toml", + contents.as_bytes(), + "text", + "encoded_token", + value, + "hash_pinned_fake_credential_fixture", + ); +} + +#[test] +fn binary_string_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("https://binary.{}", "private-corp.internal/asset"); + let mut contents = vec![0, 1, 2]; + contents.extend_from_slice(value.as_bytes()); + contents.extend_from_slice(&[0, 255]); + assert_detected("asset.bin", &contents, "binary", "binary_string"); + assert_allowlisted( + "asset.bin", + &contents, + "binary", + "binary_string", + &value, + "vendor_url", + ); +} + +#[test] +fn structured_lockfile_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("https://user:secret@{}/pkg.tgz", "private-corp.internal"); + let contents = format!( + "{{\"lockfileVersion\":3,\"packages\":{{\"node_modules/pkg\":{{\"resolved\":\"{value}\"}}}}}}" + ); + assert_detected( + "package-lock.json", + contents.as_bytes(), + "text", + "lockfile_field", + ); + assert_allowlisted( + "package-lock.json", + contents.as_bytes(), + "text", + "lockfile_field", + &value, + "vendor_url", + ); +} + +#[test] +fn lockfiles_scan_non_url_secrets_and_select_the_structured_value_occurrence() { + let secret = "fake-credential-value-123"; + let cargo = format!("version = 3\npassword = \"{secret}\"\n"); + assert_detected("Cargo.lock", cargo.as_bytes(), "text", "credential_shape"); + + let value = format!("https://user:secret@{}/pkg.tgz", "private-corp.internal"); + let contents = format!("{{\"description\":\"{value}\",\"resolved\":\"{value}\"}}"); + let repository = TestRepository::new("package-lock.json", contents.as_bytes(), "text"); + let result = repository.bootstrap(); + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + let second = contents + .rfind(&value) + .expect("resolved occurrence should exist"); + assert!(manifest.contains(&format!("detector = \"lockfile_field\"\nscope = \"exact-occurrence\"\nselector = \"bytes:{second}-{}\"", second + value.len())), "structured selector must identify the resolved value: {manifest}"); +} + +#[test] +fn lockfiles_scan_domains_outside_structural_fields_without_duplicate_structural_hosts() { + let prose_host = ["service.example", ".rs"].concat(); + let registry_host = ["registry.private-corp", ".internal"].concat(); + for (path, contents) in [ + ( + "package-lock.json", + format!( + "{{\"description\":\"https://{prose_host}/private\",\"resolved\":\"https://{registry_host}/pkg\"}}" + ), + ), + ( + "Cargo.lock", + format!( + "version = 3\ndescription = \"https://{prose_host}/private\"\nsource = \"https://{registry_host}/pkg\"\n" + ), + ), + ] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!( + status_code(&result), + SUCCESS, + "{path}: {}", + diagnostic(&result) + ); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest.matches("detector = \"domain\"").count(), + 1, + "nonstructural fields must receive general domain scanning without duplicating the structured host: {manifest}" + ); + assert_eq!( + manifest.matches("detector = \"lockfile_field\"").count(), + 1, + "the structural field must retain its exact lockfile finding: {manifest}" + ); + } +} + +#[test] +fn structured_lockfiles_fail_closed_on_non_string_and_duplicate_url_fields() { + for contents in [ + "version = 3\n\"source\" = \"https://private-corp.internal/index\"\n", + "version = 3\npackage = { source = \"https://private-corp.internal/index\" }\n", + "version = 3\npackage.source = \"https://private-corp.internal/index\"\n", + ] { + assert_detected("Cargo.lock", contents.as_bytes(), "text", "lockfile_field"); + } + for contents in [ + r#"{"resolved":null}"#, + r#"{"resolved":{}}"#, + r#"{"resolved":[]}"#, + r#"{"resolved":42}"#, + r#"{"resolved":"https://one.private-corp.internal","resolved":"https://two.private-corp.internal"}"#, + ] { + let repository = TestRepository::new("package-lock.json", contents.as_bytes(), "text"); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR, "{contents}"); + } + for contents in [ + "version = 3\nsource = []\n", + "version = 3\nsource = \"https://one.private-corp.internal\"\nsource = \"https://two.private-corp.internal\"\n", + ] { + let repository = TestRepository::new("Cargo.lock", contents.as_bytes(), "text"); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR, "{contents}"); + } +} + +#[test] +fn cargo_lock_structural_fields_follow_toml_semantics() { + let sensitive = "https://private-corp.internal/index"; + for contents in [ + format!("version = 3\n'source' = '{sensitive}'\n"), + format!("version = 3\n\"source\" = \"{sensitive}\"\n"), + format!("version = 3\npackage.\"source\" = \"{sensitive}\"\n"), + format!("version = 3\npackage = {{ metadata = {{ source = \"{sensitive}\" }} }}\n"), + format!("version = 3\n[[package]]\nsource = \"{sensitive}\"\n"), + ] { + assert_detected("Cargo.lock", contents.as_bytes(), "text", "lockfile_field"); + } +} + +#[test] +fn cargo_lock_ignores_field_decoys_in_comments_and_strings() { + for contents in [ + "version = 3\n# source = \"https://private-corp.internal/index\"\n", + "version = 3\ndescription = 'source = \"https://private-corp.internal/index\"'\n", + "version = 3\nlabel = \"source\"\ndescription = \"https://private-corp.internal/index\"\n", + ] { + let repository = TestRepository::new("Cargo.lock", contents.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!( + status_code(&result), + SUCCESS, + "field-like TOML text must remain general scan input: {contents}: {}", + diagnostic(&result) + ); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!(manifest.matches("detector = \"domain\"").count(), 1); + assert_eq!(manifest.matches("detector = \"lockfile_field\"").count(), 0); + } +} + +#[test] +fn cargo_lock_rejects_non_string_containers_and_duplicate_fields() { + for contents in [ + "version = 3\nsource = []\n", + "version = 3\nsource = {}\n", + "version = 3\nsource = { url = \"https://private-corp.internal/index\" }\n", + "version = 3\nsource = \"https://one.private-corp.internal\"\nsource = \"https://two.private-corp.internal\"\n", + "version = 3\npackage = { source = \"https://one.private-corp.internal\", source = \"https://two.private-corp.internal\" }\n", + ] { + let repository = TestRepository::new("Cargo.lock", contents.as_bytes(), "text"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + ERROR, + "unsupported or ambiguous field must fail closed: {contents}" + ); + } +} + +#[test] +fn cargo_lock_structural_selector_uses_the_ast_value_span() { + let sensitive = "https://private-corp.internal/index"; + let escaped = r#"https://private-corp.internal/\u0069ndex"#; + for (contents, raw) in [ + ( + format!("version = 3\ndescription = \"{sensitive}\"\nsource = \"{sensitive}\"\n"), + sensitive, + ), + (format!("version = 3\nsource = \"{escaped}\"\n"), escaped), + ] { + let repository = TestRepository::new("Cargo.lock", contents.as_bytes(), "text"); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + let start = contents + .rfind(raw) + .expect("structural raw value should exist"); + assert!( + manifest.contains(&format!( + "selector = \"bytes:{start}-{}\"\nfingerprint = \"{}\"", + start + raw.len(), + fingerprint(raw.as_bytes()) + )), + "selector must identify and fingerprint exact raw string content: {manifest}" + ); + } +} + +#[test] +fn escaped_json_lockfield_fingerprints_the_exact_selected_bytes() { + let raw = r#"https:\/\/user:secret@private-corp.internal\/pkg"#; + let contents = format!(r#"{{"resolved":"{raw}"}}"#); + let repository = TestRepository::new("package-lock.json", contents.as_bytes(), "text"); + let result = repository.bootstrap(); + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("manifest"); + assert!( + manifest.contains(&fingerprint(raw.as_bytes())), + "raw selected bytes must be fingerprinted: {manifest}" + ); +} + +#[test] +fn media_metadata_detector_has_positive_and_typed_allowlisted_fixtures() { + let value = format!("person@{}", "private-corp.internal"); + let contents = png_text_chunk("Author", &value); + assert_detected("asset.png", &contents, "binary", "media_metadata"); + assert_allowlisted( + "tests/asset.png", + &contents, + "binary", + "media_metadata", + &value, + "historical_example", + ); +} + +#[test] +fn compressed_png_metadata_fails_closed() { + let mut png = b"\x89PNG\r\n\x1a\n".to_vec(); + append_png_chunk(&mut png, b"IHDR", &[0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0, 0, 0]); + let mut metadata = b"Comment\0\0".to_vec(); + metadata.extend_from_slice(&[0x78, 0x9c, 3, 0, 0, 0, 0, 1]); + append_png_chunk(&mut png, b"zTXt", &metadata); + append_png_chunk(&mut png, b"IEND", &[]); + let repository = TestRepository::new("asset.png", &png, "binary"); + let result = repository.scan(); + assert_eq!(status_code(&result), ERROR); + assert!(diagnostic(&result).contains("compressed PNG zTXt")); +} + +#[test] +fn png_text_keywords_enforce_printable_latin1_spacing_grammar() { + for keyword in [ + vec![1], + vec![0x7f], + vec![0x80], + vec![0x9f], + b" leading".to_vec(), + b"trailing ".to_vec(), + b"double space".to_vec(), + Vec::new(), + vec![b'a'; 80], + ] { + let mut data = keyword; + data.push(0); + data.extend_from_slice(b"person@private-corp.internal"); + let png = png_with_chunk(b"tEXt", &data); + assert_eq!( + status_code(&TestRepository::new("asset.png", &png, "binary").scan()), + ERROR + ); + } + let mut missing_separator = b"Keyword".to_vec(); + missing_separator.extend_from_slice(b"person@private-corp.internal"); + let png = png_with_chunk(b"tEXt", &missing_separator); + assert_eq!( + status_code(&TestRepository::new("asset.png", &png, "binary").scan()), + ERROR + ); + + for keyword in [b"Single space".as_slice(), &[0xa1, b'K'][..]] { + let mut data = keyword.to_vec(); + data.push(0); + data.extend_from_slice(b"person@private-corp.internal"); + let png = png_with_chunk(b"tEXt", &data); + let repository = TestRepository::new("asset.png", &png, "binary"); + assert_eq!(status_code(&repository.bootstrap()), SUCCESS); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert!(manifest.contains("detector = \"media_metadata\"")); + } +} + +#[test] +fn identical_media_and_non_metadata_binary_values_remain_distinct_occurrences() { + let value = format!("person@{}", "private-corp.internal"); + let mut contents = png_text_chunk("Author", &value); + contents.truncate(contents.len() - 12); + let mut ancillary = vec![0]; + ancillary.extend_from_slice(value.as_bytes()); + append_png_chunk(&mut contents, b"vpAg", &ancillary); + append_png_chunk(&mut contents, b"IEND", &[]); + let repository = TestRepository::new("asset.png", &contents, "binary"); + let result = repository.bootstrap(); + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert!(manifest.contains("detector = \"media_metadata\"")); + assert!(manifest.contains("detector = \"binary_string\"")); +} + +#[test] +fn retired_identifier_and_access_phrase_have_positive_and_allowlisted_fixtures() { + for (kind, value) in [ + ("identifier", "retired-integration-name"), + ("access_phrase", "Ask the internal team for access"), + ] { + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + repository.write_denylist(&retired_record(kind, value)); + let failed = repository.scan(); + assert_eq!(status_code(&failed), ERROR, "denylist match should fail"); + assert!( + diagnostic(&failed).contains("sensitive finding [retired_identifier] in notes.txt"), + "diagnostic should identify denylist finding: {}", + diagnostic(&failed) + ); + + repository.write_allowlist(&exception( + "historical_example", + "notes.txt", + "retired_identifier", + value, + "2099-01-01T00:00:00Z", + )); + let allowed = repository.scan(); + assert_eq!( + status_code(&allowed), + SUCCESS, + "narrow historical exception should pass: {}", + diagnostic(&allowed) + ); + } +} + +#[test] +fn real_retired_manifest_contains_no_retired_plaintext() { + let manifest = fs::read_to_string( + Path::new(env!("CARGO_MANIFEST_DIR")).join("manifests/retired-identifiers.toml"), + ) + .expect("should read real retired manifest"); + let expected_fingerprints = [ + "sha256:9d155035a90b33ea3c44f8ebfc4bad1c3a806cc5e9236fe342d07d620ca5264a", + "sha256:a23c8f7a72d4ed48ef48e0d65fcb7e5b3de28b37bce3c18c4a027d38e5b97b69", + "sha256:47e9ab61971c8228ee3a5a7e4e7f492a8a7d2ed05000612351d2798a1ecfc5d5", + "sha256:262d2f5569ef006ffeb288d606696f930c70dbeec9986ae066554a1b7ba4348c", + "sha256:d7ead80b23e0925b55d81d235f4ec7789ef76bbc39b64bd4856858607005a45e", + "sha256:fabebfaf9f751578404dade1f6911c5211e55112155cd1eb37742ab5eeaa29f5", + "sha256:c85965885f1663af8d435525074cc6a70c1548b8e310220540502b6a0e35def2", + "sha256:3ced6222be77642263490f3cf2bd0a95b276965f2f85586d1d7a32c7c3219e0c", + "sha256:524b06e6a628b58b984b7e29c803bf378268afd683b9941d11b88c68251cdc58", + "sha256:2c40b81f8f43edb238641a6bd9c8439a028c11c83ffe46e6c5aee6190cc65210", + ]; + assert!( + !manifest.lines().any(|line| line.starts_with("value = ")), + "real denylist must contain fingerprints, never retired plaintext fields" + ); + assert_eq!( + manifest.matches("[[identifiers]]").count(), + expected_fingerprints.len(), + "real denylist should contain the exact reviewed fingerprint set" + ); + for fingerprint in expected_fingerprints { + assert!( + manifest.contains(fingerprint), + "real denylist must contain each reviewed fingerprint" + ); + } +} + +#[test] +fn real_domain_manifest_excludes_repository_member_and_path_tokens() { + let crate_root = Path::new(env!("CARGO_MANIFEST_DIR")); + let repository_root = crate_root + .parent() + .and_then(Path::parent) + .expect("tool should live below the repository root"); + let manifest_text = fs::read_to_string(crate_root.join("manifests/sensitive-allowlist.toml")) + .expect("should read real sensitive manifest"); + let manifest: toml::Value = + toml::from_str(&manifest_text).expect("real sensitive manifest should be TOML"); + let forbidden = [ + ["function.prototype", ".name"].concat(), + ["prebid", ".rs"].concat(), + ["ec", ".partners"].concat(), + ["when", ".zone"].concat(), + ["script", ".sh"].concat(), + ["slot", ".id"].concat(), + ["user", ".id"].concat(), + ["synthetic", ".rs"].concat(), + ["AuctionRequest", ".id"].concat(), + ["onboarding", ".md"].concat(), + ["site", ".page"].concat(), + ["seatbid", ".seat"].concat(), + ["mediaTypes.banner", ".name"].concat(), + ]; + for exception in manifest["exceptions"] + .as_array() + .expect("manifest exceptions should be an array") + { + if exception["detector"].as_str() != Some("domain") { + continue; + } + let path = exception["path"].as_str().expect("exception path"); + let selector = exception["selector"] + .as_str() + .expect("exception selector") + .strip_prefix("bytes:") + .expect("byte selector"); + let (start, end) = selector.split_once('-').expect("selector range"); + let bytes = fs::read(repository_root.join(path)).expect("selected path should exist"); + let selected = &bytes[start.parse::().expect("start offset") + ..end.parse::().expect("end offset")]; + assert!( + !forbidden.iter().any(|value| selected == value.as_bytes()), + "repository member/path token must not be a domain finding: {path}:{selector}" + ); + } +} + +#[test] +fn retired_kind_rejects_mislabeled_normalization_shapes() { + for (kind, value, expected) in [ + ( + "identifier", + "multiple retired words", + "identifier denylist record must contain exactly one token", + ), + ( + "access_phrase", + "single-token", + "access-phrase denylist record must contain multiple words", + ), + ] { + let repository = TestRepository::new("notes.txt", b"example.com\n", "text"); + repository.write_denylist(&retired_record(kind, value)); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "mislabeled shape should fail"); + assert!( + diagnostic(&result).contains(expected), + "diagnostic should identify kind/shape mismatch: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn retired_phrase_matching_does_not_join_code_fragments_across_punctuation() { + let phrase = ["Review access through approved", "channel"].join(" "); + let source = r#""Review access through approved " + "channel""#; + let repository = TestRepository::new("audit.txt", source.as_bytes(), "text"); + repository.write_denylist(&retired_record("access_phrase", &phrase)); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "punctuation-separated source fragments are not the retired prose: {}", + diagnostic(&result) + ); +} + +#[test] +fn retired_identifier_matching_trims_common_prose_and_markdown_punctuation() { + let token = "OldSecretTerm"; + let punctuation = [ + '.', ',', ';', ':', '!', '?', '(', ')', '[', ']', '{', '}', '<', '>', '"', '\'', '`', '*', + '~', '|', + ]; + let contents = punctuation + .iter() + .map(|boundary| format!("{boundary}{token}{boundary}")) + .collect::>() + .join(" "); + let repository = TestRepository::new("audit.md", contents.as_bytes(), "text"); + repository.write_denylist(&retired_record("identifier", token)); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest + .matches("detector = \"retired_identifier\"") + .count(), + punctuation.len(), + "every punctuation-delimited occurrence must hash-match case-insensitively: {manifest}" + ); +} + +#[test] +fn retired_identifier_matches_paired_markdown_delimiters_without_joining() { + let token = "OldSecretTerm"; + let contents = format!("**{token}** ~~{token}~~ |{token}| Old*SecretTerm"); + let repository = TestRepository::new("audit.md", contents.as_bytes(), "text"); + repository.write_denylist(&retired_record("identifier", token)); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + assert_eq!( + manifest + .matches("detector = \"retired_identifier\"") + .count(), + 3, + "paired Markdown delimiters must match without joining across punctuation: {manifest}" + ); +} + +#[test] +fn binary_retired_selectors_preserve_original_byte_offsets_across_invalid_utf8() { + let token = "OldSecretTerm"; + let mut contents = vec![0xff]; + contents.extend_from_slice(token.as_bytes()); + contents.push(0xfe); + contents.extend_from_slice(token.as_bytes()); + let repository = TestRepository::new("archive.bin", &contents, "binary"); + repository.write_denylist(&retired_record("identifier", token)); + + let result = repository.bootstrap(); + + assert_eq!(status_code(&result), SUCCESS, "{}", diagnostic(&result)); + let manifest = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read bootstrap manifest"); + let second_start = 1 + token.len() + 1; + for start in [1, second_start] { + assert!( + manifest.contains(&format!( + "selector = \"bytes:{start}-{}\"\nfingerprint = \"{}\"", + start + token.len(), + fingerprint(token.as_bytes()) + )), + "retired selector must use original binary offsets: {manifest}" + ); + } +} + +fn retired_record(kind: &str, value: &str) -> String { + let normalized = value + .split_whitespace() + .collect::>() + .join(" ") + .to_ascii_lowercase(); + format!( + "version = 1\nreviewed = true\n\n[[identifiers]]\nkind = \"{kind}\"\nfingerprint = \"{}\"\nnormalized_length = {}\nword_count = {}\ncase_insensitive = true\nwhitespace_tolerant = {}\n", + fingerprint(normalized.as_bytes()), + normalized.len(), + normalized.split_whitespace().count(), + normalized.split_whitespace().count() > 1, + ) +} + +#[test] +fn all_six_exception_classes_are_supported_with_narrow_detector_pairings() { + let fixtures = [ + ("vendor_url", "domain", "notes.txt"), + ( + "hash_pinned_fake_credential_fixture", + "credential_shape", + "tests/fixture.rs", + ), + ( + "settings_schema_identifier", + "credential_shape", + "tools/docs-parity/manifests/settings-companions.toml", + ), + ("historical_example", "email", "tests/archive.txt"), + ("project_owned_public_domain", "domain", "notes.txt"), + ]; + for (class, detector, path) in fixtures { + let value = match (class, detector) { + ("project_owned_public_domain", "domain") => { + format!( + "https://{}/trusted-server/", + ["iabtechlab.github", ".io"].concat() + ) + } + (_, "domain") => format!("https://owned.{}", ["private-corp", ".internal"].concat()), + ("settings_schema_identifier", "credential_shape") => "store_resolved".to_owned(), + (_, "credential_shape") => "fake-credential-value-123".to_owned(), + (_, "email") => format!("archived@{}", ["private-corp", ".internal"].concat()), + (_, "service_id") => "AbCdEf1234567890GhIj".to_owned(), + _ => unreachable!("fixture detector should be known"), + }; + let contents = match detector { + "credential_shape" => format!("secret = \"{value}\""), + "service_id" => format!("service_id = \"{value}\""), + _ => value.clone(), + }; + assert_allowlisted(path, contents.as_bytes(), "text", detector, &value, class); + } +} + +#[test] +fn service_id_exception_rejects_inexact_path_owner_or_expiry() { + let value = "AbCdEf1234567890GhIj"; + let contents = format!("service_id = \"{value}\"\n"); + for (path, owner, expiry, expected) in [ + ( + "nested/fastly.toml", + "aram356", + "2026-09-30T00:00:00Z", + "service-ID exception path must be exactly fastly.toml", + ), + ( + "fastly.toml", + "docs-owner", + "2026-09-30T00:00:00Z", + "service-ID exception owner must be aram356", + ), + ( + "fastly.toml", + "aram356", + "2026-10-01T00:00:00Z", + "service-ID exception expiry must be 2026-09-30T00:00:00Z", + ), + ] { + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + let mut record = exception_for_contents( + "service_id", + path, + "service_id", + contents.as_bytes(), + value, + expiry, + ); + record = record.replace("owner = \"docs-owner\"", &format!("owner = \"{owner}\"")); + repository.write_allowlist(&record); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + ERROR, + "inexact service record should fail" + ); + assert!( + diagnostic(&result).contains(expected), + "diagnostic should identify the exact service rule: {}", + diagnostic(&result) + ); + } +} + +#[test] +fn expired_exception_fails_at_and_after_its_expiry() { + let value = format!("https://expired.{}", "private-corp.internal"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + repository.write_allowlist(&exception( + "vendor_url", + "notes.txt", + "domain", + &value, + "2000-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "expired entry should fail"); + assert!( + diagnostic(&result).contains("expired sensitive-data exception"), + "diagnostic should identify expiry: {}", + diagnostic(&result) + ); +} + +#[test] +fn stale_fingerprint_fails_closed() { + let value = format!("https://changed.{}", "private-corp.internal"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + repository.write_allowlist(&exception( + "vendor_url", + "notes.txt", + "domain", + "https://stale.private-corp.internal", + "2099-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "stale hash should fail"); + assert!( + diagnostic(&result).contains("sensitive finding [domain] in notes.txt"), + "stale hash should leave finding unallowlisted: {}", + diagnostic(&result) + ); +} + +#[test] +fn renamed_path_fails_closed() { + let value = format!("https://renamed.{}", "private-corp.internal"); + let repository = TestRepository::new("renamed.txt", value.as_bytes(), "text"); + repository.write_allowlist(&exception( + "vendor_url", + "original.txt", + "domain", + &value, + "2099-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "renamed path should fail"); + assert!( + diagnostic(&result).contains("sensitive finding [domain] in renamed.txt"), + "renamed path should not inherit an exception: {}", + diagnostic(&result) + ); +} + +#[test] +fn broad_domain_exception_is_rejected() { + let value = format!("https://broad.{}", "private-corp.internal"); + let repository = TestRepository::new("notes.txt", value.as_bytes(), "text"); + repository.write_allowlist(&exception( + "vendor_url", + "*.txt", + "domain", + &value, + "2099-01-01T00:00:00Z", + )); + + let result = repository.scan(); + + assert_eq!(status_code(&result), ERROR, "broad path should fail"); + assert!( + diagnostic(&result).contains("exception path must be an exact normalized path"), + "diagnostic should reject broad scope: {}", + diagnostic(&result) + ); +} + +#[test] +fn check_mode_never_writes_manifest_bytes() { + let repository = TestRepository::new("notes.txt", b"example.com\n", "text"); + let manifest_path = repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"); + let before = fs::read(&manifest_path).expect("should read allowlist before check"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "fictional content should be clean: {}", + diagnostic(&result) + ); + assert_eq!( + fs::read(&manifest_path).expect("should read allowlist after check"), + before, + "check mode should not write" + ); +} + +#[test] +fn bootstrap_writes_governed_candidates_but_never_self_approves_them() { + let value = "AbCdEf1234567890GhIj"; + let contents = format!("service_id = \"{value}\"\n"); + let repository = TestRepository::new("fastly.toml", contents.as_bytes(), "text"); + + let bootstrapped = repository.bootstrap(); + let allowlist_path = repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"); + let candidates = fs::read_to_string(&allowlist_path).expect("should read candidates"); + let checked = repository.scan(); + + assert_eq!( + status_code(&bootstrapped), + SUCCESS, + "bootstrap should succeed: {}", + diagnostic(&bootstrapped) + ); + assert!( + candidates.contains("reviewed = false") + && candidates.contains("class = \"service_id\"") + && candidates.contains("path = \"fastly.toml\"") + && candidates.contains("owner = \"aram356\"") + && candidates.contains("expires_at = \"2026-09-30T00:00:00Z\"") + && !candidates.contains("REVIEW_REQUIRED"), + "bootstrap should emit complete but unattested governance: {candidates}" + ); + assert_eq!( + status_code(&checked), + ERROR, + "unreviewed candidate manifest should fail check" + ); + assert!( + diagnostic(&checked).contains("sensitive-data candidates require review"), + "diagnostic should require review attestation: {}", + diagnostic(&checked) + ); +} + +#[test] +fn bootstrap_ignores_derived_governance_fields_and_is_byte_stable() { + let repository = TestRepository::new( + "tools/docs-parity/manifests/sensitive-allowlist.toml", + b"version = 1\n", + "text", + ); + repository.write_allowlist(&format!( + "version = 1\nreviewed = true\n\n[[exceptions]]\nclass = \"vendor_url\"\npath = \"fixtures/example.test.ts\"\ndetector = \"domain\"\nscope = \"exact-occurrence\"\nselector = \"bytes:1-2\"\nfingerprint = \"{}\"\nowner = \"docs-owner\"\nrationale = \"Reviewed exact fixture occurrence.\"\nexpires_at = \"2099-01-01T00:00:00Z\"\n", + fingerprint(b"x") + )); + + let first_result = repository.bootstrap(); + let allowlist_path = repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"); + let first = fs::read(&allowlist_path).expect("should read first bootstrap"); + let second_result = repository.bootstrap(); + let second = fs::read(&allowlist_path).expect("should read second bootstrap"); + + assert_eq!( + status_code(&first_result), + SUCCESS, + "first bootstrap should succeed: {}", + diagnostic(&first_result) + ); + assert_eq!( + status_code(&second_result), + SUCCESS, + "second bootstrap should succeed: {}", + diagnostic(&second_result) + ); + assert_eq!( + String::from_utf8(first.clone()) + .expect("candidate manifest should be UTF-8") + .matches("[[exceptions]]") + .count(), + 0, + "a governance path field must not become repository content" + ); + assert_eq!(first, second, "a second bootstrap must be byte-stable"); +} + +#[test] +fn governance_free_text_cannot_hide_sensitive_content() { + let repository = TestRepository::new("notes.txt", b"safe fixture\n", "text"); + let sensitive = format!("https://governance.{}", "private-corp.internal"); + repository.write_allowlist(&format!( + "version = 1\nreviewed = true\n\n[[exceptions]]\nclass = \"vendor_url\"\npath = \"notes.txt\"\ndetector = \"domain\"\nscope = \"exact-occurrence\"\nselector = \"bytes:0-1\"\nfingerprint = \"{}\"\nowner = \"docs-owner\"\nrationale = \"Reviewed at {sensitive}.\"\nexpires_at = \"2099-01-01T00:00:00Z\"\n", + fingerprint(b"x") + )); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + ERROR, + "sensitive rationale should fail" + ); + assert!( + diagnostic(&result).contains("sensitive value in governance free-text"), + "diagnostic should reject sensitive governance prose: {}", + diagnostic(&result) + ); +} + +#[test] +fn governance_comments_are_rejected_even_when_they_contain_retired_prose() { + let phrase = ["retired", "administrative", "access phrase"].join(" "); + let repository = TestRepository::new("notes.txt", b"safe fixture\n", "text"); + repository.write_denylist(&format!( + "# {phrase}\n{}", + retired_record("access_phrase", &phrase) + )); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + ERROR, + "governance comment should fail" + ); + assert!( + diagnostic(&result).contains("governance manifest must be comment-free"), + "diagnostic should reject comment-bearing governance: {}", + diagnostic(&result) + ); +} + +#[test] +fn hash_characters_inside_governance_strings_are_not_comments() { + let repository = TestRepository::new("notes#fixture.txt", b"safe fixture\n", "text"); + + let result = repository.scan(); + + assert_eq!( + status_code(&result), + SUCCESS, + "a quoted hash should remain valid TOML data: {}", + diagnostic(&result) + ); +} + +#[test] +fn bootstrap_preserves_exact_attestation_but_reopens_review_for_a_new_finding() { + let first_value = format!("https://first.{}", "private-corp.internal/path"); + let repository = TestRepository::new("notes.txt", first_value.as_bytes(), "text"); + let initial = repository.bootstrap(); + assert_eq!( + status_code(&initial), + SUCCESS, + "initial bootstrap should succeed: {}", + diagnostic(&initial) + ); + let allowlist_path = repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"); + let candidates = fs::read_to_string(&allowlist_path).expect("should read candidates"); + repository.write_allowlist(&candidates.replace("reviewed = false", "reviewed = true")); + let reviewed = fs::read(&allowlist_path).expect("should read reviewed allowlist"); + + let unchanged = repository.bootstrap(); + assert_eq!( + status_code(&unchanged), + SUCCESS, + "unchanged bootstrap should succeed: {}", + diagnostic(&unchanged) + ); + assert_eq!( + fs::read(&allowlist_path).expect("should reread reviewed allowlist"), + reviewed, + "an exact reviewed allowlist must remain byte-identical" + ); + + let second_value = format!("https://second.{}", "private-corp.internal/path"); + fs::write( + repository.path().join("notes.txt"), + format!("{first_value}\n{second_value}\n"), + ) + .expect("should add a finding"); + run_git(repository.path(), &["add", "--", "notes.txt"]); + let updated = repository.bootstrap(); + let updated_allowlist = + fs::read_to_string(&allowlist_path).expect("should read updated allowlist"); + let checked = repository.scan(); + + assert_eq!( + status_code(&updated), + SUCCESS, + "updated bootstrap should succeed: {}", + diagnostic(&updated) + ); + assert!( + updated_allowlist.contains("reviewed = false") + && updated_allowlist.matches("[[exceptions]]").count() == 2, + "a new finding must reopen the complete candidate set: {updated_allowlist}" + ); + assert_eq!( + status_code(&checked), + ERROR, + "new candidates must fail check until reviewed" + ); + assert!( + diagnostic(&checked).contains("sensitive-data candidates require review"), + "diagnostic should require renewed attestation: {}", + diagnostic(&checked) + ); +} + +#[test] +fn bootstrap_assigns_historical_and_project_owned_domain_classes() { + let historical = ["your-custom-", "domain.com"].concat(); + let project_owned = "https://iabtechlab.github.io/trusted-server/"; + let contents = format!("{historical}\n{project_owned}\n"); + let repository = TestRepository::new("notes.txt", contents.as_bytes(), "text"); + + let result = repository.bootstrap(); + let candidates = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read candidates"); + + assert_eq!( + status_code(&result), + SUCCESS, + "bootstrap should succeed: {}", + diagnostic(&result) + ); + assert_eq!( + candidates.matches("class = \"historical_example\"").count(), + 1, + "deleted CNAME literal should be historical" + ); + assert!( + candidates.contains("expires_at = \"2027-08-31T00:00:00Z\""), + "historical CNAME decision expiry should be preserved" + ); + assert_eq!( + candidates + .matches("class = \"project_owned_public_domain\"") + .count(), + 1, + "IAB GitHub Pages URL should be project-owned" + ); +} + +#[test] +fn project_owned_class_requires_an_exact_or_subdomain_host_boundary() { + let deceptive = "https://notiabtechlab.com.io/path"; + let repository = TestRepository::new("notes.txt", deceptive.as_bytes(), "text"); + + let result = repository.bootstrap(); + let candidates = fs::read_to_string( + repository + .path() + .join("tools/docs-parity/manifests/sensitive-allowlist.toml"), + ) + .expect("should read candidates"); + + assert_eq!( + status_code(&result), + SUCCESS, + "bootstrap should succeed: {}", + diagnostic(&result) + ); + assert!( + candidates.contains("class = \"vendor_url\"") + && !candidates.contains("class = \"project_owned_public_domain\""), + "lookalike host must not inherit project ownership: {candidates}" + ); +} + +#[test] +fn exception_classes_require_provable_finding_semantics() { + let private = ["owned.private-corp", ".internal"].concat(); + let private_url = format!("https://{private}/path"); + for class in ["project_owned_public_domain", "historical_example"] { + let repository = TestRepository::new("notes.txt", private_url.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + class, + "notes.txt", + "domain", + private_url.as_bytes(), + &private, + "2099-01-01T00:00:00Z", + )); + let result = repository.scan(); + assert_eq!( + status_code(&result), + ERROR, + "{class} must reject a generic vendor host" + ); + } + + let owned = ["iabtechlab.github", ".io"].concat(); + let owned_url = format!("https://{owned}/trusted-server/"); + let repository = TestRepository::new("notes.txt", owned_url.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "vendor_url", + "notes.txt", + "domain", + owned_url.as_bytes(), + &owned, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "project-owned hosts must not be mislabeled as vendors" + ); + + let credential = "abcdefghijklmnop"; + let contents = format!("{}word={credential}\n", "pass"); + let repository = TestRepository::new("notes.txt", contents.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "hash_pinned_fake_credential_fixture", + "notes.txt", + "credential_shape", + contents.as_bytes(), + credential, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "fixture credentials require fixture-path evidence" + ); + + let binary_value = format!("historical@{}", ["private-corp", ".internal"].concat()); + let mut binary = vec![0]; + binary.extend_from_slice(binary_value.as_bytes()); + binary.push(0); + let repository = TestRepository::new("archive.bin", &binary, "binary"); + repository.write_allowlist(&exception_for_contents( + "historical_example", + "archive.bin", + "binary_string", + &binary, + &binary_value, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "historical binary records require the approved artifact policy" + ); +} + +#[test] +fn fake_credential_class_requires_exact_synthetic_evidence() { + for (path, value) in [ + (".env", "latest-production-secret-123"), + ("docs/setup.md", "latest-production-secret-123"), + ("docs/setup.md", "contest-production-secret-123"), + ("docs/setup.md", "exampled-production-secret-123"), + ] { + let contents = format!("password={value}\n"); + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "hash_pinned_fake_credential_fixture", + path, + "credential_shape", + contents.as_bytes(), + value, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "arbitrary production-looking credential must not qualify in {path}" + ); + } + + for (path, value) in [ + ("tests/fixture.env", "abcdefghijklmnop123"), + ("fixtures/example.env", "abcdefghijklmnop456"), + ("config.example.toml", "abcdefghijklmnop789"), + ] { + let contents = format!("password={value}\n"); + assert_allowlisted( + path, + contents.as_bytes(), + "text", + "credential_shape", + value, + "hash_pinned_fake_credential_fixture", + ); + } +} + +#[test] +fn settings_schema_dispositions_use_only_the_exact_schema_identifier_class() { + let path = "tools/docs-parity/manifests/settings-companions.toml"; + for value in [ + "store_resolved", + "deliberately_inline", + "accepted_discarded", + ] { + let contents = format!("secret = \"{value}\"\n"); + assert_allowlisted( + path, + contents.as_bytes(), + "text", + "credential_shape", + value, + "settings_schema_identifier", + ); + } + + for (path, value) in [ + ("notes.txt", "store_resolved"), + ( + "tools/docs-parity/manifests/settings-companions.toml", + "production_secret", + ), + ] { + let contents = format!("secret = \"{value}\"\n"); + let repository = TestRepository::new(path, contents.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "settings_schema_identifier", + path, + "credential_shape", + contents.as_bytes(), + value, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "schema identifier class must reject {value} in {path}" + ); + } +} + +#[test] +fn exception_class_detector_cross_misuse_is_rejected() { + let domain = format!("service.{}", ["private-corp", ".internal"].concat()); + let domain_url = format!("https://{domain}/path"); + for class in ["hash_pinned_fake_credential_fixture", "service_id"] { + let repository = TestRepository::new("notes.txt", domain_url.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + class, + "notes.txt", + "domain", + domain_url.as_bytes(), + &domain, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "{class}/domain must fail" + ); + } + + let credential = "fake-credential-value-123"; + let credential_text = format!("secret=\"{credential}\"\n"); + for class in ["vendor_url", "project_owned_public_domain"] { + let repository = + TestRepository::new("tests/fixture.txt", credential_text.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + class, + "tests/fixture.txt", + "credential_shape", + credential_text.as_bytes(), + credential, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "{class}/credential_shape must fail" + ); + } + + let lock_value = format!( + "https://{}/pkg", + ["registry.private-corp", ".internal"].concat() + ); + let lockfile = format!("{{\"resolved\":\"{lock_value}\"}}"); + let repository = TestRepository::new("package-lock.json", lockfile.as_bytes(), "text"); + repository.write_allowlist(&exception_for_contents( + "historical_example", + "package-lock.json", + "lockfile_field", + lockfile.as_bytes(), + &lock_value, + "2099-01-01T00:00:00Z", + )); + assert_eq!( + status_code(&repository.scan()), + ERROR, + "historical lockfile fields must fail" + ); +} + +#[test] +fn identical_findings_require_distinct_occurrences_and_moving_one_invalidates_scope() { + let value = format!("https://duplicate.{}", "private-corp.internal/path"); + let contents = format!("{value}\n{value}\n"); + let repository = TestRepository::new("notes.txt", contents.as_bytes(), "text"); + let host = governed_match("domain", &value); + let host_offset = value.find(&host).expect("host"); + let first = occurrence_exception( + "vendor_url", + "notes.txt", + "domain", + &host, + host_offset, + host_offset + host.len(), + ); + repository.write_allowlist(&first); + let missing_second = repository.scan(); + assert_eq!( + status_code(&missing_second), + ERROR, + "one record must not cover two identical occurrences" + ); + + let second_start = value.len() + 1; + let two_records = format!( + "{}{}", + first, + occurrence_exception_body( + "vendor_url", + "notes.txt", + "domain", + &host, + second_start + host_offset, + second_start + host_offset + host.len(), + ) + ); + repository.write_allowlist(&two_records); + let complete = repository.scan(); + assert_eq!( + status_code(&complete), + SUCCESS, + "both exact occurrences should pass: {}", + diagnostic(&complete) + ); + + fs::write( + repository.path().join("notes.txt"), + format!("prefix {value}\n{value}\n"), + ) + .expect("should move both occurrences"); + run_git(repository.path(), &["add", "--", "notes.txt"]); + let moved = repository.scan(); + assert_eq!(status_code(&moved), ERROR, "moved occurrence should fail"); + assert!( + diagnostic(&moved).contains("sensitive finding [domain] in notes.txt") + || diagnostic(&moved).contains("stale sensitive-data exception"), + "moved bytes should invalidate exact scope: {}", + diagnostic(&moved) + ); +} + +fn occurrence_exception( + class: &str, + path: &str, + detector: &str, + value: &str, + start: usize, + end: usize, +) -> String { + format!( + "version = 1\nreviewed = true\n{}", + occurrence_exception_body(class, path, detector, value, start, end) + ) +} + +fn occurrence_exception_body( + class: &str, + path: &str, + detector: &str, + value: &str, + start: usize, + end: usize, +) -> String { + format!( + "\n[[exceptions]]\nclass = \"{class}\"\npath = \"{path}\"\ndetector = \"{detector}\"\nscope = \"exact-occurrence\"\nselector = \"bytes:{start}-{end}\"\nfingerprint = \"{}\"\nowner = \"docs-owner\"\nrationale = \"Reviewed fixture with an exact content boundary.\"\nexpires_at = \"2099-01-01T00:00:00Z\"\n", + fingerprint(value.as_bytes()) + ) +} + +fn png_text_chunk(keyword: &str, value: &str) -> Vec { + let mut data = Vec::new(); + data.extend_from_slice(keyword.as_bytes()); + data.push(0); + data.extend_from_slice(value.as_bytes()); + + let mut png = b"\x89PNG\r\n\x1a\n".to_vec(); + append_png_chunk(&mut png, b"IHDR", &[0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0, 0, 0]); + append_png_chunk(&mut png, b"tEXt", &data); + append_png_chunk(&mut png, b"IEND", &[]); + png +} + +fn png_with_chunk(kind: &[u8; 4], data: &[u8]) -> Vec { + let mut png = b"\x89PNG\r\n\x1a\n".to_vec(); + append_png_chunk(&mut png, b"IHDR", &[0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0, 0, 0]); + append_png_chunk(&mut png, kind, data); + append_png_chunk(&mut png, b"IEND", &[]); + png +} + +fn append_png_chunk(png: &mut Vec, kind: &[u8; 4], data: &[u8]) { + png.extend_from_slice(&(u32::try_from(data.len()).expect("chunk should fit")).to_be_bytes()); + png.extend_from_slice(kind); + png.extend_from_slice(data); + let mut crc = u32::MAX; + for byte in kind.iter().chain(data) { + crc ^= u32::from(*byte); + for _ in 0..8 { + crc = (crc >> 1) ^ (0xedb8_8320 & 0_u32.wrapping_sub(crc & 1)); + } + } + png.extend_from_slice(&(!crc).to_be_bytes()); +} diff --git a/tools/docs-parity/tests/settings.rs b/tools/docs-parity/tests/settings.rs new file mode 100644 index 000000000..af60de165 --- /dev/null +++ b/tools/docs-parity/tests/settings.rs @@ -0,0 +1,926 @@ +use std::env; +use std::fs; +use std::path::PathBuf; +use std::process::{Command, Output}; + +use docs_parity::settings::{ + CompanionManifest, CompanionReceipt, ContainerDefault, DefaultValue, KeyIdentity, Lifecycle, + RuntimeDisposition, SecretDisposition, SerializationDisposition, extract_schema, +}; + +fn empty_companions() -> CompanionManifest { + CompanionManifest::parse("version = 1\nreviewed = true\n") + .expect("should parse empty companions") +} + +#[test] +fn production_extraction_excludes_exact_test_cfg_items_fields_and_variants() { + let source = r#" + #[cfg(test)] + struct TestOnly { hidden: String } + + struct Live { + visible: String, + #[cfg(test)] + hidden: String, + } + + enum Choice { + Visible, + #[cfg(test)] + Hidden, + } + "#; + + let schema = extract_schema("fixture.rs", source, &empty_companions()) + .expect("exact cfg(test) items should be excluded from production extraction"); + assert_eq!( + schema + .types + .iter() + .map(|item| item.name.as_str()) + .collect::>(), + ["Live", "Choice"] + ); + assert_eq!( + schema + .type_named("Live") + .expect("live struct") + .fields + .iter() + .map(|field| field.name.as_str()) + .collect::>(), + ["visible"] + ); + assert_eq!( + schema + .type_named("Choice") + .expect("live enum") + .variants + .iter() + .map(|variant| variant.name.as_str()) + .collect::>(), + ["Visible"] + ); +} + +#[test] +fn production_extraction_rejects_unsupported_or_ambiguous_cfg() { + for source in [ + r#"#[cfg(feature = "optional")] struct Fixture { value: String }"#, + r#"#[cfg_attr(test, serde(default))] struct Fixture { value: String }"#, + r#"struct Fixture { #[cfg(feature = "optional")] value: String }"#, + r#"enum Fixture { #[cfg(any(test, feature = "optional"))] Value }"#, + r#" + struct Fixture { #[serde(default = "default_value")] value: i32 } + #[cfg(feature = "optional")] + fn default_value() -> i32 { 7 } + "#, + ] { + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("non-exact production cfg must fail closed"); + assert!( + error.to_string().contains("invalid cfg attribute"), + "cfg rejection should identify the production-selection boundary: {error:?}" + ); + } +} + +#[test] +fn test_only_literal_default_functions_do_not_attest_production_defaults() { + let source = r#" + struct Fixture { #[serde(default = "default_value")] value: i32 } + #[cfg(test)] + fn default_value() -> i32 { 7 } + "#; + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("a test-only function must not resolve a production default"); + assert!(error.to_string().contains("missing default companion")); +} + +fn cargo_check_serde_fixture(source: &str) -> Output { + let directory = tempfile::tempdir().expect("should create Serde compile fixture"); + let source_directory = directory.path().join("src"); + fs::create_dir(&source_directory).expect("should create fixture source directory"); + fs::write( + directory.path().join("Cargo.toml"), + r#" + [package] + name = "serde-parity-fixture" + version = "0.0.0" + edition = "2024" + + [dependencies] + serde = { version = "=1.0.228", features = ["derive"] } + "#, + ) + .expect("should write fixture manifest"); + fs::write(source_directory.join("main.rs"), source).expect("should write fixture source"); + + Command::new(env!("CARGO")) + .args([ + "check", + "--offline", + "--quiet", + "--manifest-path", + directory + .path() + .join("Cargo.toml") + .to_str() + .expect("fixture manifest path should be UTF-8"), + ]) + .env("CARGO_TARGET_DIR", directory.path().join("target")) + .output() + .expect("should execute compiled Serde fixture") +} + +#[test] +fn extracts_field_container_and_validation_semantics() { + let source = r#" + #[derive(serde::Deserialize, serde::Serialize)] + #[serde(rename_all = "kebab-case", deny_unknown_fields)] + struct Fixture { + #[serde(rename = "public-name", alias = "legacy_name", default)] + #[validate(range(min = 1, max = 9))] + value_name: Option, + #[serde(flatten)] + extra: Extra, + #[serde(skip)] + hidden: String, + #[serde(skip_serializing)] + accepted_only: String, + } + "#; + + let schema = extract_schema("fixture.rs", source, &empty_companions()) + .expect("supported attributes should extract"); + let fixture = schema + .type_named("Fixture") + .expect("should extract Fixture"); + + assert!(fixture.deny_unknown_fields); + assert_eq!(fixture.rename_all.as_deref(), Some("kebab-case")); + assert_eq!(fixture.fields.len(), 3, "serde(skip) should be omitted"); + let value = fixture + .field_named("public-name") + .expect("renamed field should be canonical"); + assert_eq!(value.rust_name, "value_name"); + assert_eq!(value.aliases, ["legacy_name"]); + assert!(value.optional); + assert_eq!(value.default, Some(DefaultValue::Trait)); + assert_eq!(value.range.as_ref().and_then(|range| range.min), Some(1)); + assert_eq!(value.range.as_ref().and_then(|range| range.max), Some(9)); + assert!(fixture.field_named("extra").expect("flatten field").flatten); + assert!( + fixture + .field_named("accepted-only") + .expect("rename_all should apply") + .skip_serializing + ); +} + +#[test] +fn extracts_variant_tag_content_untagged_and_rename_semantics() { + let source = r#" + #[derive(serde::Deserialize)] + #[serde(tag = "kind", content = "payload", rename_all = "snake_case")] + enum Tagged { + FirstValue, + #[serde(rename = "second", alias = "legacy_second")] + SecondValue { enabled: bool }, + } + + #[derive(serde::Deserialize)] + #[serde(untagged)] + enum Untagged { Text(String), Number(u64) } + "#; + + let schema = extract_schema("fixture.rs", source, &empty_companions()) + .expect("supported enum attributes should extract"); + let tagged = schema.type_named("Tagged").expect("should extract Tagged"); + assert_eq!(tagged.tag.as_deref(), Some("kind")); + assert_eq!(tagged.content.as_deref(), Some("payload")); + assert_eq!( + tagged + .variant_named("first_value") + .expect("rename_all should apply") + .rust_name, + "FirstValue" + ); + assert_eq!( + tagged + .variant_named("second") + .expect("explicit rename should apply") + .aliases, + ["legacy_second"] + ); + assert!( + schema + .type_named("Untagged") + .expect("should extract") + .untagged + ); +} + +#[test] +fn models_container_defaults_skip_deserializing_and_variant_field_rename_rules() { + let source = r#" + #[derive(serde::Deserialize)] + #[serde(rename = "defaulted", default, rename_all = "camelCase")] + struct Defaulted { + first_value: String, + #[serde(skip_deserializing)] + output_only: String, + #[serde(skip_serializing_if = "String::is_empty")] + conditional_output: String, + } + + #[derive(serde::Deserialize)] + #[serde(rename_all = "SCREAMING_SNAKE_CASE", rename_all_fields = "kebab-case")] + enum Choice { + StructValue { field_name: String }, + #[serde(rename_all = "camelCase", skip_serializing, skip_deserializing, untagged)] + OverrideValue { other_field: String }, + } + "#; + + let schema = extract_schema("fixture.rs", source, &empty_companions()) + .expect("supported site-specific attributes should extract"); + let defaulted = schema + .type_named("Defaulted") + .expect("should extract struct"); + assert_eq!(defaulted.serialized_name, "defaulted"); + assert_eq!(defaulted.container_default, Some(ContainerDefault::Trait)); + assert!(defaulted.field_named("firstValue").is_some()); + assert!( + defaulted + .field_named("outputOnly") + .expect("should retain output-only field semantics") + .skip_deserializing + ); + assert_eq!( + defaulted + .field_named("conditionalOutput") + .expect("should retain conditional serialization") + .skip_serializing_if + .as_deref(), + Some("String::is_empty") + ); + + let choice = schema.type_named("Choice").expect("should extract enum"); + assert_eq!(choice.rename_all_fields.as_deref(), Some("kebab-case")); + let inherited = choice + .variant_named("STRUCT_VALUE") + .expect("container variant rename should apply"); + assert!(inherited.field_named("field-name").is_some()); + let overridden = choice + .variant_named("OVERRIDE_VALUE") + .expect("container variant rename should apply"); + assert_eq!(overridden.rename_all.as_deref(), Some("camelCase")); + assert!(overridden.skip_serializing); + assert!(overridden.skip_deserializing); + assert!(overridden.untagged); + assert!(overridden.field_named("otherField").is_some()); +} + +#[test] +fn tuple_struct_and_variant_fields_retain_indexed_serde_semantics() { + let source = r#" + #[derive(serde::Deserialize, serde::Serialize)] + struct Tuple( + #[serde(skip_deserializing)] String, + #[serde(default = "negative_default", skip_serializing_if = "is_zero")] i32, + #[serde(default, deserialize_with = "deserialize_value")] i32, + ); + + #[derive(serde::Deserialize, serde::Serialize)] + enum TupleEnum { + Value(#[serde(skip_deserializing)] String, #[serde(default)] i32), + } + + fn negative_default() -> i32 { -7 } + fn is_zero(value: &i32) -> bool { *value == 0 } + fn deserialize_value<'de, D>(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + serde::Deserialize::deserialize(deserializer) + } + fn main() {} + "#; + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "deserialize_value" + kind = "deserializer" + positive_probe = "task7_fixture_rs_deserialize_value_deserializer_positive" + negative_probe = "task7_fixture_rs_deserialize_value_deserializer_negative" + "#, + ) + .expect("should parse tuple companion"); + + let schema = extract_schema("fixture.rs", source, &companions) + .expect("tuple fields should retain their Serde semantics"); + let tuple = schema + .type_named("Tuple") + .expect("should extract tuple struct"); + assert_eq!(tuple.fields.len(), 3); + assert!( + tuple + .field_named("0") + .expect("first tuple field") + .skip_deserializing + ); + assert_eq!( + tuple.field_named("1").expect("second tuple field").default, + Some(DefaultValue::Literal("-7".to_owned())) + ); + assert_eq!( + tuple + .field_named("1") + .expect("second tuple field") + .skip_serializing_if + .as_deref(), + Some("is_zero") + ); + assert_eq!( + tuple + .field_named("2") + .expect("third tuple field") + .deserializer + .as_deref(), + Some("deserialize_value") + ); + let variant = schema + .type_named("TupleEnum") + .expect("should extract tuple enum") + .variant_named("Value") + .expect("should extract tuple variant"); + assert!( + variant + .field_named("0") + .expect("first variant field") + .skip_deserializing + ); + assert_eq!( + variant + .field_named("1") + .expect("second variant field") + .default, + Some(DefaultValue::Trait) + ); + + let compiled = cargo_check_serde_fixture(source); + assert!( + compiled.status.success(), + "extractor-accepted tuple attributes should compile with Serde: {}", + String::from_utf8_lossy(&compiled.stderr) + ); +} + +#[test] +fn unsupported_tuple_field_attributes_fail_closed_before_shape_handling() { + for source in [ + r#"struct Tuple(#[serde(with = "opaque")] String);"#, + r#"enum TupleEnum { Value(#[serde(with = "opaque")] String) }"#, + ] { + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("unsupported tuple-field behavior should not disappear"); + assert!( + error + .to_string() + .contains("unsupported serde attribute with") + ); + } +} + +#[test] +fn tuple_fields_reject_named_field_only_flatten_like_the_derive_macro() { + for source in [ + r#"#[derive(serde::Deserialize)] struct Tuple(#[serde(flatten)] String, String); fn main() {}"#, + r#"#[derive(serde::Deserialize)] enum TupleEnum { Value(#[serde(flatten)] String, String) } fn main() {}"#, + ] { + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("flatten is invalid on an unnamed tuple field"); + assert!(error.to_string().contains("invalid serde attribute")); + + let compiled = cargo_check_serde_fixture(source); + assert!( + !compiled.status.success(), + "Serde should reject tuple flatten" + ); + assert!( + String::from_utf8_lossy(&compiled.stderr).contains("cannot be used on tuple structs"), + "extractor rejection should match the Serde field-shape rule: {}", + String::from_utf8_lossy(&compiled.stderr) + ); + } +} + +#[test] +fn serde_function_paths_require_string_literals_like_the_derive_macro() { + for (attribute, source) in [ + ( + "default", + "#[derive(serde::Deserialize)] struct Fixture(#[serde(default = default_value)] i32); fn default_value() -> i32 { 1 } fn main() {}", + ), + ( + "container default", + "#[derive(Default, serde::Deserialize)] #[serde(default = default_value)] struct Fixture { value: i32 } fn default_value() -> Fixture { Fixture::default() } fn main() {}", + ), + ( + "deserialize_with", + "#[derive(serde::Deserialize)] struct Fixture(#[serde(deserialize_with = deserialize_value)] i32); fn deserialize_value<'de, D: serde::Deserializer<'de>>(value: D) -> Result { serde::Deserialize::deserialize(value) } fn main() {}", + ), + ( + "skip_serializing_if", + "#[derive(serde::Serialize)] struct Fixture(#[serde(skip_serializing_if = is_zero)] i32); fn is_zero(value: &i32) -> bool { *value == 0 } fn main() {}", + ), + ] { + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("unquoted Serde function paths should fail extraction"); + assert!( + error.to_string().contains("invalid serde attribute"), + "{attribute} should be classified as an invalid supported attribute: {error:?}" + ); + + let compiled = cargo_check_serde_fixture(source); + assert!( + !compiled.status.success(), + "{attribute} should fail Serde derive" + ); + let diagnostic = String::from_utf8_lossy(&compiled.stderr); + assert!( + diagnostic.contains("attribute to be a string"), + "{attribute} should match Serde's LitStr diagnostic: {diagnostic}" + ); + } +} + +#[test] +fn literal_defaults_accept_negative_numbers_but_not_boolean_not() { + let source = r#" + struct Fixture { + #[serde(default = "negative_integer")] + integer: i32, + #[serde(default = "negative_float")] + float: f64, + #[serde(default = "boolean_not")] + boolean: bool, + } + fn negative_integer() -> i32 { -7 } + fn negative_float() -> f64 { -1.5 } + fn boolean_not() -> bool { !true } + "#; + let missing = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("boolean-not defaults require compiled companion evidence"); + assert!(missing.to_string().contains("boolean_not")); + + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "boolean_not" + kind = "default" + value = "false" + positive_probe = "task7_fixture_rs_boolean_not_default_positive" + negative_probe = "task7_fixture_rs_boolean_not_default_negative" + "#, + ) + .expect("should parse boolean companion"); + let schema = extract_schema("fixture.rs", source, &companions) + .expect("companion should classify boolean-not default"); + let fixture = schema + .type_named("Fixture") + .expect("should extract fixture"); + assert_eq!( + fixture.field_named("integer").expect("integer").default, + Some(DefaultValue::Literal("-7".to_owned())) + ); + assert_eq!( + fixture.field_named("float").expect("float").default, + Some(DefaultValue::Literal("-1.5".to_owned())) + ); + assert_eq!( + fixture.field_named("boolean").expect("boolean").default, + Some(DefaultValue::Companion("false".to_owned())) + ); +} + +#[test] +fn applies_only_the_complete_serde_rename_rule_set() { + for (rule, field, variant) in [ + ("lowercase", "sample_value", "samplevalue"), + ("UPPERCASE", "SAMPLE_VALUE", "SAMPLEVALUE"), + ("PascalCase", "SampleValue", "SampleValue"), + ("camelCase", "sampleValue", "sampleValue"), + ("snake_case", "sample_value", "sample_value"), + ("SCREAMING_SNAKE_CASE", "SAMPLE_VALUE", "SAMPLE_VALUE"), + ("kebab-case", "sample-value", "sample-value"), + ("SCREAMING-KEBAB-CASE", "SAMPLE-VALUE", "SAMPLE-VALUE"), + ] { + let source = format!( + "#[serde(rename_all = \"{rule}\")] struct Fields {{ sample_value: String }}\n\ + #[serde(rename_all = \"{rule}\")] enum Variants {{ SampleValue }}" + ); + let schema = extract_schema("fixture.rs", &source, &empty_companions()) + .unwrap_or_else(|error| panic!("{rule} should extract: {error:?}")); + assert!( + schema + .type_named("Fields") + .expect("should extract struct") + .field_named(field) + .is_some(), + "field rule {rule} should produce {field}" + ); + assert!( + schema + .type_named("Variants") + .expect("should extract enum") + .variant_named(variant) + .is_some(), + "variant rule {rule} should produce {variant}" + ); + } + + for rule in ["snake", "SnakeCase", "", "SCREAMING_KEBAB_CASE"] { + for source in [ + format!("#[serde(rename_all = \"{rule}\")] struct Fixture {{ value: String }}"), + format!( + "#[serde(rename_all_fields = \"{rule}\")] enum Fixture {{ Value {{ field: String }} }}" + ), + format!( + "enum Fixture {{ #[serde(rename_all = \"{rule}\")] Value {{ field: String }} }}" + ), + ] { + let error = extract_schema("fixture.rs", &source, &empty_companions()) + .expect_err("invalid Serde rename rules should fail closed"); + assert!(error.to_string().contains("invalid rename_all")); + } + } +} + +#[test] +fn rejects_supported_serde_attributes_at_unsupported_sites() { + for source in [ + "#[serde(rename_all = \"snake_case\")] struct Fixture { #[serde(rename_all = \"camelCase\")] value: String }", + "#[serde(rename_all_fields = \"snake_case\")] struct Fixture { value: String }", + "#[serde(content = \"value\")] struct Fixture { value: String }", + "#[serde(untagged)] struct Fixture { value: String }", + "#[serde(alias = \"Old\")] struct Fixture { value: String }", + "enum Fixture { #[serde(default)] Value }", + "enum Fixture { #[serde(tag = \"kind\")] Value }", + "enum Fixture { #[serde(flatten)] Value }", + "#[serde(skip_deserializing)] struct Fixture { value: String }", + ] { + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("site-invalid Serde attributes should fail closed"); + assert!( + error.to_string().contains("invalid serde"), + "site diagnostic should identify Serde misuse: {error:?}" + ); + } +} + +#[test] +fn resolves_literal_defaults_and_requires_companions_for_nonliteral_defaults() { + let source = r#" + #[derive(serde::Deserialize)] + struct Fixture { + #[serde(default = "literal_default")] + literal: u16, + #[serde(default = "computed_default")] + computed: usize, + } + fn literal_default() -> u16 { 7 } + fn computed_default() -> usize { 1 << 4 } + "#; + + let error = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("nonliteral default should require a checked companion"); + assert!(error.to_string().contains("computed_default")); + + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "computed_default" + kind = "default" + value = "16" + positive_probe = "task7_fixture_rs_computed_default_default_positive" + negative_probe = "task7_fixture_rs_computed_default_default_negative" + "#, + ) + .expect("should parse companion"); + let schema = extract_schema("fixture.rs", source, &companions) + .expect("checked companion should resolve nonliteral default"); + let fixture = schema + .type_named("Fixture") + .expect("should extract Fixture"); + assert_eq!( + fixture + .field_named("literal") + .expect("literal field") + .default, + Some(DefaultValue::Literal("7".to_owned())) + ); + assert_eq!( + fixture + .field_named("computed") + .expect("computed field") + .default, + Some(DefaultValue::Companion("16".to_owned())) + ); +} + +#[test] +fn custom_deserializers_and_validators_require_exact_companions() { + let source = r#" + #[derive(serde::Deserialize, validator::Validate)] + struct Fixture { + #[serde(deserialize_with = "parse_value")] + #[validate(custom(function = "validate_value"))] + value: String, + } + "#; + let missing = extract_schema("fixture.rs", source, &empty_companions()) + .expect_err("custom behavior without companions should fail closed"); + let diagnostic = missing.to_string(); + assert!(diagnostic.contains("parse_value") || diagnostic.contains("validate_value")); + + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "parse_value" + kind = "deserializer" + positive_probe = "task7_fixture_rs_parse_value_deserializer_positive" + negative_probe = "task7_fixture_rs_parse_value_deserializer_negative" + + [[companions]] + source = "fixture.rs" + symbol = "validate_value" + kind = "validator" + positive_probe = "task7_fixture_rs_validate_value_validator_positive" + negative_probe = "task7_fixture_rs_validate_value_validator_negative" + "#, + ) + .expect("should parse companions"); + let schema = extract_schema("fixture.rs", source, &companions) + .expect("exact companions should classify custom behavior"); + let value = schema + .type_named("Fixture") + .expect("should extract Fixture") + .field_named("value") + .expect("should extract value"); + assert_eq!(value.deserializer.as_deref(), Some("parse_value")); + assert_eq!(value.validators, ["validate_value"]); +} + +#[test] +fn companion_manifest_must_equal_the_exact_ast_discovery_set() { + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "stale_validator" + kind = "validator" + positive_probe = "task7_fixture_rs_stale_validator_validator_positive" + negative_probe = "task7_fixture_rs_stale_validator_validator_negative" + "#, + ) + .expect("should parse stale companion fixture"); + let error = extract_schema( + "fixture.rs", + "struct Fixture { value: String }", + &companions, + ) + .expect_err("stale companion entries should fail exact AST equality"); + assert!(error.to_string().contains("companion set")); +} + +#[test] +fn compiled_receipts_bind_exact_values_and_probe_names_to_each_symbol() { + let source = r#" + struct Fixture { + #[serde(default = "computed_default")] + value: usize, + } + fn computed_default() -> usize { 1 << 4 } + "#; + let manifest = r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "computed_default" + kind = "default" + value = "16" + positive_probe = "task7_fixture_rs_computed_default_default_positive" + negative_probe = "task7_fixture_rs_computed_default_default_negative" + "#; + let companions = CompanionManifest::parse(manifest).expect("should parse companion fixture"); + extract_schema("fixture.rs", source, &companions) + .expect("exact discovered companion should extract"); + + let wrong_value = [CompanionReceipt { + symbol: "computed_default".to_owned(), + kind: "default".to_owned(), + value: Some("15".to_owned()), + positive_probe: "task7_fixture_rs_computed_default_default_positive".to_owned(), + negative_probe: "task7_fixture_rs_computed_default_default_negative".to_owned(), + positive_passed: true, + negative_passed: true, + }]; + let error = companions + .verify_compiled_receipts("fixture.rs", &wrong_value) + .expect_err("wrong compiled default value should fail"); + assert!(error.to_string().contains("compiled companion receipt")); + + let wrong_probe = [CompanionReceipt { + value: Some("16".to_owned()), + positive_probe: "task7_default_other_symbol_positive".to_owned(), + ..wrong_value[0].clone() + }]; + let error = companions + .verify_compiled_receipts("fixture.rs", &wrong_probe) + .expect_err("probe-symbol mismatch should fail"); + assert!(error.to_string().contains("compiled companion receipt")); +} + +#[test] +fn manifest_probe_names_are_unique_per_source_symbol_and_kind() { + let error = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[companions]] + source = "fixture.rs" + symbol = "computed_default" + kind = "default" + value = "16" + positive_probe = "task7_settings_companion_positive" + negative_probe = "task7_settings_companion_negative" + "#, + ) + .expect_err("broad reusable probe names should fail closed"); + assert!(error.to_string().contains("probe names")); +} + +#[test] +fn unknown_shape_changing_serde_attributes_fail_closed() { + for attribute in [ + "#[serde(from = \"Wire\")]", + "#[serde(try_from = \"Wire\")]", + "#[serde(into = \"Wire\")]", + "#[serde(remote = \"Remote\")]", + "#[serde(transparent)]", + "#[serde(with = \"opaque\")]", + ] { + let source = format!( + "#[derive(serde::Deserialize)]\n{attribute}\nstruct Fixture {{ value: String }}" + ); + let error = extract_schema("fixture.rs", &source, &empty_companions()) + .expect_err("unknown shape-changing attribute should fail closed"); + assert!( + error.to_string().contains("unsupported serde attribute"), + "diagnostic should identify unsupported shape-changing behavior: {error:?}" + ); + } +} + +#[test] +fn directional_field_dispositions_remain_independent() { + let companions = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[fields]] + path = "Fixture.legacy_secret" + lifecycle = "deprecated" + key_identity = "canonical" + serialization = "skipped" + runtime = "normalized_away" + secret = "store_resolved" + "#, + ) + .expect("should parse independent dispositions"); + + let axes = companions + .field_disposition("Fixture.legacy_secret") + .expect("should retain every axis"); + assert_eq!(axes.lifecycle, Lifecycle::Deprecated); + assert_eq!(axes.key_identity, KeyIdentity::Canonical); + assert_eq!(axes.serialization, SerializationDisposition::Skipped); + assert_eq!(axes.runtime, RuntimeDisposition::NormalizedAway); + assert_eq!(axes.secret, SecretDisposition::StoreResolved); + assert!(axes.alias_of.is_none()); +} + +#[test] +fn aliases_require_an_exact_canonical_target() { + let missing_target = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[fields]] + path = "Fixture.old_name" + lifecycle = "deprecated" + key_identity = "alias" + serialization = "skipped" + runtime = "deserialization_only" + secret = "none" + "#, + ) + .expect_err("alias without alias_of should fail closed"); + assert!(missing_target.to_string().contains("alias_of")); + + let canonical_with_target = CompanionManifest::parse( + r#" + version = 1 + reviewed = true + + [[fields]] + path = "Fixture.name" + lifecycle = "canonical" + key_identity = "canonical" + alias_of = "Fixture.other" + serialization = "serialized" + runtime = "active" + secret = "none" + "#, + ) + .expect_err("canonical field with alias_of should fail closed"); + assert!(canonical_with_target.to_string().contains("alias_of")); +} + +#[test] +fn checked_companions_cover_the_real_settings_sources() { + let companions = + CompanionManifest::parse(include_str!("../manifests/settings-companions.toml")) + .expect("checked companion manifest should parse"); + for (path, source, required_type) in [ + ( + "crates/trusted-server-core/src/settings.rs", + include_str!("../../../crates/trusted-server-core/src/settings.rs"), + "Settings", + ), + ( + "crates/trusted-server-core/src/auction/profile.rs", + include_str!("../../../crates/trusted-server-core/src/auction/profile.rs"), + "StandardProfileConfig", + ), + ( + "crates/trusted-server-core/src/integrations/aps.rs", + include_str!("../../../crates/trusted-server-core/src/integrations/aps.rs"), + "ApsProfileConfig", + ), + ( + "crates/trusted-server-core/src/integrations/prebid.rs", + include_str!("../../../crates/trusted-server-core/src/integrations/prebid.rs"), + "PrebidIntegrationConfig", + ), + ] { + let schema = extract_schema(path, source, &companions) + .unwrap_or_else(|error| panic!("{path} should be covered: {error:?}")); + assert!( + schema.type_named(required_type).is_some(), + "{path} should include {required_type}" + ); + } +} + +#[test] +fn settings_check_executes_the_complete_repository_contract() { + let output = Command::new(PathBuf::from(env!("CARGO_BIN_EXE_docs-parity"))) + .args(["settings", "--check"]) + .current_dir(env::current_dir().expect("should read current directory")) + .output() + .expect("should execute docs-parity settings check"); + + assert!( + output.status.success(), + "real settings contract should pass: {}", + String::from_utf8_lossy(&output.stderr) + ); +} diff --git a/trusted-server.example.toml b/trusted-server.example.toml index 48794494c..80458b962 100644 --- a/trusted-server.example.toml +++ b/trusted-server.example.toml @@ -303,6 +303,17 @@ suppress_seats = [] [auction.bidders.example-bidder] provider = "pbs-main" +# Generic OpenRTB profile example. Static request extensions are bounded and +# cannot replace Trusted Server's reserved request metadata. +# [auction.providers.standard-main] +# protocol = "openrtb-2.6" +# profile = "standard" +# endpoint = "https://bidder.example.com/openrtb2/auction" +# routing = "explicit" +# +# [auction.providers.standard-main.profile_config] +# request_ext = { inventory_source = "publisher-example" } + # APS server behavior is also provider/profile-owned. Use routing = "all_eligible" # when every banner-compatible slot should be eligible. The APS profile timeout # defaults to 800 ms; debug and script creatives default to false.