feat(bug): move bug reporting to /bug/ and list every project's tracker - #167
Conversation
The bug-reporting page lived at /community/support/, a URL nobody guesses. Move it to /bug/, keeping the old path plus /bugs/ and /report/ as aliases, and repoint the homepage, quickstart and footer links. Add a complete table of every public project's issue tracker, largest first by stars, so a report about a project the triage section doesn't name has an obvious destination. Add a note on where security vulnerabilities go, since a public issue for an unfixed hole is a working attack recipe. Private vulnerability reporting is only enabled on freenet-core and raven, so the security note points everyone at freenet-core's advisory form rather than at "the relevant repository", which would dead-end on the other 16. Repos left out of the table are internal build and test infrastructure (portal, websitemirror, freenet-test-network, paper-1) or have issues disabled (blindsign, freenet-scaffold-macro). Claude-Session: https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
Moving the support page out of content/community/ left the section's title-only _index.md behind, so /community/ rendered as a "Community" heading with no children. Delete it and alias /community/ to /bug/. Found by codex review on #167. Claude-Session: https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
Moving the support page out of content/community/ left the section's title-only _index.md behind, so /community/ rendered as a "Community" heading with no children. Delete it and alias /community/ to /bug/. Also gitignore hugo-site/public_review, a build output directory that is not covered by the existing hugo-site/public entry. Found by codex review on #167. Claude-Session: https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
d102016 to
2a2cd22
Compare
From the code-first and skeptical review passes on #167: - The security callout gave a reporter without a GitHub account no private route, three lines below telling them to use the public Matrix room. Add an email fallback and carve security reports out of the Matrix advice. - "whichever project it affects" invited a reporter to try <repo>/security/advisories/new by analogy. Private vulnerability reporting is enabled only on freenet-core, so those 404 and push the reporter back to a public issue form. Name freenet-core explicitly as the one private channel. - Soften "we'll credit you when the fix ships" to match what SECURITY.md actually promises: acknowledgement and coordinated disclosure. - Link each table row to the project's issue list rather than its new-issue form. /issues/new 302s a logged-out reader to a login page with no way back, so the "check whether yours is already there" advice dead-ended. - Add paper-1. It is public, accepts issues, and is the source of the whitepaper this site publishes, so it is not the build infrastructure the closing sentence claimed. Reword that sentence to cover dormant experiments and issues-disabled crates too. - "largest project first" was false by every size metric; the order is by stars. Say so. - llms.txt still pointed at /community/get-involved/ labelled "how to contribute", which now redirects to a bug-report page. Replace with /bug/. Claude-Session: https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
Review summaryRisk tier: Light (content page, no code paths). Ran three independent lenses on Fixed
Also caught in passing: a Not fixed, deliberately
Open question for a maintainerPrivate vulnerability reporting is enabled on Verification
[AI-assisted - Claude] |
From the verification review pass on #167: - email-protect emits block-level HTML, and the alert shortcode runs its inner text through markdownify, so nesting the two split the sentence across three rendered paragraphs: "...without one, email" / the address / "instead. We'll acknowledge...". Spell the address out inline instead. That survives markdownify, needs no JavaScript, and gives a reporter browsing with scripts off an actual route rather than "[Enable JavaScript to see email]" — which matters here, since the same callout forbids the public Matrix room and the GitHub form needs an account. - "It is the one private channel, and the other repositories have no equivalent form" was false: private vulnerability reporting is enabled on raven as well as freenet-core. Say that reports for every project are handled at freenet-core instead, which is true and is the part the reporter needs. - "The complete list" and the omitted-repos sentence still overstated. The table lists every project you can file against, not every repo, and freenetorg-website is archived rather than infrastructure or a dormant experiment. - llms.txt advertised /resources/why-freenet/, whose source is draft: true, so the URL 404s. Removed. Pre-existing, but this PR is the one editing that file. Claude-Session: https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
Second review roundRe-ran the review on the changed content, since the first round's fixes were 1. The security callout rendered broken. <p>...without one, email</p>
<p><span id="ep-85d90cc5"></span></p>
<script>...</script>
<p><noscript>[Enable JavaScript to see email]</noscript>
instead. We'll acknowledge your report...</p>Worse than cosmetic: the no-JS reader saw 2. "It is the one private channel" was false. Private vulnerability Also in this round: "The complete list" narrowed to "every project you can file External pass ( Verified again after the changes: [AI-assisted - Claude] |
Problem
Freenet has no memorable URL for "where do I report a bug". A page does exist,
added in #120, but it lives at
/community/support/, which nobody guesses andwhich reads like a help desk rather than an issue tracker index.
It also stops short of a full list. It triages the four things most people are
using (River, Freenet itself, this website, Ghost Keys) and then names six other
apps in a sentence. The libraries and developer tools have no entry at all, so a
bug in
freenet-stdliborfreenet-migratehas no signposted destination.There is nothing about security vulnerabilities either, and a public issue for
an unfixed hole is a working attack recipe.
Approach
One page, not two. Rather than add a second bug page at
/bug/and leave twocompeting versions to drift apart, this moves the existing page there and keeps
/community/support/and/community/get-involved/as aliases, adding/bugs/,/report/and/community/alongside them, so every existing link stillresolves. The homepage, quickstart and footer links are repointed to the short
URL.
Three additions to the page itself:
first. Each name links to that project's issue list, so a reader can check
whether their bug is already there. It sits below the "what were you using?"
triage, which stays the primary route: the table is the reference list for the
cases triage doesn't name.
advisory form with an email fallback for anyone without a GitHub account, and
saying explicitly that the public Matrix room is not the place for them.
Repos left out of the table are internal build and test infrastructure
(
portal,websitemirror,freenet-test-network), dormant (kweb-up-poc,freenetorg-website, which is archived), or have issues switched off(
blindsign,freenet-scaffold-macro).paper-1is included: it is public,accepts issues, and is the source of the whitepaper this site publishes.
One judgment call worth flagging: the table is two columns, not three. A
third "New issue" column pushed the table into horizontal scroll on a 390px
viewport, which put the primary action off-screen on a phone. Linking the
project name to the issue list instead keeps the whole table on screen at every
width, and works for a logged-out reader, which
/issues/newdoes not.Review
Four independent passes: code-first and skeptical Claude reviewers, an external
codex review, and a verification pass over the resulting fixes. They foundeleven real problems, including one that mattered: the security callout
originally left a reporter without a GitHub account with only the public Matrix
room, which this page's own text three lines above recommends. All are fixed;
the two consolidated review comments below record each finding and where it
landed. The final external pass reports no regressions.
Testing
hugobuilds clean, no warnings.python3 scripts/check-links.pypasses: no broken internal links, 224 pages.Its self-test passes too, so the green is not vacuous.
/bug/in the built output, and/community/no longer publishes an empty section page or an empty feed.enabled, no issue template that would divert the link, and every URL returns
200 anonymously.
script, and a usable address with JavaScript disabled.
There is a separate theme bug this change worked around rather than fixed: the
breakout rule at
base.css:337that should let wide tables extend past theprose column never takes effect, because
max-width: 100%atbase.css:811clamps it. Filed as #168 rather than fixed here, since it changes how tables
render on other pages and deserves its own visual review.
https://claude.ai/code/session_016G7mL6JBHFqXJf7SksY631
[AI-assisted - Claude]