Repository navigation
Compute the Activity rows at build time, with tests #276
Copy link
Copy link
Labels
Description
Activity
Decisions for the build (2026-09-29). These were settled with the maintainer before agents start, and take precedence where the issue differs.
- Merged same-day lecture row. When one lecture series has two entries on a day, render one ordinary lecture row: the series name linking to its site, no tag, the distinct summaries joined, and every PR listed once. Translations follow the handoff's editions row.
- The
booktype. Addbookto the row code's type table: listed after lectures within a day, with the type word "Book update" and the filter keybook. The data format and data check change in Harden the Activity data contract before automatic merges #284. - A stable row ID. Give each row an ID built from its grouping key (date, type, and series or release group), and test that it doesn't change under shuffled input or when a same-day release is added. Publish an Activity RSS feed at /activity/feed.xml #280's feed uses it as each item's ID.
- Tests. Fixed numbers are checked against a frozen copy of the 40 entries at 4c47f03, kept under
.github/scripts/fixtures/activity/and never under_data/. Checks on live data assert only what stays true as data is added. Run the tests with plainrubyas a step in the existingbuildjob, and keep the job's name:buildis the required check. - Escaping. Summaries and PR titles come from outside the site. The row code returns plain strings and the templates escape every field. Add a fixture entry containing
<,&, quotes and a backtick pair. - Design files. The handoff's
activity-data.jsand prototypes are in the maintainer's local project record (_reviews/_processed/2026-09-29-website-news-activity/design-round2/), not on GitHub.
- added a commit that references this issue
on Sep 29, 2026
Part of #271 (Phase 4).
Why. Every Activity view builds on one set of grouped rows: the
/news/rail, the home strip, the restyled/activity/and the feed. The round-2 handoff states the display rules as JavaScript (reference/activity-data.js:buildRows,week,range,railRows,byWeek,byMonth,panelSummary) for porting to a Jekyll plugin. Its README is in the round 2 outcome.Liquid can't do the grouping reliably: it needs a regex and keyed merges. Production (
deploy.yml) and the Netlify previews both run a plainbundle exec jekyll build, so plugins run everywhere.Amendments from the round-2 review, which the port must implement:
panelSummary([])throws in the prototype.Work.
_plugins/activity/rows.rb: a pure module, with no Jekyll dependency._plugins/activity_generator.rb: a generator that exposessite.data.activity_viewto Liquid. It holds:.github/scripts/test-activity.rb(not under_plugins/, which Jekyll loads), run against a frozen fixture copy of today's 40 entries. Add the test step tobuild.ymlbeside the data check (line 20 on Split updates into News and an Activity feed #265's head, 44f5479).Acceptance criteria
2026-W53, and 2029-12-31 is2030-W01.