feat: add a privacy-safe Folo RSS workflow - #16
Conversation
7c0f95b to
e521a41
Compare
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e521a41447
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| except AuditError: | ||
| failures += 1 | ||
| analytics[futures[future]] = 0 |
There was a problem hiding this comment.
Preserve failed analytics as unknown instead of zero
When any per-feed analytics request fails, this branch records that feed as producing zero updates. The subsequent snapshot then uses those zeros in total volume, maximum-source-share, and high-volume/zero-star calculations; although status becomes partial, audit.py still consumes the numeric metrics normally, so a transient API failure can produce falsely safe dashboard results. Omit failed feeds from derived metrics or make analytics-dependent metrics unavailable when failures are present.
Useful? React with 👍 / 👎.
| star_window_days = ( | ||
| max(1, (max(star_dates) - min(star_dates)).days + 1) if star_dates else 1 | ||
| ) |
There was a problem hiding this comment.
Anchor the Star sample window to the audit time
When the newest collected Star predates the audit, this calculates only the span between the oldest and newest Star and discards the subsequent zero-Star period. With a single historical Star the window is always reported as one day regardless of its age, inflating the estimated hit rate and invalidating the documented 90–180-day zero-Star signal; compute the observation window through now instead.
Useful? React with 👍 / 👎.
| def format_value(value: float | None, unit: str | None = None) -> str: | ||
| if value is None: | ||
| return "N/A" | ||
| rounded = str(int(value)) if value.is_integer() else f"{value:.1f}" |
There was a problem hiding this comment.
Avoid Python 3.12-only integer formatting
On Python 3.11, which is also explicitly selected elsewhere in this repository, the non-Folo count metrics reach this function as int values and int has no is_integer() method. As a result, python3 .github/scripts/audit.py --update README.md crashes while rendering the first integer-valued row, which also breaks the documented pre-commit hook on Python 3.11; normalize the value to float or test it without calling this method directly.
AGENTS.md reference: AGENTS.md:L36-L42
Useful? React with 👍 / 👎.
| direct_ids = {str(row.get("feedId")) for row in direct} | ||
| total_updates = sum(analytics.get(feed_id, 0) for feed_id in direct_ids) |
There was a problem hiding this comment.
Include list-only feeds in the total traffic estimate
When a feed is added directly to one of the owned lists without also being a direct subscription—a supported workflow because the committed CLI reference exposes list add-feed separately—its analytics are fetched and included in the lane estimate but excluded from this total. A snapshot can therefore report, for example, zero total weekly entries while the core lane reports ten; calculate the total from the same union of direct and list feed IDs used for analytics collection.
Useful? React with 👍 / 👎.
Folo 订阅按阅读时效分为每日核心、周六甜点和 Changelog。每周 Feed 阅读预算为 180 分钟,未读数只表示当前状态,不作为必须清空的任务。
docs/folo-rss.md记录 Category、List、筛选原则、提醒规则和月度维护流程。README 只维护公开的「心头好」清单。仓库通过匿名快照记录订阅数量、更新频率、Star 命中率和异常源。快照只包含聚合结果,不包含账号、订阅源名称、URL、Feed/List ID、凭据或私密订阅明细。原始 OPML 和 Action Rules 备份保存在 Git 忽略的
.tmp/目录。Linkspector 使用精确路径规则跳过会拒绝自动检查的站点,其他公开链接继续参与检查。
检查