@guilz-dev/sdlc-gh 0.1.0

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.
Files changed (176) hide show
  1. package/.github/CODEOWNERS +5 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.yml +68 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +1 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
  5. package/.github/ISSUE_TEMPLATE/support.yml +56 -0
  6. package/.github/ISSUE_TEMPLATE/task.yml +89 -0
  7. package/.github/agents/implementer.agent.md +17 -0
  8. package/.github/agents/reviewer.agent.md +18 -0
  9. package/.github/agents/triager.agent.md +13 -0
  10. package/.github/aw/actions-lock.json +9 -0
  11. package/.github/copilot-instructions.md +35 -0
  12. package/.github/hooks/hooks.json +12 -0
  13. package/.github/instructions/core.instructions.md +11 -0
  14. package/.github/instructions/profiles/go.instructions.md +10 -0
  15. package/.github/instructions/profiles/php.instructions.md +11 -0
  16. package/.github/instructions/profiles/python.instructions.md +11 -0
  17. package/.github/instructions/profiles/ruby.instructions.md +11 -0
  18. package/.github/instructions/profiles/typescript.instructions.md +11 -0
  19. package/.github/labels.yml +55 -0
  20. package/.github/pull_request_template.md +33 -0
  21. package/.github/ruleset.example.json +33 -0
  22. package/.github/ruleset.harness-eval.example.json +29 -0
  23. package/.github/skills/quality-loop/SKILL.md +23 -0
  24. package/.github/workflows/agent-retry-orchestrator.yml +161 -0
  25. package/.github/workflows/copilot-setup-steps.yml +64 -0
  26. package/.github/workflows/eval-ci.yml +169 -0
  27. package/.github/workflows/eval-drift.yml +75 -0
  28. package/.github/workflows/gh-aw-dogfood-ci.yml +73 -0
  29. package/.github/workflows/harness-ci.yml +244 -0
  30. package/.github/workflows/harness-sync.yml +28 -0
  31. package/.github/workflows/l1-readiness-check.yml +45 -0
  32. package/.github/workflows/labels-sync.yml +24 -0
  33. package/.github/workflows/nightly-harness-review.lock.yml +1643 -0
  34. package/.github/workflows/nightly-harness-review.md +87 -0
  35. package/.github/workflows/nightly-harness-review.yml +63 -0
  36. package/.github/workflows/npm-publish.yml +49 -0
  37. package/.github/workflows/pr-context-comment.yml +138 -0
  38. package/.github/workflows/product-ci-go.yml +33 -0
  39. package/.github/workflows/product-ci-php.yml +39 -0
  40. package/.github/workflows/product-ci-python.yml +34 -0
  41. package/.github/workflows/product-ci-ruby.yml +35 -0
  42. package/.github/workflows/product-ci-ts.yml +37 -0
  43. package/.github/workflows/task-issue-label-sync.yml +50 -0
  44. package/.github/workflows/weekly-redteam.lock.yml +1571 -0
  45. package/.github/workflows/weekly-redteam.md +76 -0
  46. package/.github/zizmor.yml +11 -0
  47. package/AGENTS.md +54 -0
  48. package/LICENSE +21 -0
  49. package/README.md +366 -0
  50. package/config/stacks.json +55 -0
  51. package/docs/adoption.md +126 -0
  52. package/docs/arch.md +535 -0
  53. package/docs/auth-boundaries.md +16 -0
  54. package/docs/coding-agent-l1.md +152 -0
  55. package/docs/exceptions/README.md +25 -0
  56. package/docs/exceptions/TEMPLATE.md +8 -0
  57. package/docs/failure-taxonomy.md +23 -0
  58. package/docs/gh-aw-dogfood.md +109 -0
  59. package/docs/kpi-baseline.md +9 -0
  60. package/docs/nightly-harness-review.md +94 -0
  61. package/docs/operations.md +108 -0
  62. package/docs/publishing.md +79 -0
  63. package/docs/revert-playbook.md +44 -0
  64. package/docs/shared-config.md +30 -0
  65. package/docs/telemetry-artifacts.md +78 -0
  66. package/docs/telemetry-schema.md +60 -0
  67. package/evals/.score-baseline.json +6 -0
  68. package/evals/e2e-bench/README.md +28 -0
  69. package/evals/e2e-bench/manifest.json +16 -0
  70. package/evals/e2e-bench/tasks/e2e-001.yml +10 -0
  71. package/evals/e2e-bench/tasks/e2e-002.yml +11 -0
  72. package/evals/e2e-bench/tasks/e2e-003.yml +10 -0
  73. package/evals/e2e-bench/tasks/e2e-004.yml +14 -0
  74. package/evals/e2e-bench/tasks/e2e-005.yml +11 -0
  75. package/evals/e2e-bench/tasks/e2e-006.yml +10 -0
  76. package/evals/e2e-bench/tasks/e2e-007.yml +10 -0
  77. package/evals/e2e-bench/tasks/e2e-008.yml +10 -0
  78. package/evals/e2e-bench/tasks/e2e-009.yml +10 -0
  79. package/evals/trajectories/rubric.md +12 -0
  80. package/evals/trajectories/test_harness_conventions.py +271 -0
  81. package/infra/README.md +49 -0
  82. package/infra/langfuse/docker-compose.yml +25 -0
  83. package/infra/otel/collector-config.yml +24 -0
  84. package/infra/samples/gh-aw-dogfood-report.json +44 -0
  85. package/infra/samples/harness-review-routing-plan.json +19 -0
  86. package/infra/samples/harness-review-summary.json +61 -0
  87. package/infra/samples/telemetry-artifact.json +29 -0
  88. package/infra/samples/telemetry-payload.json +19 -0
  89. package/package.json +85 -0
  90. package/prompts/triager-classify.prompt.yml +10 -0
  91. package/sample/go/add.go +5 -0
  92. package/sample/go/add_test.go +9 -0
  93. package/sample/go/go.mod +3 -0
  94. package/sample/php/composer.json +26 -0
  95. package/sample/php/composer.lock +1881 -0
  96. package/sample/php/phpunit.xml +8 -0
  97. package/sample/php/src/Add.php +13 -0
  98. package/sample/php/tests/AddTest.php +16 -0
  99. package/sample/python/requirements-dev.txt +2 -0
  100. package/sample/python/src/__init__.py +0 -0
  101. package/sample/python/src/greet.py +3 -0
  102. package/sample/python/tests/conftest.py +4 -0
  103. package/sample/python/tests/test_greet.py +5 -0
  104. package/sample/ruby/.rubocop.yml +10 -0
  105. package/sample/ruby/Gemfile +6 -0
  106. package/sample/ruby/Gemfile.lock +58 -0
  107. package/sample/ruby/lib/add.rb +9 -0
  108. package/sample/ruby/spec/add_spec.rb +11 -0
  109. package/sample/ts/biome.json +6 -0
  110. package/sample/ts/package-lock.json +1763 -0
  111. package/sample/ts/package.json +15 -0
  112. package/sample/ts/src/add.ts +3 -0
  113. package/sample/ts/tests/add.test.ts +8 -0
  114. package/sample/ts/tsconfig.json +12 -0
  115. package/scripts/aggregate-harness-review.mjs +48 -0
  116. package/scripts/bootstrap-harness.sh +411 -0
  117. package/scripts/check-diff-size.mjs +46 -0
  118. package/scripts/check-e2e-manifest.mjs +35 -0
  119. package/scripts/check-eval-score-drift.mjs +31 -0
  120. package/scripts/check-gh-aw-dogfood-scope.mjs +51 -0
  121. package/scripts/check-issue-spec.mjs +215 -0
  122. package/scripts/check-l1-readiness.mjs +82 -0
  123. package/scripts/check-open-pr-limit.mjs +34 -0
  124. package/scripts/doctor.mjs +177 -0
  125. package/scripts/emit-gh-aw-dogfood-report.mjs +112 -0
  126. package/scripts/emit-telemetry-artifact.mjs +99 -0
  127. package/scripts/fetch-telemetry-artifacts.mjs +176 -0
  128. package/scripts/harness-drift-report.mjs +99 -0
  129. package/scripts/lib/bootstrap-copy.mjs +123 -0
  130. package/scripts/lib/ccsd-contract.mjs +212 -0
  131. package/scripts/lib/diff-size.mjs +103 -0
  132. package/scripts/lib/doctor-local.mjs +179 -0
  133. package/scripts/lib/e2e-manifest.mjs +76 -0
  134. package/scripts/lib/gh-aw-dogfood.mjs +293 -0
  135. package/scripts/lib/github-config.mjs +94 -0
  136. package/scripts/lib/harness-ci-fragments.mjs +98 -0
  137. package/scripts/lib/harness-review-routing.mjs +244 -0
  138. package/scripts/lib/harness-review.mjs +388 -0
  139. package/scripts/lib/issue-form-label-sync.mjs +56 -0
  140. package/scripts/lib/l1-readiness.mjs +258 -0
  141. package/scripts/lib/merge-harness-package.mjs +36 -0
  142. package/scripts/lib/npm-package.mjs +129 -0
  143. package/scripts/lib/setup-wizard.mjs +224 -0
  144. package/scripts/lib/stacks.mjs +138 -0
  145. package/scripts/lib/telemetry-artifact.mjs +253 -0
  146. package/scripts/lib/template-root.mjs +39 -0
  147. package/scripts/merge-harness-package.mjs +14 -0
  148. package/scripts/route-harness-review.mjs +168 -0
  149. package/scripts/run-e2e-bench.mjs +216 -0
  150. package/scripts/sdlc-gh-cli.mjs +91 -0
  151. package/scripts/select-eval-jobs.mjs +41 -0
  152. package/scripts/setup-github.mjs +242 -0
  153. package/scripts/setup-github.sh +4 -0
  154. package/scripts/setup-wizard.mjs +426 -0
  155. package/scripts/test-bootstrap-guidance-scenarios.mjs +94 -0
  156. package/scripts/test-diff-size-scenarios.mjs +88 -0
  157. package/scripts/test-doctor-scenarios.mjs +70 -0
  158. package/scripts/test-e2e-manifest-scenarios.mjs +65 -0
  159. package/scripts/test-gh-aw-dogfood-scenarios.mjs +74 -0
  160. package/scripts/test-harness-review-routing-scenarios.mjs +130 -0
  161. package/scripts/test-harness-review-scenarios.mjs +92 -0
  162. package/scripts/test-hooks-scenarios.mjs +44 -0
  163. package/scripts/test-issue-form-label-sync-scenarios.mjs +48 -0
  164. package/scripts/test-issue-spec-scenarios.mjs +258 -0
  165. package/scripts/test-l1-readiness-scenarios.mjs +204 -0
  166. package/scripts/test-merge-harness-package-scenarios.mjs +53 -0
  167. package/scripts/test-npm-package-scenarios.mjs +31 -0
  168. package/scripts/test-sdlc-gh-cli-scenarios.mjs +54 -0
  169. package/scripts/test-setup-github-scenarios.mjs +103 -0
  170. package/scripts/test-setup-wizard-scenarios.mjs +114 -0
  171. package/scripts/test-telemetry-artifact-scenarios.mjs +69 -0
  172. package/scripts/trim-harness-ci.mjs +18 -0
  173. package/scripts/validate-gh-aw-compile.mjs +64 -0
  174. package/scripts/validate-harness.mjs +199 -0
  175. package/scripts/validate-telemetry.mjs +21 -0
  176. package/scripts/verify-bootstrap-stacks.sh +192 -0
