One sprint is manageable.
Twelve running in parallel is chaos.

orchard orchestrates multiple wheat sprints across your organization. Track dependencies between sprints, detect when two teams reach contradicting conclusions, assign owners, and see everything in one dashboard.


What is orchard?

wheat is a research framework for making technical decisions. When your organization runs multiple wheat sprints at once — different teams researching different questions — you need coordination.

orchard is that coordination layer. It reads all your sprints from a config file, maps their dependencies, flags when Sprint A's conclusions contradict Sprint B's, and produces a unified dashboard. Think of it as a project manager for research sprints.


Quick start — 3 commands
1

Create orchard.json

Define sprints, owners, dependencies, and deadlines in one config file.

$ npx @grainulation/orchard init
Created orchard.json with sprint definitions. Edit to add your sprints, owners, and deps.
2

Plan the work

See the dependency graph, critical path, and what can run in parallel.

$ npx @grainulation/orchard plan
Critical path: auth-scaling -> perf-baseline Parallel: data-migration (independent) Conflict: r005 contradicts r012
3

Check status

One command shows all sprints, progress, and cross-sprint conflicts.

$ npx @grainulation/orchard status
4 sprints: 2 active, 1 done, 1 blocked Blocked: perf-baseline (waiting on auth)

A platform migration in three commands

Your team is migrating a platform. The API layer depends on the data model, and the frontend depends on the API layer. orchard tracks the tree so nothing runs before its dependencies are done.

1
$ npx @grainulation/orchard init --root platform-migration

Create an orchard

Define the root project. orchard scaffolds a tree you can grow with sprints and dependency edges.

✓ Created orchard: platform-migration
2
$ npx @grainulation/orchard plant api-layer --depends-on data-model

Plant a sprint

Add sprints to the tree with explicit dependencies. orchard tracks the graph and knows what can run in parallel.

✓ Planted sprint: api-layer (depends on: data-model)
3
$ npx @grainulation/orchard status

See the whole picture

One command shows every sprint, its progress bar, and dependency status. Blocked sprints tell you exactly what they are waiting on.

platform-migration ├── data-model ████████████ complete ├── api-layer ██████░░░░░░ research (depends: data-model ) └── frontend ░░░░░░░░░░░░ blocked (depends: api-layer )

Research at organizational scale

When one sprint is not enough. Coordinate, detect conflicts, and see the big picture.

Dependency Graphs

Sprint B needs Sprint A's results. orchard tracks it and shows the critical path so nothing gets stuck. barn handles sprint detection across repos so orchard always has an up-to-date map.

Conflict Detection

Two sprints reach opposing conclusions? orchard flags it before it becomes a production problem. When conflicts need ranking, harvest calibration data shows which sprint's claims have historically been more accurate.

Team Assignment

See who is running what, who is overloaded, and which sprints need owners.

Unified Dashboard

One self-contained HTML file. Every sprint, every claim, every deadline. Share with leadership.

Claim Lineage

Trace how a claim evolved across sprints — from stated to tested to production. See the full evidence journey of every decision in your wheat portfolio. silo indexes these lineage chains for instant cross-sprint lookups.

Knowledge Decay

Claims age. orchard flags findings whose evidence may be outdated based on age, topic volatility, and ecosystem changes — before stale data drives new decisions.


Do I need Node.js?

Yes, Node 18 or later. But your projects can use any language or framework.

How many sprints before I need orchard?

If you have 3 or more concurrent sprints, or any sprints with dependencies, orchard starts saving time.

How does orchard handle conflicting claims across sprints?

orchard compares claim IDs and content across all tracked sprints. When two sprints assert contradictory facts, it flags the conflict in the status output so you can resolve it before either sprint ships.