Flow and Signal
How work moves through the system and how progress becomes visible. Reference: METHOD.md for full methodology.
Flow: How Work Moves
The Stages
Every Outcome moves through these stages. The base path has four stages; the optional awaiting_approval stage activates when Outcome.gate.required = true.
Define → Build → Review → [awaiting_approval] → Ship → Done
Brackets indicate awaiting_approval is conditional — only used when Outcome.gate.required = true. See the awaiting_approval section below for the gate mechanism.
Define
What's happening: Clarifying what success looks like.
Entry criteria:
- The Outcome has been created with a result-oriented title
- Priority has been assigned (Now / Next / Later)
Activities:
- Writing and refining success criteria
- Identifying and linking relevant Context
- Surfacing Decisions that must be made before Build can start
- Identifying the owner
Exit criteria (ready for Build):
- Success criteria are written and testable
- Blocking Decisions have been resolved (status: Decided)
- Relevant Context has been linked
- An owner has been assigned
Key insight: An Outcome stuck in Define usually means there's an unidentified Decision. The first question is always: "What choice needs to be made before we can start building?"
Build
What's happening: Actively creating the thing.
Entry criteria:
- Define exit criteria are met
- Owner is available to work on this
Activities:
- Writing code, creating designs, producing content, or whatever "building" means for this Outcome
- Referencing Context for business rules, patterns, and constraints
- Making and recording smaller Decisions as they arise during building
- Updating Context when new knowledge is discovered
Exit criteria (ready for Review):
- The builder believes all success criteria are met
- The work is in a reviewable state (code committed, design exported, content drafted)
Key insight: Build should be the fastest stage for most Outcomes in AI-augmented teams. If Build is slow, check: is Context insufficient? Are there undiscovered Decisions? Is the Outcome too large (should it be split)?
Review
What's happening: Validating that the Outcome meets its success criteria.
Entry criteria:
- Builder has indicated the work is ready for review
Activities:
- Testing against each success criterion (pass/fail)
- Code review, design review, content review — whatever is appropriate
- Verifying consistency with linked Context (does it follow the business rules? the design principles?)
- Identifying issues that require rework
Exit criteria (ready for Ship):
- All success criteria pass
- Review feedback has been addressed
- No blocking issues remain
Possible backward transition:
- If rework is needed → return to Build with specific feedback
Key insight: Review should be objective, not opinion-based. Success criteria are the standard. If the reviewer and builder disagree, the success criteria need to be sharpened — not the argument won.
Ship
What's happening: Deploying, delivering, or releasing.
Entry criteria:
- Review exit criteria are met
Activities:
- Deployment to production (for software)
- Delivery to stakeholder (for client work)
- Publication (for content)
- Whatever "shipping" means for this type of work
Exit criteria (Done):
- The Outcome is live, delivered, or published
- Stakeholders can see/use the result
- Any post-ship verification passes
Possible backward transition:
- If post-ship issues are found → return to Review
awaiting_approval (Conditional)
What's happening: Held for explicit approval before Ship.
Entry criteria:
- Review exit criteria are met (all success criteria pass)
Outcome.gate.required = true(the Outcome is gated)Outcome.gate.overrideis NOT true (human hasn't bypassed)
Activities:
- Approver receives notification with link to Outcome detail
- Approver reviews the Outcome and either approves or rejects with reason
- The Outcome detail surface shows pending approval state with assignee + age
Exit criteria:
- Approved (ready for Ship):
Outcome.gate.status = approved→ transitions to Ship - Rejected (return to Build):
Outcome.gate.status = rejectedwithrejection_reason→ returns to Build for rework
Per-Outcome override: A human running a Claude Code session can set Outcome.gate.override = true (with override_reason and override_by recorded) to skip this stage even when required. This is the practical-iteration escape valve — the gate enforces in production but doesn't block dev throughput. The override is permanently recorded for audit; subsequent governance review can challenge it.
Why a stage AND a field (per D-03): The flow stage gives Signal something to aggregate (the Approval Gate Queue — see below). The field lets per-Outcome configuration drive when the stage applies, plus the override mechanism. Two complementary mechanisms, not duplication.
Origin: the v2.0 audit found 4 clans needed approval gates (Jungle npm-publish, MOIMF Alpha Verdict APPROVED/WARNING/BLOCKED, Limb Mandrill to Human Council, Webmaster Council-tier deploys). See docs/methodology/validation/DECISIONS-RESOLVED.md#D-03.
Done
The Outcome has shipped and been verified. It moves to the completed archive. It's no longer visible on the active board but remains in history for Signal and Pulse reporting.
Flow Rules
No Sprints
There are no time boxes. An Outcome enters Define when it's identified and ships when it's ready. Some Outcomes flow from Define to Done in a day. Some take three weeks. Both are fine. The speed is the speed.
No WIP Limits (But Use Judgment)
The Canopy Method doesn't impose formal WIP limits, but the principle is clear: finish things before starting new things. If one person has 5 Outcomes in Build, they're context-switching too much. Limit Now priorities to 1–3 per person.
Backward Flow is Normal
Outcomes can move backward. Ship → Review (post-ship issue found). Review → Build (rework needed). Build → Define (scope unclear, needs more Decision-making). This is not failure — it's the system working correctly.
Stage Transitions Emit Events
Every stage change is recorded as a Signal Event. This powers the Signal dashboard, the Weekly Pulse, throughput metrics, and lead time calculations. No manual status updates needed.
Calendar Anchors vs Work Cadence
Work cadence stays continuous-flow internally. There are no time boxes.
For stakeholder communication, however, calendars exist. Board meetings, regulatory submission deadlines, App Store review windows, quarterly investor updates — these are real, and the method does not pretend otherwise.
The accommodation: Milestone.calendar_anchor: date (optional). A Milestone may carry a calendar anchor so it appears on the Calendar-Anchored Roadmap (a stakeholder-facing report). The work cadence inside the Milestone does NOT become time-boxed. The Milestone is finished when its Outcomes are Done; the calendar anchor is when it is REPORTED.
Example: Trellis has Q2 / Q3 / Q4 2026 Township of Rose Board agendas. FirstContactGaming has iOS / Android App Store submission gates. These show up as Milestone.calendar_anchor dates for stakeholder reporting, but the Outcomes inside flow at their natural speed.
This is not sprints returning. Sprints time-box WORK. calendar_anchor time-boxes REPORTING. The distinction is non-negotiable.
See docs/methodology/validation/DECISIONS-RESOLVED.md#D-06.
Timestamps Are Automatic
started_at: Set when Outcome first enters Buildshipped_at: Set when Outcome enters Shipcompleted_at: Set when Outcome enters Done- These timestamps compute lead time automatically
Metrics: What We Measure
Lead Time
Days from Outcome created to Outcome shipped.
This is the primary speed metric. It measures how long it takes for a result to go from "we identified this" to "it's live."
Lead time includes Define time, Build time, Review time, and Ship time. It measures the whole system, not just the building part.
Shorter lead time = faster delivery. Track the distribution (average, median, p90), not just the average.
Throughput
Number of Outcomes shipped per time period.
Usually measured weekly. "We shipped 7 Outcomes this week." Simple. Meaningful.
Throughput increasing over time with stable lead time = the team is getting more efficient. Throughput increasing with increasing lead time = the team is taking on bigger Outcomes.
Decision Velocity
Average time from Decision opened to Decision resolved.
Fast decision velocity = fast everything else, because decisions are the bottleneck.
Track this at the workspace level. If decision velocity is slow, investigate: are decisions too big? are the wrong people being consulted? is reversibility not being assessed?
What We Do NOT Measure
- ❌ Story points (don't exist)
- ❌ Velocity in points (meaningless)
- ❌ Sprint commitment vs. completion (no sprints)
- ❌ Burndown rate (no burndowns)
- ❌ Lines of code (not a measure of value)
- ❌ Hours worked (not a measure of output)
Signal: How Progress Becomes Visible
Signal is the intelligence layer. It observes what's happening and makes it visible without anyone writing status reports.
Activity Feed (Real-Time)
Generated automatically from stage transitions, decisions, and context changes:
- "Outcome 'Customers can book online' moved from Build to Review" — 2h ago
- "Decision 'Stripe vs. Square' was resolved: Stripe Connect" — 4h ago
- "Context 'HIPAA Requirements' was updated" — yesterday
- "3 new Inbox items received from Portal feedback" — today
- "CrossClanDependency 'Persona API key from Cortex' moved from IN_PROGRESS_BY_THEM to DELIVERED" — 1h ago
- "Invariant 'HIPAA patient data encryption' health changed from passing to failing" — 30m ago
- "Outcome 'Customers can book online' entered awaiting_approval (approver: name)" — 2h ago
- "LivingProcess 'Cortex Nexus' deployed v3.2.1" — 4h ago
Attention Alerts
AI-generated flags for things that need human attention:
- Stale Outcome: "OC-015 has been in Define for 5 days. Average Define time is 2 days. Is there a blocking Decision?"
- Pending Decision: "DEC-008 'Build vs. Buy scheduling' has been Open for 72 hours. Reversibility: Moderate — target resolution: today."
- Review Waiting: "OC-022 has been in Review for 3 days with no reviewer activity."
- SLA Warning: "Inbox item #047 is approaching its 24-hour response deadline."
- Invariant Violation: "Invariant 'HIPAA patient data encryption' is failing — 3 violations in last 24h."
- Stalled CrossClanDependency: "CCD 'Persona API key' has been in REQUESTED for 8 days. Cortex side has not acknowledged."
- Blocked Approval Gate: "Outcome 'v2.1 release' has been in awaiting_approval for 5 days. Approver: name."
- LivingProcess Degraded: "Cortex Nexus health: degraded. p95 latency 340ms (threshold 200ms)."
- Issue Awaiting Evidence: "Issue 'iOS network failures' has been in
diagnostic_state: awaiting_evidencefor 14 days."
Throughput Dashboard
Visual summary:
- Outcomes shipped this week / this month / trailing 30 days
- Lead time distribution (histogram)
- Decision velocity trend
- Flow stage distribution (how many Outcomes in each stage right now)
Weekly Pulse: The Async Ceremony
The Weekly Pulse replaces sprint review, sprint planning, retrospective, and daily standups — all of them — with one 15–30 minute async practice.
How It Works
1. Auto-Generate (Friday) The system compiles the week's events into a structured draft:
- Outcomes Shipped (list with owners and lead times)
- Decisions Made (list with summaries)
- Decisions Pending (list with age and urgency)
- Context Added (new knowledge this week)
- Blockers (stuck items with AI-suggested actions)
- Metrics (throughput, lead time, decision velocity for the week)
2. Human Edit (Friday, 15–30 min) The team lead or project owner reviews the draft and adds:
- Narrative context that AI can't provide ("The client changed direction mid-week, which is why lead times are up")
- Priorities for next week
- Celebrations, acknowledgments, concerns
- Any information the team needs that isn't captured in the data
3. Publish The edited Pulse is published to:
- The Signal dashboard (permanent record)
- Email to team members
- Optionally: the Portal (for client visibility)
What Pulse Replaces
| Scrum Ceremony | Time/Week | Canopy Replacement |
|---|---|---|
| Daily Standup (15 min × 5) | 1h 15m | Signal Activity Feed (always current, zero meetings) |
| Sprint Planning | 1–2h | Continuous prioritization (Now/Next/Later) |
| Sprint Review / Demo | 1h | Weekly Pulse (shipped Outcomes listed with context) |
| Retrospective | 1h | Decision Log review + Pulse "concerns" section |
| Total | 4–5+ hours | 15–30 minutes |
Reporting Surfaces (v2.0)
The Signal layer aggregates events into structured reports. v1.0 shipped: Activity Feed, Attention Alerts, Throughput Dashboard, Weekly Pulse. v2.0 adds five new surfaces (per D-13), each tied to a primitive or workflow:
Cross-Clan Dependency Report
Lists every incoming and outgoing CrossClanDependency entity for the current clan, with state (REQUESTED / IN_PROGRESS_BY_THEM / DELIVERED / ACKED / DONE), age, and aging-bucket badges. Used to answer "what's pending from other clans?" and "what are we still owed?"
See CROSS-CLAN.md for the underlying primitive. Phase 18 implements the surface.
Stakeholder Briefing Variants (of the Weekly Pulse)
The Weekly Pulse already exists. v2.0 adds three lens variants chosen at generation time:
- technical — for engineering leadership; emphasizes throughput, lead time, decision velocity, infra Outcomes, Invariant health
- business — for business leadership; emphasizes feature / content Outcomes, customer-facing milestones, hidden infra and refactor
- regulatory — for compliance / audit readers; emphasizes compliance Outcomes, Invariant violations, retroactive backfill, audit chain completeness
Same underlying data, three different filters and emphases. Each lens uses Outcome.kind to decide what to surface vs hide.
Invariant Health Dashboard
Pass / fail status per Invariant, last-checked timestamp, violation count over the last 30 days, drill-through to specific violation events. Used by compliance officers, security reviewers, brand auditors. Anchored in INVARIANTS.md.
Approval Gate Queue
Lists every Outcome currently in awaiting_approval stage, with approver, age, and Outcome detail link. Aggregates across the workspace so approvers see ALL pending requests in one place rather than per-Outcome notifications. Tied to the awaiting_approval stage above.
Risk Heat-Map
Aggregates Attention Alerts into a prioritized risk view:
- Invariant violations (
health_status: failing) - Stuck Outcomes (in Define / Build / Review beyond expected duration)
- Blocked gates (Outcomes in
awaiting_approvalbeyond expected duration) - Stalled CrossClanDependencies (no state transition in N days)
- LivingProcess degradation (
health_status: degradedorunhealthy)
Renders as a heat-map with severity × confidence axes. Used for executive-level risk visibility.
Method spec vs platform implementation: This section specs the surfaces canonically. The platform (Phases 18+) implements them. If platform implementation lags, the surfaces are still part of the methodology spec — they describe what Canopy MEANS, not just what's built.
Flow Anti-Patterns
Anti-Pattern: "Everything is Now"
If more than 3 Outcomes per person are marked Now, nothing is actually Now. Reprioritize. Be honest about sequence.
Anti-Pattern: "Define Forever"
Outcomes stuck in Define usually mean an unidentified Decision. Surface it, frame it, resolve it.
Anti-Pattern: "Build but Never Review"
If Outcomes pile up in Review, the bottleneck is review capacity, not build capacity. Address this by making Review expectations explicit in success criteria.
Anti-Pattern: "Review Ping-Pong"
If Outcomes keep bouncing between Build and Review, the success criteria were probably too vague. Sharpen them before the next Build cycle.
Anti-Pattern: "Ship Means Done"
Ship is not Done. Ship means deployed/delivered. Done means verified and accepted. Don't skip the verification step.
Anti-Pattern: "Ghost Outcomes"
Outcomes that exist in the system but nobody is actively working on, thinking about, or even aware of. Archive or delete them. If they matter, they'll come back.
Anti-Pattern: "Status Meeting Anyway"
If the team is holding status meetings in addition to using Signal and Pulse, something is wrong. Either Signal isn't providing enough information (fix Signal), or the meetings are serving a social function (reframe them as something other than status).
Cross-refs
- METHOD.md — Flow and Signal are 2 of the 5 original method elements (plus 4 new v2.0 primitives)
- OUTCOMES.md —
Outcome.gatefield - INVARIANTS.md — Invariant Health Dashboard, violation alerts
- INITIATIVES.md — Initiative-level rollup metrics
- CROSS-CLAN.md — Cross-Clan Dependency Report, sync-failure alerts
- LIVING-PROCESS.md — LivingProcess health degradation alerts
- BUGS.md — Issue
diagnostic_statesurfaces in Stalled-Issue alerts - VOCABULARY.md —
awaiting_approval(snake_case) is canonical docs/methodology/validation/DECISIONS-RESOLVED.md— D-03 (gate hybrid), D-06 (calendar_anchor), D-13 (reporting surfaces)