Repository navigation
Releases: HarperZ9/cmmns
Release list
CMMNS 3.9.1
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 setsdisplay: 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, samepb.saved.v1key).
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
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/1and the rest), theurn:daylight:andurn:radar:ids, storage keys, the Firefox
add-on idradar@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-commonsandradarrun the same tool.
Environment variables readCMMNS_*first andDAYLIGHT_*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 keepsDownloads/Daylight/<site>/: the update stores that folder as its setting.cmmns media fetchsaves intoDownloads/CMMNSunless onlyDownloads/Daylightexists. 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>.zipandcmmns-<version>.bundle.
verify-releasereads names from the signed list, soradar-*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 asname (1).jpg, but the note beside it
still listedname.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 simulatedchrome.downloadsin 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--fixrepairs 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.jsnow 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.mjsships 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
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
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
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 ofDaylight/<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
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 withdaylight 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 onfor 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), underengagement, with the time it was read. daylight sidecar check <folder>lists the notes whose thread continuation was not proved.
Changed
daylight case addandcase runno 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 watchasks the Archive whether it holds a copy only
with that setting on.
Migration: scripts that relied on the old default add--archive.--no-archivestill works
and wins over the case setting. Cases made before this release have noarchivekey in
case.jsonand read as off; set it totrueto keep the old behaviour.- In source-protection mode the Download control, Study, the X and Reddit buttons, YouTube
references, picture Copy anddaylight media fetchmake 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.mdfrom 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". Rundaylight 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 saystext_complete: falseand 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
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>andsrcset(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
.mdfile 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.mdfile is lost. Files are named
<handle>_<date>_<first words>so a folder sorts by person and day. A.jsoncopy 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>anddaylight 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) anddeclarativeNetRequest(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
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-releaseexplains 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-exportnever reads
outside the export folder.case importskips 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
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 runwithout 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 readruns 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 reviewto accept or reject each proposal;case watchfor 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 ofcase-fileitems (a new
evidence kind inschema/evidence.v1.jsonandevidence.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
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.jschecks 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
doesNotProveis nowcontext, the schema is
schema/evidence.v2.json(urn:radar:evidence:v2) and new bundles are version 2. Version 1
bundles still verify, andreadEvidencereads theirdoesNotProveascontext
(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 inproject-docs/evidence/reading-results-round1.json. - The strong-family precision on
scripts/eval.mjs --split testis unchanged: 4,167 of 4,597 (90.6%).