Skip to content

Contribution Playbooks

itsmylab edited this page Aug 4, 2026 · 1 revision

Contribution Playbooks

Generated from docs/contributions/README.md. Edit the canonical source through a pull request.

Each page describes one supported contribution path from idea to pull request. Start with the narrowest playbook that matches the change. For system context, read Canopy Architecture. For bus selection and shared integration rules, read the Contributor Integration Guide.

Playbook index

Contribution Playbook Main extension seam
Theme or skin Theme src/skins/registry.ts
Shared or application component Component shared/ or src/components/
Desktop feature Desktop feature Domain module plus existing project composition
Project tab or side panel Project surface SubTab / SideTab and ProjectView
Native capability Native capability Rust owner plus Tauri IPC
Agent-visible tool Agent tool Context bridge and canopy-hook MCP
SpotSearch source Search source registerSpotSource
Issue tracker Tracker TrackerProvider
Coding-agent CLI Agent CLI CLI registry and integration healing
Automated micro-task Micro-task MicroTaskDef
Durable Canopy data Durable store Rust store and invalidation bus
Canopy Remote feature Remote feature Manifest, Rust grant, generic RPC, panel
File renderer File viewer ViewerKind and byte renderer
Keyboard shortcut Shortcut shared/shortcuts.json
Team collaboration message Relay message Encrypted relay and RelayHandle

Shared lifecycle

Every contribution should follow the same ownership path.

flowchart LR
  Idea[Contribution idea]
  Owner[Choose one authority]
  Contract[Extend typed contract or registry]
  Bus[Reuse existing bus or adapter]
  View[Project into UI]
  Tests[Add behavior and parity tests]
  PR[Focused pull request]

  Idea --> Owner --> Contract --> Bus --> View --> Tests --> PR
Loading

Pull request questions

Answer these for any contribution that crosses a boundary:

  1. Which module owns the new state or resource?
  2. Which existing registry, adapter, or bus carries it?
  3. What bounds memory, payload size, retries, and lifetime?
  4. What cleanup runs when its owner closes?
  5. Which test proves every side of the integration agrees?
  6. Which duplicate implementation did the contribution avoid?

Clone this wiki locally