avodado
avodado docs
Blocks reference

Business & decisions

Field contracts and worked examples for the 12 business & decisions blocks.

Field contracts and worked examples for the business & decisions blocks — converted at build time from the repo's authoring-skill reference. Every example body is YAML; in a real doc the fence language is the block type (for example sequence … ). Schemas are strict — unknown fields are rejected. See the field contract for the at-a-glance shape of all 77 blocks, or the block catalog for live previews.

Access control / RBAC

matrix — a role × resource capability grid

```matrixeditable · live
renderedavo renders this
SECTION 01 · Capability matrix

Who can do what

Role / AppBillingReportsAdmin
OwnerFullFullFull
ManagerFullRead
ViewerReadRead
Valid — passes avo check

cells is positional — one value per cols entry, in order. Cells tint by meaning: Full/Admin/Write/ → green, /None/ → muted, anything else → amber. Use matrix (not table) for a capability grid where the columns are resources and each cell is a permission level.

anatomy — the parts of a structured string (e.g. a permission)

```anatomyeditable · live
renderedavo renders this
SECTION 01 · Anatomy

Anatomy of a permission

acme:billing:invoices.read
App
acme
Which product.
:
Feature
billing
The area within the app.
:
Action
invoices.read
The specific capability.
Valid — passes avo check

Renders the full string (acme:billing:invoices.read) with each segment coloured, then a labelled card per segment. Use it to explain one identifier's shape — a permission string, a resource URN, a topic name.

composition — effective access as intersected gates

```compositioneditable · live
renderedavo renders this
SECTION 01 · Composition

How access is decided

Identity
A valid signed-in user.
Scope
The request is in range.
Permission
The action is granted.
=
Effective
May read invoices
Valid — passes avo check

Renders gate₁ ∩ gate₂ ∩ … = result. Use it when access is the AND of several independent checks (authn ∩ scope ∩ permission), not a sequence of steps (use flow/sequence for ordered steps).

Presentation cards

drivers — the forces that shaped a design

```driverseditable · live
renderedavo renders this
SECTION 01 · Drivers

What guided the architecture

Single sign-on
One login carries the user everywhere.
HOW: token
Read per site
Access is scoped to the user's sites.
WHERE: site group
Governed roles
An IGA requests, approves, certifies.
WHO: role groups
Per-app permissions
The same role differs per app.
WHAT: matrix
Valid — passes avo check

A grid of "the N drivers/requirements behind this." icon is one of a fixed set (location · shield · grid · lock · key · user · clock · check · database · bolt · flag · doc · link · eye · server · layers); accent colours the top edge + icon.

team — people cards (who owns what)

```teameditable · live
renderedavo renders this
SECTION 01 · Team

Who owns what

AR
Ana Ruiz
Tech lead
Rendering pipeline
SO
Sam Okafor
Backend
Sync + integrations
LF
Lena Fischer
Design
Themes and house style
DR
DevRel
Advocacy
Docs and community
Valid — passes avo check

Compact cards on a 3-column grid — initials avatar, name, uppercase role, and a one-line focus. Initials derive from name; set initials to override (e.g. for a team rather than a person). Use team for ownership/contact overviews; use persona for user archetypes with goals and frustrations.

options — approaches explored, with a verdict

```optionseditable · live
renderedavo renders this
SECTION 01 · Options

Approaches explored

Option 1App-managed roles
Roles in our own DB.
  • Full control
  • Second source of truth
REJECTED — fails the constraint
Option 2Global role groups
One global group per role.
  • Fewest groups
  • A role applies at every site
VIABLE — fallback
Option 3Per-site role groups
One group per persona per site.
  • Least privilege
  • Most groups
CHOSEN
Valid — passes avo check

Use when you weighed several approaches. Each card is one option; tone: chosen highlights the winner. For one option's trade-offs alone, use proscons.

scorecard — a weighted decision matrix