@@ -0,0 +1,244 @@
1
+ name: Harness CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ harness-static:
10
+ name: harness-static
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - uses: actions/setup-node@v4
16
+ with:
17
+ node-version: "22"
18
+
19
+ - name: Validate harness assets
20
+ run: node scripts/validate-harness.mjs
21
+
22
+ - name: Install actionlint
23
+ run: |
24
+ bash <(curl -s https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
25
+ # gh-aw compiled *.lock.yml stubs are Phase 3 placeholders; lint active workflows only.
26
+ find .github/workflows -maxdepth 1 -name '*.yml' ! -name '*.lock.yml' -print0 \
27
+ | xargs -0 -r ./actionlint -color
28
+
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: "3.12"
32
+
33
+ - name: Install zizmor
34
+ run: pip install zizmor
35
+
36
+ - name: Run zizmor
37
+ run: |
38
+ find .github/workflows -maxdepth 1 -name '*.yml' ! -name '*.lock.yml' -print0 \
39
+ | xargs -0 -r zizmor --offline --min-severity high
40
+
41
+ - name: Hooks scenario tests
42
+ run: node scripts/test-hooks-scenarios.mjs
43
+
44
+ - name: Issue-spec scenario tests
45
+ run: node scripts/test-issue-spec-scenarios.mjs
46
+
47
+ - name: Issue form label sync scenario tests
48
+ run: node scripts/test-issue-form-label-sync-scenarios.mjs
49
+
50
+ - name: Diff-size scenario tests
51
+ run: node scripts/test-diff-size-scenarios.mjs
52
+
53
+ - name: E2E manifest scenario tests
54
+ run: node scripts/test-e2e-manifest-scenarios.mjs
55
+
56
+ - name: GitHub setup scenario tests
57
+ run: node scripts/test-setup-github-scenarios.mjs
58
+
59
+ - name: Doctor scenario tests
60
+ run: node scripts/test-doctor-scenarios.mjs
61
+
62
+ - name: Telemetry artifact scenario tests
63
+ run: node scripts/test-telemetry-artifact-scenarios.mjs
64
+
65
+ - name: Harness review scenario tests
66
+ run: node scripts/test-harness-review-scenarios.mjs
67
+
68
+ - name: Harness review routing scenario tests
69
+ run: node scripts/test-harness-review-routing-scenarios.mjs
70
+
71
+ - name: gh-aw dogfood scenario tests
72
+ run: node scripts/test-gh-aw-dogfood-scenarios.mjs
73
+
74
+ issue-spec-check:
75
+ name: issue-spec-check
76
+ runs-on: ubuntu-latest
77
+ if: github.event_name == 'pull_request'
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+
81
+ - uses: actions/setup-node@v4
82
+ with:
83
+ node-version: "22"
84
+
85
+ - name: Validate linked Issue CC-SD contract
86
+ env:
87
+ PR_NUMBER: ${{ github.event.pull_request.number }}
88
+ PR_BODY: ${{ github.event.pull_request.body }}
89
+ PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
90
+ GH_TOKEN: ${{ github.token }}
91
+ run: node scripts/check-issue-spec.mjs
92
+
93
+ open-pr-limit:
94
+ name: open-pr-limit
95
+ runs-on: ubuntu-latest
96
+ if: github.event_name == 'pull_request'
97
+ steps:
98
+ - uses: actions/checkout@v4
99
+ - name: Check open PR limit
100
+ env:
101
+ PR_AUTHOR: ${{ github.event.pull_request.user.login }}
102
+ GH_TOKEN: ${{ github.token }}
103
+ run: node scripts/check-open-pr-limit.mjs
104
+
105
+ diff-size:
106
+ name: diff-size
107
+ runs-on: ubuntu-latest
108
+ if: github.event_name == 'pull_request'
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+ with:
112
+ fetch-depth: 0
113
+
114
+ - uses: actions/setup-node@v4
115
+ with:
116
+ node-version: "22"
117
+
118
+ - name: Diff size and autonomy gate
119
+ env:
120
+ PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
121
+ BASE_SHA: origin/${{ github.base_ref }}
122
+ # Template default: warn-only for L1. Opt in to hard-fail when ready (Phase 4):
123
+ # DIFF_SIZE_L1_HARD_FAIL: "1"
124
+ run: node scripts/check-diff-size.mjs
125
+
126
+ detect-projects:
127
+ name: detect-projects
128
+ needs: harness-static
129
+ runs-on: ubuntu-latest
130
+ outputs:
131
+ ts: ${{ steps.detect.outputs.ts }}
132
+ python: ${{ steps.detect.outputs.python }}
133
+ go: ${{ steps.detect.outputs.go }}
134
+ ruby: ${{ steps.detect.outputs.ruby }}
135
+ php: ${{ steps.detect.outputs.php }}
136
+ steps:
137
+ - uses: actions/checkout@v4
138
+
139
+ - id: detect
140
+ shell: bash
141
+ run: |
142
+ if [[ -f sample/ts/package.json || -f package.json ]]; then
143
+ echo "ts=true" >> "$GITHUB_OUTPUT"
144
+ else
145
+ echo "ts=false" >> "$GITHUB_OUTPUT"
146
+ fi
147
+ if [[ -f sample/python/requirements-dev.txt || -f requirements-dev.txt ]]; then
148
+ echo "python=true" >> "$GITHUB_OUTPUT"
149
+ else
150
+ echo "python=false" >> "$GITHUB_OUTPUT"
151
+ fi
152
+ if [[ -f sample/go/go.mod || -f go.mod ]]; then
153
+ echo "go=true" >> "$GITHUB_OUTPUT"
154
+ else
155
+ echo "go=false" >> "$GITHUB_OUTPUT"
156
+ fi
157
+ if [[ -f sample/ruby/Gemfile || -f Gemfile ]]; then
158
+ echo "ruby=true" >> "$GITHUB_OUTPUT"
159
+ else
160
+ echo "ruby=false" >> "$GITHUB_OUTPUT"
161
+ fi
162
+ if [[ -f sample/php/composer.json || -f composer.json ]]; then
163
+ echo "php=true" >> "$GITHUB_OUTPUT"
164
+ else
165
+ echo "php=false" >> "$GITHUB_OUTPUT"
166
+ fi
167
+
168
+ product-ts:
169
+ name: product-ci-ts
170
+ needs: detect-projects
171
+ if: needs.detect-projects.outputs.ts == 'true'
172
+ uses: ./.github/workflows/product-ci-ts.yml
173
+
174
+ product-python:
175
+ name: product-ci-python
176
+ needs: detect-projects
177
+ if: needs.detect-projects.outputs.python == 'true'
178
+ uses: ./.github/workflows/product-ci-python.yml
179
+
180
+ product-go:
181
+ name: product-ci-go
182
+ needs: detect-projects
183
+ if: needs.detect-projects.outputs.go == 'true'
184
+ uses: ./.github/workflows/product-ci-go.yml
185
+
186
+ product-ruby:
187
+ name: product-ci-ruby
188
+ needs: detect-projects
189
+ if: needs.detect-projects.outputs.ruby == 'true'
190
+ uses: ./.github/workflows/product-ci-ruby.yml
191
+
192
+ product-php:
193
+ name: product-ci-php
194
+ needs: detect-projects
195
+ if: needs.detect-projects.outputs.php == 'true'
196
+ uses: ./.github/workflows/product-ci-php.yml
197
+
198
+ telemetry:
199
+ name: telemetry-artifact
200
+ runs-on: ubuntu-latest
201
+ if: always() && github.event_name == 'pull_request'
202
+ needs:
203
+ - harness-static
204
+ - issue-spec-check
205
+ - open-pr-limit
206
+ - diff-size
207
+ - detect-projects
208
+ - product-ts
209
+ - product-python
210
+ - product-go
211
+ - product-ruby
212
+ - product-php
213
+ steps:
214
+ - uses: actions/checkout@v4
215
+ with:
216
+ fetch-depth: 0
217
+
218
+ - uses: actions/setup-node@v4
219
+ with:
220
+ node-version: "22"
221
+
222
+ - name: Emit harness CI telemetry artifact
223
+ env:
224
+ TELEMETRY_SOURCE: harness-ci
225
+ GITHUB_REPOSITORY: ${{ github.repository }}
226
+ GITHUB_RUN_ID: ${{ github.run_id }}
227
+ GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }}
228
+ GITHUB_WORKFLOW: ${{ github.workflow }}
229
+ GITHUB_EVENT_NAME: ${{ github.event_name }}
230
+ PR_NUMBER: ${{ github.event.pull_request.number }}
231
+ PR_BODY: ${{ github.event.pull_request.body }}
232
+ PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
233
+ BASE_SHA: origin/${{ github.base_ref }}
234
+ JOB_RESULTS: ${{ toJSON(needs) }}
235
+ EXECUTION_MODE: ci
236
+ FINAL_OUTCOME: in_progress
237
+ run: node scripts/emit-telemetry-artifact.mjs
238
+
239
+ - name: Upload harness telemetry artifact
240
+ uses: actions/upload-artifact@v4
241
+ with:
242
+ name: harness-telemetry-${{ github.run_id }}
243
+ path: telemetry-artifacts/
244
+ if-no-files-found: error
@@ -0,0 +1,28 @@
1
+ name: Harness sync
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ target_repo:
7
+ description: "owner/name of product repository (for future matrix sync)"
8
+ required: false
9
+ schedule:
10
+ - cron: "0 8 * * 1"
11
+
12
+ jobs:
13
+ drift-report:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: "22"
21
+
22
+ - name: Generate harness drift manifest
23
+ run: node scripts/harness-drift-report.mjs
24
+
25
+ - name: Sync instructions
26
+ run: |
27
+ echo "Copy manifest SHAs to product repos via bootstrap or manual sync." >> "$GITHUB_STEP_SUMMARY"
28
+ echo "See docs/shared-config.md and docs/adoption.md." >> "$GITHUB_STEP_SUMMARY"
@@ -0,0 +1,45 @@
1
+ name: L1 readiness check
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ strict:
7
+ description: Enable strict readiness gating (same semantics as check-l1-readiness --strict)
8
+ type: boolean
9
+ default: false
10
+ template:
11
+ description: Template repository mode (multiple product-ci workflows)
12
+ type: boolean
13
+ default: false
14
+
15
+ permissions:
16
+ contents: read
17
+ actions: read
18
+
19
+ jobs:
20
+ l1-readiness:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+
25
+ - uses: actions/setup-node@v4
26
+ with:
27
+ node-version: "22"
28
+
29
+ - name: Run L1 readiness check
30
+ env:
31
+ GH_TOKEN: ${{ github.token }}
32
+ run: |
33
+ args=(--github-repo "${{ github.repository }}" --json --summary)
34
+ if [[ "${{ inputs.strict }}" == "true" ]]; then
35
+ args+=(--strict)
36
+ fi
37
+ if [[ "${{ inputs.template }}" == "true" ]]; then
38
+ args+=(--template)
39
+ fi
40
+ node scripts/check-l1-readiness.mjs "${args[@]}" | tee l1-readiness.json
41
+ node --input-type=module -e "
42
+ import { readFileSync } from 'node:fs';
43
+ const report = JSON.parse(readFileSync('l1-readiness.json', 'utf8'));
44
+ process.exit(report.exitCode ?? (report.hasFail ? 1 : 0));
45
+ "
@@ -0,0 +1,24 @@
1
+ name: Sync labels
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [main]
7
+ paths:
8
+ - ".github/labels.yml"
9
+
10
+ permissions:
11
+ contents: read
12
+ issues: write
13
+
14
+ jobs:
15
+ sync:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Apply labels from labels.yml
21
+ uses: EndBug/label-sync@v2
22
+ with:
23
+ config-file: .github/labels.yml
24
+ delete-other-labels: false