Extreme-BDD
Five-minute path

Adopt Extreme-BDD in an existing repo.

You do not need to migrate anything. Add one JSON file, one folder, and one priority tag. The board will read your working tree from that point on, and Radicle will replicate everything else.

Prerequisites

1. Declare the protocol

Create bdd/RADICLE_PRIORITIES.json at the repo root:

{
  "protocolVersion": "1.16",
  "product": { "name": "your-project" },
  "featuresRoot": "bdd/features",
  "boardStateSchema": 3,
  "capabilities": {
    "featureCatalog": true,
    "boardState": true,
    "priorityTags": "p0-p3",
    "issueMap": "optional",
    "radicleIssueMirror": "optional"
  }
}

2. Write your first scenario

Drop a .feature file under bdd/features/:

Feature: Your first Extreme-BDD scenario

  @pending @p1 @epic:starter
  Scenario: A scenario can be promoted from pending to passing
    As a Builder
    Given a pending scenario lives in bdd/features/
    When I implement the behaviour and remove the @pending tag
    Then the BDD harness should report it as passing

3. Open the board

git clone https://github.com/wavellwatson/radicle-priorities reference
cd your-project
python3 reference/scripts/board_server.py
# visit http://127.0.0.1:8844/

The board reads bdd/features/*.feature and bdd/BOARD_STATE.json in your repo’s working tree. Drag your new card into in-process — the JSON updates atomically and stays in your tree.

4. Mirror to Radicle issues (optional)

# Dry run first to see the diff
python3 reference/scripts/sync_bdd_issues.py --dry-run

# Apply: opens/edits issues, writes bdd/ISSUE_MAP.json
python3 reference/scripts/sync_bdd_issues.py --apply

5. Replicate

rad sync

Your collaborators will pick up the new .feature, the board state, the issue map, and (because Radicle replicates the issues too) the discussion thread. There is no central server in this sentence.

Next steps Browse protocol 1.16 for the optional capabilities you can opt into — performance budgets, side-view compact schemas, incremental card patches, multi-repo progressive loading. Each is a single JSON key away.