agent-quality-kit 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +155 -0
- package/kit/docs/ai/agent-harness-playbook.md +596 -0
- package/kit/docs/ai/ai-native-development.md +371 -0
- package/kit/docs/ai/ai-sdlc.md +221 -0
- package/kit/docs/ai/anthropic-ai-native-sdlc-2026-08.md +294 -0
- package/kit/docs/ai/app-owner-strategy.md +921 -0
- package/kit/docs/ai/deep-research-2026-07.md +161 -0
- package/kit/docs/ai/harness-best-practices.md +385 -0
- package/kit/docs/ai/index.md +64 -0
- package/kit/docs/ai/project-baseline.md +261 -0
- package/kit/docs/ai/quality-gates-checklist.md +322 -0
- package/kit/docs/ai/sources-building-with-agents.md +111 -0
- package/kit/docs/ai/stream-2026-08-ai-coding-panel.md +304 -0
- package/kit/docs/ready-made-rules.md +170 -0
- package/kit/gates/README.md +231 -0
- package/kit/gates/_skip.sh +75 -0
- package/kit/gates/commit-explains-itself/README.md +45 -0
- package/kit/gates/commit-explains-itself/check.sh +63 -0
- package/kit/gates/commit-explains-itself/gate.yml +10 -0
- package/kit/gates/commit-explains-itself/green/COMMIT_MSG +6 -0
- package/kit/gates/commit-explains-itself/red/COMMIT_MSG +3 -0
- package/kit/gates/complexity-limit/README.md +37 -0
- package/kit/gates/complexity-limit/check.sh +44 -0
- package/kit/gates/complexity-limit/gate.yml +13 -0
- package/kit/gates/complexity-limit/green/flat.py +10 -0
- package/kit/gates/complexity-limit/red/deep.py +9 -0
- package/kit/gates/dead-code/README.md +30 -0
- package/kit/gates/dead-code/gate.yml +23 -0
- package/kit/gates/dead-code/green/mod.py +9 -0
- package/kit/gates/dead-code/red/mod.py +9 -0
- package/kit/gates/deps-are-pinned/README.md +29 -0
- package/kit/gates/deps-are-pinned/check.sh +49 -0
- package/kit/gates/deps-are-pinned/gate.yml +9 -0
- package/kit/gates/deps-are-pinned/green/nodep-go/go.mod +3 -0
- package/kit/gates/deps-are-pinned/green/package-lock.json +3 -0
- package/kit/gates/deps-are-pinned/green/package.json +4 -0
- package/kit/gates/deps-are-pinned/green/requirements.txt +2 -0
- package/kit/gates/deps-are-pinned/red/package.json +4 -0
- package/kit/gates/deps-are-pinned/red/requirements.txt +2 -0
- package/kit/gates/deps-are-pinned/red/withdep-go/go.mod +5 -0
- package/kit/gates/duplicate-code/README.md +40 -0
- package/kit/gates/duplicate-code/check.sh +58 -0
- package/kit/gates/duplicate-code/gate.yml +12 -0
- package/kit/gates/duplicate-code/green/common.py +9 -0
- package/kit/gates/duplicate-code/green/use.py +9 -0
- package/kit/gates/duplicate-code/red/a.py +12 -0
- package/kit/gates/duplicate-code/red/b.py +12 -0
- package/kit/gates/entry-links-exist/README.md +22 -0
- package/kit/gates/entry-links-exist/check.sh +24 -0
- package/kit/gates/entry-links-exist/gate.yml +16 -0
- package/kit/gates/entry-links-exist/green/AGENTS.md +5 -0
- package/kit/gates/entry-links-exist/green/rules/general.md +3 -0
- package/kit/gates/entry-links-exist/red/AGENTS.md +3 -0
- package/kit/gates/file-size-limit/README.md +22 -0
- package/kit/gates/file-size-limit/check.sh +34 -0
- package/kit/gates/file-size-limit/gate.yml +9 -0
- package/kit/gates/file-size-limit/green/a.py +251 -0
- package/kit/gates/file-size-limit/green/b.py +251 -0
- package/kit/gates/file-size-limit/red/big.py +601 -0
- package/kit/gates/gate-has-samples/README.md +29 -0
- package/kit/gates/gate-has-samples/check.sh +48 -0
- package/kit/gates/gate-has-samples/gate.yml +9 -0
- package/kit/gates/gate-has-samples/green/.aqk.yml +10 -0
- package/kit/gates/gate-has-samples/green/gates/no-print-in-prod/check.sh +2 -0
- package/kit/gates/gate-has-samples/green/gates/no-print-in-prod/green/good.py +2 -0
- package/kit/gates/gate-has-samples/green/gates/no-print-in-prod/red/bad.py +1 -0
- package/kit/gates/gate-has-samples/red/.aqk.yml +10 -0
- package/kit/gates/gate-has-samples/red/gates/no-print-in-prod/check.sh +2 -0
- package/kit/gates/gates-are-runnable/README.md +23 -0
- package/kit/gates/gates-are-runnable/check.sh +35 -0
- package/kit/gates/gates-are-runnable/gate.yml +9 -0
- package/kit/gates/gates-are-runnable/green/.aqk.yml +9 -0
- package/kit/gates/gates-are-runnable/green/checks/lint.sh +2 -0
- package/kit/gates/gates-are-runnable/red/.aqk.yml +6 -0
- package/kit/gates/gates-run-in-ci/README.md +29 -0
- package/kit/gates/gates-run-in-ci/check.sh +42 -0
- package/kit/gates/gates-run-in-ci/gate.yml +12 -0
- package/kit/gates/gates-run-in-ci/green/.aqk.yml +6 -0
- package/kit/gates/gates-run-in-ci/green/.github/workflows/ci.yml +7 -0
- package/kit/gates/gates-run-in-ci/green/checks/lint.sh +2 -0
- package/kit/gates/gates-run-in-ci/red/.aqk.yml +6 -0
- package/kit/gates/gates-run-in-ci/red/.github/workflows/ci.yml +7 -0
- package/kit/gates/gates-run-in-ci/red/checks/lint.sh +2 -0
- package/kit/gates/lesson-has-outcome/README.md +37 -0
- package/kit/gates/lesson-has-outcome/check.sh +50 -0
- package/kit/gates/lesson-has-outcome/gate.yml +11 -0
- package/kit/gates/lesson-has-outcome/green/.aqk.yml +2 -0
- package/kit/gates/lesson-has-outcome/green/incidents/README.md +32 -0
- package/kit/gates/lesson-has-outcome/red/.aqk.yml +2 -0
- package/kit/gates/lesson-has-outcome/red/incidents/README.md +13 -0
- package/kit/gates/no-print-in-prod/README.md +44 -0
- package/kit/gates/no-print-in-prod/check.sh +36 -0
- package/kit/gates/no-print-in-prod/gate.yml +15 -0
- package/kit/gates/no-print-in-prod/green/docs.ts +15 -0
- package/kit/gates/no-print-in-prod/green/legacy.py +9 -0
- package/kit/gates/no-print-in-prod/green/main.go +8 -0
- package/kit/gates/no-print-in-prod/green/main.rs +4 -0
- package/kit/gates/no-print-in-prod/green/service.py +8 -0
- package/kit/gates/no-print-in-prod/red/main.go +8 -0
- package/kit/gates/no-print-in-prod/red/main.rs +4 -0
- package/kit/gates/no-print-in-prod/red/service.py +3 -0
- package/kit/gates/secrets-not-in-code/README.md +29 -0
- package/kit/gates/secrets-not-in-code/check.sh +18 -0
- package/kit/gates/secrets-not-in-code/gate.yml +9 -0
- package/kit/gates/secrets-not-in-code/green/settings.py +4 -0
- package/kit/gates/secrets-not-in-code/red/settings.py +2 -0
- package/kit/gates/swallowed-error/README.md +26 -0
- package/kit/gates/swallowed-error/check.sh +54 -0
- package/kit/gates/swallowed-error/gate.yml +12 -0
- package/kit/gates/swallowed-error/green/loader.py +11 -0
- package/kit/gates/swallowed-error/green/run.js +8 -0
- package/kit/gates/swallowed-error/red/loader.py +5 -0
- package/kit/gates/swallowed-error/red/run.js +3 -0
- package/kit/gates/todo-without-task/README.md +26 -0
- package/kit/gates/todo-without-task/check.sh +19 -0
- package/kit/gates/todo-without-task/gate.yml +12 -0
- package/kit/gates/todo-without-task/green/order.py +9 -0
- package/kit/gates/todo-without-task/red/order.py +8 -0
- package/kit/ratchet/ratchet.sh +62 -0
- package/kit/rules/general.md +55 -0
- package/kit/rules/security.md +33 -0
- package/kit/rules/testing.md +46 -0
- package/package.json +41 -0
- package/tool/commands/doctor.mjs +230 -0
- package/tool/commands/gates.mjs +445 -0
- package/tool/commands/project.mjs +316 -0
- package/tool/lib/core.mjs +98 -0
- package/tool/lib/manifest.mjs +140 -0
- package/tool/lib/repo.mjs +270 -0
- package/tool/lib/templates.mjs +187 -0
- package/tool/program.mjs +81 -0
- package/tool/selfcheck/conditional.sh +24 -0
- package/tool/selfcheck/gates.sh +127 -0
- package/tool/selfcheck/smoke.sh +539 -0
- package/tool/selfcheck/syntax.sh +23 -0
- package/tool/selfcheck/units.mjs +105 -0
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
def f():
|
|
2
|
+
x = 1
|
|
3
|
+
x = 1
|
|
4
|
+
x = 1
|
|
5
|
+
x = 1
|
|
6
|
+
x = 1
|
|
7
|
+
x = 1
|
|
8
|
+
x = 1
|
|
9
|
+
x = 1
|
|
10
|
+
x = 1
|
|
11
|
+
x = 1
|
|
12
|
+
x = 1
|
|
13
|
+
x = 1
|
|
14
|
+
x = 1
|
|
15
|
+
x = 1
|
|
16
|
+
x = 1
|
|
17
|
+
x = 1
|
|
18
|
+
x = 1
|
|
19
|
+
x = 1
|
|
20
|
+
x = 1
|
|
21
|
+
x = 1
|
|
22
|
+
x = 1
|
|
23
|
+
x = 1
|
|
24
|
+
x = 1
|
|
25
|
+
x = 1
|
|
26
|
+
x = 1
|
|
27
|
+
x = 1
|
|
28
|
+
x = 1
|
|
29
|
+
x = 1
|
|
30
|
+
x = 1
|
|
31
|
+
x = 1
|
|
32
|
+
x = 1
|
|
33
|
+
x = 1
|
|
34
|
+
x = 1
|
|
35
|
+
x = 1
|
|
36
|
+
x = 1
|
|
37
|
+
x = 1
|
|
38
|
+
x = 1
|
|
39
|
+
x = 1
|
|
40
|
+
x = 1
|
|
41
|
+
x = 1
|
|
42
|
+
x = 1
|
|
43
|
+
x = 1
|
|
44
|
+
x = 1
|
|
45
|
+
x = 1
|
|
46
|
+
x = 1
|
|
47
|
+
x = 1
|
|
48
|
+
x = 1
|
|
49
|
+
x = 1
|
|
50
|
+
x = 1
|
|
51
|
+
x = 1
|
|
52
|
+
x = 1
|
|
53
|
+
x = 1
|
|
54
|
+
x = 1
|
|
55
|
+
x = 1
|
|
56
|
+
x = 1
|
|
57
|
+
x = 1
|
|
58
|
+
x = 1
|
|
59
|
+
x = 1
|
|
60
|
+
x = 1
|
|
61
|
+
x = 1
|
|
62
|
+
x = 1
|
|
63
|
+
x = 1
|
|
64
|
+
x = 1
|
|
65
|
+
x = 1
|
|
66
|
+
x = 1
|
|
67
|
+
x = 1
|
|
68
|
+
x = 1
|
|
69
|
+
x = 1
|
|
70
|
+
x = 1
|
|
71
|
+
x = 1
|
|
72
|
+
x = 1
|
|
73
|
+
x = 1
|
|
74
|
+
x = 1
|
|
75
|
+
x = 1
|
|
76
|
+
x = 1
|
|
77
|
+
x = 1
|
|
78
|
+
x = 1
|
|
79
|
+
x = 1
|
|
80
|
+
x = 1
|
|
81
|
+
x = 1
|
|
82
|
+
x = 1
|
|
83
|
+
x = 1
|
|
84
|
+
x = 1
|
|
85
|
+
x = 1
|
|
86
|
+
x = 1
|
|
87
|
+
x = 1
|
|
88
|
+
x = 1
|
|
89
|
+
x = 1
|
|
90
|
+
x = 1
|
|
91
|
+
x = 1
|
|
92
|
+
x = 1
|
|
93
|
+
x = 1
|
|
94
|
+
x = 1
|
|
95
|
+
x = 1
|
|
96
|
+
x = 1
|
|
97
|
+
x = 1
|
|
98
|
+
x = 1
|
|
99
|
+
x = 1
|
|
100
|
+
x = 1
|
|
101
|
+
x = 1
|
|
102
|
+
x = 1
|
|
103
|
+
x = 1
|
|
104
|
+
x = 1
|
|
105
|
+
x = 1
|
|
106
|
+
x = 1
|
|
107
|
+
x = 1
|
|
108
|
+
x = 1
|
|
109
|
+
x = 1
|
|
110
|
+
x = 1
|
|
111
|
+
x = 1
|
|
112
|
+
x = 1
|
|
113
|
+
x = 1
|
|
114
|
+
x = 1
|
|
115
|
+
x = 1
|
|
116
|
+
x = 1
|
|
117
|
+
x = 1
|
|
118
|
+
x = 1
|
|
119
|
+
x = 1
|
|
120
|
+
x = 1
|
|
121
|
+
x = 1
|
|
122
|
+
x = 1
|
|
123
|
+
x = 1
|
|
124
|
+
x = 1
|
|
125
|
+
x = 1
|
|
126
|
+
x = 1
|
|
127
|
+
x = 1
|
|
128
|
+
x = 1
|
|
129
|
+
x = 1
|
|
130
|
+
x = 1
|
|
131
|
+
x = 1
|
|
132
|
+
x = 1
|
|
133
|
+
x = 1
|
|
134
|
+
x = 1
|
|
135
|
+
x = 1
|
|
136
|
+
x = 1
|
|
137
|
+
x = 1
|
|
138
|
+
x = 1
|
|
139
|
+
x = 1
|
|
140
|
+
x = 1
|
|
141
|
+
x = 1
|
|
142
|
+
x = 1
|
|
143
|
+
x = 1
|
|
144
|
+
x = 1
|
|
145
|
+
x = 1
|
|
146
|
+
x = 1
|
|
147
|
+
x = 1
|
|
148
|
+
x = 1
|
|
149
|
+
x = 1
|
|
150
|
+
x = 1
|
|
151
|
+
x = 1
|
|
152
|
+
x = 1
|
|
153
|
+
x = 1
|
|
154
|
+
x = 1
|
|
155
|
+
x = 1
|
|
156
|
+
x = 1
|
|
157
|
+
x = 1
|
|
158
|
+
x = 1
|
|
159
|
+
x = 1
|
|
160
|
+
x = 1
|
|
161
|
+
x = 1
|
|
162
|
+
x = 1
|
|
163
|
+
x = 1
|
|
164
|
+
x = 1
|
|
165
|
+
x = 1
|
|
166
|
+
x = 1
|
|
167
|
+
x = 1
|
|
168
|
+
x = 1
|
|
169
|
+
x = 1
|
|
170
|
+
x = 1
|
|
171
|
+
x = 1
|
|
172
|
+
x = 1
|
|
173
|
+
x = 1
|
|
174
|
+
x = 1
|
|
175
|
+
x = 1
|
|
176
|
+
x = 1
|
|
177
|
+
x = 1
|
|
178
|
+
x = 1
|
|
179
|
+
x = 1
|
|
180
|
+
x = 1
|
|
181
|
+
x = 1
|
|
182
|
+
x = 1
|
|
183
|
+
x = 1
|
|
184
|
+
x = 1
|
|
185
|
+
x = 1
|
|
186
|
+
x = 1
|
|
187
|
+
x = 1
|
|
188
|
+
x = 1
|
|
189
|
+
x = 1
|
|
190
|
+
x = 1
|
|
191
|
+
x = 1
|
|
192
|
+
x = 1
|
|
193
|
+
x = 1
|
|
194
|
+
x = 1
|
|
195
|
+
x = 1
|
|
196
|
+
x = 1
|
|
197
|
+
x = 1
|
|
198
|
+
x = 1
|
|
199
|
+
x = 1
|
|
200
|
+
x = 1
|
|
201
|
+
x = 1
|
|
202
|
+
x = 1
|
|
203
|
+
x = 1
|
|
204
|
+
x = 1
|
|
205
|
+
x = 1
|
|
206
|
+
x = 1
|
|
207
|
+
x = 1
|
|
208
|
+
x = 1
|
|
209
|
+
x = 1
|
|
210
|
+
x = 1
|
|
211
|
+
x = 1
|
|
212
|
+
x = 1
|
|
213
|
+
x = 1
|
|
214
|
+
x = 1
|
|
215
|
+
x = 1
|
|
216
|
+
x = 1
|
|
217
|
+
x = 1
|
|
218
|
+
x = 1
|
|
219
|
+
x = 1
|
|
220
|
+
x = 1
|
|
221
|
+
x = 1
|
|
222
|
+
x = 1
|
|
223
|
+
x = 1
|
|
224
|
+
x = 1
|
|
225
|
+
x = 1
|
|
226
|
+
x = 1
|
|
227
|
+
x = 1
|
|
228
|
+
x = 1
|
|
229
|
+
x = 1
|
|
230
|
+
x = 1
|
|
231
|
+
x = 1
|
|
232
|
+
x = 1
|
|
233
|
+
x = 1
|
|
234
|
+
x = 1
|
|
235
|
+
x = 1
|
|
236
|
+
x = 1
|
|
237
|
+
x = 1
|
|
238
|
+
x = 1
|
|
239
|
+
x = 1
|
|
240
|
+
x = 1
|
|
241
|
+
x = 1
|
|
242
|
+
x = 1
|
|
243
|
+
x = 1
|
|
244
|
+
x = 1
|
|
245
|
+
x = 1
|
|
246
|
+
x = 1
|
|
247
|
+
x = 1
|
|
248
|
+
x = 1
|
|
249
|
+
x = 1
|
|
250
|
+
x = 1
|
|
251
|
+
x = 1
|
|
252
|
+
x = 1
|
|
253
|
+
x = 1
|
|
254
|
+
x = 1
|
|
255
|
+
x = 1
|
|
256
|
+
x = 1
|
|
257
|
+
x = 1
|
|
258
|
+
x = 1
|
|
259
|
+
x = 1
|
|
260
|
+
x = 1
|
|
261
|
+
x = 1
|
|
262
|
+
x = 1
|
|
263
|
+
x = 1
|
|
264
|
+
x = 1
|
|
265
|
+
x = 1
|
|
266
|
+
x = 1
|
|
267
|
+
x = 1
|
|
268
|
+
x = 1
|
|
269
|
+
x = 1
|
|
270
|
+
x = 1
|
|
271
|
+
x = 1
|
|
272
|
+
x = 1
|
|
273
|
+
x = 1
|
|
274
|
+
x = 1
|
|
275
|
+
x = 1
|
|
276
|
+
x = 1
|
|
277
|
+
x = 1
|
|
278
|
+
x = 1
|
|
279
|
+
x = 1
|
|
280
|
+
x = 1
|
|
281
|
+
x = 1
|
|
282
|
+
x = 1
|
|
283
|
+
x = 1
|
|
284
|
+
x = 1
|
|
285
|
+
x = 1
|
|
286
|
+
x = 1
|
|
287
|
+
x = 1
|
|
288
|
+
x = 1
|
|
289
|
+
x = 1
|
|
290
|
+
x = 1
|
|
291
|
+
x = 1
|
|
292
|
+
x = 1
|
|
293
|
+
x = 1
|
|
294
|
+
x = 1
|
|
295
|
+
x = 1
|
|
296
|
+
x = 1
|
|
297
|
+
x = 1
|
|
298
|
+
x = 1
|
|
299
|
+
x = 1
|
|
300
|
+
x = 1
|
|
301
|
+
x = 1
|
|
302
|
+
x = 1
|
|
303
|
+
x = 1
|
|
304
|
+
x = 1
|
|
305
|
+
x = 1
|
|
306
|
+
x = 1
|
|
307
|
+
x = 1
|
|
308
|
+
x = 1
|
|
309
|
+
x = 1
|
|
310
|
+
x = 1
|
|
311
|
+
x = 1
|
|
312
|
+
x = 1
|
|
313
|
+
x = 1
|
|
314
|
+
x = 1
|
|
315
|
+
x = 1
|
|
316
|
+
x = 1
|
|
317
|
+
x = 1
|
|
318
|
+
x = 1
|
|
319
|
+
x = 1
|
|
320
|
+
x = 1
|
|
321
|
+
x = 1
|
|
322
|
+
x = 1
|
|
323
|
+
x = 1
|
|
324
|
+
x = 1
|
|
325
|
+
x = 1
|
|
326
|
+
x = 1
|
|
327
|
+
x = 1
|
|
328
|
+
x = 1
|
|
329
|
+
x = 1
|
|
330
|
+
x = 1
|
|
331
|
+
x = 1
|
|
332
|
+
x = 1
|
|
333
|
+
x = 1
|
|
334
|
+
x = 1
|
|
335
|
+
x = 1
|
|
336
|
+
x = 1
|
|
337
|
+
x = 1
|
|
338
|
+
x = 1
|
|
339
|
+
x = 1
|
|
340
|
+
x = 1
|
|
341
|
+
x = 1
|
|
342
|
+
x = 1
|
|
343
|
+
x = 1
|
|
344
|
+
x = 1
|
|
345
|
+
x = 1
|
|
346
|
+
x = 1
|
|
347
|
+
x = 1
|
|
348
|
+
x = 1
|
|
349
|
+
x = 1
|
|
350
|
+
x = 1
|
|
351
|
+
x = 1
|
|
352
|
+
x = 1
|
|
353
|
+
x = 1
|
|
354
|
+
x = 1
|
|
355
|
+
x = 1
|
|
356
|
+
x = 1
|
|
357
|
+
x = 1
|
|
358
|
+
x = 1
|
|
359
|
+
x = 1
|
|
360
|
+
x = 1
|
|
361
|
+
x = 1
|
|
362
|
+
x = 1
|
|
363
|
+
x = 1
|
|
364
|
+
x = 1
|
|
365
|
+
x = 1
|
|
366
|
+
x = 1
|
|
367
|
+
x = 1
|
|
368
|
+
x = 1
|
|
369
|
+
x = 1
|
|
370
|
+
x = 1
|
|
371
|
+
x = 1
|
|
372
|
+
x = 1
|
|
373
|
+
x = 1
|
|
374
|
+
x = 1
|
|
375
|
+
x = 1
|
|
376
|
+
x = 1
|
|
377
|
+
x = 1
|
|
378
|
+
x = 1
|
|
379
|
+
x = 1
|
|
380
|
+
x = 1
|
|
381
|
+
x = 1
|
|
382
|
+
x = 1
|
|
383
|
+
x = 1
|
|
384
|
+
x = 1
|
|
385
|
+
x = 1
|
|
386
|
+
x = 1
|
|
387
|
+
x = 1
|
|
388
|
+
x = 1
|
|
389
|
+
x = 1
|
|
390
|
+
x = 1
|
|
391
|
+
x = 1
|
|
392
|
+
x = 1
|
|
393
|
+
x = 1
|
|
394
|
+
x = 1
|
|
395
|
+
x = 1
|
|
396
|
+
x = 1
|
|
397
|
+
x = 1
|
|
398
|
+
x = 1
|
|
399
|
+
x = 1
|
|
400
|
+
x = 1
|
|
401
|
+
x = 1
|
|
402
|
+
x = 1
|
|
403
|
+
x = 1
|
|
404
|
+
x = 1
|
|
405
|
+
x = 1
|
|
406
|
+
x = 1
|
|
407
|
+
x = 1
|
|
408
|
+
x = 1
|
|
409
|
+
x = 1
|
|
410
|
+
x = 1
|
|
411
|
+
x = 1
|
|
412
|
+
x = 1
|
|
413
|
+
x = 1
|
|
414
|
+
x = 1
|
|
415
|
+
x = 1
|
|
416
|
+
x = 1
|
|
417
|
+
x = 1
|
|
418
|
+
x = 1
|
|
419
|
+
x = 1
|
|
420
|
+
x = 1
|
|
421
|
+
x = 1
|
|
422
|
+
x = 1
|
|
423
|
+
x = 1
|
|
424
|
+
x = 1
|
|
425
|
+
x = 1
|
|
426
|
+
x = 1
|
|
427
|
+
x = 1
|
|
428
|
+
x = 1
|
|
429
|
+
x = 1
|
|
430
|
+
x = 1
|
|
431
|
+
x = 1
|
|
432
|
+
x = 1
|
|
433
|
+
x = 1
|
|
434
|
+
x = 1
|
|
435
|
+
x = 1
|
|
436
|
+
x = 1
|
|
437
|
+
x = 1
|
|
438
|
+
x = 1
|
|
439
|
+
x = 1
|
|
440
|
+
x = 1
|
|
441
|
+
x = 1
|
|
442
|
+
x = 1
|
|
443
|
+
x = 1
|
|
444
|
+
x = 1
|
|
445
|
+
x = 1
|
|
446
|
+
x = 1
|
|
447
|
+
x = 1
|
|
448
|
+
x = 1
|
|
449
|
+
x = 1
|
|
450
|
+
x = 1
|
|
451
|
+
x = 1
|
|
452
|
+
x = 1
|
|
453
|
+
x = 1
|
|
454
|
+
x = 1
|
|
455
|
+
x = 1
|
|
456
|
+
x = 1
|
|
457
|
+
x = 1
|
|
458
|
+
x = 1
|
|
459
|
+
x = 1
|
|
460
|
+
x = 1
|
|
461
|
+
x = 1
|
|
462
|
+
x = 1
|
|
463
|
+
x = 1
|
|
464
|
+
x = 1
|
|
465
|
+
x = 1
|
|
466
|
+
x = 1
|
|
467
|
+
x = 1
|
|
468
|
+
x = 1
|
|
469
|
+
x = 1
|
|
470
|
+
x = 1
|
|
471
|
+
x = 1
|
|
472
|
+
x = 1
|
|
473
|
+
x = 1
|
|
474
|
+
x = 1
|
|
475
|
+
x = 1
|
|
476
|
+
x = 1
|
|
477
|
+
x = 1
|
|
478
|
+
x = 1
|
|
479
|
+
x = 1
|
|
480
|
+
x = 1
|
|
481
|
+
x = 1
|
|
482
|
+
x = 1
|
|
483
|
+
x = 1
|
|
484
|
+
x = 1
|
|
485
|
+
x = 1
|
|
486
|
+
x = 1
|
|
487
|
+
x = 1
|
|
488
|
+
x = 1
|
|
489
|
+
x = 1
|
|
490
|
+
x = 1
|
|
491
|
+
x = 1
|
|
492
|
+
x = 1
|
|
493
|
+
x = 1
|
|
494
|
+
x = 1
|
|
495
|
+
x = 1
|
|
496
|
+
x = 1
|
|
497
|
+
x = 1
|
|
498
|
+
x = 1
|
|
499
|
+
x = 1
|
|
500
|
+
x = 1
|
|
501
|
+
x = 1
|
|
502
|
+
x = 1
|
|
503
|
+
x = 1
|
|
504
|
+
x = 1
|
|
505
|
+
x = 1
|
|
506
|
+
x = 1
|
|
507
|
+
x = 1
|
|
508
|
+
x = 1
|
|
509
|
+
x = 1
|
|
510
|
+
x = 1
|
|
511
|
+
x = 1
|
|
512
|
+
x = 1
|
|
513
|
+
x = 1
|
|
514
|
+
x = 1
|
|
515
|
+
x = 1
|
|
516
|
+
x = 1
|
|
517
|
+
x = 1
|
|
518
|
+
x = 1
|
|
519
|
+
x = 1
|
|
520
|
+
x = 1
|
|
521
|
+
x = 1
|
|
522
|
+
x = 1
|
|
523
|
+
x = 1
|
|
524
|
+
x = 1
|
|
525
|
+
x = 1
|
|
526
|
+
x = 1
|
|
527
|
+
x = 1
|
|
528
|
+
x = 1
|
|
529
|
+
x = 1
|
|
530
|
+
x = 1
|
|
531
|
+
x = 1
|
|
532
|
+
x = 1
|
|
533
|
+
x = 1
|
|
534
|
+
x = 1
|
|
535
|
+
x = 1
|
|
536
|
+
x = 1
|
|
537
|
+
x = 1
|
|
538
|
+
x = 1
|
|
539
|
+
x = 1
|
|
540
|
+
x = 1
|
|
541
|
+
x = 1
|
|
542
|
+
x = 1
|
|
543
|
+
x = 1
|
|
544
|
+
x = 1
|
|
545
|
+
x = 1
|
|
546
|
+
x = 1
|
|
547
|
+
x = 1
|
|
548
|
+
x = 1
|
|
549
|
+
x = 1
|
|
550
|
+
x = 1
|
|
551
|
+
x = 1
|
|
552
|
+
x = 1
|
|
553
|
+
x = 1
|
|
554
|
+
x = 1
|
|
555
|
+
x = 1
|
|
556
|
+
x = 1
|
|
557
|
+
x = 1
|
|
558
|
+
x = 1
|
|
559
|
+
x = 1
|
|
560
|
+
x = 1
|
|
561
|
+
x = 1
|
|
562
|
+
x = 1
|
|
563
|
+
x = 1
|
|
564
|
+
x = 1
|
|
565
|
+
x = 1
|
|
566
|
+
x = 1
|
|
567
|
+
x = 1
|
|
568
|
+
x = 1
|
|
569
|
+
x = 1
|
|
570
|
+
x = 1
|
|
571
|
+
x = 1
|
|
572
|
+
x = 1
|
|
573
|
+
x = 1
|
|
574
|
+
x = 1
|
|
575
|
+
x = 1
|
|
576
|
+
x = 1
|
|
577
|
+
x = 1
|
|
578
|
+
x = 1
|
|
579
|
+
x = 1
|
|
580
|
+
x = 1
|
|
581
|
+
x = 1
|
|
582
|
+
x = 1
|
|
583
|
+
x = 1
|
|
584
|
+
x = 1
|
|
585
|
+
x = 1
|
|
586
|
+
x = 1
|
|
587
|
+
x = 1
|
|
588
|
+
x = 1
|
|
589
|
+
x = 1
|
|
590
|
+
x = 1
|
|
591
|
+
x = 1
|
|
592
|
+
x = 1
|
|
593
|
+
x = 1
|
|
594
|
+
x = 1
|
|
595
|
+
x = 1
|
|
596
|
+
x = 1
|
|
597
|
+
x = 1
|
|
598
|
+
x = 1
|
|
599
|
+
x = 1
|
|
600
|
+
x = 1
|
|
601
|
+
x = 1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# У каждого гейта есть красный и зелёный образец
|
|
2
|
+
|
|
3
|
+
**Намерение.** Гейт, который никогда не проверяли, — это не гейт, а надежда.
|
|
4
|
+
|
|
5
|
+
**Какой отказ это поймало.** В `audit_project` правило статического анализа запрещало создавать
|
|
6
|
+
десятичное число из числа с плавающей точкой и предписывало писать строкой — и при этом краснело
|
|
7
|
+
на правильном написании строкой, причём не всегда, а в зависимости от соседнего кода в файле.
|
|
8
|
+
Красный конвейер, полчаса на локализацию, круг конвейера 15–18 минут.
|
|
9
|
+
Запись в журнале: `incidents/README.md`, 2026-08-24.
|
|
10
|
+
|
|
11
|
+
**Зелёный образец важнее красного.** Что гейт ловит брак, обычно проверяют при установке. Что он
|
|
12
|
+
молчит на исправном коде — не проверяют почти никогда. Именно этот пропуск и стоил времени: гейт
|
|
13
|
+
ругался на то написание, которое сам же предписывал.
|
|
14
|
+
|
|
15
|
+
**Что именно требует образцы.** Только записи-сканеры: те, чья команда запускает проверку из
|
|
16
|
+
каталога образцов. У прогона с собственным арбитром — `pytest`, `node --test`, `go test` —
|
|
17
|
+
образцы уже внутри него.
|
|
18
|
+
|
|
19
|
+
**Чего НЕ ловит.** Прогон, который в каталог не ссылается, эта запись не проверяет вовсе:
|
|
20
|
+
`tests: "echo ok"` проедет. Что арбитр настоящий, показывает только красный прогон — сломай
|
|
21
|
+
проверяемое и убедись, что конвейер краснеет.
|
|
22
|
+
|
|
23
|
+
**Готового аналога нет.** Проверено: правило «у проверки должен быть образец, на котором она
|
|
24
|
+
краснеет» — про устройство самой оснастки, а не про язык. Ни `ruff`, ни `eslint`, ни `semgrep`
|
|
25
|
+
таких правил не содержат: они проверяют код, а не проверки.
|
|
26
|
+
|
|
27
|
+
**Образцы.** `red/` — объявлен свой гейт-сканер, папок `red/` и `green/` у него нет; рядом
|
|
28
|
+
`tests: "pytest -q"`, который образцов не требует и в счёт не идёт. `green/` — тот же манифест,
|
|
29
|
+
образцы на месте.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
# Гейт без образцов — непроверенное утверждение. Красный образец доказывает, что гейт ловит
|
|
3
|
+
# брак; зелёный — что он молчит на исправном коде. Зелёный важнее: именно он ловит гейт,
|
|
4
|
+
# который ругается на предписанное им же написание.
|
|
5
|
+
#
|
|
6
|
+
# ЧТО ИМЕННО ТРЕБУЕТ ОБРАЗЦЫ. Только записи-сканеры: те, чья команда запускает проверку из
|
|
7
|
+
# каталога образцов. У прогона с собственным арбитром — `pytest`, `node --test`, `go test` —
|
|
8
|
+
# образцы уже внутри него, и требовать их отдельно значит требовать работу, которой нет.
|
|
9
|
+
# Первая редакция этого не различала и записала долгом четыре собственных прогона комплекта:
|
|
10
|
+
# проверка мерила не то, что называла.
|
|
11
|
+
#
|
|
12
|
+
# ЧЕГО НЕ ЛОВИТ. Прогон, объявленный в манифесте и не ссылающийся на каталог, этой записью не
|
|
13
|
+
# проверяется вовсе. Что его арбитр настоящий, а не `echo ok`, показывает только красный прогон:
|
|
14
|
+
# сломай проверяемое — конвейер обязан покраснеть.
|
|
15
|
+
DIR="${1:-.}"
|
|
16
|
+
MAN="$DIR/.aqk.yml"
|
|
17
|
+
[ -f "$MAN" ] || { echo "нет .aqk.yml — проверять нечего"; exit 0; }
|
|
18
|
+
|
|
19
|
+
SAMPLES=$(sed -n 's/^samples:[[:space:]]*"\{0,1\}\([^"#]*\)"\{0,1\}[[:space:]]*$/\1/p' "$MAN" | head -1)
|
|
20
|
+
KEYS=$(awk '/^gates:/{g=1;next} /^[A-Za-z]/{g=0} g && /^[[:space:]]+[A-Za-z0-9_-]+:/{sub(/:.*/,"");gsub(/[[:space:]]/,"");print}' "$MAN")
|
|
21
|
+
|
|
22
|
+
[ -z "$KEYS" ] && { echo "гейтов не объявлено — проверять нечего"; exit 0; }
|
|
23
|
+
|
|
24
|
+
if [ -z "$SAMPLES" ]; then
|
|
25
|
+
# Без каталога образцов проверить нечего ни у одной записи. Одно сообщение, а не по одному
|
|
26
|
+
# на гейт: дефект здесь один, и он в манифесте.
|
|
27
|
+
echo "в .aqk.yml не заполнено поле samples — образцы искать негде"
|
|
28
|
+
echo " почини: заведи каталог образцов и укажи его в samples"
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
BAD=0
|
|
33
|
+
for K in $KEYS; do
|
|
34
|
+
# Команда записи целиком — по ней видно, сканер это или собственный прогон проекта.
|
|
35
|
+
CMD=$(awk -v k="$K" '/^gates:/{g=1;next} /^[A-Za-z]/{g=0} g && $0 ~ "^[[:space:]]+" k ":" {sub(/^[[:space:]]*[A-Za-z0-9_-]+:[[:space:]]*/,"");gsub(/^"|"$/,"");print;exit}' "$MAN")
|
|
36
|
+
case "$CMD" in
|
|
37
|
+
*"$SAMPLES/"*) ;; # сканер из каталога — образцы обязательны
|
|
38
|
+
*) continue ;; # свой прогон — арбитр внутри него
|
|
39
|
+
esac
|
|
40
|
+
for KIND in red green; do
|
|
41
|
+
if [ ! -d "$DIR/$SAMPLES/$K/$KIND" ]; then
|
|
42
|
+
echo "гейт «$K»: нет образца $KIND ($SAMPLES/$K/$KIND)"
|
|
43
|
+
echo " почини: положи код, на котором гейт обязан $( [ $KIND = red ] && echo краснеть || echo молчать )"
|
|
44
|
+
BAD=1
|
|
45
|
+
fi
|
|
46
|
+
done
|
|
47
|
+
done
|
|
48
|
+
exit $BAD
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
aqk: 1
|
|
2
|
+
entry:
|
|
3
|
+
- AGENTS.md
|
|
4
|
+
rules: rules
|
|
5
|
+
gates:
|
|
6
|
+
# Свой гейт: сканирует проект, значит обязан показать красный и зелёный образец.
|
|
7
|
+
no-print-in-prod: "bash gates/no-print-in-prod/check.sh ."
|
|
8
|
+
# Прогон с собственным арбитром — образцов не требует и в счёт не идёт.
|
|
9
|
+
tests: "pytest -q"
|
|
10
|
+
samples: gates
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
print("отладка")
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
aqk: 1
|
|
2
|
+
entry:
|
|
3
|
+
- AGENTS.md
|
|
4
|
+
rules: rules
|
|
5
|
+
gates:
|
|
6
|
+
# Свой гейт: сканирует проект, значит обязан показать красный и зелёный образец.
|
|
7
|
+
no-print-in-prod: "bash gates/no-print-in-prod/check.sh ."
|
|
8
|
+
# Прогон с собственным арбитром — образцов не требует и в счёт не идёт.
|
|
9
|
+
tests: "pytest -q"
|
|
10
|
+
samples: gates
|