Files
felhom.eu/documentation/audits/forum-research-2026-10-12/METHOD.md
T
admin 52b6599d97
gates / gates (push) Successful in 6m36s
Audit: three years of the PROHARDVER! home-server forum read against Felhom; R-990, R-991 filed
Read-only. fetch.py (polite, 5 s apart, 34 pages, all 200), parse.py (own text only; four parser
defects found by the controls and fixed), build.py + spotcheck.py (stdlib). tags.csv holds post
numbers and tags only - no username, author id, salt or post text in git. FINDINGS.md (2,908 posts,
195 people, 82 beginner threads in 7 clusters), FELHOM.md (catalog gap, hardware fit, 15 website
questions, objections, ten ranked recommendations), METHOD.md (controls, spot-check: role and
hardware below 85 % after two rounds, the table-driving splits 92.5 % and 97.3 %), REPORT.md.
R-990: operator rules on the recommendations. R-991: no buyer-readable hardware floor.

Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-12 22:20:52 +02:00

86 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# METHOD — forum-research-2026-10-12
| Item | Value |
|---|---|
| Source | `https://prohardver.hu/tema/hazi_szerver_epitese/`, public, no login, no account |
| Window | posts dated 2023-10-12 00:00 or later: **#7943 (2023-10-12 17:01) → #11092 (2026-10-12 17:56)** |
| Fetch | 2026-10-12 21:53–21:56 CEST; `fetch.py`; one request at a time, 5 s apart (robots.txt asks 1 s); browser UA; cookie jar; 34 pages (hsz_7801-7900 … hsz_11101-11200); every answer 200; no block, captcha or login wall |
| robots.txt | read 2026-10-12 before fetching: `User-agent: *`, `crawl-delay: 1`, disallows only `/*/keres.php?*offset=` — unchanged from the spec |
| Cache | `~/research-cache/prohardver-hazi-szerver/` on DooPlex, outside every repo: raw pages, `posts.jsonl`, salt, tags, spot files. **Not in git.** |
| Posts | 3,150 numbers in the window; 2,909 present; 241 missing (#9874–#10108 the 2025 outage, #10118–10120, #8571, #9230, #11073); #11091 (Felhom's own announcement) excluded → **2,908 analysed** |
| People | 195 distinct writers (`author_id` = first 12 hex of sha256(salt + username); salt local only) |
## Parser controls (`parse.py`, all PASS on the final run)
1. **Counts:** every full page yields 100 posts, numbers contiguous; hsz_7801 99, hsz_8501 99, hsz_9201
99 (one post each removed by the site), hsz_9801 73 and hsz_10101 89 (the outage edges), two pages 0,
hsz_11001 91 (newest). The last request (11101-11200) redirected to 11001-11100; duplicates kept once.
2. **Five random posts by eye** (seed 20261012): #9610, #7975, #8149, #7948, #8119 — own text whole,
quoted parent absent in all five, checked against the raw page.
3. **#8099** yields its own Proxmox 7.x complaint; the #8096 Raspberry Pi 4 → i5-6500T text is absent;
and #8096 itself carries that text (the control can fail).
**Four parser defects found by these controls and fixed before tagging:** posts with no parent
(`data-rplid=""`) were dropped (85 → 100 per page); edited posts (pencil icon inside `<time>`) lost
their date; this year's dates have no year („aug. 9.”, „ma”, „tegnap”) and were normalised against the
fetch day; **hand-pasted quotes** — users copy the parent's words into their own text, often in
`<small><b><i>` — were removed line by line and sentence by sentence when ≥ 20/25 characters match the
parent (142 removed; quote-leak sweep 17 → 0). A pasted fragment shorter than that, or with no space
after its full stop, can survive (seen once, #8173).
## Tagging
Schema: `TAGGING-BRIEF.md` (v1 for all columns; v2 for `role`, `hardware`, `hardware_status`).
Nine helper agents, one block of whole pages each, no overlap, the same brief and the full fence list.
Columns added beyond the spec: `platform_status` (needed for table 5), `turnkey` (table 5e), and
`thread` in `tags.csv`. A `gist` (≤ 12 own English words) was used for clustering and stays in the cache.
**Beginner** = a person with at least one post whose role is `beginner-asks`: says „kezdő”, no Linux,
lost in commands, a first server, a basic question, or is told so (`beginner_evidence`).
**Threads:** walk up `reply_to` to the first ask; follow-ups by the same asker join; a lost-link
follow-up with no question type joins the asker's previous thread within 30 days. 308 threads, 82 beginner.
**Clusters:** the 82 beginner threads were grouped by reading their summaries (`clusters.json`, cache).
**Pain tags used (47):** power-bill · noise · cost-upfront · too-complex · space · hardware-failure · heat ·
time-cost · security-fear · data-loss-fear · family-acceptance · update-broke-it · vendor-lock-in ·
remote-access-confusion · bad-docs · disk-failure · gave-up · fears-terminal · cloud-distrust · cloud-cost ·
install-error · data-loss-happened · fears-docker · usb-enclosure-distrust · subscription-cost · dust ·
isp-cgnat · update-fear · distrusts-chinese-hardware · stale-plugins · device-sprawl · choice-overload ·
vpn-hassle · wants-gui · avoids-containers · lost-in-commands · dynamic-ip-outage · dislikes-linux ·
weak-hardware · bad-firmware · underpowered-hardware · raid-capacity-loss · install-failed ·
wants-hungarian-guide · update-burden · end-of-support · power-outage.
## Spot-check (spec 9.6) — `spotcheck.py`
The session re-tagged a random 146 posts (5.0 %, seed 77) itself, blind to the helper tags.
| Column | Round 1 | Round 2 (v2 rules) | Note |
|---|---|---|---|
| role | 83.6 % | 80.8 % | **below 85 % twice** |
| ↳ asks vs not asks | — | 92.5 % | the split every thread and cluster rests on |
| ↳ beginner-asks vs not | — | 97.3 % | the split every „beginner” table rests on |
| ↳ substantive vs other | — | 87.7 % | |
| beginner (y/n) | 99.3 % | — | |
| question_type | 95.2 % | — | |
| hardware | 79.5 % | 81.5 % (class set 82.9 %; ≥ 1 class shared when both tagged: 87.1 %) | **below 85 % twice** |
| hardware_status | 87.7 % | 83.6 % | |
| apps · apps_status | 92.5 % · 96.6 % | — | |
| platform · platform_status | 89.0 % · 90.4 % | — | |
| pain | 85.6 % | — | 30 % where either side tagged one — pains are leads |
| budget_huf · resolved | 97.3 % · 97.9 % | — | |
Round 1 also caught four of the session's own spot rows with a shifted field (fixed before scoring).
**Not followed: a third re-tag round.** Round 2's rules moved the disagreement rather than removed it —
it sits on „other vs answers” for chat posts and on whether a machine mentioned in passing counts.
Neither boundary changes a table: the decisions the tables use pass (92.5 %, 97.3 %), and hardware
counts carry an „approximate” banner in `FINDINGS.md`.
## Limits
- A **hobby forum**: self-selected and technical; a household buyer does not post here.
- **Hungarian only**; one topic; 195 people. Counts under ~5 people are anecdotes.
- 2023 covers Q4 only; 2026 runs to 12 October. The 2025 outage removed 235 posts (between 2025-04-28 and 2025-07-12).
- `resolved` is mostly unknown — askers seldom report back.
- Tags are an AI reading of short posts; every claim cites post numbers so a person can check it.
- Privacy: no username, `author_id`, salt or post text is in git; the cache stays on DooPlex.