Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ github-issue: 2517
spec-path: docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md
branch: "2517-1669-encapsulate-statistics-repository-state"
related-pr: 2527
last-updated-utc: "2026-10-14 16:00"
last-updated-utc: "2026-10-14 16:55"
semantic-links:
skill-links:
- create-issue
Expand Down Expand Up @@ -130,7 +130,7 @@ module inside the same file, which keeps access to a private field.
- Unifying the five repositories into a shared generic type.
- Removing the unused SI-30 statistics traits (`UdpCoreStatsRepository`,
`UdpServerStatsRepository`) in `udp-core` and `udp-server`: tracked by #2521
(`docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md`).
(`docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md`).
- Changelog entries: none of the five packages, nor the repository root, keeps a changelog.

## Architectural Decisions
Expand Down Expand Up @@ -308,6 +308,8 @@ private field (the pinned `E0616`), with no unrelated reason to fail compilation
landed with its package's `refactor(<package>): [#2517] make the statistics repository lock
private` commit. History is not rewritten; `manual-verification-evidence.md` carries the same
note.
- 2026-10-14 16:55 UTC - GitHub Copilot (#2521 archive session) - #2521's spec moved to
`docs/issues/closed/` (PR #2532); updated the Out of Scope pointer to its new path.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
schema-version: 1
doc-type: issue
issue-type: task
status: in-progress
status: done
priority: p3
epic: 1669
github-issue: 2521
spec-path: docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
spec-path: docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
branch: "2521-1669-remove-unused-udp-stats-traits"
related-pr: 2529
last-updated-utc: "2026-10-14 15:52"
last-updated-utc: "2026-10-14 16:25"
semantic-links:
skill-links:
- create-issue
Expand Down Expand Up @@ -254,10 +254,10 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
- [x] Manual verification scenarios executed and recorded in issue-local `manual-verification-evidence.md`
- [x] Acceptance criteria reviewed after implementation and updated with evidence
- [x] Evidence-based implementation completion review recorded: issue-local retrospective created for material discoveries, or progress log states why none was needed
- [ ] Reviewer validated acceptance criteria and updated checkboxes
- [x] Reviewer validated acceptance criteria and updated checkboxes
- [ ] Independent reviewer reports recorded in issue-local `agent-review-reports.md` when reviewers received this folder-style specification
- [ ] Committer verified spec progress is up to date before commit
- [ ] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`
- [x] Committer verified spec progress is up to date before commit
- [x] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`

### Progress Log

Expand Down Expand Up @@ -386,6 +386,13 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
torrust-tracker-rest-api-runtime-adapter --all-features` (stable 1.99.0; 52, 222 + 16, and 3
tests, plus doctests) and Clippy on all targets. The branch is not rebased again, because the
review round cites its current commit ids.
- 2026-10-14 16:25 UTC - GitHub Copilot (archive session) - PR #2529 merged on 2026-10-14 at 16:22 UTC
(`90e8daf75`), closing #2521; the review round is audited in
`docs/pr-reviews/pr-2529-review/PR-REVIEW.md`. Cameron's review 5520537884 recomputed the
acceptance criteria and evidence and acknowledged the PR, which ticks the reviewer checkpoint.
The independent-reviewer-reports checkpoint stays open: no review agent received this
folder-style specification, so no `agent-review-reports.md` was needed. Moved the spec to
`docs/issues/closed/` and updated EPIC #1669.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
doc-type: manual-verification-evidence
issue-spec: docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
last-updated-utc: 2026-10-14 15:51
issue-spec: docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
last-updated-utc: 2026-10-14 16:25
---

