Cherry-picked website/, scripts/generate-llms-full.sh, and deploy-docs.yml from joyshmitz's PR. Fixed workflow to trigger on main branch instead of docs/docusaurus-site. Features: - Docusaurus documentation site with llms.txt support - Environment-variable driven config (defaults to steveyegge org) - Automated llms-full.txt generation from docs - GitHub Pages deployment workflow Co-authored-by: joyshmitz <joyshmitz@users.noreply.github.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Executed-By: beads/crew/dave Rig: beads Role: crew
253 lines
4.0 KiB
Markdown
253 lines
4.0 KiB
Markdown
---
|
|
id: formulas
|
|
title: Formulas
|
|
sidebar_position: 3
|
|
---
|
|
|
|
# Formulas
|
|
|
|
Formulas are declarative workflow templates.
|
|
|
|
## Formula Format
|
|
|
|
Formulas can be written in TOML (preferred) or JSON:
|
|
|
|
### TOML Format
|
|
|
|
```toml
|
|
formula = "feature-workflow"
|
|
description = "Standard feature development workflow"
|
|
version = 1
|
|
type = "workflow"
|
|
|
|
[vars.feature_name]
|
|
description = "Name of the feature"
|
|
required = true
|
|
|
|
[[steps]]
|
|
id = "design"
|
|
title = "Design {{feature_name}}"
|
|
type = "human"
|
|
description = "Create design document"
|
|
|
|
[[steps]]
|
|
id = "implement"
|
|
title = "Implement {{feature_name}}"
|
|
needs = ["design"]
|
|
|
|
[[steps]]
|
|
id = "review"
|
|
title = "Code review"
|
|
needs = ["implement"]
|
|
type = "human"
|
|
|
|
[[steps]]
|
|
id = "merge"
|
|
title = "Merge to main"
|
|
needs = ["review"]
|
|
```
|
|
|
|
### JSON Format
|
|
|
|
```json
|
|
{
|
|
"formula": "feature-workflow",
|
|
"description": "Standard feature development workflow",
|
|
"version": 1,
|
|
"type": "workflow",
|
|
"vars": {
|
|
"feature_name": {
|
|
"description": "Name of the feature",
|
|
"required": true
|
|
}
|
|
},
|
|
"steps": [
|
|
{
|
|
"id": "design",
|
|
"title": "Design {{feature_name}}",
|
|
"type": "human"
|
|
},
|
|
{
|
|
"id": "implement",
|
|
"title": "Implement {{feature_name}}",
|
|
"needs": ["design"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Formula Types
|
|
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| `workflow` | Standard step sequence |
|
|
| `expansion` | Template for expansion operator |
|
|
| `aspect` | Cross-cutting concerns |
|
|
|
|
## Variables
|
|
|
|
Define variables with defaults and constraints:
|
|
|
|
```toml
|
|
[vars.version]
|
|
description = "Release version"
|
|
required = true
|
|
pattern = "^\\d+\\.\\d+\\.\\d+$"
|
|
|
|
[vars.environment]
|
|
description = "Target environment"
|
|
default = "staging"
|
|
enum = ["staging", "production"]
|
|
```
|
|
|
|
Use variables in steps:
|
|
|
|
```toml
|
|
[[steps]]
|
|
title = "Deploy {{version}} to {{environment}}"
|
|
```
|
|
|
|
## Step Types
|
|
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| `task` | Normal work step (default) |
|
|
| `human` | Requires human action |
|
|
| `gate` | Async coordination point |
|
|
|
|
## Dependencies
|
|
|
|
### Sequential
|
|
|
|
```toml
|
|
[[steps]]
|
|
id = "step1"
|
|
title = "First step"
|
|
|
|
[[steps]]
|
|
id = "step2"
|
|
title = "Second step"
|
|
needs = ["step1"]
|
|
```
|
|
|
|
### Parallel then Join
|
|
|
|
```toml
|
|
[[steps]]
|
|
id = "test-unit"
|
|
title = "Unit tests"
|
|
|
|
[[steps]]
|
|
id = "test-integration"
|
|
title = "Integration tests"
|
|
|
|
[[steps]]
|
|
id = "deploy"
|
|
title = "Deploy"
|
|
needs = ["test-unit", "test-integration"] # Waits for both
|
|
```
|
|
|
|
## Gates
|
|
|
|
Add gates for async coordination:
|
|
|
|
```toml
|
|
[[steps]]
|
|
id = "approval"
|
|
title = "Manager approval"
|
|
type = "human"
|
|
|
|
[steps.gate]
|
|
type = "human"
|
|
approvers = ["manager"]
|
|
|
|
[[steps]]
|
|
id = "deploy"
|
|
title = "Deploy to production"
|
|
needs = ["approval"]
|
|
```
|
|
|
|
## Aspects (Cross-cutting)
|
|
|
|
Apply transformations to matching steps:
|
|
|
|
```toml
|
|
formula = "security-scan"
|
|
type = "aspect"
|
|
|
|
[[advice]]
|
|
target = "*.deploy" # Match all deploy steps
|
|
|
|
[advice.before]
|
|
id = "security-scan-{step.id}"
|
|
title = "Security scan before {step.title}"
|
|
```
|
|
|
|
## Formula Locations
|
|
|
|
Formulas are searched in order:
|
|
1. `.beads/formulas/` (project-level)
|
|
2. `~/.beads/formulas/` (user-level)
|
|
3. Built-in formulas
|
|
|
|
## Using Formulas
|
|
|
|
```bash
|
|
# List available formulas
|
|
bd mol list
|
|
|
|
# Pour formula into molecule
|
|
bd pour <formula-name> --var key=value
|
|
|
|
# Preview what would be created
|
|
bd pour <formula-name> --dry-run
|
|
```
|
|
|
|
## Creating Custom Formulas
|
|
|
|
1. Create file: `.beads/formulas/my-workflow.formula.toml`
|
|
2. Define structure (see examples above)
|
|
3. Use with: `bd pour my-workflow`
|
|
|
|
## Example: Release Formula
|
|
|
|
```toml
|
|
formula = "release"
|
|
description = "Standard release workflow"
|
|
version = 1
|
|
|
|
[vars.version]
|
|
required = true
|
|
pattern = "^\\d+\\.\\d+\\.\\d+$"
|
|
|
|
[[steps]]
|
|
id = "bump-version"
|
|
title = "Bump version to {{version}}"
|
|
|
|
[[steps]]
|
|
id = "changelog"
|
|
title = "Update CHANGELOG"
|
|
needs = ["bump-version"]
|
|
|
|
[[steps]]
|
|
id = "test"
|
|
title = "Run full test suite"
|
|
needs = ["changelog"]
|
|
|
|
[[steps]]
|
|
id = "build"
|
|
title = "Build release artifacts"
|
|
needs = ["test"]
|
|
|
|
[[steps]]
|
|
id = "tag"
|
|
title = "Create git tag v{{version}}"
|
|
needs = ["build"]
|
|
|
|
[[steps]]
|
|
id = "publish"
|
|
title = "Publish release"
|
|
needs = ["tag"]
|
|
type = "human"
|
|
```
|