@plainconceptsplatform/workflows 0.4.34 → 0.5.1

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 (73) hide show
  1. package/README.md +88 -88
  2. package/loops/actions/agent-output.cjs +17 -17
  3. package/loops/actions/audit-close/action.yml +24 -0
  4. package/loops/actions/classify-route/action.yml +1 -3
  5. package/loops/actions/classify-route/classify-route.sh +40 -35
  6. package/loops/actions/update-changelog/action.yml +113 -0
  7. package/loops/actions/validate-merge-gate-output/action.yml +40 -40
  8. package/loops/actions/validate-refine-output/validate-refine-output.sh +16 -3
  9. package/loops/actions/validate-review-output/action.yml +35 -35
  10. package/loops/actions/validate-triage-output/action.yml +36 -36
  11. package/loops/actions/verify-route-matrix/verify-route-matrix.sh +91 -36
  12. package/loops/scripts/compile-agent-workflows.mjs +195 -6
  13. package/loops/templates/agentics/agentics-checks.yml +86 -86
  14. package/loops/templates/agentics/agentics-maintenance.yml +121 -121
  15. package/loops/templates/ci/app-ci-dotnet-next.yml +268 -171
  16. package/loops/templates/ci/app-ci-node-monorepo.yml +208 -178
  17. package/loops/templates/issues/bug_report.yml +109 -109
  18. package/loops/templates/issues/feature_request.yml +75 -75
  19. package/loops/templates/opencode/opencode.ci.json +49 -47
  20. package/loops/templates/opencode/opencode.ci.json.md +46 -41
  21. package/loops/templates/release/github-release.yml +30 -30
  22. package/loops/workflows/agent-apply-review.md +465 -443
  23. package/loops/workflows/agent-audit.md +213 -197
  24. package/loops/workflows/agent-implement.md +538 -414
  25. package/loops/workflows/agent-merge-gate.md +730 -584
  26. package/loops/workflows/agent-refine.md +609 -418
  27. package/loops/workflows/agent-release.md +258 -0
  28. package/loops/workflows/agent-triage.md +447 -439
  29. package/loops/workflows/authorize-bot-work.yml +85 -82
  30. package/loops/workflows/shared/opencode-ci.md +206 -197
  31. package/loops/workflows/shared/platform-defaults.md +19 -16
  32. package/loops/workflows/work-router.yml +862 -632
  33. package/package.json +7 -8
  34. package/dist/action-validation.test.d.ts +0 -1
  35. package/dist/action-validation.test.js +0 -84
  36. package/dist/catalog-installation.d.ts +0 -30
  37. package/dist/catalog-installation.js +0 -379
  38. package/dist/catalog-installation.test.d.ts +0 -1
  39. package/dist/catalog-installation.test.js +0 -448
  40. package/dist/catalog-listing.d.ts +0 -13
  41. package/dist/catalog-listing.js +0 -70
  42. package/dist/catalog-listing.test.d.ts +0 -1
  43. package/dist/catalog-listing.test.js +0 -150
  44. package/dist/index.d.ts +0 -2
  45. package/dist/index.js +0 -218
  46. package/dist/index.test.d.ts +0 -1
  47. package/dist/index.test.js +0 -273
  48. package/dist/repository-inspection.d.ts +0 -23
  49. package/dist/repository-inspection.js +0 -113
  50. package/dist/repository-inspection.test.d.ts +0 -1
  51. package/dist/repository-inspection.test.js +0 -77
  52. package/dist/repository-state.d.ts +0 -18
  53. package/dist/repository-state.js +0 -77
  54. package/dist/repository-state.test.d.ts +0 -1
  55. package/dist/repository-state.test.js +0 -96
  56. package/dist/route-processing.d.ts +0 -6
  57. package/dist/route-processing.js +0 -150
  58. package/dist/route-processing.test.d.ts +0 -1
  59. package/dist/route-processing.test.js +0 -350
  60. package/dist/stack-defaults.d.ts +0 -11
  61. package/dist/stack-defaults.js +0 -104
  62. package/dist/stack-defaults.test.d.ts +0 -1
  63. package/dist/stack-defaults.test.js +0 -266
  64. package/dist/tui.d.ts +0 -25
  65. package/dist/tui.js +0 -287
  66. package/dist/tui.test.d.ts +0 -1
  67. package/dist/tui.test.js +0 -246
  68. package/dist/workflow-catalog.d.ts +0 -25
  69. package/dist/workflow-catalog.js +0 -59
  70. package/dist/workflow-catalog.test.d.ts +0 -1
  71. package/dist/workflow-catalog.test.js +0 -29
  72. package/loops/workflows/agent-direct.md +0 -375
  73. package/loops/workflows/agent-propose.md +0 -342
