Show matched interests as a tag row instead of a callout

With the why line gone the accent-bar callout held nothing but "Matches: a · b",
which no longer earned its quoting. Every surface now puts one row directly
under the rubric: a small-caps "Matches" label and one pill chip per interest.
On the web that is one `.interest-chip` component (admins still get links to
the interest's article filter); the EPUB gets `.matches`/`.interest` rules in
both stylesheets, and `Understanding::interests_line` goes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ESJbbzQ1b8fs5AA65tKw2q
This commit is contained in:
thalladaandClaude Fable 5.1 committed 2026-09-15 01:09:14 +00:00
1 parent 36424784af
commit ce9b629115
10 files changed
+71 -47

No files matched your search

+12 -3
View File
@@ -1994,7 +1994,13 @@ mod tests {
assert!(issue.contains("A short abstract for the second piece"));
assert!(issue.contains("Software engineering · Analysis"));
assert!(issue.contains("copy-on-write · ZFS"));
assert!(issue.contains("Matches: Filesystems · Rust"));
assert!(issue.contains("<span class=\"interest-chip\">Filesystems</span>"));
assert!(issue.contains("<span class=\"interest-chip\">Rust</span>"));
let issue_rubric_position = issue.find("Software engineering · Analysis").unwrap();
let issue_matches_position = issue.find(">Matches</span>").unwrap();
let issue_summary_position = issue.find("What it argues").unwrap();
assert!(issue_rubric_position < issue_matches_position);
assert!(issue_matches_position < issue_summary_position);
assert!(issue.contains("A. Writer · Example Feed"));
assert!(!issue.contains("example feed · Example Feed"));
assert!(issue.contains("World Briefing"));
@@ -2027,7 +2033,9 @@ mod tests {
assert!(article.contains("loading=\"lazy\""));
assert!(article.contains("referrerpolicy=\"no-referrer\""));
let rubric_position = article.find("Software engineering · Analysis").unwrap();
let matches_position = article.find("Matches: Filesystems · Rust").unwrap();
let matches_position = article.find(">Matches</span>").unwrap();
assert!(article.contains("<span class=\"interest-chip\">Filesystems</span>"));
assert!(article.contains("<span class=\"interest-chip\">Rust</span>"));
let summary_position = article
.find("What it argues, and why it is worth the time.")
.unwrap();
@@ -2734,7 +2742,8 @@ mod tests {
assert!(admin_issue.contains("Was this a good pick?"));
assert!(admin_issue.contains("value=\"loved\" data-label=\"loved\" class=\"active\""));
assert!(admin_issue.contains(&dashboard_href));
assert!(admin_issue.contains(&crate::interests::articles_href("Filesystems")));
let interest_href = crate::interests::articles_href("Filesystems");
assert!(admin_issue.contains(&format!("class=\"interest-chip\" href=\"{interest_href}\"")));
let admin_article = app
.clone()