Skip to content

feat: Soft limits — measured LED-count envelopes with a bypassable studio advisory - #275

Draft
Yona-Appletree wants to merge 3 commits into
mainfrom
claude/soft-limits-m6
Draft

feat: Soft limits — measured LED-count envelopes with a bypassable studio advisory#275
Yona-Appletree wants to merge 3 commits into
mainfrom
claude/soft-limits-m6

Conversation

@Yona-Appletree

Copy link
Copy Markdown
Member

Plan: lp2025/2026-08-01-1906-soft-limits
Path: ~/.photomancer/planning/lp2025/2026-08-01-1906-soft-limits/plan.md

Firmware-manifest roadmap M6: lp-cli hardware bench measures, on real
hardware, how many LEDs a (build × board) pair survives (OOM-only, RTC
fault ledger via heartbeat as the oracle), records envelopes in a
checked-in measurements/ store with provenance, and the studio warns —
bypassably via a project setting — when a project exceeds the measured
limit.

Phases: P1 metric+store ✅ · P2 workload generator ✅ · P3 bench command ·
P4 bench the three fixture boards (real hardware) · P5 studio advisory +
bypass (G2 visual gate) · P6 catalog line + ADR.

Resume notes: plan.md, then the p*.md phase files (P1/P2 carry
Implementation Results as they land).

🤖 Generated with Claude Code

Yona-Appletree and others added 3 commits August 2, 2026 02:26
…M6 P1)

leds.max-safe@1 metric consts, MeasurementRecord (plain serde, no
schemars, deny_unknown_fields) with floor-derived limit_leds and
hand-edit detection, and the measurements/ store README: repo-root
placement (a third boards/ file collides with two loaders), bench is
the only writer, staleness is data, missing record = silence.

Plan: 2026-08-01-1906-soft-limits

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… P2)

Generates the metric's synthetic project from real model types (frozen
shader copy — editing it means bumping the metric version): one fixture,
grid cols=N with a strip-aspect canvas (square collapses lamps into one
texel column), one output on a pin chosen the way the firmware's WS281x
driver itself filters (board-labelled, gpio-output, unreserved).
Resolved pins pinned by test: xiao-c6 D0, s3-plus D0, dom-z-102 IO2.
Host-load smoke proves N=30 and N=400 reach running. Read-only store
loader with two-way path/id drift guards; write_record belongs to P3.

Plan: 2026-08-01-1906-soft-limits

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pure derived-bracket schedule (double until death, bisect to ±10, two
confirmations at the boundary; property-tested to terminate within ±10
for every capacity 11..4097), driven by a hardware loop that deploys the
generated workload, settles 20s polling runtime memory, and classifies
death by reconnect + the recovery ledger (oom within boots_ago<=2 — the
crash boot re-loads the killer project, so a safe-mode boot may
intervene). Refuses a hello whose package mismatches the build def (no
auto-flash). write_record joins the store as its only writer. Settle
window and timeouts are consts, not flags — they are part of the metric.

Plan: 2026-08-01-1906-soft-limits

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant