โšก ้‰ดไบŽ่ฟ‘ๆœŸ DeepSeek ๆถจไปท็ญ‰ไธ€็ณปๅˆ—ๅ› ็ด ๏ผŒๅผ€ๅ‘ๆดปๅŠจๅฐ†่พƒๅคงๆ”พ็ผ“โ€”โ€”ๆ›ดๆ–ฐ่Š‚ๅฅไผšๅ˜ๆ…ข๏ผŒๆ•ฌ่ฏท็†่งฃใ€‚
Skip to content

๐Ÿฒ sip Second-Round Test Report โ€‹

Coverage period: 2026-08-11 ~ 2026-08-12 Tested versions: v1.0 โ†’ v1.1 โ†’ v1.1.4 (incl. cluster refactor) Method: automated CLI + manual TUI + fault injection + stress testing + security penetration Note: this report consolidates all test processes and re-verification data since the second round โ€” read it straight through, no need to consult the intermediate files


Table of Contents โ€‹

  1. Test Overview & Timeline
  2. First Round Review (v1.0, 7.1 pts)
  3. v1.1 New-Feature Testing (dedup/policy/insights/onboarding/telemetry)
  4. Security Re-test (7 vulnerabilities โ†’ 6 fixed)
  5. Tavern Jokes (creative edge-case mining)
  6. Stress Testing (dedup/policy/telemetry/Sumenia)
  7. Supplementary Tier (progress/health/WAL/OPML/export)
  8. Second Round Score (7.6 pts)
  9. v1.1.4 Re-test (discovering the cap & bidirectional pairing)
  10. Cluster Refactor Verification (root-curing the output explosion)
  11. grep Wildcard Problem & Fix
  12. Large-Change Regression (+696 lines, zero regression)
  13. Final Issue List
  14. Final Score
  15. Appendix: Test Sites & Data

1. Test Overview & Timeline โ€‹

PhaseTimeVersionCore Output
First round, full features08-11v1.051 tests, score 7.1
v1.1 new features08-12 AMv1.128 tests, 23 pass / 5 fail
Security re-test08-12v1.27 vulns, 6 fixed
Tavern jokes08-12v1.230 items, 4 defects unearthed
Stress test08-12v1.2performance curves + concurrency
Sumenia stress08-12v1.2463 events / concurrency
v1.1.4 re-test08-12v1.1.4cap-2000 discovered
Cluster refactor08-12v1.1.4output explosion root-cured
Large-change regression08-12v1.1.4 (18:52)+696 lines, zero regression

Cumulative tests: ~230+ items | Defects found: ~25 | Fixed & verified: 22


2. First Round Review (v1.0) โ€‹

51 functional tests, score 7.1/10.

DimensionScore
Feature completeness8.5
Stability6.0 (bare main-DB crash, O(nยฒ))
Performance7.0
Security6.5
Documentation7.5
AI friendliness6.5

Main defects: -l N O(nยฒ) hang, rss.db corruption bare crash, SSRF, terminal injection, exit-code contract chaos, --init crash on non-TTY.


3. v1.1 New-Feature Testing โ€‹

3.1 Cross-source dedup --dedup (pair form, at the time) โ€‹

  • Detection boundary: constructed 100% / 80% / 71% / 61% four similarity tiers and measured them โ€” only paragraph-level overlap โ‰ฅ 80% is reported
  • Detection: --dedup scan 12 groups (11 ร— 100% + 1 ร— 80%)
  • Hide/undo: hide/list/undo basically normal
  • โš ๏ธ Failures:
    • Anti-resurrection failed (delete + re-fetch + re-import)
    • -l N list did not filter dedup
    • scan candidates did not shrink after hiding

3.2 Source Policy --policy โœ… all passed โ€‹

5 actions (tag/keep/lower_frequency/archive/unsubscribe) + remove + boundary exit codes; createdBy is always user.

3.3 Insights โœ… all passed โ€‹