# Manual Verification Evidence
Expand Down
10 changes: 6 additions & 4 deletions docs/issues/open/1669-overhaul-packages/EPIC.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ epic: null
github-issue: 1669
spec-path: docs/issues/open/1669-overhaul-packages/EPIC.md
epic-owner: josecelano
last-updated-utc: "2026-10-14 15:06"
last-updated-utc: "2026-10-14 16:25"
semantic-links:
skill-links:
- create-issue
Expand Down Expand Up @@ -669,7 +669,7 @@ Status: TODO unless noted.
- [ ] [#2482](https://github.com/torrust/torrust-tracker/issues/2482) Reorganize test support code shared between workspace packages _(sub-EPIC; findings 1 and 2 of the 2026-10-06 coupling report; amends DEC-13)_
- [ ] [#2475](https://github.com/torrust/torrust-tracker/issues/2475) Fix coupling-tool module name resolution for renamed dependencies and custom library names _(finding 3 of the 2026-10-06 coupling report)_
- [x] [#2517](https://github.com/torrust/torrust-tracker/issues/2517) Make the statistics repositories' metrics lock private _(Pre-publish API hygiene; five unpublished crates; found by #1348)_ — **DONE** (2026-10-14, PR #2527)
- [ ] [#2521](https://github.com/torrust/torrust-tracker/issues/2521) Remove the unused UDP statistics traits and services _(cleanup; `BanningStats` is removed by #2505)_
- [x] [#2521](https://github.com/torrust/torrust-tracker/issues/2521) Remove the unused UDP statistics traits and services _(cleanup; `BanningStats` is removed by #2505)_
- [x] [#1881](https://github.com/torrust/torrust-tracker/issues/1881) SI-16: Migrate `contrib/bencode` to `torrust/torrust-bittorrent` as `torrust-bencode` _(Rule E; no blockers within this EPIC)_
- [x] Extract `torrust-clock` to standalone repository — [#1879](https://github.com/torrust/torrust-tracker/issues/1879) _(Rule E; requires completed clock rename and type move work)_
- [x] Extract `torrust-located-error` to standalone repository — [#1894](https://github.com/torrust/torrust-tracker/issues/1894) _(Rule E; requires completed rename SI-10 #1823)_ — **DONE**
Expand Down Expand Up @@ -733,7 +733,7 @@ Details:
| UDP type consolidation | [#1966](https://github.com/torrust/torrust-tracker/issues/1966) — SI-35: Consolidate duplicate UDP types | [docs/issues/closed/1966-1669-si-35-consolidate-duplicate-udp-types/ISSUE.md](../../closed/1966-1669-si-35-consolidate-duplicate-udp-types/ISSUE.md) | DONE | |
| Error enum audit | [#2454](https://github.com/torrust/torrust-tracker/issues/2454) — Mark public error enums `#[non_exhaustive]` before first publish | [docs/issues/open/2454-1669-mark-public-error-enums-non-exhaustive/ISSUE.md](../2454-1669-mark-public-error-enums-non-exhaustive/ISSUE.md) | TODO | Pre-publish API checklist; per crate in dependency order, before its first publish |
| Statistics lock privacy | [#2517](https://github.com/torrust/torrust-tracker/issues/2517) — Make the statistics repositories' metrics lock private | [docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md](../../closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md) | DONE | Pre-publish API hygiene; `udp-core`, `udp-server`, `http-core`, `tracker-core`, `swarm-coordination-registry` |
| Unused UDP stats traits | [#2521](https://github.com/torrust/torrust-tracker/issues/2521) — Remove the unused UDP statistics traits and services | [docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md](../2521-1669-remove-unused-udp-stats-traits/ISSUE.md) | TODO | SI-30 repository traits and `statistics::services`; `BanningStats` is removed by #2505 |
| Unused UDP stats traits | [#2521](https://github.com/torrust/torrust-tracker/issues/2521) — Remove the unused UDP statistics traits and services | [docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md](../../closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md) | DONE | SI-30 repository traits and `statistics::services`; `BanningStats` is removed by #2505 |

Proposal note:
After SI-14, there is a proposal to evaluate a dedicated repository for protocol crates so protocol packages can evolve with BEP/spec changes while tracker app packages evolve with domain/product changes. This is proposal-only for now (not committed scope) and is tracked in [#1835](https://github.com/torrust/torrust-tracker/issues/1835).
Expand All @@ -756,7 +756,7 @@ After SI-14, there is a proposal to evaluate a dedicated repository for protocol
- [docs/issues/open/2482-1669-reorganize-shared-test-support/EPIC.md](../2482-1669-reorganize-shared-test-support/EPIC.md)
- [docs/issues/open/2475-1669-coupling-tool-resolve-lib-names-and-renames/ISSUE.md](../2475-1669-coupling-tool-resolve-lib-names-and-renames/ISSUE.md)
- [docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md](../../closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md)
- [docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md](../2521-1669-remove-unused-udp-stats-traits/ISSUE.md)
- [docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md](../../closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md)
- [docs/issues/closed/1930-1669-si-33-rest-api-contract-first-architecture/ISSUE.md](../../closed/1930-1669-si-33-rest-api-contract-first-architecture/ISSUE.md)
- [docs/issues/closed/1910-1669-si-29-rename-udp-and-http-core-protocol-crates-to-remove-redundant-tracker/ISSUE.md](../../closed/1910-1669-si-29-rename-udp-and-http-core-protocol-crates-to-remove-redundant-tracker/ISSUE.md)
> New subissues are created as analysis reveals the next improvement. The EPIC is never
Expand Down Expand Up @@ -1015,6 +1015,8 @@ Previously referenced tools (screenshots from CodeScene already in the issue com
`udp-server`.
- 2026-10-14 15:06 UTC - GitHub Copilot - #2517 is done (PR #2527 merged); its spec moved to
`docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/`.
- 2026-10-14 16:25 UTC - GitHub Copilot - #2521 is done (PR #2529 merged); its spec moved to
`docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/`.

## Acceptance Criteria

Expand Down
2 changes: 1 addition & 1 deletion docs/pr-reviews/pr-2529-review/PR-REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ semantic-links:
- process-pr-review
related-artifacts:
- .github/skills/dev/pr-reviews/process-pr-review/SKILL.md
- docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
- docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
---

<!-- skill-link: process-pr-review -->
Expand Down
119 changes: 119 additions & 0 deletions docs/pr-reviews/pr-2532-review/PR-REVIEW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
semantic-links:
skill-links:
- process-pr-review
related-artifacts:
- .github/skills/dev/pr-reviews/process-pr-review/SKILL.md
- docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md
- docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md
---

<!-- skill-link: process-pr-review -->

# PR #2532 Review Audit

Source: pull-request reviews and inline review threads for <https://github.com/torrust/torrust-tracker/pull/2532>.

## Ownership

The PR author owns this tracked audit record. Reviewers, including repository review agents,
deliver findings through GitHub and have no repository-artifact obligation.

- Post-merge workflow approval: N/A

## Status Values

- Relationship: `ORIGINAL`, `RE_RAISE_OF:<FindingId>`
- Disposition: `FIXED`, `NO_ACTION`, `SUPERSEDED`, `FOLLOW_UP`
- Thread state: `OPEN`, `RESOLVED`, `NON_RESOLVABLE`, `SUPERSEDED`. `OPEN` applies prospectively
to audits created or updated for approved follow-up work; historical audits remain valid without
bulk migration.
- Severity: `Blocker`, `Major`, `Minor`, `Nit`, `Suggestion`; append `(inferred)` when derived
from free prose.
- Author class: `Copilot`, `Human`, `Unknown`
- Category: `link-integrity`, `formatting`, `metadata`, `testing`, `correctness`,
`documentation`, `maintainability`, `security`, `other`
- An outdated thread whose concern was fixed is `FIXED`/`RESOLVED`, even when GitHub marks the
original thread outdated after the push. For in-PR feedback, use `NO_ACTION`/`SUPERSEDED` only
for a duplicate, superseded, or no-change concern. A post-merge `NO_ACTION` requires maintainer
approval to decline the follow-up work.

## Findings

Review 5521450385 (round 1, `copilot-pull-request-reviewer`, state `COMMENTED`, submitted
2026-10-14 16:48 UTC on the head whose tip commit was
`chore(issues): archive closed issue #2521 spec to docs/issues/closed`,
<https://github.com/torrust/torrust-tracker/pull/2532#pullrequestreview-5521450385>) left no inline comment and reports "0 open findings". Its
"Needs a closer look" sentence is nevertheless an independently actionable assertion, recorded as
`F1` with `Thread state=NON_RESOLVABLE`. The rest of the body summarizes the changes and is not a
further finding.

Review 5522263962 (round 1, `da2ce7`, state `APPROVED`, submitted 2026-10-14 17:53 UTC on the head
whose tip commit was `docs(pr-reviews): [#2521] add the PR #2532 review audit`,
<https://github.com/torrust/torrust-tracker/pull/2532#pullrequestreview-5522263962>) approved and left one inline comment bracketed `[Nit][F2]`;
the row keeps that ID. Its body reports what it checked and repeats F2; neither is a further
finding. GitHub dismissed the approval as stale when the F2 fix was pushed. Review 5523636848
(josecelano, `COMMENTED`, 19:39 UTC) is the container GitHub created for the F2 reply.

| Finding ID | Review finding reference | Author class | Severity | Category | Relationship | Disposition | Thread state |
| ---------- | ------------------------ | ------------ | -------- | -------- | ------------ | ----------- | ------------ |
| F1 | `review-finding:pr-2532-f1` | Copilot | Nit (inferred) | link-integrity | ORIGINAL | FIXED | NON_RESOLVABLE |
| F2 | `review-finding:pr-2532-f2` | Human | Nit | correctness | ORIGINAL | FIXED | RESOLVED |

## Finding Details

### F1 - The archived #2517 spec still points at the old open path of the #2521 spec

- PR number: 2532
- Source review ID: 5521450385
- Reviewer finding ID: N/A
- Source URL: <https://github.com/torrust/torrust-tracker/pull/2532#pullrequestreview-5521450385>
- Concern: "One live cross-reference in the archived #2517 specification still points to the removed open path": the Out of Scope note in `docs/issues/closed/2517-1669-encapsulate-statistics-repository-state/ISSUE.md` names `docs/issues/open/2521-1669-remove-unused-udp-stats-traits/ISSUE.md`, which this PR moves.
- Solution: The reference had been retained as a historical record, but it is a navigational "tracked by" pointer, so it now names the closed path; the #2517 spec's `last-updated-utc` and progress log record the change. Outside this audit, the two remaining mentions of the old path are `Current-tree verification` commands in the PR #2529 audit, which record the commands as they were run.
- Current-tree verification: outside this audit, whose Concern quotes the old path and whose verification names the search pattern, `rg -n 'open/2521-1669-remove-unused-udp-stats-traits'` matches only lines 132 and 145 of `docs/pr-reviews/pr-2529-review/PR-REVIEW.md`; line 133 of the #2517 spec names `docs/issues/closed/2521-1669-remove-unused-udp-stats-traits/ISSUE.md`.
- Resolution reference: `docs(issues): [#2521] point the archived #2517 spec at the closed #2521 spec`
- Follow-up PR URL: N/A
- Reply URL: <https://github.com/torrust/torrust-tracker/pull/2532#issuecomment-6173714194>

### F2 - The F1 verification claim is contradicted by this audit's own lines

- PR number: 2532
- Source review ID: 5522263962
- Reviewer finding ID: N/A
- Source URL: <https://github.com/torrust/torrust-tracker/pull/2532#discussion_r4274337998>
- Concern: Once this audit was committed, the F1 search for the old open path matched four lines, not two: the two PR #2529 audit lines plus this audit's own F1 Concern (which quotes the old path) and F1 verification (which names the search pattern). The F1 Solution's "The two remaining mentions" sentence had the same problem. The validator does not check this prose.
- Solution: Both F1 claims are now scoped to the files outside this audit, and the verification names why the audit's own lines match. This entry avoids quoting the old path, so it adds no further match.
- Current-tree verification: the F1 search returns lines 132 and 145 of the PR #2529 audit and, in this audit, only the F1 Concern and F1 verification lines, as the scoped F1 claims now state. They are named by role because this audit's line numbers shift as entries are added.
- Resolution reference: `docs(pr-reviews): [#2521] scope the PR #2532 audit's old-path search to the files outside it`
- Follow-up PR URL: N/A
- Reply URL: <https://github.com/torrust/torrust-tracker/pull/2532#discussion_r4275413496>

## Processing Log

- 2026-10-14 16:48 UTC - Review 5521450385 (`copilot-pull-request-reviewer`, `COMMENTED`) left no
inline comment; its body flags the #2517 spec reference.
- 2026-10-14 16:55 UTC - Committed the F1 fix at the maintainer's request.
- 2026-10-14 16:58 UTC - Pushed the fix and posted the PR conversation response.
- 2026-10-14 16:58 UTC - Created this audit.
- 2026-10-14 17:53 UTC - Review 5522263962 (`da2ce7`, `APPROVED`) left inline comment 4274337998.
- 2026-10-14 19:37 UTC - Committed the F2 fix at the maintainer's request.
- 2026-10-14 19:39 UTC - Pushed the F2 fix, which dismissed the approval as stale, and posted the
F2 reply.
- 2026-10-14 19:40 UTC - Added F2 to this audit.

## Completion Rules

- Re-derive the reply claim against the current tree before replying or resolving a thread.
- Reply on every resolvable thread before resolving it.
- For an outdated thread whose concern was fixed, record `Disposition=FIXED` and
`Thread state=RESOLVED`, even if GitHub marks the thread outdated after the push. For a
duplicate, superseded, or no-change in-PR thread, reply exactly
`Superseded by <FindingId>: <reason>.`, record `Disposition=NO_ACTION` and
`Thread state=SUPERSEDED`, then resolve it. A post-merge `NO_ACTION` requires maintainer
approval to decline the follow-up work.
- A consolidated PR conversation response may cover multiple review rounds only when it names
every review ID and every finding ID with its disposition and resolution reference. Record its
durable URL in each related row.
- Cite a fix by its unique Conventional Commit subject or durable reply URL, never by a branch SHA
that can change after a rebase.
- Refresh review threads using GraphQL and confirm that no unresolved actionable thread remains.
Loading