Kleros Development Update March 2026

Kleros Development Update March 2026

πŸ“‹ March 2026 Summary

  • Atlas shipped three releases: v1.3.0, v1.4.0, and v1.4.1. SendGrid delivery status tracking is live. Vote reminder bugs for hidden-vote courts fixed. Linter workflows, error tracing, and email scheduler retry logic all improved. PoH V2 notification groundwork started.
  • Court V1 shipped notification unsubscribe, Reality "Invalid" display, mobile wallet fixes, and a new staking rewards page.
  • Escrow V2 added block explorer links to the transaction timeline and finalized the General Escrow dispute policy document.
  • Kleros Foresight (Futarchy UI) launched the Movie Experiment. Foresight Credits and trade wallet support shipped. CSV export for predictions added.
  • Vea merged the VeaShi package for packaging Hashi and Vea contracts for consumption by Kleros V2. Bridge dependencies upgraded to latest LayerZero and Chainlink CCIP versions.
  • Scout added policy history pages and fixed the reward countdown timer.
  • Court V2 contracts are ready for internal review with a deadline of April 19th. Frontend work continued on dispute kit support, e2e voting tests, and EFP integration.
  • Curate V2 added basic developer documentation.

Now let's dive deep into product-by-product updates made in March.

Court V1

Court V1 received several user-facing improvements this month. The notification unsubscribe feature allows jurors to opt out of Atlas email notifications directly from the Court V1 settings page. The unsubscribe logic and UX went through multiple iterations before the merge, including proper feedback to confirm the action.

The Reality.eth dispute display got a significant clarity upgrade. The frontend now displays "Invalid" instead of "Refuse to Arbitrate" for Reality cases, giving jurors a clearer understanding of what that voting option means in the Reality.eth context. The RtA option was also renamed to "Refuse to Arbitrate/ Invalid" across all scenarios. This same change was mirrored in the Dispute Resolver app, where both the invalid answer display and the RtA rename were shipped. Under the hood, Reality arbitrable whitelist addresses are now managed per chain and separated from general arbitrable whitelists for cleaner code organization.

A mobile dApp browser connection fix was merged early in the month, adding redundancy for browsers that don't persist wallet connections across full-page reloads. February staking rewards were added, and by the end of the month a new staking rewards exporter page was merged with pagination, mobile-friendly display, and a homepage button linking to it.

Court V2

Court V2 contracts are now ready for internal review, with a deadline set for April 19th. On the contract side, meta-audit fixes from the Certora review continued through the month, with Shutter dispute kit fixes reviewed and merged early in March.

On the frontend, multiple dispute kit improvements landed. The University dispute kit and ACP (Argentina Consumer Protection) dispute kit frontend support were both implemented, with the ACP kit merged. Subgraph support for the University dispute kit was also implemented. There is ongoing consideration about showing the Dispute Kit name or features on the dispute card for better juror context.

Frontend test coverage expanded, with voting e2e tests added and under review. The EthID integration experiment is merged, exploring social graph features for the Juror profile page. Lawyer-gated Junin cases on the Beta environment were resolved. The Graph CLI dependency was updated and subgraphs redeployed to ensure consistency across environments. Dispute Kit refactoring was proposed to reduce complexity and improve maintainability when adding new DKs.

Escrow V2

Escrow V2 focused on transparency and policy this month. The block explorer links in the transaction timeline required adding transactionHash fields to the subgraph for various escrow events. Users can now click through to verify any escrow action on-chain directly from the timeline. The initial implementation used an Etherscan icon, which was later replaced with a generic external link icon to be chain-agnostic.

A long-standing issue was finally closed: the General Escrow dispute policy document, which defines the applicable rules for all General Escrow disputes, was completed and finalized. The issue had been open since the early days of the V2 development.

Dependency maintenance continued, with 8 npm packages bumped and the qs library updated to address a security advisory. Dev and master branches were synced to keep environments aligned.

Curate

Curate V2 saw basic developer documentation added to the repository in early March, making it easier for contributors to understand the codebase. The Curate rewards scripts were improved to optimize transaction counter queries via API.

On the broader Curate ecosystem, a new block explorer, OpenScan, started using Kleros Curate tags, joining the growing list of platforms leveraging Curate's decentralized registry infrastructure.

Scout

Scout shipped policy history pages this month, a feature that makes registry policy changes browsable over time. The fetching performance was optimized in a follow-up PR with improved concurrency. A countdown timer bug was fixed for reward period displays.

Work continued on unified database to simplify data exporting to our partners and the GTCR indexer was re-indexed late in the month.

Atlas (Backend Services)

