timescale.info
Sign inSign up

How OpenChronology was built

Every merged pull request of openchronology/timeline-app, its first week of commits and its releases; and before them the 2020 PureScript editor, from snapshots of its deleted repositories in the Wayback Machine. Written to this server through the HTTP API.

327 moments · 2020-03-09T00:15:08Z CE – 2026-11-02T20:11:21Z CE · by @athan · @athan

#170 · Label sensitive timelines, moments and durations; warn readers and blur images

  • timeline-app
  • pull request

The second part of #115 (sensitive-content labels). The third, the 13+ account age, the adults' preference and the policy and operator docs, follows in its own PR. **Policy.** Educational, historical, medical, artistic and news depictions of nudity, violence and disturbing events are allowed when labelled; pornography and gore for its own sake are not. The labels are **nudity**, **graphic violence** and **disturbing content**, defined once in `src/content-labels.ts` and shared by the server, platform and editor. ## Who labels The open question on #115 ("owners only, or also readers proposing labels?") is settled as owners plus moderators. Readers propose a label by reporting; moderators then label from the queue. | Who | What | Where | | --- | --- | --- | | Owner | A timeline | **Sharing & settings → Sensitive content** (`PATCH …/settings {labels}`, `oc_timelines.content_labels`) | | Moderators | A reported timeline | Review queue: a new **Label** decision with a reason, sent to the owner | | Anyone who can edit it | A moment or duration | Its details → **Sensitive content** | - **Moderators' labels:** kept in `moderator_labels`. The owner can't remove them; they show as "added by moderators". The owner can ask for a review (keep or remove the labels), and lifting removes only the moderators' labels. - **Moment and duration labels:** kept in their metadata (`content_labels`), so they travel with `.ochx` and `.och` files. They reach markers and duration bands through `pluginMetadata` and `durationOverview`. ## What readers get These apply to anyone who isn't the timeline's owner or a writer. Owners and writers see their timeline as it is. | Labelled | Effect | | --- | --- | | Timeline | A warning screen before it opens ("Show timeline" / "Browse other timelines"). It covers platform pages, embeds and the dashboard, as well as comparisons with a labelled source. Its images stay blurred until **Show images**, beside the save status. | | Moment or duration | Its images are blurred (marker, hover card, details, duration background), and its details say why ("Sensitive content: graphic violence. Show images"). | Both choices last for the browser tab (`sessionStorage`). The blur is one CSS rule, keyed on `body[data-warnings][data-sensitive]` or an element's `[data-sensitive]`. A labelled timeline is also: - never featured; - left out of browsing by readers who aren't signed in (search, links and profiles still reach it, behind the warning); - shown with a **Sensitive** badge in platform and dashboard lists; - previewed in links as its title and labels only, with no moment strip or excerpt and no oEmbed thumbnail. ## Tests - **New:** `test/labels-postgres.mjs`, which checks: - the owner's labels: validation, owner-only; - signed-out vs signed-in browsing, search, and featured; - moderator labels from a report: validation, the owner can't remove them, the email, a review, lifting keeps the owner's own; - only timelines can be labelled. - **New:** `test/labels-live-postgres.mjs`, in Chromium against the built platform: - a reader meets the warning, images are blurred (computed `filter`), **Show images** works, and the choice lasts across a reload; - a comparison with a labelled source is warned; - a labelled moment in an unlabelled timeline is blurred and noted; - the owner sees no warning or blur, labels a moment (saved to its metadata) and labels the timeline in settings. - **New:** `test/content-labels.test.mjs` covers lenient reading, the label wording, and the projections. - **Results:** - all 39 database tests pass locally, as do 265 unit tests and the typecheck; - in Chromium, `next-platform`, `browser`, `sharing`, `moderation-live`, `browser-fork`, `comparison-live`, `syslog-live`, `save-merge-live` and the new browser test pass; - screenshots of the warning screen and the moment dialog were checked. Both database and browser tests are added to CI. **Docs:** a new "Sensitive-content labels" section and the "Label" decision in `…

Sources

Open #170 · Label sensitive timelines, moments and durations; warn readers and blur images in the timeline