Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment.
The wire exists to put the people behind the repository on the front page. dependabot[bot] dependency bumps and github-actions[bot] close sweeps were spending slots that belong to human contributors — the same crowding-out the draft filter already addressed.
Decision handed to me by the ticker work: filter by GitHub's own [bot] login suffix (its verdict, not our inference). Bot-authored issues and pulls stay off entirely; a published release keeps its slot no matter who pushed the button, but a bot publisher's byline is dropped instead of named.
Two new tests pin the filter and the byline-less release.
The ticker printed `ISS #1234 title · 3h` for whatever the issues and pulls
endpoints last touched. It proved the repo was awake and nothing else: no
merges, no releases, no names, and English chrome on nine translated pages.
It now reports events, in the reader's language, with the person who did the
work named:
- Merged pull requests carry the contributor's handle. `merged_at`,
`author_association`, and the login all arrive in the list payload we
already fetch, so naming @bistack or @shenjackyuanjie beside their merge
costs nothing extra.
- Opened and closed issues carry who filed them.
- Releases appear. That is the one added endpoint — `/releases?per_page=5`,
cached an hour, ~1 request/hour. Three cached calls total, ~13 req/h
unauthenticated against GitHub's 60/h/IP, and no per-item follow-ups.
- GitHub's own FIRST_TIME_CONTRIBUTOR verdict marks a newcomer's
contribution. Copied verbatim, never inferred from the size of the window
we happened to fetch, and it stops on its own as GitHub recomputes it.
Two honesty fixes the live render forced:
Each verb is now dated by its own event — `merged_at`, `closed_at`,
`published_at` — not by `updatedAt`. An issue opened in March and commented
on this morning was reading as "opened, 12 minutes ago".
Drafts are gone from the strip. A draft is its author's own not-ready
marker, and on this repo agents open them in batches: five of the twenty
items in the first live check were draft PRs from one bot, crowding out the
merges. They return the moment they are opened or merged.
A busy week could also bury the newest release entirely, so a release
published in the last sixty days keeps a slot — carrying its real date, so a
quiet quarter still reads as a quiet quarter rather than pinning an old tag
beside today's merges.
Verbs, the by-line, the first-contribution mark, and the strip's aria-label
are dictionary keys in all ten locales; titles, tags, and handles are the
repository's own record and stay verbatim. Ages format through CLDR off the
locale's existing `dateLocale`, the same way the masthead already sets its
date, with the compact English form as fallback where Intl data is missing.
Empty stays empty: an unreachable or fully-filtered feed removes the strip
rather than rendering a skeleton. Reduced motion now lets the frozen track
scroll instead of clipping every entry past the fold.
Verified: tsc, check:locales, check:facts, check:docs, 248 tests, lint, and a
288-page production build all clean. Live `next dev` against the real repo
rendered 15 entries on /en and /zh — merges by @Inference1 and @h3c-hexin,
issues by @vFONGv, @bistack, @shenjackyuanjie, @rafaelcavalheri, the v0.9.3
release, Chinese verbs and relative times throughout. Pointed at an
unreachable repo, both locales render fully with no ticker and no leaked
dictionary tokens.
* docs(state): add doc comments to all public types
* docs(execpolicy): add doc comments to all public types
* test(web): add unit tests for pure helper functions
Add vitest configuration and tests for:
- relativeTime: time formatting (just now, minutes, hours, days, months, years)
- lastPageFromLink: GitHub Link header pagination parsing
These are the first tests for the web frontend. The test framework
(vitest) was already in package.json but had no config or test files.
---------
Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
* test(web): add unit tests for pure helper functions
Add vitest configuration and tests for:
- relativeTime: time formatting (just now, minutes, hours, days, months, years)
- lastPageFromLink: GitHub Link header pagination parsing
These are the first tests for the web frontend. The test framework
(vitest) was already in package.json but had no config or test files.
* test(web): exercise real GitHub helpers
---------
Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>