Atlas had a busy month with three releases: v1.3.0, v1.4.0, and v1.4.1.

v1.3.0 was a maintenance release focused on fixing Court V1 notifications for cases with hidden votes enabled. The vote reminder logic for commit/reveal courts was corrected, and duplicate reminder prevention was added. This release also included the T2CR Bot and SeerCredit Bot (still under testing). The readme was improved with current and planned Atlas capabilities, and an architecture markdown file was added to help LLMs work on the repo.

v1.4.0 was a feature release. The highlights:

  • SendGrid delivery status tracking went live, so the team can now monitor whether notification emails are actually delivered, bounced, or dropped.
  • SendGrid webhook signature verification was added for security.
  • SendGrid event routing to the bots target group via ALB was configured.
  • The Log Forwarder was upgraded to use Subscription Filters for better log management.
  • A linter workflow was added to GitHub Actions for CI quality checks.
  • Fallback court names were added so stake notifications don't fail when court name resolution is blocked.
  • Error tracing and detail improvements were shipped for better debugging.
  • The PohV2 provider was removed from the event reactions module as groundwork for the new PoH V2 notification architecture.
  • Deploy workflows were improved with reusable jobs, proper permissions, and Apollo Server usage reporting with subgraph metrics integration.

v1.4.1 was a patch fixing email scheduler retry limits, juror address normalization (addresses are now lowercased in dispute appealed/appealable handlers), and vote reminders for expired periods. Block number dependency injection was refactored for better testability of the Court V1 notification pipeline.

Looking ahead, PoH V2 notification support is actively in development, with common functions and the notification PR both open. A Kleros Liquid Keeper bot module is also in progress.

πŸ’‘
Note: Atlas remains an internal backend library for Kleros development teams only and is not intended for community use or integration.

Vea (Cross-Chain Bridge)

Vea development this month centered on the VeaShi package, a significant PR that packages the Hashi and Vea contracts for consumption by Kleros V2. This included adding an SDK workspace, regenerating ABIs, adding UI chain helpers, deploy scripts, and README documentation for the VeaShi contracts. The OpenZeppelin vulnerable dependency was removed and pinned to v4.9.6.

Bridge dependencies were upgraded to latest LayerZero and Chainlink CCIP versions, with contracts moved to git submodules and redeployed. The secondary validator bot continued through troubleshooting and review. A Veashi explorer page was also in progress.

Learn more and explore the Vea repository.

Kleros Foresight (Futarchy UI)

March was the month Kleros Foresight went live with its first public experiment. The Movie Experiment launched on March 4th, asking participants to predict CTO's percentile scores for 16 movies.

The Foresight Credits system was shipped, allowing users to participate using credits along with DAI. An "acquire xDAI" link was added to help onboard new users.

Several UX bugs were fixed: failed market quotes are now skipped instead of blocking the interface, a CSV parsing bug with unquoted movie names was fixed using a dedicated CSV library, chart labels no longer hide the end of the graph, and CSV score precision was corrected.

New features included an export predictions button with UTC timestamps, a reset predictions button, and a capped gas buffer for more reliable transactions. The advanced guide is now shown on every prediction, and the Swapr SDK was switched to a tarball to address a broken Uniswap dependency.

Proof of Humanity V2

PoH V2 continued iterating on mobile web support and UI redesign throughout the month. Submission warnings were improved, and the EthID social graph integration is under consideration for providing a richer social experience within PoH profiles.

On the backend side, the Atlas PoH V2 provider was removed and refactored to prepare for the new notification architecture. A PoH V2 notifications PR and common notification functions were opened in Atlas, laying the groundwork for email notifications for PoH V2 events.

Kleros Website

February treasury data was updated on the website early in the month.

Security & Infrastructure

The V2 contracts internal review process was announced with an April 19th deadline. Reviewers can use the dev branch or review contracts on paper.

Node.js security updates continued to be tracked, with critical vulnerabilities flagged and upgrade recommendations issued across projects. Security concerns around Envio and agent prompt injection were discussed, with additional safeguards being evaluated.

Atlas infrastructure saw significant improvements: deploy workflows were consolidated into reusable jobs, linting was added to GitHub Actions CI, and JSON files were added to the pre-commit hook via Husky. Apollo Server usage reporting was integrated with subgraph metrics for better observability. The log forwarder was upgraded to use AWS Subscription Filters.

What's Next

We are preparing the RealT experiment for Kleros Foresight, which involves contract deployment, finalizing the price range, and granting access to internal testers.

The Kleros Reputation Oracle proof-of-concept is being iterated on after calls with the EF dAI team, scoped to Curate verified agents and Reality complaints.

Join the Kleros Community!