status+reasons refactor; no health/action/basis, no value judgments.

3.4 Onboarding โ€‹

  • CLI โœ… (list/category/add/skip)
  • TUI command line โŒ not wired (fixed later)

3.5 Telemetry โœ… all passed โ€‹

consent_change / feed_change / search (incl. full query terms) / dedup events all present.


4. Security Re-test (7 vulnerabilities โ†’ 6 fixed) โ€‹

#VulnerabilityRe-test resultKey evidence
1SSRF (full-text fetch reaching intranet)โœ… Fixedloopback/private/CGNAT/cloud-metadata all blocked; server logs show zero intranet requests
2Terminal injection (ESC control chars)โœ… Fixedcat -v confirms ESC fully stripped
3javascript:/file: linksโš ๏ธ PartialTUI open is blocked; exported .md still keeps the text
4rss.db corruption bare crashโœ… Fixedscene preserved as .corrupt + auto-rebuild
5--init non-TTY crashโœ… FixedReadKey exception degrades to ReadLine
6Exit-code contractโœ… Fixed6 commands all comply (0/1/3)
7grep wildcardsโŒ Not fixed (fixed later)see Section 11

Security score: 6.5 โ†’ 8.5


5. Tavern Jokes (30 edge-case stunts) โ€‹

Grand prize: dedup self-hug family pack

hide 924 924 โ†’ hidden 924 (keeping 924)   โ† hiding itself
hide 924 925 + hide 925 924 โ†’ ring hide   โ† canonical is itself hidden

Runner-up: hide breaks semantics

hide 931(Rust article) 1(hot-soup AI article) โ†’ hidden 931 (keeping 1)  โ† unrelated articles accepted

Bronze: policy says one thing, does another

lower_frequency 3x/day โ†’ invalid schedule but still written to policy

Line comedy: exit-code hopping, -L==-l, -d "not a url" auto-completed to https://not a url, etc.

4 real defects distilled: hide without validation, invalid schedule residue, -l not filtering dedup, self-hug stacking.


6. Stress Testing โ€‹

6.1 dedup scan complexity (pair era) โ€‹

Data volumeTimeConclusion
1500 articles1.2sfast
6500 articles14.3sO(nยฒ) obvious
4945 real duplicates9.7s + 503k pairs + 105MBoutput explosion

6.2 Batch operations โ€‹

  • hide ร—100: 48s (0.48s each, dominated by startup overhead)
  • undo ร—20: 10.3s
  • policy ร—15: instant
  • -l 27 feeds: 541ms

6.3 Concurrency โ€‹

  • 5 concurrent reads / 4 concurrent writes / 8-process mix: all succeeded, DB intact
  • WAL crash recovery: DB intact after kill -9

6.4 Sumenia stress (telemetry) โ€‹

  • 463 events: show 0.5s / export 0.6s / insights 0.6s
  • Event mix: search 304 / dedup 132 / feed_change 19 / consent_change 1
  • 4~8 concurrent reads/writes all safe

7. Supplementary Tier โ€‹

Test itemResult
Reading-progress tolerance (invalid/negative/out-of-range/400KB)โœ… no crashes
Feed health (failure accumulation โ†’ success reset)โœ… FailCount 4โ†’0
SQLite WAL crash recoveryโœ… intact after kill
sidecar timing defectโœ… confirmed fixed
OPML round-trip idempotenceโœ…
--likes --json / --lang variantsโœ…
Large-feed export 839 articlesโœ… 0.88s

8. Second Round Score โ€‹

7.6/10 (A-), +0.5 over round one.

Dimensionv1.0v1.2Change
Features8.58.0-0.5
Stability6.07.5+1.5
Performance7.06.5-0.5
Security6.58.5+2.0
Documentation7.57.5flat
AI friendliness6.57.0+0.5

9. v1.1.4 Re-test (key turning point) โ€‹

9.1 Eight-defect re-test โ€‹

