Skip to content

feat: add a privacy-safe Folo RSS workflow - #16

Merged
niracler merged 1 commit into
mainfrom
feature/folo-rss-reorganization
Aug 29, 2026
Merged

niracler merged 1 commit into
mainfrom
feature/folo-rss-reorganization

Conversation

@niracler

@niracler niracler commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Folo 订阅按阅读时效分为每日核心、周六甜点和 Changelog。每周 Feed 阅读预算为 180 分钟,未读数只表示当前状态,不作为必须清空的任务。

docs/folo-rss.md 记录 Category、List、筛选原则、提醒规则和月度维护流程。README 只维护公开的「心头好」清单。

仓库通过匿名快照记录订阅数量、更新频率、Star 命中率和异常源。快照只包含聚合结果,不包含账号、订阅源名称、URL、Feed/List ID、凭据或私密订阅明细。原始 OPML 和 Action Rules 备份保存在 Git 忽略的 .tmp/ 目录。

Linkspector 使用精确路径规则跳过会拒绝自动检查的站点,其他公开链接继续参与检查。

检查

  • 7 个快照、隐私和 README 渲染测试通过。
  • pre-commit 和审计幂等性检查通过。
  • GitHub Actions audit 与 Linkspector 检查通过。

@niracler niracler changed the title Folo RSS 阅读体系重整 重整 Folo RSS 阅读体系与匿名审计 Aug 29, 2026
@niracler niracler changed the title 重整 Folo RSS 阅读体系与匿名审计 feat: reorganize Folo RSS workflow Aug 29, 2026
@niracler
niracler force-pushed the feature/folo-rss-reorganization branch from 7c0f95b to e521a41 Compare August 29, 2026 02:35
@niracler niracler changed the title feat: reorganize Folo RSS workflow feat: add a privacy-safe Folo RSS workflow Aug 29, 2026
@niracler
niracler marked this pull request as ready for review August 29, 2026 02:39
@niracler
niracler merged commit acf0497 into main Aug 29, 2026
2 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 29, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-29T02:45:49.493217Z e521a41 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@niracler
niracler deleted the feature/folo-rss-reorganization branch August 29, 2026 02:39

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +92 to +94
except AuditError:
failures += 1
analytics[futures[future]] = 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +193 to +195
star_window_days = (
max(1, (max(star_dates) - min(star_dates)).days + 1) if star_dates else 1
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread .github/scripts/audit.py
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}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +197 to +198
direct_ids = {str(row.get("feedId")) for row in direct}
total_updates = sum(analytics.get(feed_id, 0) for feed_id in direct_ids)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant