feat: Soft limits — measured LED-count envelopes with a bypassable studio advisory - #275
Draft
Yona-Appletree wants to merge 3 commits into
Draft
feat: Soft limits — measured LED-count envelopes with a bypassable studio advisory#275Yona-Appletree wants to merge 3 commits into
Yona-Appletree wants to merge 3 commits into
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 benchmeasures, on realhardware, 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