Commit 5ff30ff
fix(#477): scope bounty aggregates to anonymously-listable repos
bounty_stats and agent_bounty_stats ran unfiltered aggregates over all
bounties, leaking private-repo bounty activity to anonymous callers.
Mirror the stats() pattern from server.rs (#104):
1. Batch-load all deduped repos + visibility rules (2 SQL round-trips)
2. Filter to listable_at_root(rules, is_public, owner_did, None)
3. Pass visible (owner, name) pairs into SQL aggregates via EXISTS/unnest
This avoids the N+1 per-row authorize_repo_read problem (PR #483) while
keeping aggregation in SQL for O(1) per status query after the initial
repo resolution.
Fail-closed: DB errors collapse the visible set to empty, so all counts
return 0 — an under-count never leaks existence.
Fixes #4771 parent bfc44f9 commit 5ff30ff
3 files changed
Lines changed: 376 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
456 | 456 | | |
457 | 457 | | |
458 | 458 | | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
459 | 490 | | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
460 | 496 | | |
461 | | - | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
462 | 504 | | |
463 | 505 | | |
464 | | - | |
| 506 | + | |
465 | 507 | | |
466 | 508 | | |
467 | 509 | | |
468 | 510 | | |
469 | | - | |
| 511 | + | |
470 | 512 | | |
471 | 513 | | |
472 | 514 | | |
473 | | - | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
474 | 520 | | |
475 | 521 | | |
476 | 522 | | |
| |||
489 | 535 | | |
490 | 536 | | |
491 | 537 | | |
| 538 | + | |
| 539 | + | |
492 | 540 | | |
493 | 541 | | |
494 | 542 | | |
495 | 543 | | |
496 | | - | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
497 | 550 | | |
498 | 551 | | |
499 | 552 | | |
500 | 553 | | |
501 | 554 | | |
502 | 555 | | |
| 556 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4527 | 4527 | | |
4528 | 4528 | | |
4529 | 4529 | | |
| 4530 | + | |
4530 | 4531 | | |
4531 | 4532 | | |
4532 | 4533 | | |
| |||
4535 | 4536 | | |
4536 | 4537 | | |
4537 | 4538 | | |
| 4539 | + | |
4538 | 4540 | | |
4539 | 4541 | | |
4540 | | - | |
| 4542 | + | |
4541 | 4543 | | |
4542 | 4544 | | |
4543 | 4545 | | |
4544 | 4546 | | |
4545 | 4547 | | |
4546 | 4548 | | |
4547 | 4549 | | |
| 4550 | + | |
4548 | 4551 | | |
4549 | 4552 | | |
4550 | | - | |
| 4553 | + | |
4551 | 4554 | | |
4552 | 4555 | | |
4553 | 4556 | | |
| |||
4564 | 4567 | | |
4565 | 4568 | | |
4566 | 4569 | | |
| 4570 | + | |
| 4571 | + | |
| 4572 | + | |
| 4573 | + | |
| 4574 | + | |
| 4575 | + | |
| 4576 | + | |
| 4577 | + | |
| 4578 | + | |
| 4579 | + | |
| 4580 | + | |
| 4581 | + | |
| 4582 | + | |
| 4583 | + | |
| 4584 | + | |
| 4585 | + | |
| 4586 | + | |
| 4587 | + | |
| 4588 | + | |
| 4589 | + | |
| 4590 | + | |
| 4591 | + | |
| 4592 | + | |
| 4593 | + | |
| 4594 | + | |
| 4595 | + | |
| 4596 | + | |
| 4597 | + | |
| 4598 | + | |
| 4599 | + | |
| 4600 | + | |
| 4601 | + | |
| 4602 | + | |
| 4603 | + | |
| 4604 | + | |
| 4605 | + | |
| 4606 | + | |
| 4607 | + | |
| 4608 | + | |
| 4609 | + | |
| 4610 | + | |
| 4611 | + | |
| 4612 | + | |
| 4613 | + | |
| 4614 | + | |
| 4615 | + | |
| 4616 | + | |
| 4617 | + | |
| 4618 | + | |
| 4619 | + | |
| 4620 | + | |
| 4621 | + | |
| 4622 | + | |
| 4623 | + | |
| 4624 | + | |
| 4625 | + | |
| 4626 | + | |
| 4627 | + | |
| 4628 | + | |
| 4629 | + | |
| 4630 | + | |
| 4631 | + | |
| 4632 | + | |
| 4633 | + | |
| 4634 | + | |
| 4635 | + | |
| 4636 | + | |
| 4637 | + | |
| 4638 | + | |
| 4639 | + | |
| 4640 | + | |
| 4641 | + | |
| 4642 | + | |
| 4643 | + | |
| 4644 | + | |
| 4645 | + | |
| 4646 | + | |
| 4647 | + | |
| 4648 | + | |
| 4649 | + | |
| 4650 | + | |
| 4651 | + | |
| 4652 | + | |
| 4653 | + | |
| 4654 | + | |
| 4655 | + | |
| 4656 | + | |
| 4657 | + | |
| 4658 | + | |
| 4659 | + | |
| 4660 | + | |
| 4661 | + | |
| 4662 | + | |
| 4663 | + | |
| 4664 | + | |
4567 | 4665 | | |
4568 | 4666 | | |
4569 | 4667 | | |
| |||
0 commit comments