#DefectResult
1Anti-resurrectionโœ… Fixed (interception + controlled experiment)
2-l N filters dedupโœ… Fixed
3scan performance/explosionโš ๏ธ Partial (see below)
4hide semantic validationโœ… Fixed (self-hug / unrelated both blocked)
5lower_frequency invalid scheduleโœ… Fixed
6grep wildcardsโŒ (fixed later, see 11)
7TUI telemetry empty commandโœ… Fixed
8orphan rules after feed removalโœ… Fixed

9.2 Major discovery: cap 2000 + bidirectional-pairing bug โ€‹

Decisive experiment (2 feeds ร— 30 fully identical articles):

MetricTheoryActual
Unique duplicate pairs9001800 (doubled)
Symmetric reverse pairs01800 (all of them)

Conclusion:

  • FindNearDuplicates has a silent MaxCandidates = 2000 truncation (preventing output explosion)
  • Under the hood every cross-feed pair was computed twice (bidirectional traversal) โ€” half the cap budget wasted on symmetric duplicates
  • GitHub main-branch source is one-way i<j, the local exe is bidirectional โ€” exe and source out of sync (wrong version copied)

10. Cluster Refactor Verification (root-cause fix) โ€‹

Pair detection was changed to cluster detection:

Found 1 duplicate cluster (paragraph overlap โ‰ฅ 80%):
Cluster 60 articles ยท overlap โ‰ฅ 100% ยท representative [18818]
     members: 18819, 18820, ...
     keep the representative, hide the rest: sip --dedup hide-cluster 18818

10.1 Effect comparison โ€‹

ScenarioOld (pair)New (cluster)
30ร—30 fully identical900 pairs (1800 with bidirectional bug)1 cluster (60 articles)
101 fully identicaloutput explosion (tens of thousands of pairs)1 cluster ยท 357 bytes ยท 765ms
Output cap2000 pairs silently truncatedno truncation
Hide operationhide pair by pairhide-cluster hides the whole cluster in one shot

10.2 Full-chain verification โ€‹

  • scan cluster form โœ… (10 pairs โ†’ 5 clusters)
  • hide-cluster โœ… (3-article cluster โ†’ hide 2, keep 1)
  • boundaries โœ… (repeat hide / non-representative / nonexistent โ†’ all correctly rejected)
  • list/undo โœ… (every member has an independent undo key)
  • anti-resurrection โœ… (still intercepted in cluster mode)
  • --today interaction โœ… ("N groups possibly the same article" works)

10.3 JSON structure

json
{ "clusters": [{ "size": 60, "representativeId": 18818,
                 "title": "...", "source": "...", "minOverlap": 100,
                 "members": [18818, 18819, ...] }] }

11. grep Wildcard Problem & Fix โ€‹

11.1 Symptom โ€‹

--grep "%" โ†’ [1] article (0 occurrences)   โ† hit but count 0
--grep "_" โ†’ [14] article (0 occurrences)  โ† same

11.2 Root cause (% and _ share the same problem) โ€‹

  • SQL matching: the keyword is escaped to a literal; LIKE matches the whole Content original (incl. HTML attributes)
  • Snippet counting: ExtractGrepSnippets uses the raw keyword and does IndexOf over the visible text after StripHtml
  • Mismatch: %/_ all live in HTML attributes (URL-encoded, bilibili links); after tag stripping, visible text is 0

Measured data:

ArticleCharContent totalIn attributesVisible text
article 1%36yes0
article 14_2yes0
article 49_1no (huggingface_hub)1 โœ…

11.3 Fix (Plan A) โ€‹

When there's a hit but visible count is 0, hint:

[1] article (0 occurrences)  (only matched links/attributes, not counted in visible text)

Measured: %/_ hints correct; normal hits (huggingface_hub 1ร—) unaffected.


12. Large-Change Regression (+696 lines) โ€‹

After RssReader.cs +696 lines (cluster refactor + grep hint + all defect fixes + --version build time), systematic regression:

