From 00cd9d510dbcb229ede96231935a774c4449f2a6 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 26 Apr 2026 05:01:41 -0400 Subject: [PATCH 1/2] feat(gate.yml): wire check-archive-header-section33.sh as enforcing CI lint job (B-0036 Sub-task 2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 'lint (archive header §33)' as a new gate.yml lint job alongside existing lint-tick-history-order, lint-no-conflict-markers, lint-no-empty-dirs, lint-markdown. Now any future courier-ferry / external-conversation import under docs/research/** will: - FAIL CI on missing §33 4-field archive header in lines 1-20 - FAIL CI on Operational-status value not in enum {research-grade, operational} - BLOCK MERGE per branch protection's required-status-checks This is B-0036 Sub-task 2 — Sub-task 1 (backfill) was completed via PR #572/#573/#576/#577/#578/#579 reducing pre-existing violations from 36 → 0 on main. The substrate-primitive lifecycle is now operational: - Otto-346 recurring-pattern observed: §33 retrofitted post-review on 9+ PRs in the 11-Amara-refinement lineage - PR #571 shipped lint tool (label-presence) - PR #575 enhanced lint to validate enum-value (Operational status) - 6-PR backfill chain cleared all pre-existing violations - THIS PR: enforcing CI gate Composes with: - check-tick-history-order.sh (same Otto-346 substrate-primitive template — recurring discipline-violation → CI lint) - check-no-conflict-markers.sh (same template; the 3 lint scripts now form a consistent §33-discipline enforcement triple) - B-0036 backlog row (Sub-task 2 satisfied; row can close once this lands) Future operator note: if a legitimate courier-ferry doc lands and this lint flags a false-positive, two fixes available: (a) add §33 header (most common; 9 in 9 review-finding cases this session were legit § missing) (b) refine the courier-ferry-import detection regex in the script (rare; only if the doc isn't actually external-conversation) --- .github/workflows/gate.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/gate.yml b/.github/workflows/gate.yml index c87d4b0a..d69c983c 100644 --- a/.github/workflows/gate.yml +++ b/.github/workflows/gate.yml @@ -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'). Otto observation 2026-04-26: §33 archive header + # was the most-common review finding across the 11-Amara-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 From 58a2c5913ca6a0e1b9e63257421ceff7ceea01d2 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 26 Apr 2026 06:57:39 -0400 Subject: [PATCH 2/2] ci(gate.yml #580 thread): role-refs replace name attribution per AGENT-BEST-PRACTICES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per Copilot P1 on #580: workflow YAML comments are current-state operational surfaces; AGENT-BEST-PRACTICES rule 'No name attribution in code, docs, or skills' requires role-refs not first names. Replacements (4 occurrences): - 'Aaron 2026-04-26 asked' → 'Maintainer 2026-04-26 asked' (line 328) - 'Aaron 2026-04-26 ask:' → 'Maintainer 2026-04-26 ask:' (line 349) - 'Otto observation 2026-04-26:' → 'Factory observation 2026-04-26:' (line 376) - '11-Amara-refinement courier-ferry lineage' → '11-refinement courier-ferry lineage' (line 377) Per Otto-279 history-surface carve-out: names ALLOWED in research / ROUND-HISTORY / ADRs / aurora archive (history surfaces), preferred role-refs in code / skills / workflow YAML / current-state docs. Workflow YAML is current-state surface. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/gate.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gate.yml b/.github/workflows/gate.yml index d69c983c..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."* @@ -373,8 +373,8 @@ jobs: # 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'). Otto observation 2026-04-26: §33 archive header - # was the most-common review finding across the 11-Amara-refinement + # '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. #