Skip to content

Releases: HarperZ9/cmmns

CMMNS 3.9.1

Choose a tag to compare

@HarperZ9 HarperZ9 released this 28 Oct 21:18
db4f820

The Download buttons start at once and say why when a save fails. Timings come from
scripts/qa/download_timing.py: Chrome with the extension, on local copies of an X post, an
Instagram post and a plain site, 60 ms per request and 80 Mbit/s, ten tries per pointer path.

Fixed

  • The hover control stayed on screen after it was hidden, and a click on it then did nothing. The
    control's bar sets display: flex, which beats the browser's [hidden] rule. In 3.9.0, 49 of 50
    tries began with the last control still drawn. It now leaves with the pointer.
  • The hover control did not show on pictures under one clear layer (X, Instagram) when the
    pointer came in over the post's header or caption, or on a picture that loaded to full size under
    the pointer: a miss was kept for as long as the topmost element stayed the same. With the first
    fix alone, 0 of 10 tries showed it on each of these paths; now 10 of 10, after 300 to 311 ms.
  • Small movements of a hand kept the hover control away. Every pointer move restarted the 300 ms
    wait; with 1 to 3 px moves or a slow glide, 0 of 10 tries showed it. It now waits for the pointer
    to rest within 24 px of one point: 10 of 10, after 304 ms.
  • A gallery's files save four at a time. From the click on the X Download button to the last
    file handed to the browser: 1,173 ms before, 452 ms now; the closing note at 669 ms, was 1,288 ms.
    The note counts the files as they land, and the button is released even when a save fails.
  • A long video starts downloading at once. A video over 32 MB is handed to the browser, which
    shows its own progress, instead of being read into the page first to write the post's words inside
    it; the words stay in the sidecar. A 48 MB video: the download starts after 176 ms, was 5,642 ms.
    A smaller file read in the page shows "Reading 3.1 MB of 12.0 MB". A file over the 300 MB embed
    limit is no longer fetched twice.
  • A download the browser stopped was reported as saved. A 403, a dropped connection or a full disk
    before the file was named now shows "Not saved" with the browser's reason.
  • The list of saved files no longer slows each save or loses entries. It is read once per page
    and written after the note, one write at a time (src/ext/quick-saved.js, same pb.saved.v1 key).
    With 20,000 entries the closing note came 864 ms after the click, now 691 ms. Four files saved at
    once used to overwrite each other's entries.
  • A click the hover control could not carry out (a frame the browser would not let CMMNS read, the
    extension updated under the page) is said beside the control instead of only in the console.
  • An X post that holds another post's article gets its own button in its own row.

Not changed, measured

  • The first hover click on a site CMMNS does not name loads the page scripts on that click: 326 ms
    to the download, against 262 ms for the next click, so the scripts still load only after a click.
    With the service worker stopped, the X button still saved: the first file reached the disk 386 to
    435 ms after the click.

CMMNS 3.9.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 28 Oct 09:38
a812346

CMMNS 3.9.0 (formerly Daylight Commons, and Radar before that)

Daylight Commons is now CMMNS, spoken "commons". Everything you saved, every case and every signed
bundle from earlier versions still reads and verifies, and an existing install keeps its save folder.

