From 7b44b11f4a95c55b0f004debeb1f8545e2edf80b Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 2 Nov 2026 17:51:34 +0100 Subject: [PATCH] docs(openspec): gate 123 lets a check leave the floor only through sigrid.yaml Brings the design and spec in line with the merged rule from #891: a check that is no longer measured fails unless the same change edits sigrid.yaml, and a missing floor file is NOT APPLICABLE before any tool loads. Assisted-by: ClaudeCode:claude-opus-5-5 --- openspec/changes/gate-123-sig-floor/design.md | 6 +++++- .../specs/gate-sig-floor/spec.md | 17 +++++++++++++++++ openspec/changes/gate-123-sig-floor/tasks.md | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/openspec/changes/gate-123-sig-floor/design.md b/openspec/changes/gate-123-sig-floor/design.md index 08cd5f19..4c90e64d 100644 --- a/openspec/changes/gate-123-sig-floor/design.md +++ b/openspec/changes/gate-123-sig-floor/design.md @@ -27,7 +27,11 @@ For each floored check the head misses: | missed (only possible via the file) | worse | FAIL: it erodes a floor development already breaks | | missed | not worse | inherited: printed, not counted | -A check that disappears from the head (its language left the measured scope) fails, because nothing proves it is still met. A pull request that removes a check from the floor file fails as well. +A check that disappears from the head (its language left the measured scope) fails, because nothing proves it is still met, unless the same pull request changes `sigrid.yaml` (Ruben, 2 November 2026). An explicit scope change may take checks out of the floor and out of the floor file in that pull request. A check the base no longer measures either left in an earlier pull request and is not judged again. + +A pull request that removes a check that is still measured from the floor file fails, with or without a `sigrid.yaml` change. + +Without a floor file the gate is NOT APPLICABLE before it loads a tool or resolves a base, so a missing tool never turns an app without a floor into SKIPPED (wiring). Inherited breaches exist only after an admin merge past a red gate. They do not fail unrelated pull requests, in line with the inherited-debt rule; development fixes them forward. diff --git a/openspec/changes/gate-123-sig-floor/specs/gate-sig-floor/spec.md b/openspec/changes/gate-123-sig-floor/specs/gate-sig-floor/spec.md index 3c942be2..4b1c6f57 100644 --- a/openspec/changes/gate-123-sig-floor/specs/gate-sig-floor/spec.md +++ b/openspec/changes/gate-123-sig-floor/specs/gate-sig-floor/spec.md @@ -73,3 +73,20 @@ The gate SHALL measure exactly what gate 122 measures, including the app's `sigr - **GIVEN** `sigrid.yaml` excludes `lib/Generated/` - **WHEN** a pull request adds a 74-line unit there - **THEN** the gate passes + +### Requirement: A check leaves the floor only through sigrid.yaml + +A floored check the head no longer measures SHALL fail the gate, unless the same change edits `sigrid.yaml` or `sigrid.yml`, or the base does not measure it either. A change that edits `sigrid.yaml` MAY remove the checks it takes out of scope from the floor file. Removing a check that is still measured SHALL fail. + +#### Scenario: A language leaves without a scope change + +- **GIVEN** the floor lists `javascript unit_size >15` +- **WHEN** a pull request deletes the app's only JavaScript file +- **THEN** the gate fails with `javascript unit_size >15: no longer measured` + +#### Scenario: An exclude in sigrid.yaml + +- **WHEN** a pull request adds `.*/src/.*` to `sigrid.yaml` and removes the JavaScript checks from the floor file +- **THEN** the gate passes and reports the checks as having left the scope through sigrid.yaml +- **AND** the next pull request is not judged on them + diff --git a/openspec/changes/gate-123-sig-floor/tasks.md b/openspec/changes/gate-123-sig-floor/tasks.md index 759000d4..9ce04c7f 100644 --- a/openspec/changes/gate-123-sig-floor/tasks.md +++ b/openspec/changes/gate-123-sig-floor/tasks.md @@ -20,4 +20,4 @@ ## 4. Adoption -- [ ] 4.1 One pull request per fleet app with `.github/sig-floor.json` from its development head, together with `hydra-gates-sig-blocking: true` +- [x] 4.1 One pull request per fleet app with `.github/sig-floor.json` from its development head, together with `hydra-gates-sig-blocking: true`