Repository navigation
docs(issues): [#2446] establish the workspace baseline analysis - #2462
josecelano merged 29 commits into
Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Verification evidence is incomplete, and several draft specifications contain contradictory or unmet completion requirements.
Review effort: Balanced
Findings: 4
Open (8)
Follow the required bug reproduction and recheck workflow · New Require actual test-helpers decoupling and publishability · New Align optional dependency handling with report classification · New Add reproducible MV3 metadata comparison evidence · New Use a stable issue reference instead of the open-spec path · New Correct the off-by-one dependency comparison · New Clarify AC1 to match its evidence scope · New Correct architecture diagram layer classifications · New
What changed in this PR
Refreshes EPIC #1669’s workspace baseline analysis and records follow-up work.
Changes:
- Regenerates dependency, coupling, and README analyses.
- Marks baseline tasks complete with verification evidence.
- Adds three draft follow-up issue specifications.
| File | Description |
|---|---|
docs/media/packages/dependencies-workspace-packages.md |
Refreshes the dependency diagram. |
docs/issues/open/2446-1669-establish-baseline-analysis/manual-verification-evidence.md |
Records baseline validation. |
docs/issues/open/2446-1669-establish-baseline-analysis/ISSUE.md |
Marks implementation and criteria complete. |
docs/issues/open/1669-overhaul-packages/workspace-coupling-report-2026-10-06.md |
Adds the current coupling report. |
docs/issues/open/1669-overhaul-packages/readme-audit.md |
Updates the package README audit. |
docs/issues/open/1669-overhaul-packages/EPIC.md |
Records baseline completion and follow-ups. |
docs/issues/drafts/1669-gate-server-testing-modules-behind-feature/ISSUE.md |
Drafts testing-feature work. |
docs/issues/drafts/1669-decouple-test-helpers-from-unpublished-crates/ISSUE.md |
Drafts test-helper decoupling work. |
docs/issues/drafts/1669-coupling-tool-resolve-lib-names-and-renames/ISSUE.md |
Drafts coupling-tool corrections. |
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
da2ce7
left a comment
There was a problem hiding this comment.
Reviewed at 211c49f1bdf5a54062fc06d44b72ebaed296326f (round 1). Recomputed from the bytes at this head, against its base 3efbc28ce; develop is 604b26c6c and the merge is clean.
This PR implements SI-01 of EPIC #1669 for issue #2446. It adds a 2026-10-06 coupling report with Observations, refreshes the README audit, regenerates the dependency diagram, drafts three subissues, marks the baseline done in the EPIC, and completes the spec and its evidence. It is documents only (9 files, +2280/−178, 12 commits). The two later develop merges touch none of its files, and a git merge-tree of this head against develop and against six other open PRs is clean.
Spec transition. status: in-progress under open/ matches cleanup-completed-issues (done is set at archive, :179-183) and how recent implementation merges left their specs. related-pr: null breaks no rule. The 16:25 stamp equals the last log entry, and the last two commits do not touch the spec. Not needed with a logged reason is what docs/templates/ISSUE.md:239-240 and create-issue:141-143 allow. The spec-only PR merged at 12:31Z, before the first commit at 12:56Z. Every AV link resolves.
Coupling report. The manifests give 31 members. The report covers exactly those (11 leaves + 20 sections), and its 92 [normal] workspace edges equal the manifests' 92. The comparison table, the June deltas, the resolved June items and the thin-edge list hold, except F5 and F8.
Diagram. The manifests give 153 torrust* normal edges (92 internal, 61 external). The diagram draws all 153, none missing, plus server-lib --> net-prim (F9). Its layering contradicts the architecture docs (F6).
README audit. There are 25 rows: the root crate, console/tracker-client and the 23 packages/*. Crate names equal [package].name, line counts equal wc -l, and 4/12/9/0 matches the rows. The seven removed and six added rows match the base table.
Evidence file. The toolchain is recorded and MV2 and MV4 reproduce. MV3 does not (F1). The rebased-head rerun is recorded, and the regular-expression surprise is at :207-209.
Drafts. The code claims hold: the publication state at EPIC.md:121; the testing-only imports; main.rs:124-126 deriving the module from the package name. The plans do not: F2, F3, F4 and F7.
EPIC. The done row, the draft rows, the #TBD Details rows and the spec-index links follow the existing forms and resolve. The 16:21 stamp equals its log entry, AC1's three links resolve, and the first-cycle exit criteria get a Status line.
Hygiene. All twelve commits have Conventional subjects with [#2446], author = committer, ascending author times and no trailers. None changes a manifest or project-words.txt. Each body matches its diff: the post-rebase regeneration changes import lists in six edges and no dependency heading. docs(packages) fits commit-changes:41, and Closes #2446 is right for an implementation PR (open-pull-request:125,151).
Findings
Blocking: F1, F2, F3, F4 (Major); F5, F6 (Minor). Non-blocking: F7 (Minor); F8, F9, F10 (Nit); F11 (Suggestion).
Checked, no finding
- The frontmatter stamps of the spec (16:25), EPIC (16:21), evidence file (16:47) and drafts (16:01) each equal their last log entry or run time.
- The report table (25→31, 24→25, 1→6, 7→11, 15→16) holds, and so does the six-package
torrust-server-libdrop. - The thin edges carry one import each, as stated, and
deny.toml:52-57allows the adapter →udp-serveredge. - The audit's 14 links to the root crate's docs.rs page and its three wrong titles hold.
test-helpers' helpers are used only throughtests/common/mod.rs:31-34; DEC-13's release-build note is atDECISIONS.md:314.- All 110 relative links in the changed files resolve, 39 of them new, anchors included.
On Copilot's findings
- F1: holds in part. The generated lines say 13→14; 12→13 is the distinct-crate count. Nit (F8).
- F2: holds. The expected list is never printed, so
identicalcannot be derived (template :12-13, :54, :60). Major (F1). - F3: holds. Options 2 and 3 cannot meet the Goal (:33-35), and AC2/AC4 still close. Major (F3).
- F4: holds.
main.rs:62-66,128-134classifies bykindonly, andsrc/testing/imports cannot be dev-dependencies. Major (F2). - F5: holds and binds the draft now:
fix-bug:130-131says "while drafting the spec, before asking the maintainer to review it". Major (F4). - F6: holds as a preference ("prefer", convention :188-191), and the archive skill's Step 4 repairs live references. Suggestion (F11).
- F7: holds (
packages/AGENTS.md:19-20,docs/packages.md:85-88). Minor (F6). - F8: holds literally, but the AV row and the 16:25 log entry state the qualification. Nit (F10).
Checks
On the loop's compute hub at this head, base develop 460385256 at gate time (receipt server-gates-krkavec-124; the PR's base 3efbc28ce is now two merges behind, #2457 and #2459, neither touching any of this PR's nine files, and the merge of this head onto the current develop 604b26c6c is clean by git merge-tree): pre-commit profile gate exit 0 (76 s), tree clean after the gate; linter markdown, linter cspell, linter lychee exit 0; frontmatter-validator --all: 19 errors / 4 warnings at this head and 19 / 4 at develop 460385256 re-measured, so no new frontmatter finding. Regeneration with the committed tool (cargo run -q -p workspace-coupling -- <path>, 9 s) and a line diff against the committed workspace-coupling-report-2026-10-06.md: 126 differing lines, all in the hand-written parts (the ten-line frontmatter, the Generated: stamp, and the Observations section, which the tool emits as a placeholder) — the generated sections are identical. cargo metadata --no-deps at this head: 31 workspace members; 153 normal torrust* dependency edges. GitHub checks at this head at posting time: "1 check, Docs Lint completed/success". At posting, develop is 604b26c6c.
211c49f to
496ff6d
Compare
Record Copilot review 5432054524 (F1-F8) and da2ce7 review 5439725107 (F9-F19, his F1-F11), all fixed and replied.
da2ce7
left a comment
There was a problem hiding this comment.
Reviewed at 16e682999a39b077ca05a9ee7dab63aec93d6be1 (round 3). Recomputed from the bytes at this head, against develop at 7836471b3.
The push adds one commit, 16e682999, which creates docs/pr-reviews/pr-2462-review/PR-REVIEW.md (335 lines). The range-diff shows the 24 earlier commits as =. My round-2 review approved the round-2 tip, but it was not posted because the head moved during that lane; its result is carried into this round.
F1–F11. The 24 fix-bearing commits are unchanged, and the new commit touches no file they concern, so all eleven remain fixed as verified at the round-2 tip. That includes MV1/MV3 reproduced from the manifests, the bug draft's R1 listing reproduced, five mis-resolved edges, 153 + 1 diagram edges, REST nodes in their own layers, and the three drafts' plans and completion-review conditions. The record's numbering is its own: Copilot's F1–F8 keep their ids, and my F1–F11 become F9–F19, with the original id in Reviewer finding ID.
The record.
- Shape: headings match
docs/templates/PR-REVIEW-TEMPLATE.md. Ownership (withN/A), Status Values (template :28-43) and Completion Rules (:115-130) are verbatim. - Rows: all 19 have:
- the right
Source URLandSource review ID(5432054524 for F1–F8; 5439725107 for F9–F19, roots 4204784906 … 4204784977); - a
Reply URLon the same thread (09:45:26–57Z); - severity equal to each bracket, and well-formed references;
- a
Resolution referencethat names a subject on the branch.
- the right
- Relationships: the eight
RE_RAISE_OFrows (F9→F2, F10→F4, F11→F3, F12→F5, F14→F7, F16→F1, F18→F8, F19→F6) were raised against the same unfixed head and discharged by the same commit.FIXED/RESOLVEDfollows the first clause of Completion Rules :119-121. TheSuperseded byclause fits a re-raise that needs no change of its own, as #2461 used it. - Thread state:
RESOLVEDmatches the capture, where all 19 threads are resolved. - Processing Log: three entries in order, none later than the 09:51:32Z commit, and both review entries match
reviews.json. - Validator: the repository's
validate-audit-record.py, run offline with the captured comments and--base 7836471b3, returns ok (19 rows, 0 failures). - One false cell: F8's Solution (F15).
Round-2 items. My round-2 review was never posted, so its findings are restated here, re-checked at this head:
- F12 (stamps and logs trailing edits) stands.
- F13 (missing audit record) is fixed by this record, which also resolves the bare "finding F" ids in the logs: F8, F4, F3 and F5 now name the audit's rows.
- F14 (stale "four" wording) stands.
Hygiene.
- All 25 commits have author = committer.
16e682999was authored at 09:51:32Z, after 09:25:15Z. docs(pr-reviews): [#2446] …matches its diff, and the scope matches the #2461 audit commits.- No trailers, no manifest or
project-words.txtchange, andgit diff --checkis clean.
Findings
Blocking: F15 (Minor). Non-blocking: F12 and F14 (Nit).
Checked, no finding
- The Copilot rows use
Reviewer finding IDN/A, because their ids were not reassigned (process-pr-review :218-219). - Every category is from the allowed set, and each re-raise shares the category of its original.
- The record's frontmatter cites
"issue #2446". - The record contains no relative links, and no banned token.
Checks
On the loop's compute hub at this head, base develop 7836471b3 (receipt server-gates-krkavec-138): pre-commit profile gate exit 0 (76 s), tree clean after the gate; linter markdown, linter cspell, linter lychee exit 0; frontmatter-validator --all: 19 errors / 4 warnings at this head and 19 / 4 at develop 7836471b3 re-measured, so no new frontmatter finding. Regeneration with the committed tool (cargo run -q -p workspace-coupling -- <path>, 5 s) and a line diff against the committed workspace-coupling-report-2026-10-06.md: 127 differing lines, all in the hand-written parts (the frontmatter, the Generated: stamp, and the thin-dependencies and Observations sections, which the tool emits as placeholders) — the generated sections are identical. cargo metadata --no-deps at this head: 31 workspace members; 153 normal torrust* dependency edges. validate-audit-record.py --pr-number 2462 over the live review comments: 19 rows, 3 log entries, 0 failures. GitHub checks at this head at posting time: "1 check, Docs Lint completed/success". At posting, develop is 30e6b7127 (the merge of #2438, which touches none of this PR's files), and the merge of this head onto it is clean by git merge-tree.
16e6829 to
5bf2ca7
Compare
Record Copilot review 5432054524 (F1-F8) and da2ce7 review 5439725107 (F9-F19, his F1-F11), all fixed and replied.
…indings Record da2ce7 review 5440778746 (his F12, F14, F15 as F20-F22), all fixed and replied.
da2ce7
left a comment
There was a problem hiding this comment.
Reviewed at 3f42841ef211a7fc8194342bd2e2b609b46b0f54 (round 4). Recomputed from the bytes at this head, against develop at c7cb2b3fa.
Two pushes are covered here. The first rebased the 25 round-3 commits onto c7cb2b3fa, resolving the conflict on the 1669 EPIC, and added three fixes for my round-3 findings. The second added the record rows for that review. My review of the round-4 tip 5bf2ca74f was superseded before posting; its result is carried here, and its F16 (missing rows) is answered by 3f42841ef.
Rebase.
- The range-diff of the round-3 commits gives 23
=. Commits 7 (0dd1ba6f5) and 9 (174260529) differ only in context the merge of #2456 added: the #2454 line and the 16:05 and 20:06 log entries. - The PR's 23 own changed lines in
EPIC.mdare unchanged. Itslast-updated-utcedit gave way todevelop's later2026-10-07 08:04, which equals the EPIC's last log entry, and the PR's 16:21 entry sits in order between 16:05 and 20:06. - Between the round-3 tip and the round-4 tip, the PR's paths differ only by
develop's EPIC delta and the three fixes. All 28 round-4 commits are=, and this head adds only the record commit.
F1–F11. Their commits are unchanged, so they remain fixed.
F14. The bug draft :68-69 now says finding 3 "now lists all five", and finding 3 (workspace-coupling-report-2026-10-06.md:1215-1222) does list five.
F12.
- The spec's Progress Log adds 08:56 (AC2 row) and 09:11 (AC5 row) entries, backfilled at 12:39 (:314-318). Each draft adds a 09:25 completion-review entry, and the bug draft also adds 12:29.
- The entry times equal the fix commits' author times, every log is chronological, and all four stamps read
2026-10-07 12:39, no earlier than any entry.
F15.
- The record's F8 Solution (:165) now says AC1 "limits the no-mention requirement to the generated sections (everything before
## Observations)". That is what AC1 states (spec :336-339): "its generated sections (everything before## Observations) no longer mentionrest-api-core". - No reproduction claim remains, and F18 inherits the corrected cell.
Record.
- 22 rows. F20, F21 and F22 are my F12 (Nit), F14 (Nit) and F15 (Minor), each sourced from review 5440778746 with its
Reviewer finding ID,ORIGINAL,FIXEDwith the fix subject on the branch, and its 13:08:45–49Z reply on the same thread.RESOLVEDmatches the capture, where all 22 threads are resolved. - The 10:10 log entry matches the review: CHANGES_REQUESTED at 10:10:04Z on
16e682999, with three findings. The 13:08 entry logs the fixes, the rebase, the push and the replies, and no stamp is later than the 13:16:08Z commit. - Status Values and Completion Rules equal the template at
c7cb2b3fa. - The docs' "finding F20/F21" now resolve. The validator, run offline with
--base c7cb2b3fa, returns ok (22 rows, 0 failures).
Hygiene.
- 29 commits, all with author = committer. Committer times run 12:54:23Z–13:16:08Z, ascending and after the 12:50Z merge. The three fixes were authored at 12:31–12:44Z, the usual shape of a rebase.
- Subjects are
docs(issues|packages|pr-reviews): [#2446] …and match their diffs. There are no trailers. - No manifest or
project-words.txtchange,git diff --checkis clean, and the record has no relative links.
Findings
None.
Checked, no finding
- F16 (round 4, unposted) is fixed by
3f42841ef. - The 13:08 log entry's "keeping both sides" holds for the quick-list and log lines. The stamp took
develop's later value, which is the correct resolution.
Checks
On the loop's compute hub at this head, base develop c7cb2b3fa (receipt server-gates-krkavec-153): pre-commit profile gate exit 0 (78 s), tree clean after the gate; linter markdown, linter cspell, linter lychee exit 0; frontmatter-validator --all: 19 errors / 4 warnings at this head and 19 / 4 at develop c7cb2b3fa re-measured, so no new frontmatter finding. Regeneration with the committed tool (cargo run -q -p workspace-coupling -- <path>, 5 s) and a line diff against the committed workspace-coupling-report-2026-10-06.md: 127 differing lines, all in the hand-written parts (the frontmatter, the Generated: stamp, and the thin-dependencies and Observations sections, which the tool emits as placeholders) — the generated sections are identical, as at the round-3 head. cargo metadata --no-deps at this head: 31 workspace members; 153 normal torrust* dependency edges. validate-audit-record.py --pr-number 2462 over the live review comments captured after the maintainer's replies: 22 rows, 5 log entries, 0 failures. GitHub checks at this head at posting time: "1 check runs, 1 success (Docs Lint success)". At posting, develop is c7cb2b3fa (the merge of #2456, whose edit of the #1669 EPIC this head carries after the rebase), and the merge of this head onto it is clean by git merge-tree.
Regenerate the coupling report for the post-torrust#1938 workspace (31 members) and write its Observations: comparison with the 2026-06-10 report and three new findings (published test-helpers on unpublished crates, testing modules as runtime edges, tool misses renamed crates).
…ker packages Remove the seven rows for packages no longer in the workspace, add the root crate and the five newer packages, use current folder and crate names, re-rate the changed READMEs, add a missing rating, and fix the Summary (4 good, 12 minimal, 9 stub).
Regenerate every edge from cargo metadata (153 normal torrust-* edges): remove rest-api-core, add the three REST API packages, show torrust-server-lib as an external crate, and link the 2026-10-06 coupling report.
…from unpublished crates T12, finding 1 of the 2026-10-06 coupling report.
…dules behind a feature T12, finding 2 of the 2026-10-06 coupling report.
…le name resolution T12, finding 3 of the 2026-10-06 coupling report.
…bissues Point findings 1 to 3 of the 2026-10-06 report at their drafts and list the drafts in the EPIC torrust#1669 quick list, Details table and specs index.
MV1 to MV4 pass: report covers the 31 members and is reproducible, the diagram has the 153 cargo-metadata edges, and the README audit has one correct row per audited package.
…orrust#1669 Tick the SI-01 quick-list entry and AC1, set its Details row to DONE, record the first-cycle status, and log the completion.
…baseline spec Mark T9 to T13 and MV1 to MV4 done, tick the acceptance criteria with evidence, record the post-implementation review, and state why no retrospective is needed.
…asing onto develop Develop gained test and import changes; regenerate the generated sections so the report stays reproducible. No dependency edge changed and the Observations still hold.
…ncy count The tool's own counts are 13 (2026-06-10) and 14 (2026-10-06), not 12 and 13.
…its open-spec path The report outlives the issue, whose spec moves to docs/issues/closed/ on closure.
… in their own layers Match docs/packages.md and packages/AGENTS.md: rest-api-application is the Application layer and rest-api-runtime-adapter the Runtime Adapter layer, not Core. Edges are unchanged.
Replace the count-only commands with the self-contained script that maps cargo-metadata dependencies to diagram node IDs and compares both edge sets, and its output.
The generated report sections do not mention rest-api-core; the Observations name it when recording its removal. Put that qualification in AC1 instead of only in the evidence.
…ers draft Drop the escape clauses and the options that leave test-helpers unpublishable (a feature gate keeps optional unpublished dependencies; publishing first is out of scope). AC2 and AC4 now require no unpublished dependency and a successful publish dry run.
…feature draft Feature-gated dependencies stay kind null with optional: true in cargo metadata. Describe test-only edges as optional or dev dependencies, and require the coupling tool and the diagram to show optional edges (new AC8).
…ing-tool draft Reproduce the bug with the real tool before review and record it as Reproduced in issue-local evidence (five affected edges, including an axum-http-server dev dependency); add the plain-language explanation, a red regression-test task and a like-for-like recheck.
…inding 3 The coupling-tool draft's reproduction found a fifth edge reported without imports: axum-http-server's dev dependency on client-lib (custom library name). Update the report finding and the AC2 evidence.
… MV2 output line Rerun MV1 and MV2 and record the count, diff and exit-code commands that printed each observed line, and the run times per scenario.
…al edge The diagram draws 153 manifest edges plus torrust-server-lib --> torrust-net-primitives for context; say so in its prose and in the AC5 evidence.
…nditions in the drafts Copy the retrospective, no-discovery and agent-review-report conditions from docs/templates/ISSUE.md into the three 1669 drafts.
Record Copilot review 5432054524 (F1-F8) and da2ce7 review 5439725107 (F9-F19, his F1-F11), all fixed and replied.
…e coupling-tool draft
…dits Backfill progress-log entries for the 08:56, 09:11 and 09:25 UTC edits and move the stamps past them.
…t row AC1 limits the no-mention requirement to the generated sections; reproducibility belongs to MV2.
…indings Record da2ce7 review 5440778746 (his F12, F14, F15 as F20-F22), all fixed and replied.
3f42841 to
1c9b209
Compare
|
ACK 1c9b209 |
da2ce7
left a comment
There was a problem hiding this comment.
Reviewed at 1c9b2098bb376205857e0f3426eb7d3aab209f6f (round 5). Recomputed from the bytes at this head, against develop at a43bebea9.
The push is a rebase only: the 29 round-4b commits onto a43bebea9. Because it was a force-push, it dismissed the round-4 approval.
Range-diff and develop delta.
- The range-diff from the round-4b tip
3f42841efgives 29=, matching the capture. develop's deltac7cb2b3fa..a43bebea9touches onlydocs/issues/open/2411-spam-and-abuse-resistance/EPIC.mdanddocs/pr-reviews/pr-2469-review/PR-REVIEW.md, neither of them among this PR's 11 paths.- The diff from
3f42841efto this head, restricted to the PR's paths, is empty.
Hygiene.
- 29 commits, all with author = committer. Author identities, author times, subjects and bodies are unchanged.
- Committer times run 13:43:55Z–13:44:06Z, ascending and after
a43bebea9(committed at 13:42:51Z). - No trailers, no banned token, no manifest or
project-words.txtchange, andgit diff --checkis clean.
Findings
None.
Checked, no finding
- The round-4b verification stands unchanged for every carried commit: the rebase onto
c7cb2b3fa, F12/F14/F15, and the record rows F20–F22.
Checks
On the loop's compute hub at this head, base develop a43bebea9 (receipt server-gates-krkavec-159): pre-commit profile gate exit 0 (79 s), tree clean after the gate; linter markdown, linter cspell, linter lychee exit 0; frontmatter-validator --all: 19 errors / 4 warnings at this head and 19 / 4 at develop a43bebea9 re-measured, so no new frontmatter finding. Regeneration with the committed tool (cargo run -q -p workspace-coupling -- <path>, 5 s) and a line diff against the committed workspace-coupling-report-2026-10-06.md: 127 differing lines, all in the hand-written parts (the frontmatter, the Generated: stamp, and the thin-dependencies and Observations sections, which the tool emits as placeholders) — the generated sections are identical, as at the round-3 head. cargo metadata --no-deps at this head: 31 workspace members; 153 normal torrust* dependency edges. validate-audit-record.py --pr-number 2462 over the live review comments captured after the maintainer's replies: 22 rows, 5 log entries, 0 failures. GitHub checks at this head at posting time: "2 check runs, 2 success (Docs Lint success; Docs Lint success)". At posting, develop is a43bebea9 (this head's base after the rebase), and the merge of this head onto it is clean by git merge-tree.
…ssues/closed 3127250 chore(issues): archive closed issue #2446 spec to docs/issues/closed (Jose Celano) Pull request description: Archives the spec for issue #2446 (closed as completed by #2462) from `docs/issues/open/` to `docs/issues/closed/`. Related to #2446 Related to #1669 - Verified issue #2446 is `CLOSED` on GitHub. - Moved `docs/issues/open/2446-1669-establish-baseline-analysis/` (spec and manual-verification evidence) to `docs/issues/closed/`. - Updated frontmatter: `status: done`, `spec-path`, `related-pr: 2462`, `last-updated-utc`, and the evidence file's `issue-spec`. - Ticked the three remaining workflow checkpoints and added a progress-log entry. - Fixed the spec's two sibling-relative links (`../1669-overhaul-packages/...`) that the move broke; checked every relative link in the moved files by hand, since the local link checker skips `docs/issues/closed/`. - EPIC #1669: the Details row and the Subissue Specs Index now link to the closed path; added a progress-log entry. - Kept as historical records: the PR #2447 and PR #2462 review audits, and a branch name in a draft's evidence. - Pre-commit and pre-push checks passed. ACKs for top commit: josecelano: ACK 3127250 Tree-SHA512: d3ef07885069f825fb18ade27b2a980d65930923f0ad9041aae40c076f17442b6f4fc51f543a8cf71c6154cdac0443e253f6854b00661b69a56c8a551d02f687


Summary
Implements #2446 (SI-01 of EPIC #1669): refreshes the workspace baseline analysis for the post-#1938 workspace and records its findings as draft subissues. Documentation only.
Closes #2446
Changes
docs/issues/open/1669-overhaul-packages/workspace-coupling-report-2026-10-06.md, generated bycargo run -p workspace-coupling, covering all 31 workspace members. Its Observations compare against the 2026-06-10 report (the June prioritization items are all resolved) and record three findings.readme-audit.mdnow has exactly the 25 audited tracker packages (root crate,console/tracker-client, 23packages/*): seven stale rows removed, six added, names updated, amissingrating added, and the Summary corrected (4 good, 12 minimal, 9 stub).docs/media/packages/dependencies-workspace-packages.mdregenerated fromcargo metadata(153 normaltorrust*edges):rest-api-coreremoved, the three REST API packages added,torrust-server-libshown as external.docs/issues/drafts/1669-decouple-test-helpers-from-unpublished-crates/: publishedtest-helpersnow depends on unpublishedclient-liband the protocol crates.docs/issues/drafts/1669-gate-server-testing-modules-behind-feature/: the servers' publictestingmodules turn test-only edges into runtime dependencies (DEC-13 follow-up).docs/issues/drafts/1669-coupling-tool-resolve-lib-names-and-renames/: the tool misses renamed dependencies and custom library names (four false "no references" edges).docs/issues/open/2446-1669-establish-baseline-analysis/ISSUE.md: tasks, acceptance criteria and verification completed; no retrospective needed (reason in the progress log).Validation
manual-verification-evidence.md(rerun on the rebased head): report package set equalscargo metadata; regeneration differs only in the timestamp; the diagram's 153 edges equalcargo metadata; one correct README audit row per audited package.linter all) passed on every commit; pre-push passed.develop, the report was regenerated in its own commit: a few import paths changed in six edges, no dependency edge changed.