Changed

  • Daylight Commons is now CMMNS, spoken "commons" (2026-10-28). The extension name, toolbar title,
    pages, docs, store listing and command line say CMMNS. The repository moved to
    github.com/HarperZ9/cmmns (GitHub redirects the old address) and the project pages to
    harperz9.github.io/cmmns/; the old /daylight-commons/ pages redirect. Nothing a saved file, an
    installed extension or a signature depends on changed: the format ids (daylight.sidecar/1,
    daylight-case/1 and the rest), the urn:daylight: and urn:radar: ids, storage keys, the Firefox
    add-on id radar@harperz9.github.io, ~/.radar, the icon files and the data pack names stay, so
    every sidecar, case, capture and signed bundle from 3.8.0 and earlier still verifies (tests in
    tests/rename-compat.test.js).
  • The command line answers to cmmns; daylight, daylight-commons and radar run the same tool.
    Environment variables read CMMNS_* first and DAYLIGHT_* after it (CMMNS_PROTECT,
    CMMNS_HOME, CMMNS_CASE_NOW, CMMNS_CASE_REPLAY, CMMNS_CASE_CRASH_AT,
    CMMNS_DISCOURSE_CACHE). RADAR_* variables are unchanged.
  • New installs save into Downloads/CMMNS/<site>/. A browser that had the extension before this
    release keeps Downloads/Daylight/<site>/: the update stores that folder as its setting. cmmns media fetch saves into Downloads/CMMNS unless only Downloads/Daylight exists. Every reader
    (capture verify, sidecar check, board make) takes either folder.
  • Release files are named cmmns-chrome-<version>.zip, cmmns-firefox-<version>.xpi,
    cmmns-firefox-self-<version>.xpi, cmmns-cli-<version>.zip and cmmns-<version>.bundle.
    verify-release reads names from the signed list, so radar-* releases still verify. The project
    key is labelled "CMMNS project key"; the key, its id and thumbprint are unchanged.
  • The self-distributed Firefox build checks https://harperz9.github.io/ext/firefox/updates.json,
    one permanent address with no product name in it. No released build read an update address before.

