<feed xmlns='http://www.w3.org/2005/Atom'>
<title>fluxrec, branch main</title>
<subtitle>Article recommendations from Miniflux stars</subtitle>
<id>http://git.samsci.com/cgit.cgi/fluxrec/atom?h=main</id>
<link rel='self' href='http://git.samsci.com/cgit.cgi/fluxrec/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/'/>
<updated>2026-10-14T22:46:33Z</updated>
<entry>
<title>justfile cleanup</title>
<updated>2026-10-14T22:46:33Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-14T22:46:33Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=8027bac07b61e631866f253632ce7aa4476982db'/>
<id>urn:sha1:8027bac07b61e631866f253632ce7aa4476982db</id>
<content type='text'>
</content>
</entry>
<entry>
<title>.</title>
<updated>2026-10-14T22:33:30Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-14T22:33:30Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=0ffbed9e3823a13d41e241556af450976d771217'/>
<id>urn:sha1:0ffbed9e3823a13d41e241556af450976d771217</id>
<content type='text'>
</content>
</entry>
<entry>
<title>improve time stamps</title>
<updated>2026-10-14T22:00:39Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-14T22:00:39Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=c2dd299c2f2ebb1c4d5614087402d38173ed93ec'/>
<id>urn:sha1:c2dd299c2f2ebb1c4d5614087402d38173ed93ec</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix read/star label issue</title>
<updated>2026-10-14T21:45:05Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-14T21:45:05Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=9552cfc2058aa09c6c8b5d4b02d8700bc9fbce17'/>
<id>urn:sha1:9552cfc2058aa09c6c8b5d4b02d8700bc9fbce17</id>
<content type='text'>
</content>
</entry>
<entry>
<title>compact-labels: rebalance negative history to the per-feed ceiling</title>
<updated>2026-10-07T05:35:13Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-07T05:35:13Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=1d2b3beebc3ad3ed500127fc40491659418d7eb5'/>
<id>urn:sha1:1d2b3beebc3ad3ed500127fc40491659418d7eb5</id>
<content type='text'>
The single documented exception to labels.jsonl's append-only rule:
trims feeds over the ceiling (keeping each one's NEWEST negatives),
positives untouched, LABELS.bak written first, idempotent, --dry-run.
Existence justified by the ceiling only bounding the future, while
pre-cap history would otherwise never age out.
</content>
</entry>
<entry>
<title>export: per-feed negative ceiling (--neg-feed-cap-pct)</title>
<updated>2026-10-07T05:33:41Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-07T05:33:41Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=c465409aaa5672e3466b6f8744b737fa84993f2b'/>
<id>urn:sha1:c465409aaa5672e3466b6f8744b737fa84993f2b</id>
<content type='text'>
No feed may hold more than 5% (floor 50) of the negative target, counting
existing history: uncapped, a few firehoses own the negative class because
the read+unstarred pool is sized by feed volume. Enforced by skipping
ceiling-full feeds mid seeded permutation walk; shortfall vs the ratio is
reported, neg_capped added to the run summary. Also makes bulk mark-read
of high-volume feeds safe for training data.
</content>
</entry>
<entry>
<title>feeds: subscription audit command (per-feed volume + star stats)</title>
<updated>2026-10-07T05:31:52Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-10-07T05:31:52Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=2f75794194209586d0b17d26e4e87d94d3e6aead'/>
<id>urn:sha1:2f75794194209586d0b17d26e4e87d94d3e6aead</id>
<content type='text'>
GET /v1/feeds + feed_id entries filter in the client, one cheap volume
probe per feed over a --days window, star stats joined from labels.jsonl
by feed id, category column, --min-per-day/--min-seen filters. Read-only;
justfile recipe with one-line doc comments throughout.
</content>
</entry>
<entry>
<title>serve: POST /api/poll manual trigger; rename feed to Fluxrecs</title>
<updated>2026-08-30T10:51:41Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-08-30T10:51:41Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=f84f1c0e26908e2a70777441e1174a26dca10b91'/>
<id>urn:sha1:f84f1c0e26908e2a70777441e1174a26dca10b91</id>
<content type='text'>
/api/poll runs an out-of-schedule poll through the same serialized path
as the scheduler (TryLock, so curls and refreshes can't race the cursor),
is POST-only, and 429s inside a 1-minute cooldown after any run. Response
is JSON: polled/new_run plus the fresh row's stats when entries arrived.
Also rename the RSS channel to Fluxrecs (Miniflux adopts upstream title
changes as the feed name). just poll-now wraps the curl.
</content>
</entry>
<entry>
<title>rss: render score head as HTML paragraph</title>
<updated>2026-08-30T10:40:39Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-08-30T10:40:39Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=49d9f3e0eaeeab234c3ec903be43b88919d98eff'/>
<id>urn:sha1:49d9f3e0eaeeab234c3ec903be43b88919d98eff</id>
<content type='text'>
Descriptions render as sanitized HTML in readers, where bare newlines
collapse and the feed/score line ran into the article text. Wrap the
headline in &lt;p&gt;&lt;em&gt; so it breaks cleanly and reads as metadata, escaped
on the wire by encoding/xml as description-carried HTML should be.
</content>
</entry>
<entry>
<title>rss: provenance + score calibration in items</title>
<updated>2026-08-30T10:34:38Z</updated>
<author>
<name>Sam Scholten</name>
</author>
<published>2026-08-30T10:34:38Z</published>
<link rel='alternate' type='text/html' href='http://git.samsci.com/cgit.cgi/fluxrec/commit/?id=eff960c54620bfba47d40bc3792ba805dea3dab3'/>
<id>urn:sha1:eff960c54620bfba47d40bc3792ba805dea3dab3</id>
<content type='text'>
Item titles gain a rune-capped source-feed suffix so list views (which
only ever show the channel title) display provenance inline. Item bodies
open with feed, model score, and the batch-wide score median; the median
is computed over every scored entry at poll time and stored on the run
row as a nil-safe pointer, so old rows render without it. /api/status
exposes the median too.
</content>
</entry>
</feed>
