# Robinhood Chain: how L2BEAT rates its stage (read 2026-10-27)

## API
From the entry with `"slug":"robinhood"` in https://l2beat.com/api/scaling/summary:
- `"stage":"Stage 0"` (https://l2beat.com/api/scaling/summary)
- `"category":"Other"` (https://l2beat.com/api/scaling/summary)
- `"isUnderReview":false` (https://l2beat.com/api/scaling/summary)

## Project page
From the Stage section of https://l2beat.com/layer2s/projects/robinhood.md:
- Headline: "Robinhood Chain is not even a Stage 0 project." (https://l2beat.com/layer2s/projects/robinhood.md)
- Warning: "The requirement for available node software is under review" (https://l2beat.com/layer2s/projects/robinhood.md)
- Stage 0, "1 issue needs fixing.":
  - Met: "A complete and functional proof system is deployed."
  - Met: "The project calls itself a rollup."
  - Met: "State roots are posted to Ethereum L1."
  - Met: "Inputs for the state transition function are posted to Ethereum L1."
  - Under review: "A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the L2BEAT team has not verified the validity of the node source code."
  - Issue: "Fraud proof submission is not sufficiently decentralized."
  (https://l2beat.com/layer2s/projects/robinhood.md)
- Stage 1, "3 issues need fixing.":
  - Principle, Issue: "Compromising ≥75% of the Security Council should be the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) with a <7d exit window."
  - Met: "Users are able to exit without the help of the permissioned operators."
  - Met: "The sources of all programs used are public and program hashes can be independently regenerated."
  - Issue: "Upgrades executed by actors with more centralized control than a Security Council provide less than 7d for users to exit if the permissioned operator is down or censoring."
  - Issue: "The Security Council is not properly set up."
  (https://l2beat.com/layer2s/projects/robinhood.md)
- Stage 2, "3 issues need fixing.":
  - Issue: "Fraud proof submission is open only to whitelisted actors."
  - Issue: "Upgrades unrelated to onchain provable bugs provide less than 30d to exit."
  - Issue: "The Security Council's actions are not confined to onchain provable bugs."
  (https://l2beat.com/layer2s/projects/robinhood.md)

The HTML page https://l2beat.com/layer2s/projects/robinhood has the same warning in its embedded data: `"message":{"type":"underReview","text":"The requirement for available node software is under review"}`, plus an element with `aria-label="Under review icon"` (https://l2beat.com/layer2s/projects/robinhood). Its embedded data contains both `"stage":"NotApplicable"` (the project header) and a stage-checklist object `"stage":"Stage 0","missing":...` (https://l2beat.com/layer2s/projects/robinhood). That `"Stage 0"` object appears to describe the Stage 0 requirement block, the next one Robinhood would need to reach. It does not appear to be the badge. This is a reading of the data structure, not text that L2BEAT states.

## Summary table
From the Robinhood row data in https://l2beat.com/layer2s/summary?tab=others:
- Stage value of the row: `"stage":{"stage":"NotApplicable"` (https://l2beat.com/layer2s/summary?tab=others)
- The same row's filter metadata: `{"id":"stage","value":"Stage 0"}` (https://l2beat.com/layer2s/summary?tab=others)
- The "Why am I here?" column (the header text appears on the page) shows `"reasonsForBeingOther":[{"label":"Closed proofs","shortDescription":"There are less than 5 external actors that can submit challenges","description":"Projects without a sufficiently decentralized set of challengers rely on few entities to safely update the state. A small set of challengers can collude with the proposer to finalize an invalid state, which can cause loss of funds."}]` (https://l2beat.com/layer2s/summary?tab=others)
- The same page also has the text "The requirement for available node software is under review" and an "Under review icon" (https://l2beat.com/layer2s/summary?tab=others)

The page was fetched as server-rendered HTML with curl, not looked at in a browser. So I could not check the exact badge text a user sees for `NotApplicable`.

## Config
https://github.com/l2beat/l2beat/blob/main/packages/config/src/projects/robinhood/robinhood.ts has no explicit `stage` field and no `isNodeAvailable` field. The stage-related lines are:
```ts
export const robinhood: ScalingProject = orbitStackL2({
  addedAt: UnixTime(1782864000), // 2026-07-01T00:00:00Z
  ...
  // validator whitelist is enabled on-chain (validatorWhitelistDisabled: false),
  // so the fraud proof system is permissioned -> classified as Other, not Rollup
  reasonsForBeingOther: [REASON_FOR_BEING_OTHER.CLOSED_PROOFS],
```
(https://github.com/l2beat/l2beat/blob/main/packages/config/src/projects/robinhood/robinhood.ts)

The stage comes from the template https://github.com/l2beat/l2beat/blob/main/packages/config/src/templates/orbitStack.ts:
- `isNodeAvailable?: boolean | 'UnderReview'` (line 136)
- `stage: computedStage(templateVars),` (line 490)
- `nodeSourceAvailable: templateVars.isNodeAvailable ?? 'UnderReview',` (line 1405)

Robinhood's file does not set `isNodeAvailable`, so per these template lines the node requirement defaults to `'UnderReview'`. That matches the warning on the project page.

- Commit that added the file: https://github.com/l2beat/l2beat/commit/32bba0a061f4995dc6d376ebc22e68d643812466, dated 2026-02-17T15:11:40Z, "Add Robinhood (#11069)". This is the oldest of 10 commits touching the path, per the GitHub API (https://api.github.com/repos/l2beat/l2beat/commits?path=packages/config/src/projects/robinhood/robinhood.ts).
- Latest commit to the file: https://github.com/l2beat/l2beat/commit/b1664d9d2fd3321cb5b7dfed4f9f5f1498bdc849, dated 2026-09-29T09:30:30Z.
- Note: the file's `addedAt` value is 2026-07-01, which differs from the date of the commit that created the file. Both are reported.

## Reconciliation
L2BEAT shows both ratings, in different places. "Stage 0" appears as the raw `"stage":"Stage 0"` in the https://l2beat.com/api/scaling/summary entry, and as the `{"id":"stage","value":"Stage 0"}` filter value in the others-tab row (https://l2beat.com/layer2s/summary?tab=others). "Not even Stage 0" appears as the headline "Robinhood Chain is not even a Stage 0 project." on https://l2beat.com/layer2s/projects/robinhood.md. The row and header stage objects on https://l2beat.com/layer2s/summary?tab=others and https://l2beat.com/layer2s/projects/robinhood hold `"stage":"NotApplicable"`. The project is `"category":"Other"` because of "Closed proofs" ("There are less than 5 external actors that can submit challenges"). In the Stage 0 checklist, "Fraud proof submission is not sufficiently decentralized." is an unmet issue, and the node requirement is "Under review". The only text L2BEAT gives about "under review" is the warning "The requirement for available node software is under review" and the checklist item marked "Under review". Neither says what it means for the stage badge.

## Not found
- No L2BEAT text was found that explains what "under review" means for the stage badge (for example, whether the badge is held back or shown provisionally). I searched the fetched project page, summary page and API for "under review".
- I did not confirm the badge text a browser shows for `"NotApplicable"` in the summary table, because only the server-rendered HTML and its data were read.
- I did not read the stages page https://l2beat.com/stages.