Fixed

  • A note now names the files its own save wrote (project-docs/SIDECAR-FORMAT.md, "Taken names").
    When a file name was taken, the browser saved the file as name (1).jpg, but the note beside it
    still listed name.jpg, a file of another save and sometimes of another post. Galleries saved
    twice and single images saved from a saved gallery listed the first save's files the same way.
    The worker now reads back the name the browser wrote (downloads.search, and the filename change
    Chrome reports) and the note lists that name and takes the same suffix (name (1).md). A stream
    saved as separate video and audio files now lists both. Planted tests run the page script and the
    worker over a simulated chrome.downloads in Chrome's and Firefox's manner; the saver from before
    the fix fails the six collision tests and passes the two no-collision tests.
  • daylight sidecar check <folder> also reports notes that name a missing file or one from another
    save, and --fix repairs a note only when the replacement file carries the note's post address
    and was written in the note's save window; anything less is reported and left as it is.
  • The label marker catches name-calling it used to miss (project-docs/ARGUMENT-LENS.md, "The label
    marker"). A private study of two TV news episodes found that the classification rule fired once in
    18,658 words: it read only "is a ...-ist". src/core/discourse/labels.js now finds, with spans, an
    epithet before a name (with or without a party or role word and a comma), after a name ("Pat Doe, a
    known liar"), as a predicate on a pronoun, a demonstrative phrase or a name ("this woman is a liar",
    "they are traitors"), in a naming frame ("I call him a fraud"), and in compounds ("radical-left
    lunatic"). Severity is the number of epithet words. A label the post applies makes its sentence a
    classification and shows on the claim card; negated, self-described, quoted and reported ones are
    kept with their status and do not count.
  • The check that no discourse module names a side had a backspace where its word boundary should be
    and matched nothing. It now matches, and reads "left" and "right" only in their sided forms.

Added

  • The epithet lexicon, data/discourse/labels.json: 36 non-political insults and 20 political
    pejoratives, 10 aimed at each side with a named mirror, plus 20 modifiers, each with a dictionary
    source and a reason. scripts/labels-data.mjs ships the words only, never the side.
  • Planted tests for every shape and every control class, a blind round written by a separate model
    session (first score 37 of 37 precision, 37 of 43 recall; 42 of 43 after the fixes), 134 mirrored
    pairs that must read the same, a lexicon balance test, and a shuffled-lexicon control that drops
    recall to a mean of 0.14 to 0.16 (node scripts/eval-labels.mjs).

Check the download: every file is in SHA256SUMS, signed in SHA256SUMS.sig with the project key, key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021 (unchanged). Open verify-offline.html from the release, or run node scripts/verify-release.mjs <folder>.

Daylight Commons 3.8.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 26 Oct 05:21
ab2763c

Daylight Commons 3.8.0

Argument lens (under Discourse checks, its own switch, off by default; everything runs on your device). It splits a post into premises, minor premises, assumptions, conclusions and turns at the words that join them, in English, Portuguese, Spanish, French and Latin, and groups arguments into lists, chains and turns. On Summa I q.2 a.2 it finds every break a careful reader marked by hand. Roles show only once two people's annotations confirm them; until then each part reads as a segment. The 60 passages to annotate and the annotation page ship with this release.

Claim types. Each sentence is named as a question, quotation, definition, sourced statement, classification, inference, opinion, or factual claim with or without a source. On a held-out set labelled by two models, 15 of 16 were right.

Inference gaps. It marks claims about what someone else knows or intends, and conclusions that bring in words their premises lack. Held out: 4 of 5 marks right, 4 of 4 found.

Reframing. It flags a post that names the same people as the sources beneath it but puts them in an act none of those sources states, or states only to deny.

Every reading goes into the study parts tree, and each has a side-swap test that requires the same answer with political sides exchanged.

Limits. The figures come from model labels on short sentences, not people's annotations, and the argument roles have not been measured against people yet. The calibration study is preregistered and not run.

Verify with node scripts/verify-release.mjs <folder>. Key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021.

Daylight Commons 3.7.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 26 Oct 04:54
6bf0f0b

Daylight Commons 3.7.0

Evidence capture. Right-click "Capture as evidence" saves the file, its note, a picture of the visible tab and a capture record: each file's SHA-256 before any words are written in, what the page showed, the local time, and a record of which parts were captured. Each capture adds a custody line linked to the one before. daylight capture verify <folder> re-hashes everything and names any gap.

Discourse checks (off by default, all on your device): quote finder, persona marker, sample-size intervals, document claim check, correction surfacing, study saves, and claims drawn as sheets over their sources. Ink follows sourcing, never side. Claim checks cover corroboration by independent origin, the same headline over different sourcing, a quote clipped past a negation or qualifier, and many outlets relaying one origin.

Study boards draw through one shared sheet component.

Fonts. Accession Stencil ships under the SIL Open Font License 1.1 as one choice of heading face; Hanken Grotesk stays the default. Board exports carry every licence text.

Limits. Right-click capture on X posts is not yet verified. There is no full-page or WARC snapshot, no trusted time, and the custody log isn't signed yet.

Verify with node scripts/verify-release.mjs <folder>. Key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021.

Daylight Commons 3.6.2

Choose a tag to compare

@HarperZ9 HarperZ9 released this 26 Oct 01:15
336ee55

Saves land in their folder again after an update.

Fixed

  • After updating to 3.6.1, saves from pages that were already open landed in the Downloads folder
    itself instead of Daylight/<site>/.
    Those pages kept the old script, which could no longer
    reach the extension and fell back to a plain download link. That fallback is gone: a save goes
    through the browser's downloads into its folder, or says it could not. After an install or update,
    the download parts are loaded into open pages again, so their buttons work without a reload; an
    old page that still cannot reach the extension says "Daylight Commons was updated. Reload this
    page, then save again."
  • An empty folder name in the settings now means the default, Daylight. Saving straight into
    Downloads is its own switch, "Save straight into Downloads", off by default.

Install

  • Chrome or Edge: unzip radar-chrome-3.6.2.zip, open the extensions page, turn on developer mode and choose Load unpacked. To update, replace the folder and press Reload. Settings carry over, and pages left open get the new buttons without a reload.
  • Firefox: radar-firefox-3.6.2.xpi.

Verify

Every file is listed in SHA256SUMS, signed in SHA256SUMS.sig with the project key (key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021). Open verify-offline.html to check the signature without a network.

Daylight Commons 3.6.1

Choose a tag to compare

@HarperZ9 HarperZ9 released this 26 Oct 00:51
9b3134b

Save from any site, save text too, and keep things for study. Protection for the people who use Daylight Commons and their sources: the case workbench stops
telling the Internet Archive and the target's server who is investigating, a clean copy of any file
to share, one switch for source protection, and a look at what Daylight's own signals show about
your account. Plans for the next two: project-docs/REDACTION-PLAN.md and
project-docs/PROVENANCE-TRACING-PLAN.md.

Added

  • Share clean. A copy of a file with everything it says about itself removed: EXIF with GPS,
    XMP, IPTC, colour-profile text, PNG text chunks, GIF comments, MP4 user data and creation times,
    WebM tags, PDF document information and XMP, Word, Excel, PowerPoint and OpenDocument authors,
    and the description Daylight writes into saved files. Nothing is re-encoded: pictures, frames and
    samples stay the same bytes. A file it cannot read is refused, never passed as clean. In
    Collections (one file, or the whole collection as a zip), on the save page's result, with
    daylight clean <file>, and with daylight case export --clean. Each clean copy's lineage
    (original hash to clean hash) stays with the evidence copy and never goes in the shared file.
  • Source protection. One switch (toolbar menu, Source protection; daylight protect on, or
    daylight case settings protection on for one case). While on, Daylight makes no request of its
    own: no About or Reddit account reads, evidence lookups, Other coverage, Archive copies or
    downloads from a host; the toolbar button shows a P. Exports are Share clean and carrier-safe,
    the case's history names the investigator only as "investigator" with the day, and every account
    in an export is a pseudonym unless marked --keep-name. Its page lists what it cannot protect
    against and points to Tor Browser, SecureDrop and the Access Now Digital Security Helpline. Not
    yet independently reviewed: project-docs/SECURITY-REVIEW.md is the reviewer's checklist.
  • What Daylight shows about you. Daylight's account signals (place label, app store country,
    renames, account age, posting clock, posting apps, volume, repeated wording) on your own account
    only, each with what it reveals and how to reduce it. Your own signed-in profile on X, or your own
    data export (daylight self-audit tweets.js account.js). There is no field to type an account.
  • A Download control on any picture, GIF or video. Rest the pointer on one for a moment and a
    small Download button shows in its corner, even where the site blocks right-click or lays a clear
    layer over its pictures. Its second button offers Study, Download as GIF, Copy, Copy link, Copy with
    caption and Save to Daylight. It never moves the page or takes its clicks. It shows on the sites
    Daylight Commons reads; "Show it on every site" in the settings asks your browser once to allow all
    sites. "Never on this site" and a switch turn it off. Alt+Shift+D saves the picture or video
    under the pointer, or the focused one, on any site.
  • Study. Beside Download everywhere: the same save, into Daylight/study/<site>/, marked
    study: true, with an optional line on what draws you to it. A study library can pick these up
    first.
  • Text is saved too. X and Reddit text posts get the button: one note with the whole text, the
    author, address and time, the quoted or parent post, the author's thread, link cards, hashtags, a
    poll as shown, and on Reddit the title, subreddit and flair. Select text on any page and "Save
    selection" keeps it with the page's title, address and author. Save as card renders the words
    as a picture in the house type, marked as a Daylight Commons rendering, never as a screenshot.
  • YouTube references. The control on a YouTube video saves a reference: the thumbnail and a note
    with the title, channel, the link at the current time, the whole description, chapters and any
    transcript the page shows. Copy link at this time copies the address at the current second. The
    store versions never download YouTube video. The unpacked build adds a command to copy for the new
    daylight media fetch <address>, which uses your own yt-dlp and writes the same note.
  • The side panel. "Show windows in the side panel" in the toolbar menu moves the window for a post
    to the browser's side panel, where it stays while you switch tabs. Close the panel and the window
    returns to the page.
  • Threads. On a post's own page, the X button saves the author's whole thread below it: every
    picture and video, or one note with every part in order, where X's own data shows the parts belong
    together.
  • Notes keep the engagement the page showed at save time (replies, reposts, likes, views, bookmarks;
    score and comments on Reddit), under engagement, with the time it was read.
  • daylight sidecar check <folder> lists the notes whose thread continuation was not proved.

Changed

  • daylight case add and case run no longer ask the Wayback Machine for a copy by default.
    A save request tells the page's server and the Internet Archive who is looking and when, and the
    copy is public. Ask for one with --archive, or for a whole case with
    daylight case settings archive on. case watch asks the Archive whether it holds a copy only
    with that setting on.
    Migration: scripts that relied on the old default add --archive. --no-archive still works
    and wins over the case setting. Cases made before this release have no archive key in
    case.json and read as off; set it to true to keep the old behaviour.
  • In source-protection mode the Download control, Study, the X and Reddit buttons, YouTube
    references, picture Copy and daylight media fetch make no request to any host and say why. Notes
    of text and text cards still save, since they use only what the page shows.

Fixed

  • Case exports named private accounts in export.json. The export's snapshot (and
    CHANGES.md from the second version on) carried claim text with private handles unredacted.
    Both now use the same pseudonyms as the export's files.
  • Notes saved with 3.6.0 from a profile or timeline page could list unrelated posts by the same
    author as "Continued by the author".
    A continuation is now joined only where X's own data shows each
    part answering the one before; otherwise the note holds none and, where a thread may exist, says
    thread_complete: "unknown". Run daylight sidecar check <your Daylight folder> to list the 3.6.0
    notes to check against the post.
  • Long X posts are no longer cut short in the note. When the page showed only the start of a post and
    no fuller copy was loaded, the note says text_complete: false and a line under the text says so.

