Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
906500c
feat(nip-fi): admin disconnect/deny API with in-memory deny-until-TTL…
Sep 29, 2026
2e5e1bc
test(nip-fi): tighten S4 deny witnesses and wire pubsub tests into CI
Sep 29, 2026
c57fe3d
test(relay): pin deny-map clean-key baseline and fix stale audio comm…
Sep 29, 2026
ca579b7
perf(nip-fi): sweep deny map only at capacity and bound jti length
wpfleger96 Sep 29, 2026
ff3bb85
fix(nip-fi): subscribe to cross-pod disconnects before the Redis subs…
wpfleger96 Sep 29, 2026
d974df5
fix(nip-fi): clamp cross-pod until to the local ceiling instead of re…
wpfleger96 Sep 29, 2026
b629422
fix(nip-fi): send one authorization_denied close frame on every WS path
wpfleger96 Sep 29, 2026
5e65b38
Merge remote-tracking branch 'origin/main' into duncan/nip-fi-deny-ap…
wpfleger96 Sep 29, 2026
ba0cfd3
test(buzz-relay): characterize NIP-FI assertion evaluation and pairing
Sep 30, 2026
fb8597b
refactor(buzz-relay): share NIP-FI assertion evaluation across adapters
Sep 30, 2026
7a2f3ec
test(buzz-relay): witness routed NIP-FI guard-plus-admission reverifi…
Sep 30, 2026
04a2ad6
test(relay): pin exact rate-limit response in routed NIP-FI control
Sep 30, 2026
655ba2c
fix(nip-fi): fence command jti replay across pods with a shared Redis…
wpfleger96 Sep 30, 2026
5c89d62
Merge remote-tracking branch 'origin/main' into duncan/nip-fi-deny-ap…
Sep 30, 2026
b769d2b
fix(nip-fi): round the command claim TTL up to whole seconds
Sep 30, 2026
d55d89d
test(nip-fi): pin authenticate-before-claim and observe disconnect pu…
Sep 30, 2026
40ed911
test(nip-fi): barrier publish counts on a sentinel command
Sep 30, 2026
d62db55
test(buzz-relay): characterize NIP-FI disconnect route rejections
Sep 30, 2026
225471a
refactor(buzz-relay): share header parsing and denial bodies in NIP-F…
Sep 30, 2026
ca878a5
Merge #7977 fix round (origin/duncan/nip-fi-deny-api-port) into hayt/…
Sep 30, 2026
17a6b7e
test(relay): make NIP-FI transport rejections distinguishable
Sep 30, 2026
74e8a58
fix(relay): fail closed instead of panicking on command status
Sep 30, 2026
76b553a
fix(auth): reserve the local deny slot before the shared jti claim
Oct 1, 2026
9a9def8
test(relay): make the NIP-FI publish-count barrier strict
Oct 1, 2026
5711c84
fix(auth): let a cross-pod deny fill its pending key's slot
Oct 1, 2026
68c4d44
docs(buzz-relay): fix NIP-FI module docs and stale cross-references
wpfleger96 Oct 1, 2026
2e5349e
refactor(buzz-relay): render NIP-FI denials without panicking
wpfleger96 Oct 1, 2026
3d53525
test(buzz-relay): share one scripted NIP-FI verifier across test modules
wpfleger96 Oct 1, 2026
91cf175
test(buzz-relay): build NIP-FI session test connections with the shar…
wpfleger96 Oct 1, 2026
0ce2151
test(buzz-relay): pin the NIP-FI disconnect deny-set-full metric
wpfleger96 Oct 1, 2026
a7223be
chore: merge #7977 final tip 5711c84e2
Oct 1, 2026
0211525
chore: merge origin/main after #7977 squash
Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ test-unit:
# because they live in the binary target; the nested
# `tests::postgres_tests::` stays in the PostgreSQL lane.
cargo nextest run -p buzz-relay --lib --bin buzz-relay \
-E 'test(/^api::admin::/) + test(/^handlers::channel_authz::/) + test(/^handlers::moderation_authz::/) + test(/^handlers::side_effects::tests::/) + test(/^storage_sweep::tests::/) + test(/^nip_fi_http::tests::/) + test(/^nip_fi_config::tests::/) + test(/^readiness::tests::/) + test(/^router::tests::/) + test(/^api::parse_query_tests::/) + test(/^api::git::transport::off_mode_precedence_tests::/) + test(/^audio::join::tests::/) + test(/^audio::handler::tests::/) + test(/^nip_fi_gate::tests::/) + test(/^nip_fi_session::tests::/) + test(=state::tests::neither_a_confirmed_inactive_community_nor_a_failed_lookup_admits_the_socket) + test(=handlers::req::tests::timed_out_historical_read_deregisters_before_closed) + test(=handlers::req::tests::superseded_timeout_leaves_replacement_intact) + test(=handlers::req::tests::search_claim_retires_live_and_yields_to_replacement) + test(=handlers::req::tests::concurrent_claims_and_stale_teardowns_keep_the_last_owner) + test(=handlers::req::tests::timeout_closed_is_emitted_before_a_replacement_can_claim) + test(=handlers::req::tests::revoke_then_replacement_keeps_replacement_whole) + test(=handlers::req::tests::claims_after_connection_cleanup_are_refused) + test(=handlers::req::tests::dropped_terminal_frame_cancels_connection) + test(=handlers::req::tests::revoke_dropped_terminal_frame_cancels_connection) + (kind(bin) & (test(/^tests::/) + test(/^composition_tests::/) + test(/^env_filter_tests::/)) - test(/^tests::postgres_tests::/))'
-E 'test(/^api::admin::/) + test(/^handlers::channel_authz::/) + test(/^handlers::moderation_authz::/) + test(/^handlers::side_effects::tests::/) + test(/^storage_sweep::tests::/) + test(/^nip_fi_core::tests::/) + test(/^nip_fi_http::tests::/) + test(/^nip_fi_config::tests::/) + test(/^readiness::tests::/) + test(/^router::tests::/) + test(/^api::parse_query_tests::/) + test(/^api::git::transport::off_mode_precedence_tests::/) + test(/^audio::join::tests::/) + test(/^audio::handler::tests::/) + test(/^nip_fi_gate::tests::/) + test(/^nip_fi_session::tests::/) + test(=state::tests::neither_a_confirmed_inactive_community_nor_a_failed_lookup_admits_the_socket) + test(=handlers::req::tests::timed_out_historical_read_deregisters_before_closed) + test(=handlers::req::tests::superseded_timeout_leaves_replacement_intact) + test(=handlers::req::tests::search_claim_retires_live_and_yields_to_replacement) + test(=handlers::req::tests::concurrent_claims_and_stale_teardowns_keep_the_last_owner) + test(=handlers::req::tests::timeout_closed_is_emitted_before_a_replacement_can_claim) + test(=handlers::req::tests::revoke_then_replacement_keeps_replacement_whole) + test(=handlers::req::tests::claims_after_connection_cleanup_are_refused) + test(=handlers::req::tests::dropped_terminal_frame_cancels_connection) + test(=handlers::req::tests::revoke_dropped_terminal_frame_cancels_connection) + (kind(bin) & (test(/^tests::/) + test(/^composition_tests::/) + test(/^env_filter_tests::/)) - test(/^tests::postgres_tests::/))'
# Note on audio::join::tests scope: the full suite is infra-free (no DB,
# no Redis). The infra-free audio/FI regression witnesses β€” bootstrap
# ordering barrier, CommitConfirmed arm, pending-close invisibility,
Expand Down
2 changes: 1 addition & 1 deletion crates/buzz-relay/src/api/git/transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4628,7 +4628,7 @@ mod off_mode_precedence_tests {
// hitting the absent-verifier 503. Without this, Case 3 sends
// `Bearer !!!not-valid-base64!!!` which passes `extract_bearer_token`
// (scheme/cardinality checks only) and then trips the absent-verifier
// check at nip_fi_http.rs:332-335 β†’ 503, not 403.
// check in `nip_fi_core::evaluate_attached_assertion` β†’ 503, not 403.
// [FI-TRACE-DENIAL-ORACLE: verifier required for all crypto cases]
let state = {
use buzz_auth::{
Expand Down
Loading
Loading