@@ -1,178 +1,208 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/templates/ci/app-ci-node-monorepo.yml. Update with `workflows update --force`; consumer edits may be overwritten.
2
- name: "App: CI (Node monorepo)"
3
-
4
- on:
5
- pull_request:
6
- schedule:
7
- - cron: "0 6 * * 1"
8
- workflow_dispatch:
9
-
10
- env:
11
- NODE_VERSION: "22"
12
- PNPM_VERSION: "10"
13
- WEB_PACKAGE: "@orbion/web"
14
- DESKTOP_PACKAGE: "@orbion/desktop"
15
- MOBILE_PACKAGE: "@orbion/mobile"
16
- WEB_EXPORT_PATH: apps/web/out
17
- PLAYWRIGHT_REPORT_PATH: apps/web/playwright-report
18
- DESKTOP_MAIN_PATH: apps/desktop/out/main/index.js
19
- DESKTOP_PRELOAD_PATH: apps/desktop/out/preload/index.cjs
20
- DESKTOP_PRELOAD_BRIDGE_PATTERN: exposeInMainWorld
21
- MOBILE_IOS_PATH: apps/mobile/ios
22
- MOBILE_ANDROID_PATH: apps/mobile/android
23
- WEB_ARTIFACT_NAME: web-export
24
- PLAYWRIGHT_ARTIFACT_NAME: playwright-report
25
- TRUFFLEHOG_IMAGE: "trufflesecurity/trufflehog:latest"
26
- SEMGREP_IMAGE: "semgrep/semgrep:1.168.0"
27
- SBOM_ARTIFACT_NAME: orbion-sbom.cyclonedx.json
28
-
29
- permissions:
30
- contents: read
31
-
32
- concurrency:
33
- group: ci-${{ github.workflow }}-${{ github.head_ref || github.ref }}
34
- cancel-in-progress: ${{ github.event_name == 'pull_request' }}
35
-
36
- jobs:
37
- lint:
38
- name: Lint (Biome)
39
- if: github.event_name != 'schedule'
40
- runs-on: RunnerLandingZone
41
- steps:
42
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
- - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
44
- with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
45
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
46
- with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
47
- - run: pnpm install --frozen-lockfile
48
- - run: pnpm exec biome check .
49
-
50
- web:
51
- name: Web (Next.js static export)
52
- if: github.event_name != 'schedule'
53
- runs-on: RunnerLandingZone
54
- steps:
55
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
56
- - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
57
- with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
58
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
59
- with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
60
- - run: pnpm install --frozen-lockfile
61
- - run: pnpm --filter "$WEB_PACKAGE" run typecheck
62
- - run: pnpm --filter "$WEB_PACKAGE" run test
63
- - run: pnpm --filter "$WEB_PACKAGE" run lint:fsd
64
- - run: pnpm --filter "$WEB_PACKAGE" run build
65
- - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
66
- with:
67
- name: ${{ env.WEB_ARTIFACT_NAME }}
68
- path: ${{ env.WEB_EXPORT_PATH }}
69
- retention-days: 3
70
- if-no-files-found: error
71
-
72
- e2e:
73
- name: E2E (Playwright)
74
- if: github.event_name != 'schedule'
75
- needs: web
76
- runs-on: RunnerLandingZone
77
- steps:
78
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
79
- - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
80
- with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
81
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
82
- with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
83
- - run: pnpm install --frozen-lockfile
84
- - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
85
- with:
86
- name: ${{ env.WEB_ARTIFACT_NAME }}
87
- path: ${{ env.WEB_EXPORT_PATH }}
88
- - run: pnpm --filter "$WEB_PACKAGE" exec playwright install --with-deps chromium webkit
89
- - run: pnpm --filter "$WEB_PACKAGE" run e2e
90
- - if: failure()
91
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
92
- with:
93
- name: ${{ env.PLAYWRIGHT_ARTIFACT_NAME }}
94
- path: ${{ env.PLAYWRIGHT_REPORT_PATH }}
95
- retention-days: 7
96
-
97
- desktop:
98
- name: Desktop (Electron)
99
- if: github.event_name != 'schedule'
100
- needs: web
101
- runs-on: RunnerLandingZone
102
- steps:
103
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
104
- - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
105
- with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
106
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
107
- with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
108
- - run: pnpm install --frozen-lockfile
109
- - run: pnpm --filter "$DESKTOP_PACKAGE" run typecheck
110
- - run: pnpm --filter "$DESKTOP_PACKAGE" run build
111
- - run: |
112
- test -f "$DESKTOP_MAIN_PATH"
113
- test -f "$DESKTOP_PRELOAD_PATH"
114
- grep -q "$DESKTOP_PRELOAD_BRIDGE_PATTERN" "$DESKTOP_PRELOAD_PATH"
115
- - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
116
- with:
117
- name: ${{ env.WEB_ARTIFACT_NAME }}
118
- path: ${{ env.WEB_EXPORT_PATH }}
119
- - run: pnpm --filter "$DESKTOP_PACKAGE" exec playwright install-deps chromium
120
- - run: xvfb-run --auto-servernum pnpm --filter "$DESKTOP_PACKAGE" run e2e
121
-
122
- mobile:
123
- name: Mobile (Capacitor)
124
- if: github.event_name != 'schedule'
125
- runs-on: RunnerLandingZone
126
- steps:
127
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
128
- - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
129
- with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
130
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
131
- with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
132
- - run: pnpm install --frozen-lockfile
133
- - run: pnpm --filter "$MOBILE_PACKAGE" run typecheck
134
- - run: |
135
- if [ -d "$MOBILE_IOS_PATH" ] || [ -d "$MOBILE_ANDROID_PATH" ]; then
136
- pnpm --filter "$WEB_PACKAGE" run build
137
- pnpm --filter "$MOBILE_PACKAGE" run sync
138
- else
139
- echo "::notice::Native projects absent; skipping Capacitor sync."
140
- fi
141
-
142
- secret-scan:
143
- name: Secret scan (TruffleHog)
144
- runs-on: RunnerLandingZone
145
- steps:
146
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
147
- - run: docker run --rm -v "${{ github.workspace }}:/repo" "$TRUFFLEHOG_IMAGE" filesystem /repo --only-verified --fail --no-update
148
-
149
- deps-and-iac-scan:
150
- name: Dependencies and IaC (Trivy)
151
- runs-on: RunnerLandingZone
152
- steps:
153
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
154
- - uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
155
- with:
156
- scan-type: fs
157
- scanners: vuln,misconfig,secret
158
- severity: CRITICAL,HIGH
159
- ignore-unfixed: true
160
- exit-code: "1"
161
- format: table
162
-
163
- sast-scan:
164
- name: SAST (Semgrep)
165
- runs-on: RunnerLandingZone
166
- steps:
167
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
168
- - run: docker run --rm -v "${{ github.workspace }}:/src" -w /src "$SEMGREP_IMAGE" semgrep scan --error --metrics=off --oss-only --disable-version-check --config p/default --config p/security-audit --config p/secrets --config p/typescript --config p/react --exclude-rule yaml.github-actions.security.github-actions-mutable-action-tag.github-actions-mutable-action-tag
169
-
170
- sbom:
171
- name: SBOM (CycloneDX)
172
- runs-on: RunnerLandingZone
173
- steps:
174
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
175
- - uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0
176
- with:
177
- format: cyclonedx-json
178
- artifact-name: ${{ env.SBOM_ARTIFACT_NAME }}
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/templates/ci/app-ci-node-monorepo.yml. Update with `workflows update --force`; consumer edits may be overwritten.
2
+ name: "App: CI (Node monorepo)"
3
+
4
+ on:
5
+ pull_request:
6
+ schedule:
7
+ - cron: "0 6 * * 1"
8
+ workflow_dispatch:
9
+
10
+ env:
11
+ NODE_VERSION: "22"
12
+ PNPM_VERSION: "10"
13
+ WEB_PACKAGE: "@app/web"
14
+ DESKTOP_PACKAGE: "@app/desktop"
15
+ MOBILE_PACKAGE: "@app/mobile"
16
+ WEB_EXPORT_PATH: apps/web/out
17
+ PLAYWRIGHT_REPORT_PATH: apps/web/playwright-report
18
+ DESKTOP_MAIN_PATH: apps/desktop/out/main/index.js
19
+ DESKTOP_PRELOAD_PATH: apps/desktop/out/preload/index.cjs
20
+ DESKTOP_PRELOAD_BRIDGE_PATTERN: exposeInMainWorld
21
+ MOBILE_IOS_PATH: apps/mobile/ios
22
+ MOBILE_ANDROID_PATH: apps/mobile/android
23
+ WEB_ARTIFACT_NAME: web-export
24
+ PLAYWRIGHT_ARTIFACT_NAME: playwright-report
25
+ TRUFFLEHOG_IMAGE: "trufflesecurity/trufflehog:latest"
26
+ SEMGREP_IMAGE: "semgrep/semgrep:1.168.0"
27
+ SBOM_ARTIFACT_NAME: app-sbom.cyclonedx.json
28
+ MUTATION_THRESHOLD: "60"
29
+
30
+ permissions:
31
+ contents: read
32
+
33
+ concurrency:
34
+ group: ci-${{ github.workflow }}-${{ github.head_ref || github.ref }}
35
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
36
+
37
+ jobs:
38
+ lint:
39
+ name: Lint (Biome)
40
+ if: github.event_name != 'schedule'
41
+ runs-on: agents-arc
42
+ steps:
43
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
44
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
45
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
46
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
47
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
48
+ - run: pnpm install --frozen-lockfile
49
+ - run: pnpm exec biome check .
50
+
51
+ web:
52
+ name: Web (Next.js static export)
53
+ if: github.event_name != 'schedule'
54
+ runs-on: agents-arc
55
+ steps:
56
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
57
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
58
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
59
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
60
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
61
+ - run: pnpm install --frozen-lockfile
62
+ - run: pnpm --filter "$WEB_PACKAGE" run typecheck
63
+ - run: pnpm --filter "$WEB_PACKAGE" run test
64
+ - run: pnpm --filter "$WEB_PACKAGE" run lint:fsd
65
+ - run: pnpm --filter "$WEB_PACKAGE" run build
66
+ - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
67
+ with:
68
+ name: ${{ env.WEB_ARTIFACT_NAME }}
69
+ path: ${{ env.WEB_EXPORT_PATH }}
70
+ retention-days: 3
71
+ if-no-files-found: error
72
+
73
+ mutation-web:
74
+ name: Mutation (web, diff)
75
+ if: github.event_name == 'pull_request'
76
+ runs-on: agents-arc
77
+ timeout-minutes: 25
78
+ steps:
79
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
80
+ with:
81
+ fetch-depth: 0
82
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
83
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
84
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
85
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
86
+ - name: Detect web changes
87
+ id: scope
88
+ run: |
89
+ git fetch origin "$GITHUB_BASE_REF" --depth=1
90
+ if git diff --name-only "origin/$GITHUB_BASE_REF" HEAD | grep -qE "^apps/web/"; then
91
+ echo "run=true" >> "$GITHUB_OUTPUT"
92
+ else
93
+ echo "run=false" >> "$GITHUB_OUTPUT"
94
+ echo "No apps/web changes in this PR; skipping web mutation."
95
+ fi
96
+ - run: pnpm install --frozen-lockfile
97
+ if: steps.scope.outputs.run == 'true'
98
+ - name: StrykerJS (changed files only)
99
+ if: steps.scope.outputs.run == 'true'
100
+ run: pnpm --filter "$WEB_PACKAGE" exec stryker run --since="origin/$GITHUB_BASE_REF"
101
+
102
+ e2e:
103
+ name: E2E (Playwright)
104
+ if: github.event_name != 'schedule'
105
+ needs: web
106
+ runs-on: agents-arc
107
+ steps:
108
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
109
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
110
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
111
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
112
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
113
+ - run: pnpm install --frozen-lockfile
114
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
115
+ with:
116
+ name: ${{ env.WEB_ARTIFACT_NAME }}
117
+ path: ${{ env.WEB_EXPORT_PATH }}
118
+ - run: pnpm --filter "$WEB_PACKAGE" exec playwright install --with-deps chromium webkit
119
+ - run: pnpm --filter "$WEB_PACKAGE" run e2e
120
+ - if: failure()
121
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
122
+ with:
123
+ name: ${{ env.PLAYWRIGHT_ARTIFACT_NAME }}
124
+ path: ${{ env.PLAYWRIGHT_REPORT_PATH }}
125
+ retention-days: 7
126
+
127
+ desktop:
128
+ name: Desktop (Electron)
129
+ if: github.event_name != 'schedule'
130
+ needs: web
131
+ runs-on: agents-arc
132
+ steps:
133
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
134
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
135
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
136
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
137
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
138
+ - run: pnpm install --frozen-lockfile
139
+ - run: pnpm --filter "$DESKTOP_PACKAGE" run typecheck
140
+ - run: pnpm --filter "$DESKTOP_PACKAGE" run build
141
+ - run: |
142
+ test -f "$DESKTOP_MAIN_PATH"
143
+ test -f "$DESKTOP_PRELOAD_PATH"
144
+ grep -q "$DESKTOP_PRELOAD_BRIDGE_PATTERN" "$DESKTOP_PRELOAD_PATH"
145
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
146
+ with:
147
+ name: ${{ env.WEB_ARTIFACT_NAME }}
148
+ path: ${{ env.WEB_EXPORT_PATH }}
149
+ - run: pnpm --filter "$DESKTOP_PACKAGE" exec playwright install-deps chromium
150
+ - run: xvfb-run --auto-servernum pnpm --filter "$DESKTOP_PACKAGE" run e2e
151
+
152
+ mobile:
153
+ name: Mobile (Capacitor)
154
+ if: github.event_name != 'schedule'
155
+ runs-on: agents-arc
156
+ steps:
157
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
158
+ - uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
159
+ with: { version: ${{ env.PNPM_VERSION }}, run_install: false }
160
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
161
+ with: { node-version: ${{ env.NODE_VERSION }}, cache: pnpm }
162
+ - run: pnpm install --frozen-lockfile
163
+ - run: pnpm --filter "$MOBILE_PACKAGE" run typecheck
164
+ - run: |
165
+ if [ -d "$MOBILE_IOS_PATH" ] || [ -d "$MOBILE_ANDROID_PATH" ]; then
166
+ pnpm --filter "$WEB_PACKAGE" run build
167
+ pnpm --filter "$MOBILE_PACKAGE" run sync
168
+ else
169
+ echo "::notice::Native projects absent; skipping Capacitor sync."
170
+ fi
171
+
172
+ secret-scan:
173
+ name: Secret scan (TruffleHog)
174
+ runs-on: agents-arc
175
+ steps:
176
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
177
+ - run: docker run --rm -v "${{ github.workspace }}:/repo" "$TRUFFLEHOG_IMAGE" filesystem /repo --only-verified --fail --no-update
178
+
179
+ deps-and-iac-scan:
180
+ name: Dependencies and IaC (Trivy)
181
+ runs-on: agents-arc
182
+ steps:
183
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
184
+ - uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
185
+ with:
186
+ scan-type: fs
187
+ scanners: vuln,misconfig,secret
188
+ severity: CRITICAL,HIGH
189
+ ignore-unfixed: true
190
+ exit-code: "1"
191
+ format: table
192
+
193
+ sast-scan:
194
+ name: SAST (Semgrep)
195
+ runs-on: agents-arc
196
+ steps:
197
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
198
+ - run: docker run --rm -v "${{ github.workspace }}:/src" -w /src "$SEMGREP_IMAGE" semgrep scan --error --metrics=off --oss-only --disable-version-check --config p/default --config p/security-audit --config p/secrets --config p/typescript --config p/react --exclude-rule yaml.github-actions.security.github-actions-mutable-action-tag.github-actions-mutable-action-tag
199
+
200
+ sbom:
201
+ name: SBOM (CycloneDX)
202
+ runs-on: agents-arc
203
+ steps:
204
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
205
+ - uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0
206
+ with:
207
+ format: cyclonedx-json
208
+ artifact-name: ${{ env.SBOM_ARTIFACT_NAME }}
@@ -1,109 +1,109 @@
1
- name: Bug report
2
- description: Report a defect
3
- labels: ["bug"]
4
- body:
5
- - type: markdown
6
- attributes:
7
- value: |
8
- Thanks for reporting. Do **not** include real secrets or production data — use placeholders.
9
-
10
- For security vulnerabilities, contact the team directly instead of filing a public issue.
11
- - type: dropdown
12
- id: severity
13
- attributes:
14
- label: Severity
15
- options:
16
- - Production-down / data loss
17
- - Major — broken core flow
18
- - Minor — broken edge case
19
- - Cosmetic / polish
20
- validations:
21
- required: true
22
- - type: dropdown
23
- id: frequency
24
- attributes:
25
- label: Frequency
26
- description: How often does this happen?
27
- options:
28
- - Always
29
- - Intermittent
30
- - Only once
31
- validations:
32
- required: true
33
- - type: textarea
34
- id: what-happened
35
- attributes:
36
- label: What happened?
37
- description: A clear description of the bug and its impact.
38
- validations:
39
- required: true
40
- - type: textarea
41
- id: repro
42
- attributes:
43
- label: Steps to reproduce
44
- description: How can a maintainer reproduce it?
45
- placeholder: |
46
- 1. Go to ...
47
- 2. Do ...
48
- 3. See error
49
- validations:
50
- required: true
51
- - type: textarea
52
- id: expected
53
- attributes:
54
- label: Expected behavior
55
- validations:
56
- required: true
57
- - type: dropdown
58
- id: area
59
- attributes:
60
- label: Where does it occur?
61
- options:
62
- - Backend
63
- - Frontend
64
- - Both
65
- - CLI / tooling
66
- - Configuration / deployment
67
- - Documentation
68
- - Other
69
- validations:
70
- required: true
71
- - type: textarea
72
- id: acceptance
73
- attributes:
74
- label: Acceptance criteria
75
- description: How will we know it's fixed? A checklist a reviewer can verify (include the test that should turn green).
76
- placeholder: |
77
- - [ ] ...
78
- - [ ] A test that fails before the fix and passes after
79
- validations:
80
- required: false
81
- - type: textarea
82
- id: open-questions
83
- attributes:
84
- label: Open questions
85
- description: Decisions a maintainer must make before this can be planned. Leave blank if none.
86
- validations:
87
- required: false
88
- - type: textarea
89
- id: environment
90
- attributes:
91
- label: Environment
92
- description: Local vs deployed, branch/commit, OS, runtime versions if relevant.
93
- validations:
94
- required: false
95
- - type: textarea
96
- id: logs
97
- attributes:
98
- label: Logs / screenshots
99
- description: Paste relevant logs or screenshots. Redact secrets and PII.
100
- render: shell
101
- validations:
102
- required: false
103
- - type: textarea
104
- id: related
105
- attributes:
106
- label: Related links
107
- description: Links to related issues, PRs, discussions, or docs. Leave blank if none.
108
- validations:
109
- required: false
1
+ name: Bug report
2
+ description: Report a defect
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for reporting. Do **not** include real secrets or production data — use placeholders.
9
+
10
+ For security vulnerabilities, contact the team directly instead of filing a public issue.
11
+ - type: dropdown
12
+ id: severity
13
+ attributes:
14
+ label: Severity
15
+ options:
16
+ - Production-down / data loss
17
+ - Major — broken core flow
18
+ - Minor — broken edge case
19
+ - Cosmetic / polish
20
+ validations:
21
+ required: true
22
+ - type: dropdown
23
+ id: frequency
24
+ attributes:
25
+ label: Frequency
26
+ description: How often does this happen?
27
+ options:
28
+ - Always
29
+ - Intermittent
30
+ - Only once
31
+ validations:
32
+ required: true
33
+ - type: textarea
34
+ id: what-happened
35
+ attributes:
36
+ label: What happened?
37
+ description: A clear description of the bug and its impact.
38
+ validations:
39
+ required: true
40
+ - type: textarea
41
+ id: repro
42
+ attributes:
43
+ label: Steps to reproduce
44
+ description: How can a maintainer reproduce it?
45
+ placeholder: |
46
+ 1. Go to ...
47
+ 2. Do ...
48
+ 3. See error
49
+ validations:
50
+ required: true
51
+ - type: textarea
52
+ id: expected
53
+ attributes:
54
+ label: Expected behavior
55
+ validations:
56
+ required: true
57
+ - type: dropdown
58
+ id: area
59
+ attributes:
60
+ label: Where does it occur?
61
+ options:
62
+ - Backend
63
+ - Frontend
64
+ - Both
65
+ - CLI / tooling
66
+ - Configuration / deployment
67
+ - Documentation
68
+ - Other
69
+ validations:
70
+ required: true
71
+ - type: textarea
72
+ id: acceptance
73
+ attributes:
74
+ label: Acceptance criteria
75
+ description: How will we know it's fixed? A checklist a reviewer can verify (include the test that should turn green).
76
+ placeholder: |
77
+ - [ ] ...
78
+ - [ ] A test that fails before the fix and passes after
79
+ validations:
80
+ required: false
81
+ - type: textarea
82
+ id: open-questions
83
+ attributes:
84
+ label: Open questions
85
+ description: Decisions a maintainer must make before this can be planned. Leave blank if none.
86
+ validations:
87
+ required: false
88
+ - type: textarea
89
+ id: environment
90
+ attributes:
91
+ label: Environment
92
+ description: Local vs deployed, branch/commit, OS, runtime versions if relevant.
93
+ validations:
94
+ required: false
95
+ - type: textarea
96
+ id: logs
97
+ attributes:
98
+ label: Logs / screenshots
99
+ description: Paste relevant logs or screenshots. Redact secrets and PII.
100
+ render: shell
101
+ validations:
102
+ required: false
103
+ - type: textarea
104
+ id: related
105
+ attributes:
106
+ label: Related links
107
+ description: Links to related issues, PRs, discussions, or docs. Leave blank if none.
108
+ validations:
109
+ required: false