Install

  • Chrome or Edge: unzip radar-chrome-3.6.1.zip, open the extensions page, turn on developer mode and choose Load unpacked. To update, replace the folder and press Reload. Settings carry over.
  • Firefox: radar-firefox-3.6.1.xpi.
  • If you saved X posts with 3.6.0, run daylight sidecar check <folder> to find notes whose thread continuation could not be proved.

Verify

Every file is listed in SHA256SUMS, signed in SHA256SUMS.sig with the project key (key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021). Open verify-offline.html to check the signature without a network.

Daylight Commons 3.6.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 25 Oct 23:25
ce783cd

A media toolkit for keeping and checking what you read, a pressure lens, and optional ad blocking.
Details and measurements: project-docs/MEDIA-TOOLKIT.md and the pressure section of
project-docs/READING-LENS.md.

Added

  • Download in one click. Right-click any picture, GIF, video or audio and choose Download: the
    file goes straight to your Downloads folder, with no new tab and no second click. It is named from
    the page or post and gets its real type from its own first bytes, so a WebP is never saved as
    .jpg. Download media here finds the picture or video under the pointer when a site covers it
    with a clear layer, and works inside frames, on <picture> and srcset (the largest version), CSS
    background images and canvas drawings (saved as PNG).
  • A Download button on X and Reddit posts. One click saves every picture and video in the post,
    at full size: X videos and GIFs as their best MP4, Reddit videos with their sound joined into one
    MP4, and every picture of a Reddit gallery. X keeps its own right-click menu on videos, so the
    button (or Shift and right-click, which reaches the browser's menu) is the way there. The button can
    be turned off in the settings.
  • Download as GIF. Sites send most "GIFs" as MP4 or WebM. This makes a real GIF on your device
    (12 frames a second, up to 480 pixels wide and 20 seconds), or saves the site's own GIF when it has
    one.
  • Streams as one file. A video the page plays in pieces (HLS or DASH) is put together as one MP4
    with its sound. Protected (DRM or encrypted) media is still refused, with a plain sentence.
  • The post's words come with the file. Each download gets a .md file with the same name: the
    post's text exactly as written, the author, the post and file addresses, when it was posted and
    saved, the alt text, hashtags and links, the quoted or parent post, the author's own follow-up
    posts the page already loaded, and for a gallery, which item it is. On Reddit it also has the title
    and subreddit. The same description is written into JPEG, PNG, WebP, GIF and MP4 files without
    re-encoding them, so it survives if the .md file is lost. Files are named
    <handle>_<date>_<first words> so a folder sorts by person and day. A .json copy for tools is
    a setting, off by default. Nothing is fetched for any of this.
  • Copy and Copy link. Copy puts a picture on the clipboard. Browsers let pages copy pictures but
    not video or GIF files, so for those Copy gives the file's address. Copy link gives the file's own
    address, or the post's for a video that streams in pieces. Copy with caption gives the post's
    words with the link, for sharing.
  • A short note in the corner says what was saved and its size, or why nothing was. An optional
    setting, "Always ask where to save", brings back the save dialog.
  • The media library behind all of this is one import for other tools: daylight-commons/media
    (project-docs/MEDIA-LIBRARY.md).
  • Save to Daylight. Right-click any image, GIF, video or audio, or use "Save media from this
    page" in the toolbar menu. Direct files are saved as they are; a video the page streams is
    assembled from its unencrypted HLS or DASH segments. Each file keeps its SHA-256, address, page and
    time, in an investigation case (with the case list and an optional Internet Archive request) or a
    moodboard with tags and notes. A collections page shows each as a grid.
  • Protected media is refused. Encrypted Media Extensions on the element, an HLS key other than
    NONE, a DASH ContentProtection element or MP4 and WebM encryption markers stop the save with a
    plain sentence. Nothing in the settings changes that.
  • Convert and compress on the device. Images among PNG, JPEG, WebP and AVIF (where the browser
    writes it); GIF to MP4 or WebM; video to WebM or MP4 at a lower size, bitrate or frame rate; audio
    to Opus in WebM or Ogg. WebCodecs encodes; Daylight Commons' own GIF decoder and WebM, MP4 and Ogg
    writers do the rest, with no new dependency. Each result shows the size before and after and keeps
    a hash chain back to the original.
  • daylight media convert <file> --to <format> and daylight media compress <file>, through a
    system ffmpeg, with a lineage file beside the result.
  • Ad and tracker blocking, off by default and separate from every reading feature: EasyList and
    EasyPrivacy compiled into the browser's own blocking engine (12,900 rules), with "Allow ads on
    this site" in the toolbar menu.
  • Pressure lens, off by default: urgency, shrinking the ask, manufactured consensus, false
    even-handedness, burden shifting and deflection by label, in messages from anyone. Held out on 73
    synthetic messages written blind: right on 8 of its 9 marks, found 8 of 47 moves, and marked none
    of 41 ordinary messages.

Changed

  • The window beside a post has Pin and Close, and stays where it was when you switch tabs and
    come back. Its media section has Download and Copy link for each picture or video.
  • New permissions: contextMenus (the right-click items), downloads (Download saves to your
    Downloads folder), clipboardWrite (Copy and Copy link) and declarativeNetRequest (ad
    blocking). Firefox's data declaration adds optional "browsing activity" for the Internet Archive
    request on a case save. The store listing justifies each one.
  • The Firefox source package for reviewers is now docs/store/amo-source-3.6.0.zip.

Install

  • Chrome or Edge: unzip radar-chrome-3.6.0.zip, open the extensions page, turn on developer mode and choose Load unpacked. To update, replace the folder and press Reload. Settings carry over.
  • Firefox: radar-firefox-3.6.0.xpi.

Verify

Every file is listed in SHA256SUMS, signed in SHA256SUMS.sig with the project key (key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021, also in release-key.json). Open verify-offline.html to check the signature without a network.

Daylight Commons 3.5.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 23 Oct 23:04
7c72f0d

Production hardening, plain help for every command, and the store kit. The audit behind it, with a
pass or fail for each check, is in project-docs/PRODUCTION-READINESS.md.

Added

  • Every command has its own help with an example: daylight analyze --help,
    daylight case add --help, daylight case help trace. Errors say what happened and what to do
    next ("No such file or folder ... Check the path").
  • Quick start for each feature, a troubleshooting page and questions and answers in docs/guide/.
  • Store kit in docs/store/: five 1280x800 screenshots of the extension on real public posts with
    every private person blurred, captions, the Firefox reviewer source package
    (amo-source-3.5.0.zip, which remakes both generated files byte for byte) and an index.
  • Performance budgets in CI (tests/budget.test.js): text work per post, the first pass over a
    500-reply thread and each later refresh, plus a check that the thread pass grows about linearly.
  • CI runs on macOS as well as Ubuntu and Windows.
  • scripts/qa/: the production checks (first run, window open time, keyboard path, axe in light and
    dark, a 3,000-post scroll soak with the heap after garbage collection), a signed-out smoke check on
    nine sites, and the store screenshots.

Changed

  • Content scripts fail quietly: each page reader and message listener is guarded, a failure is logged
    once a minute as a [daylight-commons] warning instead of an error, and five failed passes in a row
    stop Daylight Commons on that page until you leave it. The site keeps working.
  • Memory is bounded on long sessions: the in-page caches keep at most 5,000 posts, 5,000 YouTube
    authors and 2,000 posting patterns. On a 3,000-post soak the heap levels off at about 16 MB.
  • Requests from content scripts give up after 10 s (Reddit) or 15 s (X About pages).
  • Coordination clusters reuse each reply's signature between refreshes: a later refresh of a
    500-reply thread takes about a fifth less script time (60 to 49 ms).
  • Reading lens: set 12 joined the dev sets, cues were added from the misses in sets 1 to 12, and the
    weights were refit. Sets 13 and 14, labelled blind by two labellers, were the held-out round. No
    technique reached the ship rule (80% precision from at least 3 hits): question insinuation was right
    on both of its 2 held-out hits. Every technique stays off by default.
  • verify-release explains a same-version, different-head refusal in plain words: what it means,
    both hashes, and the steps to fix it. It never changes the state file itself.
  • The popup has a page heading and keeps all its content in its main region (axe clean in light and
    dark). Case dossiers and network pages have a main landmark.

Fixed

  • "Starshield systems are owned and controlled by the US government" no longer reads as secret
    coercion. Who owns a system, firm or place is a fact; the cue now skips "owned and controlled",
    "wholly owned" and a thing as the subject.
  • A case's tables can no longer name a file outside the case folder, and verify-export never reads
    outside the export folder. case import skips a capture that points outside the old folder.
  • Dossier and network pages carry a policy that lets no script run in them.

Check this release

Download every file into one folder and run node scripts/verify-release.mjs <folder> from a checkout, or open verify-offline.html from the folder with no network. Release key id 0e5e 1984 0565 840c 977e 0f03 6c9a c021; compare it with one you got another way. SHA256SUMS sha256 09aafff63aef01baf0964bfbe71fb2702b372db7f594270aac2f292e8d0c4b49.

If verify-release says a different head with version 3005000 was already accepted on your machine, it prints what that means and the steps to fix it.

The Firefox reviewer source package is docs/store/amo-source-3.5.0.zip at this tag.

Daylight Commons 3.4.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 23 Oct 20:38
4b8b743

Case folders for investigation: daylight case (also radar case). A case is a folder with its own
git history. Each source is captured with its sha256, access time, read mode and Wayback request;
each claim sits on a rung (documented, inference, unproven, contradicted) with its source; and each
export verifies offline (project-docs/INVESTIGATE.md).

Read these limits before relying on it:

  • Claims from case run without a model come from sentence rules. On the Musk and Ukraine case they
    found the documented facts the hand-built case found and missed every finding that needed reasoning
    across sources; most of the 245 proposals would be rejected in review.
  • Retellings are linked by shared content words. Paraphrase in other words or another language is
    not linked, and two claims that disagree on a number or date in different wording are not flagged.
  • Capture reads web pages and X posts. Video, Telegram, TikTok and Truth Social posts are not
    captured yet.
  • case read runs the 3.3.0 Reading lens with every technique on, so it names techniques that are
    below their precision bar and off in the extension. On the Musk and Ukraine sources it read "owned
    and controlled by the US government" as secret coercion. Each finding is marked as below or above
    the bar.

Added

  • case init, add, claim, claims --blind, label, labels, trace, event, timeline,
    edge, network, lead, leads, absent, actor, read, import, export, verify-export
    (src/investigate/, bin/lib/case*.mjs).
  • case run <seed>: twelve resumable stages from screenshots, URLs or a claim to a dossier, with
    checkpoints, a watchdog and a run lock; optional model steps through a local command or a
    configured endpoint; case review to accept or reject each proposal; case watch for scheduled
    re-checks of captures and leads.
  • Exports: newsroom dossier, legal chain-of-custody bundle, research dataset with PROV-O and
    Croissant metadata. Each carries SHA256SUMS and a signed evidence bundle of case-file items (a new
    evidence kind in schema/evidence.v1.json and evidence.v2.json; new exports are version 2
    bundles). Private accounts are pseudonyms unless marked public
    figures.
  • Extension popup: Add to case and Save case list (src/ext/case-inbox.js). Addresses stay in
    the browser; nothing is sent.
  • case read: the Reading lens and the detector over every capture, with frames shared across
    sources.
  • examples/musk-ukraine-case, the hand-built case of 2026-10-23 moved into the format.

Daylight Commons 3.3.0

Choose a tag to compare

@HarperZ9 HarperZ9 released this 23 Oct 20:31
2be452a

The reading lens. Daylight Commons now reads how a post argues, at the span: it names the technique,
marks the words in the post, and shows the two factors that moved its weight. The thread panel counts
how many posts and authors use the same frame, and the feed dashboard counts frames across your feed.
Every sign now says what it shows, in plain words.

Added

  • Reading lens (src/core/reading.js, reading-cues.js, reading-inflection.js, reading-lists.js).
    Seventeen techniques: nation denial, dehumanising metaphor, punitive annexation or elimination,
    strongman appeal, question insinuation, true item carries a leap, case to group, essentialism, coded
    term, replacement or blood libel, secret coercion, election theft, metaphor, hyperbole, irony,
    allusion and dog-whistle. Each has a plain one-line definition.
  • Inflection layer: stance (quotes, mocks, rebuts, names a coded term to criticise it), irony, question,
    target class, intensity, thread echo, the opening post, genre, the author's own usage and post length.
    One deterministic weight vector, fitted on the dev feed tests only. Target enters as one class, and
    tests/reading.symmetry.test.js checks every nation, people, party, actor and leader in the lists.
  • Spans marked in the post with the CSS Custom Highlight API (src/ext/lens-inline.js); the window shows
    the span, its name and its factors; the thread panel shows "Frames in this thread"; the dashboard shows
    "Frames across your feed".
  • Options: "Every reading technique" shows all seventeen.
  • scripts/eval-reading.mjs: precision and recall per technique with Wilson intervals, with and without
    inflection, against two blind labellers. Method and tables: project-docs/READING-LENS.md.

Changed

  • The window, panel, exports and command line show a "What it shows" row for each sign. It describes
    what the sign found and keeps a limit only where a reader would misread the sign without it.
  • Technique definitions and lessons are rewritten in short, plain sentences: what the technique is
    and how to spot it.
  • The definition catalogue's own notes are rewritten the same way. Every entry moves to 1.0.1; the
    quotes, elements and signals are unchanged (catalogue/CHANGELOG.md).
  • radar-core API 2.0.0: the evidence item field doesNotProve is now context, the schema is
    schema/evidence.v2.json (urn:radar:evidence:v2) and new bundles are version 2. Version 1
    bundles still verify, and readEvidence reads their doesNotProve as context
    (project-docs/INTEGRATION.md).

Measured

  • Held-out feed tests 10 and 11 (98 posts, labelled blind for this release): no technique reaches 80%
    precision from 3 hits, so every technique is off by default. Question insinuation is closest at 3 of 4.
    Round 1 on feed tests 6 to 11 is kept in project-docs/evidence/reading-results-round1.json.
  • The strong-family precision on scripts/eval.mjs --split test is unchanged: 4,167 of 4,597 (90.6%).