```scorecardeditable · live
renderedavo renders this
SECTION 01 · Decision matrix

Queue technology choice

CriteriaKafkaself-hostedSQSWINNERmanagedRabbitMQ
Throughput×2533
Operational cost×2253
Team familiarity344
Ecosystem534
TOTAL222320
Valid — passes avo check

Criteria are rows (an ×N chip marks weights other than 1), options are columns, and the footer TOTAL row carries the weighted sum per option — the winner's header and total are highlighted with a WINNER chip (ties highlight all). Scores are plain numbers, 0-5 by convention. Use scorecard when the decision was scored; use options for qualitative pros / cons / verdict cards and table for plain data.

spec — a labelled spec sheet

```speceditable · live
renderedavo renders this
SECTION 01 · Spec

Per-site role groups

Groups
SiteN-Users (read) + SiteN-<Persona> per staffed plant.
Roles
Each group reads as (site, role); the token carries the scope.
Resolution
Decode tokenRead (site, role)Check matrix
Cost
Up to Sites × Roles groups; a new role multiplies them.
Valid — passes avo check

A compact "fact sheet" for one approach/component. A row with steps: renders as an arrow-joined pill flow (great for a short resolution pipeline).

envelope — back-of-envelope capacity math

```envelopeeditable · live
renderedavo renders this
SECTION 01 · Capacity math

Write-path capacity

Daily active users
5M
Writes / user / day
4
Writes per day5M × 420M/day
Write QPS20M / 86,400 s≈ 230 rps
Peak QPS230 × 3 (peak factor)≈ 700 rps
Provision for
~1,400 rps (2× peak headroom)
Valid — passes avo check

The system-design "step 2" block: assumptions are the givens, each steps row is one derivation (label · calc · result), and the optional result is the highlighted bottom line. Every value is a string — write units and /× freely, and quote anything containing , : or #. Use envelope for the estimate that justifies a design; use stats for measured KPIs.

Business & strategy

swot — strengths / weaknesses / opportunities / threats

```swoteditable · live
renderedavo renders this
SECTION 01 · SWOT

Entering the enterprise segment

Strengths
  • Fastest onboarding in the category
  • Strong developer community
Weaknesses
  • No SSO / SCIM yet
  • Small support team
Opportunities
  • Competitor sunsetting its legacy plan
  • Compliance push creates demand
Threats
  • Incumbent bundling a free tier
  • Procurement cycles slow adoption
Valid — passes avo check

Four plain string lists — the classic 2×2 draws itself (S green · W red · O blue · T amber). Omit a quadrant you have nothing for; it still draws so the shape reads as a SWOT. Use swot for a strategic position; use proscons for one option's trade-offs and quadrant to plot items on two axes. For a conversion funnel (drop-off between ordered stages), use chart with kind: funnel — see charts-overviews.md.

okr — objectives + key results

```okreditable · live
renderedavo renders this
SECTION 01 · Objectives

Q3 objectives

Make onboarding effortlessGrowth
Time-to-first-doc under 5 minutes
70%
Activation rate from 45% to 60%
40%
Earn enterprise trustPlatform
Ship SSO + audit log
100%
SOC 2 Type II report issued
20%
Valid — passes avo check

One card per objective; each key result renders a progress bar (progress is a plain number 0..1) coloured by status — done / on-track green, at-risk amber, off-track red, no status navy. Use okr for goal tracking; use slo for reliability targets and statustable for task-level work.

persona — user persona cards

```personaeditable · live
renderedavo renders this
SECTION 01 · Personas

Who we build for

MC
Maya Chen
Staff engineer
I want the diagram in the PR diff, not in a wiki.
Goals
  • Docs that live with the code
  • Reviewable architecture changes
Frustrations
  • Stale wiki pages
  • Screenshots of whiteboards
Tools
VS CodeGitHub
PP
Priya Patel
Engineering manager
Every reorg breaks our onboarding docs.
Goals
  • One source of truth per system
Frustrations
  • Docs no one owns
Tools
LinearNotion
Valid — passes avo check

A 2-column grid of cards — initials avatar (from name), role, an italic quote with an accent bar, then GOALS / FRUSTRATIONS lists and TOOLS chips (sections with no data are omitted). Use persona for user archetypes; use team for real people and ownership.