diff --git a/.github/workflows/gate.yml b/.github/workflows/gate.yml index c87d4b0a..6872cd91 100644 --- a/.github/workflows/gate.yml +++ b/.github/workflows/gate.yml @@ -325,8 +325,8 @@ jobs: # timestamp). This catches the recurring row-ordering bug # where the Edit tool's old_string=existing-line pattern # inserts the new row BEFORE the matched line, producing - # reverse-chronological order. Aaron 2026-04-26 asked for - # structural prevention after I caught this bug at least + # reverse-chronological order. Maintainer 2026-04-26 asked for + # structural prevention after the bug was caught at least # three times across recent ticks. The check is the # "fail-fast at commit/push time" mechanism that doesn't # rely on each agent's vigilance — Otto-339 anywhere-means- @@ -346,7 +346,7 @@ jobs: lint-no-conflict-markers: # Fail if any committed file contains git merge-conflict markers - # (`<<<<<<<`, `=======`, `>>>>>>>`). Aaron 2026-04-26 ask: + # (`<<<<<<<`, `=======`, `>>>>>>>`). Maintainer 2026-04-26 ask: # *"maybe we should hygene for <<<<<<< HEAD and >>>>>>> ======= things # like that in our files incase we ever accidently botch a merge, # happens to the best of us humans too."* @@ -368,6 +368,34 @@ jobs: - name: Run check-no-conflict-markers run: tools/hygiene/check-no-conflict-markers.sh + lint-archive-header-section33: + # Fail if any courier-ferry / external-conversation import under + # docs/research/** is missing the GOVERNANCE.md §33 4-field archive + # boundary header in the first 20 lines, OR if its 'Operational + # status:' value is not enum-strict ('research-grade' or + # 'operational'). Factory observation 2026-04-26: §33 archive header + # was the most-common review finding across the 11-refinement + # courier-ferry lineage this session — every PR retrofitted post- + # review. + # + # Per Otto-346 (recurring pattern → substrate primitive) + + # Otto-341 (mechanism over vigilance), this lint catches the + # discipline at the structural layer: agents and humans cannot + # land courier-ferry imports without the §33 header anymore. + # + # B-0036 Sub-task 2 — wire the lint to gate.yml after Sub-task 1 + # backfilled all pre-existing violations to 0. + name: lint (archive header §33) + timeout-minutes: 2 + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Run check-archive-header-section33 + run: tools/hygiene/check-archive-header-section33.sh + lint-no-empty-dirs: # Fail if a committed directory has no files — almost always a # forgotten artefact (an agent-created skill folder without a