55# Validates that the repo uses hyperpolymath's own formats and tools.
66# Companion to static-analysis-gate.yml (security) — this is for format compliance.
77name : Dogfood Gate
8-
98on :
109 pull_request :
1110 branches : ['**']
1211 push :
1312 branches : [main, master]
14-
1513permissions :
1614 contents : read
17-
1815jobs :
1916 # ---------------------------------------------------------------------------
2017 # Job 1: A2ML manifest validation
2320 name : Validate A2ML manifests
2421 runs-on : ubuntu-latest
2522 timeout-minutes : 15
26-
2723 steps :
2824 - name : Checkout repository
2925 uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
30-
3126 - name : Check for A2ML files
3227 id : detect
3328 run : |
@@ -36,14 +31,12 @@ jobs:
3631 if [ "$COUNT" -eq 0 ]; then
3732 echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml"
3833 fi
39-
4034 - name : Validate A2ML manifests
4135 if : steps.detect.outputs.count > 0
4236 uses : hyperpolymath/a2ml-validate-action@59145c7d1039fa3059b3ecacdb50ee23d7505898 # main
4337 with :
4438 path : ' .'
4539 strict : ' false'
46-
4740 - name : Write summary
4841 run : |
4942 A2ML_COUNT="${{ steps.detect.outputs.count }}"
@@ -60,19 +53,16 @@ jobs:
6053 echo "" >> "$GITHUB_STEP_SUMMARY"
6154 echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY"
6255 fi
63-
6456 # ---------------------------------------------------------------------------
6557 # Job 2: K9 contract validation
6658 # ---------------------------------------------------------------------------
6759 k9-validate :
6860 name : Validate K9 contracts
6961 runs-on : ubuntu-latest
7062 timeout-minutes : 15
71-
7263 steps :
7364 - name : Checkout repository
7465 uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
75-
7666 - name : Check for K9 files
7767 id : detect
7868 run : |
@@ -85,14 +75,12 @@ jobs:
8575 if [ "$COUNT" -eq 0 ] && [ "$CONFIG_COUNT" -gt 0 ]; then
8676 echo "::warning::Found $CONFIG_COUNT config files but no K9 contracts. Run k9iser to generate contracts."
8777 fi
88-
8978 - name : Validate K9 contracts
9079 if : steps.detect.outputs.k9_count > 0
9180 uses : hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main
9281 with :
9382 path : ' .'
9483 strict : ' false'
95-
9684 - name : Write summary
9785 run : |
9886 K9_COUNT="${{ steps.detect.outputs.k9_count }}"
@@ -110,19 +98,16 @@ jobs:
11098 echo "" >> "$GITHUB_STEP_SUMMARY"
11199 echo "Validated **${K9_COUNT}** K9 contract(s) against **${CFG_COUNT}** config file(s)." >> "$GITHUB_STEP_SUMMARY"
112100 fi
113-
114101 # ---------------------------------------------------------------------------
115102 # Job 3: Empty-linter — invisible character detection
116103 # ---------------------------------------------------------------------------
117104 empty-lint :
118105 name : Empty-linter (invisible characters)
119106 runs-on : ubuntu-latest
120107 timeout-minutes : 15
121-
122108 steps :
123109 - name : Checkout repository
124110 uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
125-
126111 - name : Scan for invisible characters
127112 id : lint
128113 run : |
@@ -156,7 +141,6 @@ jobs:
156141 REL_PATH="${filepath#$GITHUB_WORKSPACE/}"
157142 echo "::warning file=${REL_PATH}::Invisible Unicode characters detected (zero-width space, BOM, NBSP, etc.)"
158143 done < /tmp/empty-lint-results.txt
159-
160144 - name : Write summary
161145 run : |
162146 if [ "${{ steps.lint.outputs.ready }}" = "true" ]; then
@@ -175,19 +159,16 @@ jobs:
175159 echo "" >> "$GITHUB_STEP_SUMMARY"
176160 echo "Skipped: empty-linter not available." >> "$GITHUB_STEP_SUMMARY"
177161 fi
178-
179162 # ---------------------------------------------------------------------------
180163 # Job 4: Groove manifest check (for repos that should expose services)
181164 # ---------------------------------------------------------------------------
182165 groove-check :
183166 name : Groove manifest check
184167 runs-on : ubuntu-latest
185168 timeout-minutes : 15
186-
187169 steps :
188170 - name : Checkout repository
189171 uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
190-
191172 - name : Check for Groove manifest
192173 id : groove
193174 run : |
@@ -224,7 +205,6 @@ jobs:
224205 if [ "$HAS_SERVER" = "true" ] && [ "$HAS_MANIFEST" = "false" ] && [ "$HAS_GROOVE_CODE" = "false" ]; then
225206 echo "::warning::This repo has server code but no Groove endpoint. Add .well-known/groove/manifest.json for service discovery."
226207 fi
227-
228208 - name : Write summary
229209 run : |
230210 echo "## Groove Protocol Check" >> "$GITHUB_STEP_SUMMARY"
@@ -234,7 +214,6 @@ jobs:
234214 echo "| Static manifest (.well-known/groove/manifest.json) | ${{ steps.groove.outputs.has_manifest }} |" >> "$GITHUB_STEP_SUMMARY"
235215 echo "| Groove endpoint in code | ${{ steps.groove.outputs.has_groove_code }} |" >> "$GITHUB_STEP_SUMMARY"
236216 echo "| Has HTTP server code | ${{ steps.groove.outputs.has_server }} |" >> "$GITHUB_STEP_SUMMARY"
237-
238217 # ---------------------------------------------------------------------------
239218 # Job 5: Dogfooding summary
240219 # ---------------------------------------------------------------------------
@@ -244,11 +223,9 @@ jobs:
244223 timeout-minutes : 15
245224 needs : [a2ml-validate, k9-validate, empty-lint, groove-check]
246225 if : always()
247-
248226 steps :
249227 - name : Checkout repository
250228 uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
251-
252229 - name : Generate dogfooding scorecard
253230 run : |
254231 SCORE=0
@@ -311,4 +288,3 @@ jobs:
311288 *Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.*
312289 *Dogfooding is guinea pig fooding — we test our tools on ourselves.*
313290 EOF
314-
0 commit comments