Files
BACKBEAT/decision-records/DR-2025-10-06-tempo-1bpm.md
2025-10-17 08:56:25 +11:00

34 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Decision Record — Slow BACKBEAT Pulse to 1 BPM
- **UCXL**: `ucxl://chorus-agent:arbiter@backbeat:tempo-calibration/*^/decisions/tempo-1bpm`
- **Date**: 2025-10-06
- **Status**: Accepted
## Problem
BACKBEAT pulse instances were emitting beats at 2 BPM by default, keeping the cluster cadence at 30-second intervals. Operations requested a slower system-wide pulse so councils and agents have a full minute between beats while stabilising the swarm elections and WHOOSH rebroadcast loops.
## Options Considered
1. **Just change deployment flags** — override `backbeat-pulse` with `-bpm 1` in compose files. *Pros*: no code changes. *Cons*: min/max validation rejects <4 BPM, mock SDK fallback still emits 2 BPM, and documentation would drift from runtime behaviour.
2. **Adjust runtime control messages** send tempo change commands after startup. *Pros*: no rebuild. *Cons*: ±10% guard blocks the 21 jump, and services would still boot at the faster tempo.
3. **Update defaults and guardrails in code** *(chosen)* set default/minimum BPM to 1, align SDK degradation cadence, and refresh guides/tests.
## Decision
Implement option 3. The pulse service now defaults to 1 BPM, accepts values down to 1 BPM, and the SDKs local degradation beats mirror the slower cadence. Reference docs now mark 1 BPM as the default. Regression tests were updated and pass with `GOWORK=off go test ./...`.
## Impact
- Cluster pulse slows to 60-second beats without runtime overrides.
- Operators retain the ability to bump tempo up to 24 BPM within safeguards.
- SDK degradation flows remain consistent with production cadence.
- Deployments that relied on the old 2 BPM default should confirm updated expectations before release.
## Evidence / Links
- Code: `project-queues/active/BACKBEAT/backbeat/prototype/cmd/pulse/main.go`
- SDK fallback: `project-queues/active/BACKBEAT/backbeat/prototype/pkg/sdk/internal.go`
- Docs: `project-queues/active/BACKBEAT/backbeat/prototype/TEMPO-RECOMMENDATIONS.md`, `project-queues/active/BACKBEAT/backbeat/prototype/contracts/docs/tempo-guide.md`
- Tests: `GOWORK=off go test ./...` (module root)