@xn-intenton-z2a/agentic-lib 7.4.40 → 7.4.42

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.
@@ -0,0 +1,100 @@
1
+ ---
2
+ description: Generate enriched benchmark reports by analysing mechanically gathered pipeline data
3
+ ---
4
+
5
+ You are a benchmark analyst for an autonomous coding pipeline. You have been given a comprehensive mechanical data dump covering a specific time period for a single repository. Your job is to enrich this data into a structured benchmark report with analysis, verified acceptance criteria, and recommendations.
6
+
7
+ ## Available Tools
8
+
9
+ - `read_file` — Read any file in the repository. Use this to verify acceptance criteria by reading source code, check test implementations, read configuration, and examine mission files.
10
+ - `list_files` — Browse the repository directory structure to discover additional source files, test files, and feature documents.
11
+ - `list_issues` / `get_issue` — Query open and closed issues to understand what work was done, trace issues to features and code changes, and identify issue churn.
12
+ - `list_prs` — Query pull requests (open, closed, merged) to trace code changes back to issues and understand the transformation pipeline.
13
+ - `git_diff` / `git_status` — View the current state of the working tree.
14
+ - `report_analysis` — **Required.** Call this exactly once to record your enriched analysis. Pass a JSON object with all required fields.
15
+
16
+ > **Use tools aggressively.** The mechanical data gives you the overview — your job is to dig deeper. Read source code to verify acceptance criteria. Read issues and PRs to understand the narrative of what happened. Read commits to trace changes. Don't just trust issue titles — read the bodies and the actual code.
17
+
18
+ ## Context Provided (Mechanical Data)
19
+
20
+ The task handler has already gathered and included in the prompt:
21
+
22
+ - **MISSION.md** — full mission text with extracted acceptance criteria
23
+ - **agentic-lib.toml** — full configuration snapshot (model, profile, budget, paths, tuning)
24
+ - **agentic-lib-state.toml** — full persistent state snapshot (counters, budget, status flags)
25
+ - **Workflow runs** — all runs in the period with name, conclusion, timing, duration, and URLs
26
+ - **Pull requests** — merged and open PRs with branch, title, additions/deletions, file count
27
+ - **Commits** — all commits with SHA, message, author, timestamp
28
+ - **Issues** — open and recently closed issues with labels, title, body excerpts
29
+ - **Source code** — full contents of all source files (src/lib/*.js), not just line counts
30
+ - **Test files** — full contents of all test files, not just filenames
31
+ - **Agent log excerpts** — narrative excerpts from the most recent agent log files
32
+ - **Website HTML** — text summary of the GitHub Pages website content
33
+ - **Screenshot** — whether SCREENSHOT_INDEX.png was captured (available as artifact)
34
+ - **README.md** — repository README content
35
+ - **Mission status** — whether MISSION_COMPLETE.md or MISSION_FAILED.md exist, with contents
36
+
37
+ ## Your Task
38
+
39
+ ### 1. Verify Acceptance Criteria (CRITICAL)
40
+
41
+ For each criterion extracted from MISSION.md:
42
+ - Use `read_file` to check source code for evidence of implementation
43
+ - Use `list_issues` / `get_issue` to find related issues that addressed it
44
+ - Mark each criterion as **PASS**, **FAIL**, or **NOT TESTED** with specific evidence (file path, line number, function name, or issue number)
45
+ - Don't trust issue titles — verify in the actual code
46
+
47
+ ### 2. Build Iteration Narrative
48
+
49
+ For each workflow run in the period:
50
+ - Was it an init run, a supervisor run, or a manual dispatch?
51
+ - Did it produce a transform? (Check: was a PR merged in the same time window?)
52
+ - What did the supervisor/director decide? (Check agent logs)
53
+ - Map runs to PRs to commits to understand the transformation chain
54
+
55
+ Write this as the `iteration_narrative` field — a clear prose timeline of what happened.
56
+
57
+ ### 3. Assess Code Quality
58
+
59
+ Read the source code included in the mechanical data:
60
+ - Is the implementation correct and complete?
61
+ - Are the tests meaningful (testing real behaviour) or trivial (testing existence)?
62
+ - Are there TODO comments or incomplete implementations?
63
+ - Does the code structure match what the mission asked for?
64
+
65
+ ### 4. Identify Findings
66
+
67
+ Each finding should be categorised as:
68
+ - **POSITIVE** — something that worked well
69
+ - **CONCERN** — something that needs attention
70
+ - **REGRESSION** — something that got worse compared to expected behaviour
71
+
72
+ Every finding must cite evidence (file path, issue number, commit SHA, or workflow run ID).
73
+
74
+ ### 5. Produce Scenario Summary
75
+
76
+ Fill in the `scenario_summary` object:
77
+ - `total_iterations`: total workflow runs
78
+ - `transforms`: how many produced merged PRs with code changes
79
+ - `convergence_iteration`: which iteration reached mission-complete (0 if not)
80
+ - `final_source_lines`: line count of main source file
81
+ - `final_test_count`: number of test files
82
+ - `acceptance_pass_count`: e.g. "7/8 PASS"
83
+ - `total_tokens`: from state file counters
84
+
85
+ ### 6. Make Recommendations
86
+
87
+ Actionable next steps for improving the pipeline, the mission, or the code. Be specific.
88
+
89
+ ### 7. Call `report_analysis`
90
+
91
+ Record your complete analysis as a structured JSON object. This is mandatory — the report cannot be enriched without it.
92
+
93
+ ## Report Quality Standards
94
+
95
+ - Every claim must cite evidence
96
+ - Acceptance criteria assessment must read the actual source code
97
+ - Compare state file counters with observed workflow runs for consistency
98
+ - Note any discrepancies between what the pipeline reports and what actually happened
99
+ - Be honest about failures — a clear failure report is more valuable than a vague success report
100
+ - Include the iteration narrative as prose, not just a table
@@ -84,27 +84,49 @@ env:
84
84
  jobs:
85
85
  params:
86
86
  runs-on: ubuntu-latest
87
+ outputs:
88
+ model: ${{ steps.resolve.outputs.model }}
89
+ dry-run: ${{ steps.resolve.outputs.dry-run }}
90
+ discussion-url: ${{ steps.resolve.outputs.discussion-url }}
91
+ message: ${{ steps.resolve.outputs.message }}
87
92
  steps:
88
93
  - uses: actions/checkout@v6
89
94
  with:
90
95
  ref: ${{ inputs.ref || github.ref }}
91
96
  sparse-checkout: ${{ env.configPath }}
92
97
  sparse-checkout-cone-mode: false
93
- - name: Normalise params
94
- id: normalise
95
- shell: bash
96
- run: |
97
- MODEL='${{ inputs.model }}'
98
- if [ -z "$MODEL" ] && [ -f "${{ env.configPath }}" ]; then
99
- TOML_MODEL=$(grep '^\s*model' "${{ env.configPath }}" | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')
100
- MODEL="${TOML_MODEL}"
101
- fi
102
- echo "model=${MODEL:-gpt-5-mini}" >> $GITHUB_OUTPUT
103
- DRY_RUN='${{ inputs.dry-run }}'
104
- echo "dry-run=${DRY_RUN:-true}" >> $GITHUB_OUTPUT
105
- outputs:
106
- model: ${{ steps.normalise.outputs.model }}
107
- dry-run: ${{ steps.normalise.outputs.dry-run }}
98
+ - id: resolve
99
+ uses: actions/github-script@v8
100
+ with:
101
+ script: |
102
+ const fs = require('fs');
103
+ const configPath = '${{ env.configPath }}';
104
+ let toml = '';
105
+ if (fs.existsSync(configPath)) toml = fs.readFileSync(configPath, 'utf8');
106
+ const readToml = (key) => {
107
+ const m = toml.match(new RegExp(`^\\s*${key}\\s*=\\s*"([^"]*)"`, 'm'));
108
+ return m ? m[1] : '';
109
+ };
110
+ const resolve = (name, input, configKey, defaultValue) => {
111
+ let value = input || '';
112
+ let source = 'input';
113
+ if (!value && configKey) {
114
+ value = readToml(configKey);
115
+ source = value ? 'config' : '';
116
+ }
117
+ if (!value) {
118
+ value = defaultValue;
119
+ source = 'default';
120
+ }
121
+ const configVal = configKey ? readToml(configKey) : 'N/A';
122
+ core.info(`param ${name}: input='${input}' config='${configVal}' default='${defaultValue}' → '${value}' (source: ${source})`);
123
+ core.setOutput(name, value);
124
+ return value;
125
+ };
126
+ resolve('model', '${{ inputs.model }}', 'model', 'gpt-5-mini');
127
+ resolve('dry-run', '${{ inputs.dry-run }}', null, 'true');
128
+ resolve('discussion-url', '${{ inputs.discussion-url }}', null, '');
129
+ resolve('message', '${{ inputs.message }}', null, '');
108
130
 
109
131
  respond:
110
132
  needs: params
@@ -11,6 +11,64 @@ name: agentic-lib-flow
11
11
  run-name: "agentic-lib-flow [${{ github.ref_name }}] ${{ inputs.mission-seed }} (${{ inputs.workflow-runs }} runs)"
12
12
 
13
13
  on:
14
+ workflow_call:
15
+ inputs:
16
+ mode:
17
+ type: string
18
+ required: false
19
+ default: "purge"
20
+ mission-seed:
21
+ type: string
22
+ required: false
23
+ default: "7-kyu-understand-fizz-buzz"
24
+ model:
25
+ type: string
26
+ required: false
27
+ default: "gpt-5-mini"
28
+ profile:
29
+ type: string
30
+ required: false
31
+ default: "max"
32
+ workflow-runs:
33
+ type: string
34
+ required: false
35
+ default: "4"
36
+ schedule:
37
+ type: string
38
+ required: false
39
+ default: "off"
40
+ dry-run:
41
+ type: string
42
+ required: false
43
+ default: "false"
44
+ message:
45
+ type: string
46
+ required: false
47
+ default: ""
48
+ config-path:
49
+ type: string
50
+ required: false
51
+ default: ""
52
+ skipMaintain:
53
+ type: string
54
+ required: false
55
+ default: "false"
56
+ mission-text:
57
+ type: string
58
+ required: false
59
+ default: ""
60
+ create-seed-issues:
61
+ type: string
62
+ required: false
63
+ default: "false"
64
+ skip-tests:
65
+ type: string
66
+ required: false
67
+ default: "true"
68
+ generate-report:
69
+ type: string
70
+ required: false
71
+ default: "false"
14
72
  workflow_dispatch:
15
73
  inputs:
16
74
  mode:
@@ -88,29 +146,120 @@ on:
88
146
  - "weekly"
89
147
  - "daily"
90
148
  - "hourly"
149
+ dry-run:
150
+ description: "Skip all push/PR/merge operations"
151
+ type: boolean
152
+ required: false
153
+ default: false
154
+ message:
155
+ description: "Context message for supervisor/bot"
156
+ type: string
157
+ required: false
158
+ default: ""
159
+ config-path:
160
+ description: "Config file path (default: agentic-lib.toml)"
161
+ type: string
162
+ required: false
163
+ default: ""
164
+ generate-report:
165
+ description: "Generate enriched benchmark report after flow"
166
+ type: boolean
167
+ required: false
168
+ default: false
91
169
 
92
170
  permissions: write-all
93
171
 
94
172
  jobs:
173
+ # ── Params: normalise all inputs ─────────────────────────────────
174
+ params:
175
+ runs-on: ubuntu-latest
176
+ outputs:
177
+ mode: ${{ steps.resolve.outputs.mode }}
178
+ mission-seed: ${{ steps.resolve.outputs.mission-seed }}
179
+ mission-text: ${{ steps.resolve.outputs.mission-text }}
180
+ model: ${{ steps.resolve.outputs.model }}
181
+ profile: ${{ steps.resolve.outputs.profile }}
182
+ workflow-runs: ${{ steps.resolve.outputs.workflow-runs }}
183
+ schedule: ${{ steps.resolve.outputs.schedule }}
184
+ dry-run: ${{ steps.resolve.outputs.dry-run }}
185
+ message: ${{ steps.resolve.outputs.message }}
186
+ config-path: ${{ steps.resolve.outputs.config-path }}
187
+ skipMaintain: ${{ steps.resolve.outputs.skipMaintain }}
188
+ create-seed-issues: ${{ steps.resolve.outputs.create-seed-issues }}
189
+ skip-tests: ${{ steps.resolve.outputs.skip-tests }}
190
+ generate-report: ${{ steps.resolve.outputs.generate-report }}
191
+ steps:
192
+ - uses: actions/checkout@v6
193
+ with:
194
+ sparse-checkout: agentic-lib.toml
195
+ sparse-checkout-cone-mode: false
196
+ - id: resolve
197
+ uses: actions/github-script@v8
198
+ with:
199
+ script: |
200
+ const fs = require('fs');
201
+ const configPath = 'agentic-lib.toml';
202
+ let toml = '';
203
+ if (fs.existsSync(configPath)) toml = fs.readFileSync(configPath, 'utf8');
204
+ const readToml = (key) => {
205
+ const m = toml.match(new RegExp(`^\\s*${key}\\s*=\\s*"([^"]*)"`, 'm'));
206
+ return m ? m[1] : '';
207
+ };
208
+ const resolve = (name, input, configKey, defaultValue) => {
209
+ let value = input || '';
210
+ let source = 'input';
211
+ if (!value && configKey) {
212
+ value = readToml(configKey);
213
+ source = value ? 'config' : '';
214
+ }
215
+ if (!value) {
216
+ value = defaultValue;
217
+ source = 'default';
218
+ }
219
+ const configVal = configKey ? readToml(configKey) : 'N/A';
220
+ core.info(`param ${name}: input='${input}' config='${configVal}' default='${defaultValue}' → '${value}' (source: ${source})`);
221
+ core.setOutput(name, value);
222
+ return value;
223
+ };
224
+ resolve('mode', '${{ inputs.mode }}', null, 'purge');
225
+ resolve('mission-seed', '${{ inputs.mission-seed }}', null, '7-kyu-understand-fizz-buzz');
226
+ resolve('mission-text', '${{ inputs.mission-text }}', null, '');
227
+ resolve('model', '${{ inputs.model }}', 'model', 'gpt-5-mini');
228
+ resolve('profile', '${{ inputs.profile }}', 'profile', 'max');
229
+ resolve('workflow-runs', '${{ inputs.workflow-runs }}', null, '4');
230
+ resolve('schedule', '${{ inputs.schedule }}', null, 'off');
231
+ resolve('dry-run', '${{ inputs.dry-run }}', null, 'false');
232
+ resolve('message', '${{ inputs.message }}', null, '');
233
+ resolve('config-path', '${{ inputs.config-path }}', null, 'agentic-lib.toml');
234
+ resolve('skipMaintain', '${{ inputs.skipMaintain }}', null, 'false');
235
+ resolve('create-seed-issues', '${{ inputs.create-seed-issues }}', null, 'false');
236
+ resolve('skip-tests', '${{ inputs.skip-tests }}', null, 'true');
237
+ resolve('generate-report', '${{ inputs.generate-report }}', null, 'false');
238
+
95
239
  # ── Phase 0: Update agentic-lib package ────────────────────────────
96
240
  update:
97
- if: inputs.mode != 'skip'
241
+ needs: [params]
242
+ if: needs.params.outputs.mode != 'skip'
98
243
  uses: ./.github/workflows/agentic-lib-update.yml
99
244
  with:
100
- skip-tests: 'true'
245
+ skip-tests: ${{ needs.params.outputs.skip-tests }}
246
+ dry-run: ${{ needs.params.outputs.dry-run }}
101
247
  secrets: inherit
102
248
 
103
249
  # ── Phase 0b: Init (purge/reseed/update) ───────────────────────────
104
250
  init:
105
- needs: [update]
106
- if: always() && inputs.mode != 'skip' && (needs.update.result == 'success' || needs.update.result == 'skipped')
251
+ needs: [params, update]
252
+ if: always() && needs.params.outputs.mode != 'skip' && (needs.update.result == 'success' || needs.update.result == 'skipped')
107
253
  uses: ./.github/workflows/agentic-lib-init.yml
108
254
  with:
109
- mode: ${{ inputs.mode }}
110
- mission-seed: ${{ inputs.mission-seed }}
111
- model: ${{ inputs.model }}
112
- profile: ${{ inputs.profile }}
113
- schedule: ${{ inputs.schedule }}
255
+ mode: ${{ needs.params.outputs.mode }}
256
+ mission-seed: ${{ needs.params.outputs.mission-seed }}
257
+ mission-text: ${{ needs.params.outputs.mission-text }}
258
+ model: ${{ needs.params.outputs.model }}
259
+ profile: ${{ needs.params.outputs.profile }}
260
+ schedule: ${{ needs.params.outputs.schedule }}
261
+ dry-run: ${{ needs.params.outputs.dry-run }}
262
+ create-seed-issues: ${{ needs.params.outputs.create-seed-issues }}
114
263
  secrets: inherit
115
264
 
116
265
  # ── Round 1: test + bot + up to 4 workflow runs ────────────────────
@@ -124,6 +273,9 @@ jobs:
124
273
  needs: [test-1]
125
274
  if: always() && needs.test-1.result == 'success'
126
275
  uses: ./.github/workflows/agentic-lib-bot.yml
276
+ with:
277
+ model: ${{ inputs.model }}
278
+ message: ${{ inputs.message }}
127
279
  secrets: inherit
128
280
 
129
281
  check-1:
@@ -150,6 +302,13 @@ jobs:
150
302
  needs: [check-1]
151
303
  if: always() && needs.check-1.result == 'success' && needs.check-1.outputs.mission-over != 'true' && inputs.workflow-runs >= 1
152
304
  uses: ./.github/workflows/agentic-lib-workflow.yml
305
+ with:
306
+ model: ${{ inputs.model }}
307
+ profile: ${{ inputs.profile }}
308
+ dry-run: ${{ inputs.dry-run || 'false' }}
309
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
310
+ config-path: ${{ inputs.config-path }}
311
+ message: ${{ inputs.message }}
153
312
  secrets: inherit
154
313
 
155
314
  check-2:
@@ -175,6 +334,13 @@ jobs:
175
334
  needs: [check-2]
176
335
  if: always() && needs.check-2.result == 'success' && needs.check-2.outputs.mission-over != 'true' && inputs.workflow-runs >= 2
177
336
  uses: ./.github/workflows/agentic-lib-workflow.yml
337
+ with:
338
+ model: ${{ inputs.model }}
339
+ profile: ${{ inputs.profile }}
340
+ dry-run: ${{ inputs.dry-run || 'false' }}
341
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
342
+ config-path: ${{ inputs.config-path }}
343
+ message: ${{ inputs.message }}
178
344
  secrets: inherit
179
345
 
180
346
  check-3:
@@ -200,6 +366,13 @@ jobs:
200
366
  needs: [check-3]
201
367
  if: always() && needs.check-3.result == 'success' && needs.check-3.outputs.mission-over != 'true' && inputs.workflow-runs >= 3
202
368
  uses: ./.github/workflows/agentic-lib-workflow.yml
369
+ with:
370
+ model: ${{ inputs.model }}
371
+ profile: ${{ inputs.profile }}
372
+ dry-run: ${{ inputs.dry-run || 'false' }}
373
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
374
+ config-path: ${{ inputs.config-path }}
375
+ message: ${{ inputs.message }}
203
376
  secrets: inherit
204
377
 
205
378
  check-4:
@@ -225,6 +398,13 @@ jobs:
225
398
  needs: [check-4]
226
399
  if: always() && needs.check-4.result == 'success' && needs.check-4.outputs.mission-over != 'true' && inputs.workflow-runs >= 4
227
400
  uses: ./.github/workflows/agentic-lib-workflow.yml
401
+ with:
402
+ model: ${{ inputs.model }}
403
+ profile: ${{ inputs.profile }}
404
+ dry-run: ${{ inputs.dry-run || 'false' }}
405
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
406
+ config-path: ${{ inputs.config-path }}
407
+ message: ${{ inputs.message }}
228
408
  secrets: inherit
229
409
 
230
410
  # ── Round 2: test + bot + up to 4 more workflow runs ───────────────
@@ -238,6 +418,9 @@ jobs:
238
418
  needs: [test-2]
239
419
  if: always() && needs.test-2.result == 'success'
240
420
  uses: ./.github/workflows/agentic-lib-bot.yml
421
+ with:
422
+ model: ${{ inputs.model }}
423
+ message: ${{ inputs.message }}
241
424
  secrets: inherit
242
425
 
243
426
  check-5:
@@ -263,6 +446,13 @@ jobs:
263
446
  needs: [check-5]
264
447
  if: always() && needs.check-5.result == 'success' && needs.check-5.outputs.mission-over != 'true' && inputs.workflow-runs >= 5
265
448
  uses: ./.github/workflows/agentic-lib-workflow.yml
449
+ with:
450
+ model: ${{ inputs.model }}
451
+ profile: ${{ inputs.profile }}
452
+ dry-run: ${{ inputs.dry-run || 'false' }}
453
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
454
+ config-path: ${{ inputs.config-path }}
455
+ message: ${{ inputs.message }}
266
456
  secrets: inherit
267
457
 
268
458
  check-6:
@@ -288,6 +478,13 @@ jobs:
288
478
  needs: [check-6]
289
479
  if: always() && needs.check-6.result == 'success' && needs.check-6.outputs.mission-over != 'true' && inputs.workflow-runs >= 6
290
480
  uses: ./.github/workflows/agentic-lib-workflow.yml
481
+ with:
482
+ model: ${{ inputs.model }}
483
+ profile: ${{ inputs.profile }}
484
+ dry-run: ${{ inputs.dry-run || 'false' }}
485
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
486
+ config-path: ${{ inputs.config-path }}
487
+ message: ${{ inputs.message }}
291
488
  secrets: inherit
292
489
 
293
490
  check-7:
@@ -313,6 +510,13 @@ jobs:
313
510
  needs: [check-7]
314
511
  if: always() && needs.check-7.result == 'success' && needs.check-7.outputs.mission-over != 'true' && inputs.workflow-runs >= 7
315
512
  uses: ./.github/workflows/agentic-lib-workflow.yml
513
+ with:
514
+ model: ${{ inputs.model }}
515
+ profile: ${{ inputs.profile }}
516
+ dry-run: ${{ inputs.dry-run || 'false' }}
517
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
518
+ config-path: ${{ inputs.config-path }}
519
+ message: ${{ inputs.message }}
316
520
  secrets: inherit
317
521
 
318
522
  check-8:
@@ -338,6 +542,13 @@ jobs:
338
542
  needs: [check-8]
339
543
  if: always() && needs.check-8.result == 'success' && needs.check-8.outputs.mission-over != 'true' && inputs.workflow-runs >= 8
340
544
  uses: ./.github/workflows/agentic-lib-workflow.yml
545
+ with:
546
+ model: ${{ inputs.model }}
547
+ profile: ${{ inputs.profile }}
548
+ dry-run: ${{ inputs.dry-run || 'false' }}
549
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
550
+ config-path: ${{ inputs.config-path }}
551
+ message: ${{ inputs.message }}
341
552
  secrets: inherit
342
553
 
343
554
  # ── Round 3: test + bot + up to 4 more workflow runs ───────────────
@@ -351,6 +562,9 @@ jobs:
351
562
  needs: [test-3]
352
563
  if: always() && needs.test-3.result == 'success'
353
564
  uses: ./.github/workflows/agentic-lib-bot.yml
565
+ with:
566
+ model: ${{ inputs.model }}
567
+ message: ${{ inputs.message }}
354
568
  secrets: inherit
355
569
 
356
570
  check-9:
@@ -376,6 +590,13 @@ jobs:
376
590
  needs: [check-9]
377
591
  if: always() && needs.check-9.result == 'success' && needs.check-9.outputs.mission-over != 'true' && inputs.workflow-runs >= 9
378
592
  uses: ./.github/workflows/agentic-lib-workflow.yml
593
+ with:
594
+ model: ${{ inputs.model }}
595
+ profile: ${{ inputs.profile }}
596
+ dry-run: ${{ inputs.dry-run || 'false' }}
597
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
598
+ config-path: ${{ inputs.config-path }}
599
+ message: ${{ inputs.message }}
379
600
  secrets: inherit
380
601
 
381
602
  check-10:
@@ -401,6 +622,13 @@ jobs:
401
622
  needs: [check-10]
402
623
  if: always() && needs.check-10.result == 'success' && needs.check-10.outputs.mission-over != 'true' && inputs.workflow-runs >= 10
403
624
  uses: ./.github/workflows/agentic-lib-workflow.yml
625
+ with:
626
+ model: ${{ inputs.model }}
627
+ profile: ${{ inputs.profile }}
628
+ dry-run: ${{ inputs.dry-run || 'false' }}
629
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
630
+ config-path: ${{ inputs.config-path }}
631
+ message: ${{ inputs.message }}
404
632
  secrets: inherit
405
633
 
406
634
  check-11:
@@ -426,6 +654,13 @@ jobs:
426
654
  needs: [check-11]
427
655
  if: always() && needs.check-11.result == 'success' && needs.check-11.outputs.mission-over != 'true' && inputs.workflow-runs >= 11
428
656
  uses: ./.github/workflows/agentic-lib-workflow.yml
657
+ with:
658
+ model: ${{ inputs.model }}
659
+ profile: ${{ inputs.profile }}
660
+ dry-run: ${{ inputs.dry-run || 'false' }}
661
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
662
+ config-path: ${{ inputs.config-path }}
663
+ message: ${{ inputs.message }}
429
664
  secrets: inherit
430
665
 
431
666
  check-12:
@@ -451,6 +686,13 @@ jobs:
451
686
  needs: [check-12]
452
687
  if: always() && needs.check-12.result == 'success' && needs.check-12.outputs.mission-over != 'true' && inputs.workflow-runs >= 12
453
688
  uses: ./.github/workflows/agentic-lib-workflow.yml
689
+ with:
690
+ model: ${{ inputs.model }}
691
+ profile: ${{ inputs.profile }}
692
+ dry-run: ${{ inputs.dry-run || 'false' }}
693
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
694
+ config-path: ${{ inputs.config-path }}
695
+ message: ${{ inputs.message }}
454
696
  secrets: inherit
455
697
 
456
698
  # ── Round 4: test + bot + up to 4 more workflow runs ───────────────
@@ -464,6 +706,9 @@ jobs:
464
706
  needs: [test-4]
465
707
  if: always() && needs.test-4.result == 'success'
466
708
  uses: ./.github/workflows/agentic-lib-bot.yml
709
+ with:
710
+ model: ${{ inputs.model }}
711
+ message: ${{ inputs.message }}
467
712
  secrets: inherit
468
713
 
469
714
  check-13:
@@ -489,6 +734,13 @@ jobs:
489
734
  needs: [check-13]
490
735
  if: always() && needs.check-13.result == 'success' && needs.check-13.outputs.mission-over != 'true' && inputs.workflow-runs >= 13
491
736
  uses: ./.github/workflows/agentic-lib-workflow.yml
737
+ with:
738
+ model: ${{ inputs.model }}
739
+ profile: ${{ inputs.profile }}
740
+ dry-run: ${{ inputs.dry-run || 'false' }}
741
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
742
+ config-path: ${{ inputs.config-path }}
743
+ message: ${{ inputs.message }}
492
744
  secrets: inherit
493
745
 
494
746
  check-14:
@@ -514,6 +766,13 @@ jobs:
514
766
  needs: [check-14]
515
767
  if: always() && needs.check-14.result == 'success' && needs.check-14.outputs.mission-over != 'true' && inputs.workflow-runs >= 14
516
768
  uses: ./.github/workflows/agentic-lib-workflow.yml
769
+ with:
770
+ model: ${{ inputs.model }}
771
+ profile: ${{ inputs.profile }}
772
+ dry-run: ${{ inputs.dry-run || 'false' }}
773
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
774
+ config-path: ${{ inputs.config-path }}
775
+ message: ${{ inputs.message }}
517
776
  secrets: inherit
518
777
 
519
778
  check-15:
@@ -539,6 +798,13 @@ jobs:
539
798
  needs: [check-15]
540
799
  if: always() && needs.check-15.result == 'success' && needs.check-15.outputs.mission-over != 'true' && inputs.workflow-runs >= 15
541
800
  uses: ./.github/workflows/agentic-lib-workflow.yml
801
+ with:
802
+ model: ${{ inputs.model }}
803
+ profile: ${{ inputs.profile }}
804
+ dry-run: ${{ inputs.dry-run || 'false' }}
805
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
806
+ config-path: ${{ inputs.config-path }}
807
+ message: ${{ inputs.message }}
542
808
  secrets: inherit
543
809
 
544
810
  check-16:
@@ -564,6 +830,13 @@ jobs:
564
830
  needs: [check-16]
565
831
  if: always() && needs.check-16.result == 'success' && needs.check-16.outputs.mission-over != 'true' && inputs.workflow-runs >= 16
566
832
  uses: ./.github/workflows/agentic-lib-workflow.yml
833
+ with:
834
+ model: ${{ inputs.model }}
835
+ profile: ${{ inputs.profile }}
836
+ dry-run: ${{ inputs.dry-run || 'false' }}
837
+ skipMaintain: ${{ inputs.skipMaintain || 'false' }}
838
+ config-path: ${{ inputs.config-path }}
839
+ message: ${{ inputs.message }}
567
840
  secrets: inherit
568
841
 
569
842
  # ── Final: test + bot (always runs) ────────────────────────────────
@@ -577,6 +850,9 @@ jobs:
577
850
  needs: [test-final]
578
851
  if: always() && needs.test-final.result == 'success'
579
852
  uses: ./.github/workflows/agentic-lib-bot.yml
853
+ with:
854
+ model: ${{ inputs.model }}
855
+ message: ${{ inputs.message }}
580
856
  secrets: inherit
581
857
 
582
858
  # ── Verify: MISSION_COMPLETE.md must exist ─────────────────────────
@@ -737,3 +1013,14 @@ jobs:
737
1013
  with:
738
1014
  name: benchmark-report
739
1015
  path: BENCHMARK_REPORT_FLOW_*.md
1016
+
1017
+ # ── Enriched benchmark report (opt-in) ──────────────────────────
1018
+ enriched-report:
1019
+ needs: [params, generate-report]
1020
+ if: always() && needs.params.outputs.generate-report == 'true'
1021
+ uses: ./.github/workflows/agentic-lib-report.yml
1022
+ with:
1023
+ model: ${{ inputs.model }}
1024
+ config-path: ${{ inputs.config-path }}
1025
+ dry-run: ${{ inputs.dry-run || 'false' }}
1026
+ secrets: inherit