What's next#
Next#
Committed, not yet started.
- AI second opinion for custom schemas — The model's verdict is currently shaped like the built-in antisemitism taxonomy, so a team on its own schema gets the plain-language explanation but not the pre-annotation. Fixing it means deriving the verdict from the team's own schema — a model contract, not wiring, which is why it wasn't folded into the parity pass.
- Peer comparison on custom schemas — The compare carousel, the inline marks showing what other annotators said on the same post, and the guided keyboard flow — three things the built-in panel has and a custom schema's editor doesn't.
- Contribution tracking — What each annotator, team and organization has produced. The headline figure — how many annotations each has stored — now reports on the usage page. What is still missing is the rest of the picture: output over time, how much of it has passed review, and coverage of a project rather than a running total.
Exploring#
Wanted, with an open question in front of it.
- The other hate types in the same panel — The label spaces for anti-Black, anti-Latino and anti-queer hate already ship inside the extension; the annotation panel is locked to antisemitism. Unlocking it is a small change and a large decision about how a corpus annotated against four taxonomies is kept coherent.
- Structured flagged-source measurement — Today the extension marks a citation to a watchlisted outlet when an annotator happens to encounter one. A deliberate, repeatable prompt suite would turn that into a rate that can be compared across assistants and over time.
Release history#
Each release lists what it added. A version in development is already built and in testing — it reaches annotators as the next install.
Comments that are only a picture can be annotated, flaggers join a project by invitation, and exports come in the format you need.
- A comment that is only a picture, a GIF or a video — a photo reply, a sticker — can now be annotated on every platform that shows one, and lists name it “Image — no text” instead of leaving it blank.
- The annotation drawer moves out of the way: it opens on the left when the post you are annotating sits under it, can be switched to either side, and steps aside while you pick comments for context.
- Anyone can install the extension and flag posts straight away; their flags go to AddressHate, and the popup says where your flags go.
- A lead can invite people to a PROJECT from its Add people window — by email address, or with a shareable link that can be turned off or replaced — and the people invited flag for that project.
- An organization's invite code and its requests to join are now for university and organization email addresses, which can annotate; a personal address joins a project by invitation instead.
- The arrow beside Export downloads the same list as a CSV file, JSON or JSON Lines, and a scheduled export can be delivered in any of them.
- The Excel workbook is easier to read — a filterable header row, real dates, clickable links, wrapped text — and ends with a Codebook sheet that explains every column and its answers.
- Signing out, or switching account or organization, starts the next session from a fresh copy of its own schemas and projects.
- A new icon: a note with a folded corner.
Imports that carry the words of every post, invitations for people who already have an account, and a full pass over every surface that fixed the controls that could act twice and the screens that lost your place.
- A Brandwatch import files every post WITH its words — Brandwatch's own full text, else the platform's official API, else the public page. A post that takes a while to read is filed within the hour, and one that cannot be read is skipped and counted, so the import says what it left out.
- An exported project now counts its sub-projects, and annotations made before a post was added to the queue; the workbook gains a Posts Annotated column.
- A scheduled or API export no longer skips an annotation that reached the service late, after the export's last run.
- A lead can invite someone who ALREADY has an account: they get an email with a link to accept.
- Each organization can have an INVITE CODE. Anyone who signs up with it lands in Requests to join on the Users page, and approving them is where their permission group is chosen.
- A Facebook comment keeps its badge and its annotations when Facebook changes the story's link between visits.
- An image an AI assistant generated can be annotated even when the chat holds no text around it.
- On a conflict, the annotations that were not chosen read “Not chosen”, and each tag shows where the annotators differed.
- Clicking a button twice no longer does the thing twice — flagging (a second click used to remove the flag), review verdicts and feedback, conflict notes, new items, organization settings, new teams, schemas and file imports.
- A “required” message clears as soon as the question is answered, and a single-choice question asks for an answer rather than “at least one option”.
- Questions in the schema builder can be reordered from the keyboard, and the keyboard keeps its place after an action on the Usage, Platforms and Schemas pages and in the walkthroughs.
- The Schemas page shows which schema is an organization's default, its columns line up, and the Platforms page no longer scrolls sideways on a mid-sized window.
- Signing in no longer leaves the form unusable when the service's reply cannot be read, and Settings says “Sign out” like everywhere else.
- Deleting your account also removes your name from import batches, posts waiting to be imported, and the flagged-source watchlist.
The first day, walked through. Every role now has a walkthrough of its own first job and every page one of its own on sample data, organizations and teams are easier to run, and a production pass over every surface fixed what 1.0 left quietly wrong.
- EVERY ROLE GETS A WALKTHROUGH OF ITS OWN FIRST JOB. The first time you open the workspace, it walks you through the work your role actually does — a lead sets up a schema, a team and a project; an annotator annotates; a reviewer reviews — in short chapters you can stop and pick up again.
- Each page has its own walkthrough, run on SAMPLE DATA, so you can try every control without changing anything real. It starts on your first visit and can be replayed at any time.
- Getting started shows YOUR walkthroughs and how far through each you are, and any part of one can be started from there.
- Brandwatch importing, in depth: a button on Schedules → Imports walks Brandwatch's query language in a practice lab, then the Import wizard and scheduling step by step, and adding a saved batch or a file — all on sample posts, with nothing sent to Brandwatch.
- Exporting, in depth: a button on Schedules → Exports shows what an export holds, sheet by sheet and column by column, then walks the Export button, delivering an export on a schedule, and API tokens.
- Importing from a file has a downloadable template with the columns it reads and an example of each kind of row.
- Several labs can now share one university domain, each as an organization of its own, and every organization has a display name instead of an internal id.
- A lead can approve someone asking to join straight from the email that tells them about the request.
- Adding a member is a short step-by-step window — address, permission group, team, confirm — on the Users page, and adding a teammate works the same way on the Teams page.
- An organization's team rows fold open to show who is on each team, what they may do and when they last signed in.
- Annotators and flaggers see their OWN usage — what they have used this month and what is left — on Settings.
- API access — the tokens a lead makes for a script or scheduler of their own — moved from Settings to Schedules → Exports, in its own section below the schedules the service runs.
- A schema is chosen PER PROJECT, and an organization's first schema is its default. Teams no longer carry a schema of their own, so the question “which questions will this post get?” has one answer in one place.
- A conflict now lays the annotations out side by side, one column per annotator, so the disagreement is visible at a glance. On a conflict you are part of, one click adopts a colleague's answers in place of your own, keeping your comment.
- Every organization's flagged-source watchlist now starts EMPTY and holds only the outlets that organization chose, and a lead can add an outlet — its names and web addresses — directly from the Sources page.
- A short highlighted passage written in capitals can be annotated. It was mistaken for a page heading and cleaned away, so the highlight recorded nothing and nothing said why.
- On a Reddit feed, annotating a post files that post — not the first post on the page. On LinkedIn, each post in the feed has a link of its own, so flagging one no longer marks every post on the page as flagged.
- An image an AI assistant generated keeps the prompt that asked for it, on ChatGPT's new page layout too.
- A Facebook comment's link leads to the comment, not to the profile of the person who wrote it.
- The extension no longer occasionally believes you are signed out until the browser restarts, and signing in again while an old session is expiring no longer loses the new sign-in.
- A question hidden by another answer is no longer submitted or required, however many conditions deep it sits.
- The workspace no longer shows an older answer over a newer one when you switch team or page quickly, and Escape closes a picker or pop-up before anything behind it.
- The on-page windows — the flag consent, the Explain confirmation, the annotation viewer, the sign-in card and the bulk-labelling bar — fit a narrow window, keep keyboard focus inside themselves while open and return it when they close.
The first stable release, and the first one anybody can find: the listing is public from this version. Nothing about who may USE the tool changes — an account has always been the boundary, and it still is — but the extension is now something a researcher can be pointed at rather than sent a link for. This release is what 1.0 was held back for: a pass over every surface the tool already claimed, finishing the ones that were nearly right and fixing the ones that were quietly wrong. There is also somewhere to practise now — a page inside the extension that behaves like a real platform.
- The extension has a PRACTICE PAGE: a page that looks and behaves like a real platform, with the real Annotate button, the real panel and your own team's questions, where nothing you submit is kept. It is the answer to the awkward part of a first day — that the only way to learn the tool was to use it on real posts and hope you were doing it right.
- The setup screen now offers, under the terms, an OPTIONAL checkbox to join the AddressHate mailing list — occasional news about the project and the tool. It NAMES THE ADDRESS it would add, which is the one you signed in with, so you are agreeing to send something you can see rather than to “add me”. It is unticked, it is never a condition of using the extension or any part of it, it carries nothing about your annotations, and every message has an unsubscribe link. Leaving the list is separate from deleting your account.
- The Terms of Use are clearer and narrower, so you will be asked to accept them once more. The project may now say publicly that your ORGANIZATION uses the extension, and no longer names you: your name, annotations and judgements are never used without your explicit consent in a separate agreement. The terms also say plainly that the tool is for academic and organizational research only, and that you must be in the United States.
- What is stored for an article is now the PIECE'S OWN WORDS. The navigation, the advertisement markers, the share row, the photo credits, the newsletter pitch, the tag list and the related-story blurbs are removed before anything is kept, and a stray citation mark or a broken character from a mis-encoded page is repaired rather than stored. It reads the same whether you annotated the page in place or pasted its link into a project — the two used to disagree, so the same article could be two different documents in one corpus.
- An image an assistant generated, once annotated, can now be SEEN again — in review, in conflicts and in your own history. The copy kept with the annotation was being stored correctly and shown nowhere, so a reviewer judging a picture had only the words around it.
- A picture that finishes rendering after you have started reading now gets its Annotate button. Images that arrived late — the common case on a slow connection — were left without one until the page was reloaded.
- A photo YOU attached to your own prompt is no longer offered for annotation. The button belongs on what the assistant produced, not on what you handed it.
- SETTLING A CONFLICT WORKS AGAIN. Choosing which annotation stands had been refused on the current storage backend since it became authoritative — the page offered the decision and the service declined it every time. Settling one now marks the chosen annotation as the one that counts and the others as excluded, in a single step, and clearing the decision puts every annotation back to unreviewed. Nobody is asked to redo anything, and a lead who annotated the post themselves cannot settle it.
- The coaching note a lead leaves on a conflict is shown to the annotator again.
- Every control inside a review or conflict row — the checkbox, the verdict buttons, the per-row actions — is reachable by keyboard and announced by a screen reader. A row that was itself one large button had been swallowing them.
- An administrator's review inbox is bounded to the organization they are working in, so the rows in front of them are always work they can place. It said so already; now it is so.
- The daily and weekly figures are visible on the page. They were being recorded and never shown, so a team hitting a daily ceiling saw a monthly total with plenty of room left and no explanation for the refusals.
- Refusals are counted. When a limit turns work away it is recorded as such — and when a limit is only being measured, the page shows what it WOULD have refused, which is what makes turning enforcement on a decision rather than a gamble.
- A change to a limit records who made it and when.
- Deleting an account removes its figures from the page rather than leaving a row for somebody who no longer exists.
- The per-person monthly allowance for the AI features is raised so that an organization's own pool is what binds. It was low enough that no plan's pool could ever be reached, so the number on the page was one nobody could spend.
- An account whose permission group no longer exists now falls back to the LEAST access the product has — flag only — instead of to the default role. It resolved as a full annotator, which meant a volunteer who had been given flag-only access could silently end up with the team's whole workload in front of them. Administrators keep their access, and the affected accounts are named so a lead can put them right.
- The Platforms page marks a platform that shipped AFTER a team's list was saved, with one click to allow it. Such a platform was simply denied, with nothing anywhere saying why — twice, on 8kun, before anyone noticed.
- The roster shows which build of the extension each person is running, so “have they got the fix yet” is a question the page answers.
- Settings had a production pass: the copy and the links are right, an administrator looking at another organization sees that organization's settings, and a control that fails now says so instead of appearing to have worked.
- The Sources page names the organization whose watchlist it is — useful when you have three — and lists the AI assistants your organization is cleared for, since that is where a flagged-source warning can appear and nowhere else. An organization cleared for none of them no longer has the page at all.
- Getting started was checked line by line against what each role and permission can actually do, and the steps that were shown to people who could not take them, or that described the product as it used to be, are gone.
- API access, on Settings, had the same pass. A token now says when it is close to expiring, the page says how many you may hold before you run out rather than refusing the one that would have been too many, and a service that is out of date or briefly unreachable says which — with a way to try again — instead of showing its error code. A script can also check its own token: asking who it is now answers with the token's name, what it may reach, how many days it has left and how much of its monthly call allowance is unspent, so a scheduled export can warn you before it starts failing rather than after.
- API calls are now metered like every other resource, so Usage & limits shows how much each person, team and organization is pulling through a script, and an administrator can set an allowance there. It ships deliberately high — far above a nightly or even an hourly export — because it is there to catch a job looping without a pause, not to budget anybody's integration.
- EVERY ORGANIZATION NOW HAS THE ANTISEMITISM PANEL, and every organization can build its own questions beside it. A tenant no longer starts with nothing to annotate with.
- An organization sees and uses THE SCHEMAS IT CREATED, plus that bundled panel — and nothing else. Another customer's codebook is not listed, not readable and not assignable, which is what a codebook being somebody's work product requires.
- The Schemas page says, on every row, WHY your organization can use that schema: because everyone has it, because you built it, or because it is one of your own team's or project's.
- The schema editor got a working-surface pass. The question palette and the question's Details panel are now full-height columns either side of the canvas, each scrolling on its own, so the questions stay in view while you work through a long list of settings.
- THE EDITOR EXPLAINS ITSELF. Every section and nearly every control now carries a sentence saying what it is for — what a field id is and why it is permanent, what a taxonomy does, what a condition hides. It is on by default for anyone opening the editor for the first time, and one Hide help button puts it all away once you no longer need it.
- Building a schema works on a narrow window: the template shelves fold into a row instead of pushing the templates a screen down.
- The keyboard shortcut for annotating an article (Alt+Shift+A) reports when it cannot open rather than doing nothing. A press that failed was silent, which is indistinguishable from a shortcut that is not bound.
- A team's export and its queue no longer disagree about which items belong to a project.
- Annotating works again on ChatGPT. ChatGPT rebuilt its conversation page in September, which left responses with no Annotate button, no already-annotated mark and no flag icon — a page with nothing on it looks the same as a page with nothing to annotate, so there was nothing on screen to explain it. Conversations from before the change keep their existing annotations.
- When a sign-in has run out, the page now says so instead of asking you to sign in as though you never had. You still have to sign in again — that part was right — but “sign in to annotate” reads as the extension having forgotten you.
- The annotator-agreement panel no longer reports agreement it cannot see. For a team working to its own codebook it read “Unanimous” in green over every post, because it was looking for the built-in question set’s answers and finding none — so “nobody answered” and “everybody agreed” came out identical, on the panel that exists to show disagreement. It now compares the answers actually given, says nothing where there is nothing to compare, and never shows an annotator it could not read as agreeing.
- Review, Conflicts and the local outbox now name a question by what your own codebook calls it. Each of those columns was labelled with the built-in question set’s word for it, so a team whose first question is “Severity” read severity answers under somebody else’s heading — and on the outbox the column was simply empty.
- Adding somebody to a project no longer offers an account from another organization. The list you pick from could include people outside your own organization, and adding one was refused only after you had chosen them — with a message that could not explain why without naming who else exists. The picker and the rule now agree, so the names you are shown are the names that work.
Articles and other web pages can now be annotated — the whole piece, a passage you highlight, or any reader comment under it — by asking the extension onto the page from the toolbar popup or with a keyboard shortcut. Mastodon and Truth Social join the platforms, and a corpus can be brought in from a file. Items can also be annotated from the workspace itself, without opening the platform first, and opening one for annotation assigns it to you. You can sign in with a Microsoft work or school account, alongside Google and a username and password, so partner organizations on Microsoft 365 no longer need a separate password issued to them.
Annotable after this release — 20 surfaces: X, YouTube, Rumble, TikTok, Reddit, Instagram, Facebook, LinkedIn, Bluesky, Mastodon, Truth Social, 4chan (including its 4plebs archive), 8kun, ChatGPT, Claude, Grok, Gemini, DeepSeek, Qwen — and, on demand, any article or other web page.
- Anyone can create an account with their email address. A new account is held until you confirm the address from the email we send — the link asks whether it was you, and “This wasn’t me” removes an account somebody made in your name. Once confirmed, a university address (or one your organization has claimed) goes on to choose its organization and wait for a lead, exactly as before, or to set the organization up if it isn’t here yet; any other address can flag posts right away, and a lead or admin can promote it from the roster. The shared invite code still works and is no longer required. The form asks first which email you are signing up with — a university address, or any other — and holds the email field to that answer, so you read what your kind of address leads to before you type it.
- Leads are emailed when somebody asks to join their organization, and the person is emailed when the request is decided. A request from an address that hasn’t been confirmed can’t be approved until it is.
- Any web page can now be annotated — a news story, an op-ed, a blog post. Open the toolbar popup on the page and press Annotate this page, or press Alt+Shift+A, and the page carries the usual Annotate button on its headline. Nothing runs on such a page until you ask: the extension holds no standing access to any site beyond the platforms it has always run on.
- Highlight a passage and annotate just that — only the highlighted text is stored, and its link reopens the page scrolled to the quote. The Annotate button on the headline annotates the WHOLE piece: its own text is stored (up to 12,000 characters), with the comment section alongside it as context.
- The comment section is annotatable too, the way a thread on a social platform is. Every reader comment carries its own Annotate button and is stored under the commenter's name rather than the publication's, with when it was posted and its likes where the page shows them. A reply keeps the comments it answers above it and the article's headline, so a reviewer reads it in context; a passage highlighted inside a comment is filed as the commenter's.
- Comments are found on the systems news sites and blogs actually run — WordPress, Drupal, Hacker News, forum software and many more — and on sites with no recognisable markup at all. Where none of that finds them, highlighting one comment is enough: annotating it teaches the page where its comments are, and every comment beside it gets a button.
- Disqus comments — the comment section of many news sites — can be annotated once you allow it. Disqus shows its comments in a frame the extension cannot otherwise reach, so the first time you annotate such a page Chrome asks whether it may; say no and nothing changes. Comments a site loads from other services are not read; the record says they were there instead of reading as none.
- Pasting an article link into the queue files it as an article, and the service reads the page's headline, byline and text so it can also be annotated from the workspace. Brandwatch imports can ask for news pages in the same way, when a lead ticks Articles.
- Administrators can allow or restrict articles per organization and team on the Platforms page like any other surface. An organization that had narrowed its platform list will need Articles ticked before its annotators see the option.
- Posts and replies on mastodon.social and truthsocial.com carry the Annotate button, with the thread a reply sits in kept as context. An organization or team whose platform list is restricted will need the new platform ticked on the Platforms page first.
- The Import window has a third source: upload a CSV or JSON of posts — links, or just their text — and add them to a project. A row with text and no link becomes an imported text, annotated from the workspace with no live post to open.
- The annotation panel's ⋯ menu gathers the tools for studying a post: the plain-language explanation, how far it travelled (its likes, replies and shares as the platform shows them), and whether the account behind it looks like a person — plus the AI pre-annotation and what other annotators said. Flag sits beside it in the panel's title row, one click away.
- Explaining a post from the page itself — the magnifier a flagger sees beside the flag button — now asks first, and says how many AI explanations you have left this month, so a stray click no longer spends one. Once none are left the sheet says so instead of offering a button. An explanation that fails to load no longer counts against the allowance either.
- When a post's picture has gone from the platform — an imageboard deletes a thread's files, a platform's image links expire — an annotation reopened from the workspace shows the copy saved when it was annotated, marked as the saved copy. If no copy was kept, it says so and offers the post, rather than showing an empty box.
- An image or video an AI assistant generated — on ChatGPT, Claude, Grok, Gemini, DeepSeek or Qwen — carries its own Annotate button under it, so the picture can be judged on its own rather than only as part of the whole response. A response that is nothing but a picture, which had no button at all, can now be annotated.
- The picture is judged on its own: the prompts written before it ride along as context, and the assistant's text around it does not — even when the same response also wrote text.
- A picture wrapped in a link to its own full-size file keeps its Annotate button, and the chat’s source check no longer offers to report the assistant’s own image host as a cited outlet.
- The file itself is kept with the annotation: the extension reads it from the page when you annotate it (its address works only in your browser) and it is archived once, in your organization's own archive. If it cannot be read, the annotation is still saved, noting the image it was about.
- You can now annotate an item from the workspace itself. Open an item on the Items page or on any project or sub-project, and each of its links carries an Annotate button that opens the usual editor — the project's own schema, the same answers, the same review — without leaving for the platform first.
- Opening an item for annotation assigns it to you, so the queue shows who is working what while they are working it, rather than once the annotation arrives.
- The editor shows the post's own text and the account that wrote it, wherever those are known. Where they aren't, it says which is missing and puts the post one click away instead of showing you an empty card. Either way there is a link to the original, since only the platform has the images and the conversation around a post.
- An item you have already annotated reopens your own answer rather than starting a blank one, the way editing an annotation from the Conflicts page already did.
- Several comments can be labelled at once. Press Alt+B, click the comments you mean (or take everything on screen), choose one label and apply it — for the long threads where almost nothing applies and each comment otherwise costs a trip through the editor. It only ever answers the first question your team’s schema asks, it skips anything you have already annotated rather than overwriting your own work, and a label that needs more than that one answer stays greyed out with the reason on it.
- The “annotated on this page” button now says how much of the THREAD each annotator has done — on hover, and as a line above the list it opens. Two people working the same video or thread can see each other’s coverage without leaving the page, and you always see your own. What you can see of other people’s work is unchanged.
- Posts that arrive from an imported social-listening source now keep their text and their author, so they can be worked entirely from the workspace. A post somebody has already annotated shows its text and author too, however it was collected.
- And where nobody holds the post yet — a link somebody simply pasted — opening it for annotation reads what the platform publishes about it: the post's own words and the account that wrote them, on X, YouTube, TikTok, Reddit, 4chan and 8kun, plus the link preview any other site offers. Nothing private, nothing behind a login, and only for the post you are about to work.
- A post with pictures or video on it now says so. The images themselves stay on the platform — the editor tells you how many there are and the link takes you to them, rather than showing you the words alone as though that were the whole post.
- Posts 4chan has deleted can be annotated on archive.4plebs.org, which keeps them. Open an archived thread and every post carries the usual Annotate button.
- An archived post is treated as the post it is: it keeps its original board and number, so a queue item added from a boards.4chan.org link is ticked off by an annotation made on the archive, and the same post annotated from either place is one piece of work rather than two. An organization already cleared for 4chan is cleared for the archive with it.
- When a platform redesigns and posts stop getting their Annotate button, an administrator can now put in a replacement from the Platforms page, and every installed copy picks it up within hours — no store update to wait for.
- The toolbar popup has one button for the page behind it: Add this page on a platform, Annotate this page on an article. Pasting a list of links is done from the workspace.
- The “✓ You annotated” mark no longer flickers on and off while you work. On sites that repaint a post as you scroll — Reddit most of all — the page kept sweeping the mark away, and it was put back only a third of a second later; it is now restored in the same instant, so it simply stays put.
- A site your organization has not been cleared for now says so. Pressing the annotate shortcut on such a site, or opening the toolbar popup there, tells you the site is turned off for your organization and that an administrator can turn it on — instead of the extension appearing to be broken.
- An annotation waiting on a service outage is no longer given up on. It used to stop retrying after about an hour, leaving work that needed a manual retry; it now keeps trying for as long as a week, and the message says the problem is ours and that nothing is lost.
- “Continue with Microsoft” sits beside “Continue with Google” on the sign-in panel and the in-page sign-in card. It appears only where your organization has been set up for it, so nothing changes for anyone who signs in another way.
- The extension asks Microsoft for your email address and name and nothing else — it cannot read your mail, files or calendar, and never receives your password. A Microsoft sign-in lasts as long as any other, and signing out ends it everywhere.
- If a sign-in needs your IT department's approval, the extension now says so in Microsoft's own words rather than reporting a generic failure — so you know who to ask.
- An administrator or team lead adding someone can now send a Microsoft invitation as well as a Google one: the account is created with its role and team already set, and the person claims it by signing in. The roster says which provider a seat is waiting on.
- Invitations, password resets and the “no password on this account” notice are now sent from the extension’s own mailbox, so they arrive from an address a person can reply to rather than a no-reply one — and a forgotten password can be recovered without an administrator issuing a link by hand.
- An invitation can now go to any email address. Until now a Google or Microsoft invite had to be at one of a short list of organization domains, and anyone else — a collaborator on a personal address, a partner on their own institution’s domain — had to be written into the service’s configuration by hand first. The person still has to be invited by an administrator or lead before they can sign in; what changed is who can be.
- Putting people on a project now opens a share window, the kind every document tool uses: type a name into the box at the top, and below it is the list of everyone who already has the project, one row each.
- Names are picked in the box and added together, so staffing three people is one action rather than three. Each row in the list has its own remove.
- Anyone can open it to see who is working a project; only a lead can change it.
- Export now works on the item list as well as the Annotated one, so a project’s collected posts can be downloaded whether or not anyone has annotated them yet. Until now a spreadsheet could only ever contain finished annotations, which left the material still waiting to be worked on with no way out of the tool.
- The button is on the Items page and on every project and sub-project, and exports what is in front of you: the workbook follows the project you have open, the slice you are on, and the search and filters you have set.
- One download covers both halves of the page. The first sheet is the items — each post with its project, who it is assigned to, and how many people have annotated it so far — and the sheets behind it are the annotations, laid out per schema exactly as the Annotated export has always laid them out.
- A lead can now create an API token on the Settings page and use it from a script or a scheduler to download the same workbooks the Export button produces — so a nightly export to a data warehouse no longer needs a browser, or a password kept in a job.
- A token only exports. It sees exactly what its owner sees, it cannot change anything, and it stops working the moment it is revoked — by its owner on the Settings page, or by an administrator from the Users page. It is shown once, when created, with a ready-to-run command beside it.
- Both exports can now be fetched as JSON or CSV as well as Excel, with the same sheets and columns, so a data pipeline can read the annotations without a spreadsheet parser. Large exports can be read a page at a time.
- A lead can also set up a scheduled export: choose the project, the format and how often, and the service delivers the workbook by email or to a storage bucket — daily or weekly, without anyone opening the extension. Each schedule shows when it last ran and what happened, and can be paused, edited, run on demand or deleted from the new Scheduled exports page.
- A schedule can be started from the list you are already looking at. The Export button now has a second half: press the arrow and choose “Schedule this export”, and a new schedule opens for exactly that export — the project, the slice, the platforms, the people and the search you had set are carried over and shown, so a standing delivery is never quietly wider than the list that prompted it. All that is left to answer is how often, and where it goes.
- A schedule can also be narrowed to particular people: whose annotations to include, and whose items — chosen from your roster, or filled in from the list you started it on. Leaving them empty means everyone you can see, as before. The form now reads down the page with each question beside its answer.
- Scheduled exports and scheduled imports now share one “Schedules” page, with a tab for each — they were two entries with near-identical names, and remembering which one held the thing you wanted was work the page should do for you. Anyone who could only see exports still sees only that tab.
- The watchlist is now separate for every organization, whichever database its work is stored in. The outlets a lead approves, removes or edits are their own organization’s, and only their organization’s annotators are warned when an AI answer cites one. Organizations sharing a database used to share one list, so a lead in either could add an outlet the other’s annotators were then warned about — or take away one they relied on.
- An organization new to the watchlist starts with an empty list and grows it from its own annotators’ reports.
- The page is now called Sources, and the reported outlets, the watchlist and the earlier decisions each stand further apart on it, with the explanations running the full width of the page rather than stopping halfway across it.
- The workspace sidebar is now three headings — Work, Managing and General — that open where they stand, instead of one long list of every page you can reach. What you do daily is under Work; the pages you visit when something needs setting up are under Managing.
- Items moved into Work alongside Review and Conflicts, so the queue and the two pages that watch it are together.
- Projects are listed alphabetically and can be narrowed to one team, which is the switch that used to live in the toolbar popup. Hovering a project shows who is on it, beside the row rather than inside it.
- Every page now carries its title and a short line about what it is for in the bar at the top, so a page opened from a link says what it is.
- The Getting started page has been rebuilt around what a new account actually does first. It opens with a short checklist that ticks itself off as you go — pin the extension, annotate a post, see where it landed — with the reference material below it rather than in front of it.
- The page is drawn as well as written: the annotating loop, the panel, flagging, reviewing and how a team switch changes what you see each have a small diagram, because those are questions about an arrangement and a paragraph was the wrong answer.
- Every line is matched to the account reading it — your role, what your team may do, and which platforms your organization has been cleared for. It no longer describes pages you do not have or sites where the extension is deliberately silent.
- Settings is now three panels — your profile, your annotating preferences, and API access — with the legal documents along the foot of the page.
- Leads and administrators see how many posts their organization has looked at, alongside their own count.
- The Conflicts page is one table with two views. Open disagreements and the ones you have put away sit under the same columns, and a row carries both of its actions — settle it, or file it away — so clearing the page no longer means scrolling past everything already dealt with.
- Filing a conflict away changes no annotation. It is a note about the list, it is your organization’s alone, and it can always be undone.
- The Review page tells you when it could not load rather than showing an empty inbox. A refused or unavailable queue used to read as “nothing to review”, which is the one message that stops a reviewer looking further.
- Ticking a row on the Review page no longer redraws the page under you, and the sidebar’s Review and Conflicts counts are fetched as counts rather than by loading both pages in full on every page you open.
- Agreement between annotators is now measured the way research reports it — Cohen’s and Fleiss’ κ and Krippendorff’s α — in the on-page viewer for a post several people annotated, and for a whole project on the Conflicts page. Where a figure cannot be computed it says so rather than showing zero.
- Two annotators who choose different “other ideologies” for the same post now raise a conflict. The Conflicts page had no opinion about that question, so a post everyone agreed was antisemitic — but disagreed about what else it was — was filed as agreement and never surfaced. The row says which of the three now differs, and shows each annotator’s choices side by side. The agreement statistics score the question too.
- Someone with an address at a university, or at a domain an organization has claimed, can create their own account and ask to join; a lead of that organization approves them before they can do anything. Organizations can list the email domains that are theirs.
- Adding someone is one form wherever you do it. Leave the password blank and the service emails them a one-time link; they choose their own username and password from it, so nobody has to send a password to anyone.
- The Users page can be narrowed to one organization, and the team list follows it, so a lead is choosing from their own people rather than from everyone.
- Teams and Organizations are proper tables now, each with its own “new” control in the header, and an organization’s schemas are one list you can read down.
- Usage can be read over a RANGE of months rather than one at a time, and narrowed to a single organization.
- A public “What we collect” page says what the extension can see, when anything is sent and what never is, where it goes, what the AI features do, how long it is kept, and how to set up an institutional annotator account. It is linked from the privacy policy, the options page and the Getting started guide.
- A design pass over the whole workspace: one colour for the navigation icons instead of eleven, tables where there were grids of tiles, real controls where there were rows of text, and explanations folded into the page rather than stacked above it. Nothing was removed — the same information is on the same pages.
- Checkboxes, dropdown menus and scrollbars are drawn dark throughout, including inside the annotation panel on the platforms themselves, where they had been rendering light against a dark panel.
- Every field in the import window now announces itself to a screen reader, including the search-terms box — the one answer that decides what an import collects, and previously the one a reader was given no name for.
A lead can create a team in their organization and run it: the person who made it seats and unseats everyone on it, and is the only one besides an administrator who can delete it. Admins can hand someone a one-time link to set their own password. And the queue's row buttons now say what they do out loud, for anyone using a screen reader.
Annotable after this release — 17 surfaces: X, YouTube, Rumble, TikTok, Reddit, Instagram, Facebook, LinkedIn, Bluesky, 4chan, 8kun, and ChatGPT, Claude, Grok, Gemini, DeepSeek, Qwen.
- A lead can create a team inside their own organization, and the person who creates it owns it. An owner seats and unseats anyone in the organization on that team — other leads included — which is what makes a team something a lead can actually run rather than something they have to ask an administrator to staff.
- An owner is also the only person besides an administrator who can delete their team. Deleting it releases the owner's own seat; a team that still has other people on it, or still owns projects, is not deleted, and says which so the next step is obvious.
- A team made before this release has no owner recorded, so it stays an administrator's to delete — nobody inherits a team they did not create.
- Administrators can hand anyone a one-time link that lets them set their own password, instead of inventing a starter password and sending it to them. Looking at the link does not spend it, and it is good for one use.
- Where two organizations share a flagged-source watchlist, the outlets on it are shared but the people are not: who reported an outlet, and who approved it, is now shown only to their own organization. The list itself is unchanged.
- A project now belongs to the people on it. Everyone — leads included — sees the projects they were added to or created, rather than every project their team or organization has, so a workspace shows the work you are actually part of.
- Creating a project puts you on it, and you can add other leads and annotators by name from the project's own page. Anyone added sees it in their workspace and in the drawer's “filing this under” picker; a lead added to it can edit it too.
- A project nobody has been added to stays visible to its team's leads, so nothing made before this release goes missing and no project can end up with no one able to staff it. Administrators continue to see every project.
- The two buttons on a queue row — assign this to me, and remove it — now announce what they do to a screen reader. They had been read out as the bare symbol on their face, so the label a mouse user saw on hover reached nobody using assistive technology.
8kun joins the imageboards the annotator covers, bringing it to seventeen surfaces; a disagreement can be settled from the Conflicts page; Instagram posts opened from a link are annotatable; a team lead can invite a colleague by email; and two things that moved when they shouldn't have — the page under a teammate's annotation, and the Multimodal button under the pointer — now stay put.
Annotable after this release — 17 surfaces: X, YouTube, Rumble, TikTok, Reddit, Instagram, Facebook, LinkedIn, Bluesky, 4chan, 8kun, and ChatGPT, Claude, Grok, Gemini, DeepSeek, Qwen.
- The annotator now runs on 8kun, the seventeenth surface it covers. Threads and replies are annotated in place, on a thread's own page and on a board's index alike.
- It works the way 4chan already does, because the two sites are built the same way: a post is identified by the board it is on and its post number, and a reply carries the posts it quotes as its context, so a reviewer reads it in the thread rather than on its own.
- Work from 8kun files under the same name as the site's earlier addresses, so a thread annotated today lines up with what was collected from it before.
- It is subject to the same per-team platform settings as every other surface: an organization that hasn't enabled it sees no change.
- A disagreement can be settled where it is seen. On the Conflicts page, your own row now carries “Edit my annotation”: it reopens the editor over exactly what you submitted — the post, its thread, its media and your labels — and resubmitting overwrites that annotation, the same as re-annotating the post in place. No more finding the comment again to change one call.
- The Multimodal button no longer runs away. Picking an ideation and then clicking Multimodal used to fold the ideation grid to a single line at the moment of the click, so the button jumped up under the pointer (and on a reel, where Multimodal starts on, the whole Flags row moved). A click now leaves the layout where it is; sections still fold when you move through them with ↵ and ⇧↵.
- Instagram posts and reels opened from a LINK can be annotated. The annotator only recognised a post opened from the feed or a profile; a reel reached directly renders its comments in a different layout, where nothing was found to annotate and Alt+click found no post either. It now reads all three layouts, and every form of Instagram post URL.
- Work you annotate while browsing now appears in the project you filed it under. Picking a project in the annotation drawer has always decided where the work is filed, but a project’s Annotated tab only listed posts that had been added to that project as items first — so annotating a post you found yourself, with the project right there on the drawer, showed up in your own History and nowhere on the project’s page. It is now on both, and the project’s spreadsheet export includes it.
- Answering “No” to a required yes/no question now works. On a schema whose question must be answered, No was recorded on screen but left out of what was sent, so the service refused the annotation as unanswered and the extension retried it in the background forever — the work looked submitted and never arrived, with nothing on screen saying why. Only Yes could be recorded. A required question now shows both answers with neither picked in advance, so an untouched question still reads as untouched, and No is sent as the answer it is.
- Who can be put on a project now follows the project tree. A project offers the people on its team, and a SUB-project offers the people on the project above it — so a study’s batches are staffed from the study, not from the team at large. Taking someone off a project takes them off its sub-projects in the same move, and the page says which ones.
- A sub-project whose parent has nobody on it offers nobody, and says so: add people to the project first, then narrow them into its parts.
- The same rule reached the item assignee picker, which had been offering everyone the account could see. Work handed to someone outside the team it belongs to never appeared in their queue at all — now it isn’t offered, and isn’t accepted. Claiming a piece of work for yourself is unaffected.
- The spreadsheet export follows the schema the work was annotated with. A workbook now holds one sheet per schema: the antisemitism panel’s sheet keeps its Ideation and Categories columns, and a team on its own schema gets one column per question it asked, headed by the question itself, with answers written out as the labels the annotator chose and highlighted passages as the quoted text. The post, the picked context and the review state are on every sheet. Before this, every annotation was exported into the antisemitism columns, so a custom schema’s answers were missing from the file.
- Opening a post's annotations from its ✓ pill no longer throws the page back to the top. On YouTube, checking what a teammate had recorded on a comment meant landing on the video and scrolling all the way back down to the comment; the page now stays exactly where it was, and closing the viewer puts you back on the pill you opened it from.
- A team lead can now invite a colleague by email. The Google invite the admin console has offered — a passwordless account the person claims by signing in with Google — is on the lead's own Team page too, beside the username-and-password form, and is bounded the same way: only addresses in a domain the deployment has approved, only onto the lead's own team, and only with a teammate's role. Until the person signs in, the roster says the seat is waiting to be claimed.
- A lead can now arrange everyone in their organization across its teams. A new People section on the Team page lists each person with a chip per team: switch one on to add them, off to remove them, and choose which of their teams is the primary one that their new work is filed under. It covers the lead's own memberships too, so moving between your organization's teams no longer needs an admin. Other leads' teams stay an admin's to set, and nobody can be taken off their last team from here.
- On a lead's roster, a team member who is themselves a lead now reads as one. The row used to fall back to the first group on the list, so a cross-team lead sitting on a team looked like an annotator. A lead can set a teammate's permission level up to senior annotator — make or unmake a team lead — while a cross-team lead's level, like an admin's, stays an admin's to change. Adding someone who is already on a sibling team keeps the level they have unless a new one is chosen.
- A project a lead creates is always filed under one of their teams. It used to fall into the shared pool when the lead's account had no team of its own — and for an organization that keeps its own database, the shared pool is not theirs to see, so the project vanished the moment it was made. The page now says what is wrong instead: a lead with no team is told to ask an admin, the “no team (shared)” choice is offered only where the pool belongs to the organization, and a refused create shows the reason rather than “try again”.
- An organization now has a list of the schemas its teams may use. An admin grants library schemas to an org on the Orgs page, and a team lead can put their team only on what their organization has — the bundled antisemitism panel is granted the same way, so an organization annotating with its own instruments never sees it, and a schema a team built for itself stays available inside its own organization. A schema in use by a team can't be taken away from the org until that team is repointed.
- A project now decides what its work is annotated with. A lead points a project at a schema from the project's page; sub-projects inherit it unless they choose their own, the editor switches to the project's schema as you change project, and a team's schema becomes the default for posts annotated outside any project.
- Admins can hand anyone a one-time link to set their own password — for a starter password that never arrived, or an invited account whose Google identity can't be used.
- The lead who creates a team runs it: they can add or remove anyone in their organization on that team — other leads included — and they are the only lead who can delete it.
- Switching teams now changes what an admin or cross-team lead sees, not only where their work is filed. Picking a team in the toolbar popup narrows the queue, the Items page and the file-under picker to that team's projects, the way it already did for everyone else; the switcher gains an “All teams” choice, the default, which keeps the whole cross-team view.
- Flagged sources are now kept per organization. The outlets a lead approves, removes or edits on the Flagged sources page are their own organization’s, and only their organization’s annotators are warned when an AI answer cites one. A new organization starts with an empty list and grows it from its own annotators’ reports.
- Flags you see are your organization’s. “Flagged for annotation” now shows only the flags raised inside your own organization, whichever account you read it with, so a flag — and the evidence captured with it — stays with the organization that raised it. Everything else you can see is unchanged.
- Importing from a social-listening source is now an administrator’s to run. One import spends from a request budget shared across the whole deployment and turns a single topic judgement into hundreds of entries a team then works through, so until the curation half is settled that call is held at one level. Team leads keep every other way of filling a project.
- Switching teams now shows you the projects you were added to on that team. The project picker in the annotation panel used to list every project the team had, so on a team with many it was a long list of places your work did not belong. It now lists the projects a lead has put you on — and says so when there are none yet. Leads still see their whole team.
- The Terms of Use are now shown and accepted on your first sign-in, before the extension opens. They used to be a line of small print beside the setup form saying that carrying on was the agreement; they are their own screen now, with the points that matter written out, links to the full terms and the privacy policy, and a box to tick. Which version you accepted, and when, is recorded with your account and shown in Settings under Privacy & legal.
- One of those points is new, and is the reason the screen exists: accepting lets the project say publicly that your organization uses the extension and that you are one of its authorized annotators — in presentations, funding reports, papers and press. It covers nothing about your individual work: your annotations are not published attributed to you, you are not quoted, and nothing implies you endorse a finding. You can ask us to stop naming you at any time.
- When the terms change materially the extension asks again rather than treating your continued use as agreement. It asks for the acceptance alone — there is no questionnaire to refill — and queued work stays queued while it does.
- The one-time sign-up questionnaire takes any organization. Its Organization field was a list with a single entry — ours — and the service refused every other answer, so an annotator from a partner organization had exactly one choice and it was the wrong one. It is a text field now: type your organization, or pick it from the suggestions, which lead with the organization your account already belongs to.
Three more places to annotate — Bluesky, LinkedIn and Facebook — a working Conflicts page, and figures that say what they mean: how much someone has actually annotated is now counted from the annotations themselves, and every oversight page says whose work it is showing.
- The annotator now runs on Bluesky, LinkedIn and Facebook, bringing the number of surfaces it covers to 16. Posts and replies on Bluesky, posts and comments on LinkedIn and Facebook — all annotated in place like everywhere else.
- Each one is its own piece of work. A Bluesky post keeps one identity whether its link names the author by handle or by DID, and a LinkedIn or Facebook comment is separate from the post it sits under, so flagging one comment doesn't mark the rest.
- LinkedIn is midway through rebuilding its feed, and the annotator reads both layouts. The new one publishes no link of its own for a post or a comment, so work captured there travels with the post itself rather than with a URL that would not open for anyone else.
- Flagging a LinkedIn or Facebook post that only its group can see attaches what was captured, the way flagging an AI conversation does — the link alone would open a join wall for whoever picked the flag up. Everything public is still flagged by link.
- All three are subject to the same per-team platform settings as the other surfaces: an organization that hasn't enabled them sees no change.
- Annotators can assign work to themselves. The button for it has always been there and the queue has always shown them the unassigned items, but the request behind it was refused as lead-only, so the click did nothing and said nothing. Taking a piece of work back off your own list works the same way.
- Handing work to someone else is still a lead's call, and that is now what the page shows: an annotator sees the controls for their own list rather than ones that would be refused.
- A queue change that fails now says why, instead of quietly leaving the row as it was.
- On 4chan the Annotate button is no longer cut off. It sits in the post's header line, level with the name and date, so it lands in the same place on every post — and that line now reserves room for it, which it never had before: a post is drawn in a box sized to its widest content, and anything past the edge was simply clipped away. Two smaller causes went with it — the reserved space was being dropped again moments after each post was drawn, and the button's label could open wider than the post itself.
- Anywhere the label still wouldn't fit, on any site, the button stays as its icon instead of opening part-way off the edge.
- A comment you have typed now travels WITH a flag instead of being thrown away by it. Noticing something worth reporting — a post the extension read wrongly, say — writing it down and then reaching for Flag used to be two gestures that cancelled each other out: the editor warned that flagging would discard the annotation, and it did, comment included. The note now becomes the flagged item's first comment, so whoever picks the flag up reads why it was flagged.
- The warning before flagging is narrower to match. It appears only when there are LABELS to lose, and says what happens to the comment rather than leaving you to guess. With nothing typed but a comment there is nothing to warn about, so flagging just works.
- Flagging a post someone on your team had already flagged adds your note to the existing item rather than starting a second one.
- The Conflicts page works again. It had been showing nothing at all since the annotation platform moved to its current storage on August 5 — and, worse, saying so: the page read “Every post labeled by 2+ annotators has matching labels”, which is a claim about your data, on a page that was not looking at your data. Disagreements were being recorded correctly the whole time, which is why the side-by-side view on the post itself kept showing them.
- Conflicts is now a comparison rather than a decision. Every annotation is kept and agreement is scored across them, so the page no longer offers to pick a winner — it shows who called what, and coaching happens through Review.
- The Review page now says whose work is in it. Reviewers oversee different sets — some every team in the organization, some only their own teams — and the page used to describe all of them the same way, so two reviewers comparing inboxes had no way to tell the difference from a fault. It now names the teams the inbox covers.
- It also names the two other reasons two reviewers see different lists: approving a row removes it from everyone's inbox, and an annotation is auto-approved when its author already held a reviewing role at the time they submitted — so a colleague's older work can appear while their recent work does not.
- Annotations by someone who is not on a team are now reported instead of disappearing. They could not be approved by any team's reviewer and nothing anywhere said so; the page now says how many there are and that an admin needs to add the annotator to a team.
- A reviewer who oversees several teams is no longer shown the names of annotators from other organizations.
- “Stored annotations” now counts the annotations a person has actually stored, read from the records themselves. A post someone revised counts once, a submission that had to be re-sent counts once, one the service refused doesn't count at all, and an annotation a lead deletes stops counting.
- That figure was previously a count of accepted submissions, which is a different thing and could run far ahead of the work done — most visibly for anyone annotating during the August 11 service interruption, whose submissions were re-sent many times before they could be stored. Those numbers correct themselves: the figure is recounted each time the page loads rather than accumulated.
- The old count is still shown, under its own name — “Submission attempts”, on the metered resources card. It is what the monthly limits apply to, and it is the one that reflects load on the service rather than work produced.
- Where an organization's records can't be read, the page says the figures are incomplete and names it, instead of quietly reporting a smaller number.
- The page now opens with what needs attention: everyone and every team at or close to a monthly limit, named, with whether anything is actually being refused. It appears only when there is something in it — finding it before meant reading every figure in every table.
- Every column sorts, so the heaviest use is one click away rather than wherever a name happens to fall alphabetically. Long lists of people can be filtered by name, and the whole month can be exported as a spreadsheet.
- The page says it is loading instead of showing an empty rectangle while the figures are fetched, and switching enforcement on can no longer be sent twice by an impatient second click.
The antisemitism taxonomy is now the Decoding Antisemitism Lexicon itself, unaltered. Plus multi-team tenancy: a team owns its own annotation schema and its own set of surfaces, and every page that reaches across organizations is admin-only.
- The categories in the annotation drawer are the Decoding Antisemitism Lexicon's own — all 40 of them, under the Lexicon's names, in the Lexicon's order, grouped into its six parts. Where the list previously carried AddressHate's own revisions, it now carries the published framework, so the extension can be read alongside the book it comes from.
- Each category names its concept number, so a category in the drawer can be looked up in the Lexicon directly.
- Three earlier categories were folded back into the Lexicon concepts they had been split out of, and one that the Lexicon covers in two places is again two: Evil/The Devil and Immorality are separate categories rather than one combined heading.
- Work annotated before this change keeps the categories it was given. Nothing was relabelled retroactively — a past annotation still records the category the annotator was actually shown.
- Which sites and AI chats a team may annotate on is a setting now, not a briefing: an admin ticks the 13 surfaces per organization and per team, so a team scoped to one research question — or an agreement that doesn't cover AI-chat transcripts — is enforced rather than explained.
- The layers intersect. An organization's list is a ceiling its teams narrow but never widen, and a surface the organization has turned off shows as unavailable on the team's row rather than as a box that can be ticked to no effect.
- A team with no list of its own inherits. Enforcement runs in the page (no Annotate button on a surface the team doesn't hold) and again when the submission arrives, since the first check runs on the annotator's own machine.
- Nothing is restricted out of the box — the shipped policy is empty, so every team keeps all 13 surfaces until an admin unticks something.
- Each team assigns its own annotation schema. Resolution runs team → organization → default, so re-pointing one team leaves its siblings untouched.
- An acting-team switcher: the team you are annotating for decides the schema, the destination and the meters, while what you can SEE still spans every team you belong to.
- Cross-tenant pages are admin-only. A lead's oversight covers every team inside their own organization — that is depth, not a reach into another organization's names, rosters or totals.
- The organizations page is one collapsible table of organizations and their teams, with drag-and-drop between them over the same confirmed move the buttons use.
- Every move confirms against a dry run that NAMES the people it re-files: existing annotations stay where they are, only future work moves, and a vague “are you sure?” never conveyed that.
- A person belongs to teams in ONE organization. They can be shared across as many teams as you like inside it, and no account — admins included — can hold a seat in two at once.
- Moving someone to another organization releases the teams they held in the old one, and the confirmation says which before it happens. The same applies when a TEAM moves: whoever it leaves behind, or carries with it, is named and released rather than quietly straddling two organizations.
- Moves now warn before they break. A member missing from the target organization, or a team schema that organization hasn't published, is reported up front instead of surfacing later as a failed submission.
- The teams page shows every team in your organization; a team you're not on renders read-only rather than as a form that would be refused on save.
- A platforms page sets which sites and AI chats each organization and team may annotate on. A team can narrow what its organization allows and never widen it, so an organization-level limit is a real ceiling rather than a suggestion.
- Platforms a team isn't cleared for simply don't show the annotation tools, and a submission from one is refused at the service too — the policy holds whether or not the browser honours it.
- The toolbar popup files under the team you switched to in its own header. Adding or removing a queue item there used to be filed against your primary team instead, and the popup's queue could show a different team's list than the full page did.
- The annotation panel says who the work is for. A line under the post names the team you are annotating for and, when you have one chosen, the project — and both can be changed from the panel itself instead of from the toolbar. Switching teams re-opens the editor with that team's schema, warning first if you have already started.
- The project you pick is a standing choice, not a per-post one. It stays selected for everything you annotate next — across posts and across sessions — until you change it in the panel again.
- Flagging follows it. A post you flag while working through a project arrives IN that project rather than in one shared pile someone has to sort afterwards; the confirmation names where it went, and your list of flags shows it per row. With no project selected a flag still arrives in the team's flagged queue, exactly as before.
- The panel shows the platform's logo rather than a two-letter code, matching the queue and history rows.
- The post and the thread it replies to now share one budget at the top of the drawer instead of reserving space each. A long comment answering a long post used to fill most of the panel before the annotation controls got any of it.
- A “Show less” control shrinks that region further, and it stays that way — across posts, across sessions, and in both the antisemitism panel and a custom schema's form. It appears only when there is something to shrink.
- Every reply in a Reddit thread has its own Annotate button. A reply nested under another comment was skipped — it could still be annotated by holding Alt and clicking it, but only by someone who knew that.
- On 4chan the Annotate button is no longer clipped by a narrow post. Its label opens in whichever direction the post has room for, rather than always to the right and off the edge of a short reply.
- Custom schemas match the built-in panel: re-opening an annotation now pre-fills the answers you already gave. Re-submitting overwrites the previous annotation, so an editor that opened blank was quietly replacing finished work — this was the release's most important fix.
- The flag pill, the thread-context box (on a chat: the opening request and the eliciting prompt) and the AI explanation all reached custom schemas, so a team on its own schema stops judging a response with no sight of the question.
- Annotation schemas are versioned, so an answer always renders against the definition it was asked under, however often the schema is edited afterwards.
- Finished annotations reach the service faster. Several are now sent at once instead of strictly one after another, so a backlog built up offline clears in about the time the slowest one takes rather than the sum of all of them.
- A queue that is waiting is now chased properly. The extension re-checks on every start, the moment your connection comes back, and the moment you sign in — the three points at which whatever was blocking delivery has usually just stopped being true.
- Each submission now retries on its own schedule rather than sharing one with the whole queue. A new annotation no longer resets the pacing for everything already waiting, and a submission the service has just refused is not re-sent every few seconds while it does.
- When the service itself is unwell, the queue stops after the first refusal instead of offering it every annotation in turn. Delivery had been spending its whole retry allowance in minutes during an outage; it now lasts the outage.
- Two ways an annotation could sit on “syncing” forever are closed: a submission filed for a team you have since left now reports that, in those words, instead of retrying silently and indefinitely; and the queue can no longer end up with nothing scheduled to deliver it.
- “Retry now” retries now. It used to report success without doing anything if the queue happened to be busy at that moment.
- The popup counts work that is retrying separately from work in flight, so a queue that is stuck no longer reads as a queue that is nearly done.
- The settings page is four cards instead of seven. Signing out and deleting your account sit together on one line, the panel and post-counting toggles share a card, and the privacy, terms, support and roadmap links moved to a full-width footer with the version.
- The extension now reaches the service at a permanent address, so the service can move between machines without anyone updating anything. The address is no longer an editable setting: it was a text box that could point an annotator's credentials at another server, and it had nothing left to do. The page shows which service it is talking to.
The platform set nearly doubled, and the annotation panel became configurable per organization instead of fixed in the code.
Annotable after this release — 13 surfaces: X, YouTube, Rumble, TikTok, Reddit, Instagram, 4chan, and ChatGPT, Claude, Grok, Gemini, DeepSeek, Qwen.
- Rumble and TikTok — both the video and its comments.
- Three more assistants: Gemini, DeepSeek and Qwen.
- Reddit submissions themselves became annotable, with the submission carried as context for its comments.
- Flag and Annotate moved into the chat's own action row, so the buttons sit where every other control on that response sits — and stopped landing in the middle of a long answer.
- A highlighted passage now anchors to that passage. A partial highlight used to be filed against the whole response, which turned a precise piece of evidence into a vague one.
- The editor opens centered as a modal on extension pages, where there is no post behind it for a side drawer to leave visible.
- On Qwen, Annotate and Flag join the platform's own selection menu instead of fighting it for the same corner of the screen.
- Citations to watchlisted outlets are marked inline in an assistant's response, with the reason a click away.
- Anyone can report an unlisted outlet; leads triage reports into the watchlist every annotator's extension fetches, with no rebuild.
- Detection only — a flagged citation is never an automatic hate label.
- A schema builder with visual, JSON and layout tabs, and a live preview that renders through the same renderer the annotators use.
- Custom HTML and CSS layouts with field placeholders, validated the same way on the client and the server so a layout can't pass one and fail the other.
- Starting-point presets, so a new schema begins from a working example.
- AI use is metered per organization, team and person, with monthly limits and a Usage & limits page.
- Every account starts with 5 pre-annotations and 5 explanations a month — a default allowance rather than an unbounded one.
- A security review pass: hardened sign-in and queue authorization, HTTPS-only ingest, rate and cost limits, and baseline security headers on every response.
- The normalized annotation database became the authoritative store for every submission.
- Every network call carries a timeout. A connection that is accepted and then never answered used to hang forever, which could leave the extension looking dead on the page.
- Platform brand logos on every queue and history row.
- One shared token set behind the whole interface, so the popup, the panel and the workspace stop drifting apart.
Five more surfaces, and adding a colleague stopped requiring a shared password or a redeploy.
Annotable after this release — 8 surfaces: X, YouTube, Reddit, Instagram, 4chan, and ChatGPT, Claude, Grok.
- Grok conversations.
- Reddit and Instagram comments.
- 4chan threads.
- An admin can invite a colleague from the console: a passwordless account with its permission group, team and organization already set, claimed by signing in with Google.
- The accounts roster groups by team, permission group or role, collapses, and searches — a flat list had stopped working past about thirty accounts.
- Post identity is stable on YouTube, so the badge marking an already-annotated comment (and the flag pill beside it) no longer disappears and reappears as the page re-renders.
- A flag placed on a permalink is recognized wherever that post appears.
- The extension asks for no site-access permission beyond the ingest service itself. Every request it makes goes there and nowhere else, so the platform permissions it used to request bought nothing.
The first release: annotate in place on the platform itself, with a lead's approval standing between a submission and the corpus.
Annotable after this release — 3 surfaces: X, YouTube, and ChatGPT and Claude conversations.
- Hover any post or comment → Annotate (or Alt+A) → classify in a drawer beside the post, against the AddressHate label space. No copy-pasting into a separate tool, and the post stays on screen.
- The thread comes with it: reply chains, quoted posts, the parent comment, the video or conversation the post sits in, and its media.
- Keyboard navigation between posts, contextual co-text picking for the comments that make a post legible, and a five-second undo on every submit.
- ChatGPT and Claude conversations are annotable as well — an assistant turn, or a selected excerpt of one, with the prompt that elicited it captured as context.
- Submissions queue locally and deliver with retry, so annotating through a dead connection, a slept laptop or a browser restart keeps the work.
- The editor stays on screen until a submission is acknowledged, rather than closing hopefully.
- An annotation is archived immediately but stays pending until a lead approves it; approval is what commits it to the database and runs the AI second opinion.
- Leads get an approval inbox with the captured evidence, a conflicts view where annotators disagree on the same post, and coaching feedback that reaches the annotator on their own history rows.
- Flag a post for someone else to annotate, with the passage that prompted it highlighted.
- Flagging inside a private conversation is consent-gated, and the evidence is only ever readable in the workspace — nobody else can open someone's chat by its URL.
- Username/password or Google sign-in, with capabilities coming from permission groups — admin, lead, senior annotator, annotator, flagger — resolved live, so a change to a group applies immediately.
- Teams as the isolation unit: two teams do not see each other's flags or annotations.
- A one-time onboarding agreement before first use.
- A full-page Items dashboard over the shared work queue: directories, paste-a-list to create, assignment and filtering.
- History with gate status per row, date and project filters, and export to .xlsx.
- An optional model pre-annotation and a plain-language explanation beside the annotator's own answer, scored for agreement — a second opinion, never a substitute for the annotator's.
- The ingest service on Cloud Run with a durable archive of every submission envelope.
- These public pages — privacy, data deletion, terms and support.
How versions are numbered#
The annotator is pre-1.0, so every release so far sits on the 0.x line: the middle number moves for a release, the last for a fix shipped on its own. The version above is the version in the extension's manifest — the one Chrome shows on its extensions page — so what you are running and what you are reading always match. 1.0 is reserved for the point the tool is stable across every surface it claims, not for a date.
Questions about a release: extension@addresshate.org. Setup and troubleshooting live on Support.