CategoryResult
Base regression script, 19 itemsโœ… all pass
dedup cluster full chain + boundariesโœ…
exit-code contract, 6 itemsโœ…
Security (ESC/SSRF/init)โœ… zero regression
Core features (export/versions/diff/update/like/schedule/OPML)โœ…
Version tracking (simulated v2)โœ…
Large export 936 articlesโœ… 1s

Conclusion: +696 lines, zero regression.


13. Final Issue List โ€‹

๐ŸŸข Low severity (2) โ€‹

#IssueNote
1--export keeps malicious protocol link textTUI opening is blocked; javascript: etc. still in exported .md (only triggers in external renderers)
2dedup.json occasional lossnot reproduced since the cluster refactor; suspected legacy leftover, watching

๐ŸŽจ UX details (3) โ€‹

#IssueNote
3i view (hidden list) has no xonly undo, no delete
4home content still centeredleft-align fix didn't cover the start screen
5s and Enter panel redundancyoverlapping design entries

โœ… Clarified โ€‹

  • File-in-use = user's manual operation, not a program issue (struck out)
  • The remaining 22 defects all fixed and verified

14. Final Score โ€‹

Dimensionv1.0v1.2v1.1.4 (final)Note
Feature completeness8.58.08.8cluster detection live, features complete
Stability6.07.58.5output explosion root-cured, anti-resurrection fixed
Performance7.06.58.0no O(nยฒ) output problem after clustering
Security6.58.58.5stable
Documentation7.57.58.0README/Wiki polished
AI friendliness6.57.08.0init usable, exit codes all correct, TUI completed

Total: 8.4 / 10 (A-, excellent)

8.8ร—0.25 + 8.5ร—0.20 + 8.0ร—0.15 + 8.5ร—0.20 + 8.0ร—0.10 + 8.0ร—0.10
= 2.20 + 1.70 + 1.20 + 1.70 + 0.80 + 0.80
= 8.40

Score evolution โ€‹

v1.0    7.1  (good features, security/stability debt)
v1.2    7.6  (6 security vulns fixed, entered the trustable zone)
v1.1.4  8.4  (cluster refactor root-cures the output explosion, +696 lines zero regression)

In one sentence: from "usable" (7.1) to "trustable" (8.4), three iterations closed all three short boards โ€” security, stability, performance โ€” leaving only low-severity UX details.


15. Appendix: Test Sites & Data โ€‹

Current environment โ€‹

  • 4 real feeds (hot-soup teahouse/HF/World/hin.cool), 923 articles, integrity ok
  • All test feeds/temp files/dedup rules cleaned up
  • Pending commit: RssReader.cs +696, Tui.cs +17, 3 language files, READMEร—2, sip.csproj, --version

Test data notes โ€‹

  • Plagiarism test feeds: 5 (dup_a~h.xml, 100%/80%/71%/61% similarity gradient)
  • Stress constructions: up to 7445 articles / 27 feeds
  • Security tests: SSRF server, entity bombs, XXE, terminal-injection payloads
  • All tests left the environment clean

Reference files โ€‹

  • sip-regression.sh (19-item quick regression script, anyone can run)
  • sip Comprehensive Test Report (2026-08-11) (first round, 51 functional tests)
  • sip-v1.1-ๆต‹่ฏ•ๆŠฅๅ‘Š-2026-08-12.md (v1.1 new features)
  • sip-ๅฎ‰ๅ…จๅคๆต‹ๆŠฅๅ‘Š-2026-08-12.md (security)
  • sip-็ฌฌไบŒ่ฝฎๆˆๆžœๆฑ‡ๆ€ปไธŽ่ฏ„ๅˆ†-2026-08-12.md (second round)

Report generated: 2026-08-12 | all conclusions based on reproduced measurements + source-line evidence | version sip v1.1.4 (built 2026-08-12 18:52)

ๆœ€่ฟ‘ๆ›ดๆ–ฐ

Released under the GNU General Public License v3.0 (GPL-3.0)