Skip to content

ci: ratchet-only floors in storyboard matrix; lower-then-raise pattern erodes the floor file as a conformance signal #3977

Description

@bokelley

The product-expert review of #3974 + #3976 flagged the floor ratchet pattern as the highest-leverage concern in the post-#3962 cluster:

Floor cadence — landing-wrong as a pattern, even if each individual PR is correct. The lower→raise→fix→raise sequence makes the floor file a lagging indicator of PR ordering rather than conformance. A reader of git blame on floors can't tell "real regression" from "shipping artifact." Alternative: floors move once per cluster close, not per PR. Use a scratch/observed file during the cluster, ratchet the canonical floor only when the cluster closes. Or: floors only ratchet up, and #3962 should have been a feature flag / waiver rather than a floor lower.

Concrete this cycle:

Four floor-touching PRs in one cluster. Future contributors reading git blame on `.github/workflows/training-agent-storyboards.yml:39-56` get noise instead of signal — the lowered floor in #3962 wasn't a regression, but reads like one.

Proposals (pick one or compose)

  1. Ratchet-up-only invariant. Floor numbers MAY only increase. A PR that needs to ship despite a regression files a waiver issue listing the affected storyboards and sets a waivers: block on the matrix entry instead of touching the floor. The workflow checks the waiver list against actual failures and accepts known-failing storyboards without lowering the global floor.

  2. Cluster-close-only floor changes. Floors move once per regression-cluster-close (i.e., once per Training-agent baseline regressions exposed by @adcp/sdk@6.7.0 bump (PR #3962) #3965-class tracker), not per individual fix-up PR. Individual PRs touching the same cluster reference an observed_floors.yaml scratch file that the workflow reads; the canonical floor file only updates when the cluster closes.

  3. Lock floor changes to a separate review path. Edits to the floor numbers require a floor-change label and dual approval from a codeowner of .github/workflows/training-agent-storyboards.yml. Forces a moment of "do we actually want to lower this?" friction.

The first option is cheapest and closest to how most CI suites handle this. Worth pairing with a build-time lint that compares the new floor to the prior floor on every PR and rejects decreases without a waiver.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suite

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions