CLI app for developers prototyping atproto functionality
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(labeler): attribute downstream blocked-by rows to the actual failing identity check

The merge of main into test-oauth-client (2d865a4) wired the new
`blocked_by(..., check_id)` helper into the HTTP/Subscription/Crypto
"stage not run" rows by hardcoding `"identity::target_resolved"` as the
blocker ID. That works only when target resolution itself fails — when
a later identity check (e.g. `signing_key_present`,
`labeler_record_fetched`, `labeler_endpoint_is_https`) is the actual
gate that prevented `IdentityFacts` from being populated, the rendered
output misattributes the block to a check that visibly passed in the
same report.

Identify the real blocker by scanning `identity_output.results` for the
first `SpecViolation`/`NetworkError` row and use its ID. Plumb the same
ID through `CreateReportRunOptions::identity_blocker_id` so the report
stage's 10 skipped rows attribute to the actual failing check rather
than the generic "blocked by identity stage" phrasing. The endpoint-
only-no-DID path passes `None` so identity-skipped runs keep the
non-attributed wording.

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

+163 -106
+42 -4
src/commands/test/labeler/pipeline.rs
··· 9 9 Did, DnsResolver, HttpClient, find_service, resolve_did, resolve_handle, 10 10 }; 11 11 use crate::common::report::{ 12 - CheckStatus, LabelerReport, ReportHeader, Stage, blocked_by, skipped_with_reason, 12 + CheckResult, CheckStatus, LabelerReport, ReportHeader, Stage, blocked_by, skipped_with_reason, 13 13 }; 14 14 15 15 pub mod create_report; ··· 132 132 .unwrap_or(false) 133 133 }); 134 134 135 + // Identify the actual identity check that prevented `IdentityFacts` 136 + // from being populated, so downstream stages attribute the block to 137 + // the real failing check rather than a hardcoded placeholder. The 138 + // first SpecViolation or NetworkError in the identity stage output 139 + // is the root cause; any later Skipped rows are themselves 140 + // downstream of it. `None` when identity was skipped wholesale 141 + // because the operator supplied an endpoint without a DID — no 142 + // identity check actually failed in that case, so downstream stages 143 + // fall back to non-attributed phrasing. 144 + let identity_blocker_id = if is_no_did_supplied { 145 + None 146 + } else { 147 + Some(identity_blocker_check_id(&identity_output.results)) 148 + }; 149 + 135 150 // Record all identity stage results. 136 151 for result in identity_output.results { 137 152 report.record(result); ··· 170 185 "http::not_run", 171 186 Stage::LABELER_HTTP, 172 187 "HTTP stage (not run)", 173 - "identity::target_resolved", 188 + identity_blocker_id.unwrap_or("identity::target_resolved"), 174 189 )); 175 190 } else { 176 191 // HTTP stage not run because no endpoint could be derived. ··· 201 216 "subscription::not_run", 202 217 Stage::LABELER_SUBSCRIPTION, 203 218 "Subscription stage (not run)", 204 - "identity::target_resolved", 219 + identity_blocker_id.unwrap_or("identity::target_resolved"), 205 220 )); 206 221 } else { 207 222 // Subscription stage not run because no endpoint could be derived. ··· 253 268 "crypto::not_run", 254 269 Stage::LABELER_CRYPTO, 255 270 "Crypto stage (not run)", 256 - "identity::target_resolved", 271 + identity_blocker_id.unwrap_or("identity::target_resolved"), 257 272 )); 258 273 } else { 259 274 // Crypto stage not run (no identity or no endpoint). ··· 309 324 pds_xrpc_client: opts.pds_xrpc_client_override.or(pds_xrpc_client_ref), 310 325 pds_resolution_error: pds_resolution_error.as_deref(), 311 326 run_id: opts.run_id, 327 + identity_blocker_id, 312 328 }; 313 329 let labeler_endpoint_for_report = labeler_endpoint.clone(); 314 330 let report_output = match opts.create_report_tee { ··· 341 357 342 358 report.finish(); 343 359 report 360 + } 361 + 362 + /// Identify the identity check whose failure prevented `IdentityFacts` 363 + /// from being populated. Returns the ID of the first 364 + /// `SpecViolation` / `NetworkError` row in the identity stage output; 365 + /// later rows may themselves be `Skipped` rows pointing at this one, so 366 + /// the first failing row is the root cause we want to surface to 367 + /// downstream stages. Falls back to `identity::target_resolved` only 368 + /// when the identity stage somehow returned no facts and no failures — 369 + /// which should not happen, but the fallback keeps the rendered output 370 + /// intelligible if it ever does. 371 + fn identity_blocker_check_id(results: &[CheckResult]) -> &'static str { 372 + results 373 + .iter() 374 + .find(|r| { 375 + matches!( 376 + r.status, 377 + CheckStatus::SpecViolation | CheckStatus::NetworkError, 378 + ) 379 + }) 380 + .map(|r| r.id) 381 + .unwrap_or("identity::target_resolved") 344 382 } 345 383 346 384 /// Resolve the reporter's handle to the service endpoint of their PDS.
+20 -2
src/commands/test/labeler/pipeline/create_report.rs
··· 636 636 /// a resolution failure apart from a missing-credentials skip. 637 637 pub pds_resolution_error: Option<&'a str>, 638 638 pub run_id: &'a str, 639 + /// When `identity_facts` is `None`, the ID of the identity check that 640 + /// blocked facts from being populated. The stage uses it to attribute 641 + /// the 10 skipped rows to the actual failing check rather than a 642 + /// generic "identity stage" message. `None` falls back to the generic 643 + /// phrasing for callers (notably tests) that don't have the pipeline 644 + /// context to compute it. 645 + pub identity_blocker_id: Option<&'static str>, 639 646 } 640 647 641 648 /// Run the report stage. ··· 652 659 let mut results = Vec::with_capacity(10); 653 660 654 661 // If identity didn't land, every check is blocked by the identity 655 - // stage. Emit 10 Skipped rows and return. 662 + // stage. Emit 10 Skipped rows and return. Attribute the block to the 663 + // actual failing identity check when the pipeline supplied its ID; 664 + // direct callers without that context (tests) get the generic phrasing. 656 665 let Some(id_facts) = identity_facts else { 657 666 for c in Check::ORDER { 658 - results.push(c.skip("blocked by identity stage")); 667 + let result = match opts.identity_blocker_id { 668 + Some(blocker_id) => crate::common::report::blocked_by( 669 + c.id(), 670 + Stage::LABELER_REPORT, 671 + c.default_summary_pass(), 672 + blocker_id, 673 + ), 674 + None => c.skip("blocked by identity stage"), 675 + }; 676 + results.push(result); 659 677 } 660 678 return CreateReportStageOutput { 661 679 facts: None,
+2
tests/labeler_report.rs
··· 148 148 pds_xrpc_client: None, 149 149 pds_resolution_error: None, 150 150 run_id: "test-run-id-0000", 151 + identity_blocker_id: None, 151 152 } 152 153 } 153 154 ··· 213 214 pds_xrpc_client: None, 214 215 pds_resolution_error: None, 215 216 run_id: "test-run-id-0000", 217 + identity_blocker_id: None, 216 218 }; 217 219 let results = run_report_stage(&facts, &tee, opts).await; 218 220
+13 -14
tests/snapshots/labeler_endtoend__identity_only_failure_exits_one_with_severity_breakdown.snap
··· 1 1 --- 2 2 source: tests/labeler_endtoend.rs 3 - assertion_line: 364 4 3 expression: normalized 5 4 --- 6 5 Target: did:plc:test123456789abcdefghijklmnop ··· 31 30 × Network failure fetching labeler record 32 31 [SKIP] labeler record policy list — blocked by identity::labeler_record_fetched 33 32 == HTTP == 34 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 33 + [SKIP] HTTP stage (not run) — blocked by identity::signing_key_present 35 34 == Subscription == 36 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 35 + [SKIP] Subscription stage (not run) — blocked by identity::signing_key_present 37 36 == Crypto == 38 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 37 + [SKIP] Crypto stage (not run) — blocked by identity::signing_key_present 39 38 == Report == 40 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 41 - [SKIP] Unauthenticated report rejected — blocked by identity stage 42 - [SKIP] Malformed bearer rejected — blocked by identity stage 43 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 44 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 45 - [SKIP] Expired JWT rejected — blocked by identity stage 46 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 47 - [SKIP] Self-mint report accepted — blocked by identity stage 48 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 49 - [SKIP] PDS-proxied report accepted — blocked by identity stage 39 + [SKIP] Labeler advertises reportable shape — blocked by identity::signing_key_present 40 + [SKIP] Unauthenticated report rejected — blocked by identity::signing_key_present 41 + [SKIP] Malformed bearer rejected — blocked by identity::signing_key_present 42 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::signing_key_present 43 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::signing_key_present 44 + [SKIP] Expired JWT rejected — blocked by identity::signing_key_present 45 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::signing_key_present 46 + [SKIP] Self-mint report accepted — blocked by identity::signing_key_present 47 + [SKIP] PDS-minted JWT accepted — blocked by identity::signing_key_present 48 + [SKIP] PDS-proxied report accepted — blocked by identity::signing_key_present 50 49 51 50 Summary: 6 passed, 1 failed (spec), 1 network errors, 0 advisories, 15 skipped. Exit code: 1
+13 -13
tests/snapshots/labeler_identity__empty_policies_renders_spec_violation_with_span.snap
··· 27 27 9 │ } 28 28 ╰──── 29 29 == HTTP == 30 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 30 + [SKIP] HTTP stage (not run) — blocked by identity::labeler_record_policies_nonempty 31 31 == Subscription == 32 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 32 + [SKIP] Subscription stage (not run) — blocked by identity::labeler_record_policies_nonempty 33 33 == Crypto == 34 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 34 + [SKIP] Crypto stage (not run) — blocked by identity::labeler_record_policies_nonempty 35 35 == Report == 36 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 37 - [SKIP] Unauthenticated report rejected — blocked by identity stage 38 - [SKIP] Malformed bearer rejected — blocked by identity stage 39 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 40 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 41 - [SKIP] Expired JWT rejected — blocked by identity stage 42 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 43 - [SKIP] Self-mint report accepted — blocked by identity stage 44 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 45 - [SKIP] PDS-proxied report accepted — blocked by identity stage 36 + [SKIP] Labeler advertises reportable shape — blocked by identity::labeler_record_policies_nonempty 37 + [SKIP] Unauthenticated report rejected — blocked by identity::labeler_record_policies_nonempty 38 + [SKIP] Malformed bearer rejected — blocked by identity::labeler_record_policies_nonempty 39 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::labeler_record_policies_nonempty 40 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::labeler_record_policies_nonempty 41 + [SKIP] Expired JWT rejected — blocked by identity::labeler_record_policies_nonempty 42 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::labeler_record_policies_nonempty 43 + [SKIP] Self-mint report accepted — blocked by identity::labeler_record_policies_nonempty 44 + [SKIP] PDS-minted JWT accepted — blocked by identity::labeler_record_policies_nonempty 45 + [SKIP] PDS-proxied report accepted — blocked by identity::labeler_record_policies_nonempty 46 46 47 47 Summary: 8 passed, 1 failed (spec), 0 network errors, 0 advisories, 14 skipped. Exit code: 1
+11 -11
tests/snapshots/labeler_identity__endpoint_mismatch_spec_violation.snap
··· 35 35 [WARN] Subscription backfill had no frames — labeler has no published labels 36 36 [SKIP] Subscription live-tail skipped — labeler has no published labels 37 37 == Crypto == 38 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 38 + [SKIP] Crypto stage (not run) — blocked by identity::resolved_did_matches_flag 39 39 == Report == 40 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 41 - [SKIP] Unauthenticated report rejected — blocked by identity stage 42 - [SKIP] Malformed bearer rejected — blocked by identity stage 43 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 44 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 45 - [SKIP] Expired JWT rejected — blocked by identity stage 46 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 47 - [SKIP] Self-mint report accepted — blocked by identity stage 48 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 49 - [SKIP] PDS-proxied report accepted — blocked by identity stage 40 + [SKIP] Labeler advertises reportable shape — blocked by identity::resolved_did_matches_flag 41 + [SKIP] Unauthenticated report rejected — blocked by identity::resolved_did_matches_flag 42 + [SKIP] Malformed bearer rejected — blocked by identity::resolved_did_matches_flag 43 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::resolved_did_matches_flag 44 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::resolved_did_matches_flag 45 + [SKIP] Expired JWT rejected — blocked by identity::resolved_did_matches_flag 46 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::resolved_did_matches_flag 47 + [SKIP] Self-mint report accepted — blocked by identity::resolved_did_matches_flag 48 + [SKIP] PDS-minted JWT accepted — blocked by identity::resolved_did_matches_flag 49 + [SKIP] PDS-proxied report accepted — blocked by identity::resolved_did_matches_flag 50 50 51 51 Summary: 12 passed, 1 failed (spec), 0 network errors, 2 advisories, 12 skipped. Exit code: 1
+13 -13
tests/snapshots/labeler_identity__missing_labeler_record_renders_404_distinct_from_transport.snap
··· 20 20 × PDS returned 404: labeler record not found 21 21 [SKIP] labeler record policy list — blocked by identity::labeler_record_fetched 22 22 == HTTP == 23 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 23 + [SKIP] HTTP stage (not run) — blocked by identity::labeler_record_fetched 24 24 == Subscription == 25 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 25 + [SKIP] Subscription stage (not run) — blocked by identity::labeler_record_fetched 26 26 == Crypto == 27 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 27 + [SKIP] Crypto stage (not run) — blocked by identity::labeler_record_fetched 28 28 == Report == 29 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 30 - [SKIP] Unauthenticated report rejected — blocked by identity stage 31 - [SKIP] Malformed bearer rejected — blocked by identity stage 32 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 33 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 34 - [SKIP] Expired JWT rejected — blocked by identity stage 35 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 36 - [SKIP] Self-mint report accepted — blocked by identity stage 37 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 38 - [SKIP] PDS-proxied report accepted — blocked by identity stage 29 + [SKIP] Labeler advertises reportable shape — blocked by identity::labeler_record_fetched 30 + [SKIP] Unauthenticated report rejected — blocked by identity::labeler_record_fetched 31 + [SKIP] Malformed bearer rejected — blocked by identity::labeler_record_fetched 32 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::labeler_record_fetched 33 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::labeler_record_fetched 34 + [SKIP] Expired JWT rejected — blocked by identity::labeler_record_fetched 35 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::labeler_record_fetched 36 + [SKIP] Self-mint report accepted — blocked by identity::labeler_record_fetched 37 + [SKIP] PDS-minted JWT accepted — blocked by identity::labeler_record_fetched 38 + [SKIP] PDS-proxied report accepted — blocked by identity::labeler_record_fetched 39 39 40 40 Summary: 7 passed, 1 failed (spec), 0 network errors, 0 advisories, 15 skipped. Exit code: 1
+13 -13
tests/snapshots/labeler_identity__missing_service_renders_spec_violation_with_span.snap
··· 27 27 [OK] labeler record fetch 28 28 [OK] labeler record policy list 29 29 == HTTP == 30 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 30 + [SKIP] HTTP stage (not run) — blocked by identity::labeler_service_present 31 31 == Subscription == 32 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 32 + [SKIP] Subscription stage (not run) — blocked by identity::labeler_service_present 33 33 == Crypto == 34 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 34 + [SKIP] Crypto stage (not run) — blocked by identity::labeler_service_present 35 35 == Report == 36 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 37 - [SKIP] Unauthenticated report rejected — blocked by identity stage 38 - [SKIP] Malformed bearer rejected — blocked by identity stage 39 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 40 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 41 - [SKIP] Expired JWT rejected — blocked by identity stage 42 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 43 - [SKIP] Self-mint report accepted — blocked by identity stage 44 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 45 - [SKIP] PDS-proxied report accepted — blocked by identity stage 36 + [SKIP] Labeler advertises reportable shape — blocked by identity::labeler_service_present 37 + [SKIP] Unauthenticated report rejected — blocked by identity::labeler_service_present 38 + [SKIP] Malformed bearer rejected — blocked by identity::labeler_service_present 39 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::labeler_service_present 40 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::labeler_service_present 41 + [SKIP] Expired JWT rejected — blocked by identity::labeler_service_present 42 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::labeler_service_present 43 + [SKIP] Self-mint report accepted — blocked by identity::labeler_service_present 44 + [SKIP] PDS-minted JWT accepted — blocked by identity::labeler_service_present 45 + [SKIP] PDS-proxied report accepted — blocked by identity::labeler_service_present 46 46 47 47 Summary: 6 passed, 1 failed (spec), 0 network errors, 0 advisories, 16 skipped. Exit code: 1
+13 -13
tests/snapshots/labeler_identity__missing_signing_key_renders_spec_violation.snap
··· 27 27 [OK] labeler record fetch 28 28 [OK] labeler record policy list 29 29 == HTTP == 30 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 30 + [SKIP] HTTP stage (not run) — blocked by identity::signing_key_present 31 31 == Subscription == 32 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 32 + [SKIP] Subscription stage (not run) — blocked by identity::signing_key_present 33 33 == Crypto == 34 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 34 + [SKIP] Crypto stage (not run) — blocked by identity::signing_key_present 35 35 == Report == 36 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 37 - [SKIP] Unauthenticated report rejected — blocked by identity stage 38 - [SKIP] Malformed bearer rejected — blocked by identity stage 39 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 40 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 41 - [SKIP] Expired JWT rejected — blocked by identity stage 42 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 43 - [SKIP] Self-mint report accepted — blocked by identity stage 44 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 45 - [SKIP] PDS-proxied report accepted — blocked by identity stage 36 + [SKIP] Labeler advertises reportable shape — blocked by identity::signing_key_present 37 + [SKIP] Unauthenticated report rejected — blocked by identity::signing_key_present 38 + [SKIP] Malformed bearer rejected — blocked by identity::signing_key_present 39 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::signing_key_present 40 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::signing_key_present 41 + [SKIP] Expired JWT rejected — blocked by identity::signing_key_present 42 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::signing_key_present 43 + [SKIP] Self-mint report accepted — blocked by identity::signing_key_present 44 + [SKIP] PDS-minted JWT accepted — blocked by identity::signing_key_present 45 + [SKIP] PDS-proxied report accepted — blocked by identity::signing_key_present 46 46 47 47 Summary: 8 passed, 1 failed (spec), 0 network errors, 0 advisories, 14 skipped. Exit code: 1
+13 -13
tests/snapshots/labeler_identity__non_https_endpoint_renders_spec_violation.snap
··· 27 27 [OK] labeler record fetch 28 28 [OK] labeler record policy list 29 29 == HTTP == 30 - [SKIP] HTTP stage (not run) — blocked by identity::target_resolved 30 + [SKIP] HTTP stage (not run) — blocked by identity::labeler_endpoint_is_https 31 31 == Subscription == 32 - [SKIP] Subscription stage (not run) — blocked by identity::target_resolved 32 + [SKIP] Subscription stage (not run) — blocked by identity::labeler_endpoint_is_https 33 33 == Crypto == 34 - [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 34 + [SKIP] Crypto stage (not run) — blocked by identity::labeler_endpoint_is_https 35 35 == Report == 36 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 37 - [SKIP] Unauthenticated report rejected — blocked by identity stage 38 - [SKIP] Malformed bearer rejected — blocked by identity stage 39 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 40 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 41 - [SKIP] Expired JWT rejected — blocked by identity stage 42 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 43 - [SKIP] Self-mint report accepted — blocked by identity stage 44 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 45 - [SKIP] PDS-proxied report accepted — blocked by identity stage 36 + [SKIP] Labeler advertises reportable shape — blocked by identity::labeler_endpoint_is_https 37 + [SKIP] Unauthenticated report rejected — blocked by identity::labeler_endpoint_is_https 38 + [SKIP] Malformed bearer rejected — blocked by identity::labeler_endpoint_is_https 39 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::labeler_endpoint_is_https 40 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::labeler_endpoint_is_https 41 + [SKIP] Expired JWT rejected — blocked by identity::labeler_endpoint_is_https 42 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::labeler_endpoint_is_https 43 + [SKIP] Self-mint report accepted — blocked by identity::labeler_endpoint_is_https 44 + [SKIP] PDS-minted JWT accepted — blocked by identity::labeler_endpoint_is_https 45 + [SKIP] PDS-proxied report accepted — blocked by identity::labeler_endpoint_is_https 46 46 47 47 Summary: 8 passed, 1 failed (spec), 0 network errors, 0 advisories, 14 skipped. Exit code: 1
+10 -10
tests/snapshots/labeler_identity__plc_directory_unreachable_renders_network_error.snap
··· 23 23 == Crypto == 24 24 [SKIP] Crypto stage (not run) — blocked by identity::target_resolved 25 25 == Report == 26 - [SKIP] Labeler advertises reportable shape — blocked by identity stage 27 - [SKIP] Unauthenticated report rejected — blocked by identity stage 28 - [SKIP] Malformed bearer rejected — blocked by identity stage 29 - [SKIP] JWT with wrong `aud` rejected — blocked by identity stage 30 - [SKIP] JWT with wrong `lxm` rejected — blocked by identity stage 31 - [SKIP] Expired JWT rejected — blocked by identity stage 32 - [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity stage 33 - [SKIP] Self-mint report accepted — blocked by identity stage 34 - [SKIP] PDS-minted JWT accepted — blocked by identity stage 35 - [SKIP] PDS-proxied report accepted — blocked by identity stage 26 + [SKIP] Labeler advertises reportable shape — blocked by identity::target_resolved 27 + [SKIP] Unauthenticated report rejected — blocked by identity::target_resolved 28 + [SKIP] Malformed bearer rejected — blocked by identity::target_resolved 29 + [SKIP] JWT with wrong `aud` rejected — blocked by identity::target_resolved 30 + [SKIP] JWT with wrong `lxm` rejected — blocked by identity::target_resolved 31 + [SKIP] Expired JWT rejected — blocked by identity::target_resolved 32 + [SKIP] Invalid shape returns 400 InvalidRequest — blocked by identity::target_resolved 33 + [SKIP] Self-mint report accepted — blocked by identity::target_resolved 34 + [SKIP] PDS-minted JWT accepted — blocked by identity::target_resolved 35 + [SKIP] PDS-proxied report accepted — blocked by identity::target_resolved 36 36 37 37 Summary: 0 passed, 0 failed (spec), 1 network errors, 0 advisories, 22 skipped. Exit code: 2