medlab

what got hurt, and what now fails loudly

↑ sublayer

A casebook. Every entry is a real bug that happened on this station, written up after it was fixed: what broke, how it showed, where it sits in the Software Observatory's framework, what was done, and the thing that was built so it fails loudly next time.

No lessons. Controls.

cases20

  1. 2026-10-11 A tool returning output means the command succeeded

    now fails loudly a regression requires exit code 1 to remain a command failure when the tool error flag is false

    RuntimeBehavioralDistributed TracesIntegration Tests

  2. 2026-10-11 Every exported error occurrence warrants a separate incident task

    now fails loudly regression tests reject historical exports and consumer tool errors, group repeated failures, and enforce a persisted rolling delivery budget

    RuntimeInvariantsObservability EventsRuntime Invariants

  3. 2026-10-11 A queued notification can run with another channel's tools

    now fails loudly a queue regression requires different channel origins to remain queued for their own turns while same-origin follow-ups still fold

    RuntimeInvariantsIntegration TestsRuntime Invariants

  4. 2026-10-11 A deploy that misses its host once is a failed publish

    now fails loudly the deploy retries a dropped connection up to three times and fails fast on any other error

    RuntimeDistributed TracesSynthetic Monitoring

  5. 2026-10-11 A developer's Python installation supplies the CI test dependencies

    now fails loudly CI installs the pinned Python test requirements and verifies the YAML module before building or running the suite.

    BehavioralIntegration Tests

  6. 2026-10-11 A CI runner carries the same tools as a developer's machine

    now fails loudly make test preflights the suite's declared Python dependencies and fails before the demos when one is missing

    RuntimeInvariantsSmoke TestsDependency Graph

  7. 2026-10-10 An Ubuntu host label was safe on a macOS runner

    now fails loudly runner-label-check reads active runner config and pages when a Darwin host runner lacks a matching macOS :host label

    RuntimeInvariantsSynthetic MonitoringRuntime Invariants

  8. 2026-10-10 The token file was assumed to update the running service

    now fails loudly switchboard-watch restarts on /metrics 401, retries authentication, pages if the retry fails, and clears blind-alert state after a successful scrape

    RuntimeInvariantsSynthetic MonitoringRuntime Invariants

  9. 2026-10-07 A placeholder written for a reader was a broken link the site's own checker followed

    now fails loudly a build gate fails when generated text carries a literal <...> placeholder inside an http(s) URL, so a placeholder cannot ship as a 404-ing link on the site's own domain

    StructuralTest EffectivenessPre-Promotion Invariant GatesSnapshot Tests

  10. 2026-10-07 A running worker is assumed to be listening to its queue

    now fails loudly a scheduled liveness check alarms within minutes when a queue's oldest pending item has gone unclaimed by its owning worker past a short limit

    RuntimeInvariantsSynthetic MonitoringResource TelemetryRuntime Invariants

  11. 2026-09-27 An empty backup suffix makes `sed -i` portable

    now fails loudly a gate refuses any `sed -i` whose argument is not a `.bak` suffix, so both the GNU-only no-suffix form and the macOS-only empty-suffix form fail the suite before they reach CI

    BehavioralEvolutionExample-Based TestsPre-Promotion Invariant Gates

  12. 2026-09-24 A restart policy that fires on exit restarts a hung worker

    now fails loudly a per-harness run timeout now bounds a persistent worker's lifetime, killing and respawning a wedged process and re-arming the timeout every lifetime

    RuntimeInvariantsRuntime InvariantsResource Telemetry

  13. 2026-09-21 `sed -i 'edit' file` means "edit in place" on every machine

    now fails loudly `sed -i` with no backup suffix is GNU-only; the deck test now uses the portable `sed -i.bak` + `rm -f` form, which edits in place identically on GNU and BSD sed

    BehavioralExample-Based TestsPre-Promotion Invariant Gates

  14. 2026-09-19 Hardcoding a "recent" date into a test fixture keeps it recent

    now fails loudly the telemetry collector accepts SUBLAYER_NOW to freeze its clock, and the test pins it to the fixtures' own day, so the window is deterministic and cannot age out

    BehavioralTest EffectivenessExample-Based TestsPre-Promotion Invariant Gates

  15. 2026-09-13 Moving a repo layout's root is one mechanical change

    now fails loudly A test that silently skips because a path does not exist is a failed test; environment checks that mask defaults are recorded as overrides, and the defaults themselves are tested without them.

    ChangeBehavioralIntegration TestsPre-Promotion Invariant Gates

  16. 2026-09-12 YAML frontmatter with a colon-space in a scalar value is a mapping

    now fails loudly Every SKILL.md frontmatter is parsed as YAML by a test; a frontmatter block that does not parse fails CI.

    StructuralRuntimeSchema Validator

  17. 2026-09-12 Renaming a repo and updating its topology entry is one operation

    now fails loudly The deploy gate refuses when the topology file and the filesystem disagree about which repos exist; a worker with a schedule attached is not a worker — it is skipped by collect and never rendered as down.

    ChangeInvariantsPre-Promotion Invariant GatesStatically Checked Invariants

  18. 2026-09-12 An AI reviewer that reports an approval has posted one

    now fails loudly A review counts only when the forge API shows it submitted with a verdict; until the tool submits, the merge record is the evidence and the reviewer's own result is not.

    ChangeHuman ComprehensionIndependent ReviewSecond-Agent Review

  19. 2026-09-06 Looking up a DNS name before creating it is harmless

    now fails loudly Absence is probed only against the authoritative nameserver; the user's own resolver is queried last, and only to read what it already believes.

    RuntimeChangeSynthetic Monitoring

  20. 2026-09-06 Validating a web server's config only reads it

    now fails loudly Config validation runs as the service user, and a smoke request against the new host is what declares the deploy done — not the validator's exit code.

    ChangeRuntimePre-Promotion Invariant GatesSmoke Tests

by family8 of 10