@jterrats/open-orchestra 1.0.6 → 1.0.7

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 (108) hide show
  1. package/dist/args.js +6 -2
  2. package/dist/args.js.map +1 -1
  3. package/dist/autonomous-run-state.js +12 -18
  4. package/dist/autonomous-run-state.js.map +1 -1
  5. package/dist/benchmark.js +6 -1
  6. package/dist/benchmark.js.map +1 -1
  7. package/dist/cli.js +5 -12
  8. package/dist/cli.js.map +1 -1
  9. package/dist/command-manifest.js +1 -0
  10. package/dist/command-manifest.js.map +1 -1
  11. package/dist/commands.d.ts +1 -0
  12. package/dist/commands.js +5 -0
  13. package/dist/commands.js.map +1 -1
  14. package/dist/cursor-canvas.js +1 -1
  15. package/dist/cursor-canvas.js.map +1 -1
  16. package/dist/delivery-dashboard.js +8 -5
  17. package/dist/delivery-dashboard.js.map +1 -1
  18. package/dist/extensions.js +2 -1
  19. package/dist/extensions.js.map +1 -1
  20. package/dist/instruction-blocks.js +6 -1
  21. package/dist/instruction-blocks.js.map +1 -1
  22. package/dist/lesson-assist.js +1 -1
  23. package/dist/lesson-assist.js.map +1 -1
  24. package/dist/mcp-tool-adapter.js +2 -2
  25. package/dist/mcp-tool-adapter.js.map +1 -1
  26. package/dist/memory.js +1 -1
  27. package/dist/memory.js.map +1 -1
  28. package/dist/package-info.d.ts +7 -0
  29. package/dist/package-info.js +32 -0
  30. package/dist/package-info.js.map +1 -0
  31. package/dist/phase-executor.js +6 -22
  32. package/dist/phase-executor.js.map +1 -1
  33. package/dist/planning-commands.js +2 -10
  34. package/dist/planning-commands.js.map +1 -1
  35. package/dist/prompt-registry-validation.js +1 -1
  36. package/dist/prompt-registry-validation.js.map +1 -1
  37. package/dist/qa-coverage.js +2 -11
  38. package/dist/qa-coverage.js.map +1 -1
  39. package/dist/release-commands.js +5 -2
  40. package/dist/release-commands.js.map +1 -1
  41. package/dist/release-readiness.d.ts +7 -0
  42. package/dist/release-readiness.js +31 -1
  43. package/dist/release-readiness.js.map +1 -1
  44. package/dist/runtime-budget-envelopes.d.ts +33 -0
  45. package/dist/runtime-budget-envelopes.js +93 -0
  46. package/dist/runtime-budget-envelopes.js.map +1 -0
  47. package/dist/runtime-execution-renderer.js +6 -0
  48. package/dist/runtime-execution-renderer.js.map +1 -1
  49. package/dist/runtime-parent-actions.d.ts +10 -0
  50. package/dist/runtime-parent-actions.js +63 -0
  51. package/dist/runtime-parent-actions.js.map +1 -0
  52. package/dist/runtime-scheduler.d.ts +64 -0
  53. package/dist/runtime-scheduler.js +171 -0
  54. package/dist/runtime-scheduler.js.map +1 -0
  55. package/dist/runtime-spawn-bridge.js +10 -0
  56. package/dist/runtime-spawn-bridge.js.map +1 -1
  57. package/dist/skills-catalog.js +69 -0
  58. package/dist/skills-catalog.js.map +1 -1
  59. package/dist/sonar-commands.d.ts +2 -0
  60. package/dist/sonar-commands.js +56 -0
  61. package/dist/sonar-commands.js.map +1 -0
  62. package/dist/sonar-insights.d.ts +63 -0
  63. package/dist/sonar-insights.js +144 -0
  64. package/dist/sonar-insights.js.map +1 -0
  65. package/dist/sonar-provider.d.ts +12 -0
  66. package/dist/sonar-provider.js +54 -0
  67. package/dist/sonar-provider.js.map +1 -0
  68. package/dist/telemetry-redaction.js +7 -4
  69. package/dist/telemetry-redaction.js.map +1 -1
  70. package/dist/tracker-adapters.js +7 -6
  71. package/dist/tracker-adapters.js.map +1 -1
  72. package/dist/types/model-config.d.ts +3 -0
  73. package/dist/types/runtime.d.ts +26 -0
  74. package/dist/types/workflow-run.d.ts +5 -2
  75. package/dist/types.d.ts +2 -1
  76. package/dist/types.js.map +1 -1
  77. package/dist/upgrade-commands.js +1 -11
  78. package/dist/upgrade-commands.js.map +1 -1
  79. package/dist/web-api-read-routes.js +19 -10
  80. package/dist/web-api-read-routes.js.map +1 -1
  81. package/dist/web-api.js +8 -6
  82. package/dist/web-api.js.map +1 -1
  83. package/dist/web-console/assets/index-CgSKcay8.js +11 -0
  84. package/dist/web-console/index.html +1 -1
  85. package/dist/workflow-markdown.d.ts +2 -1
  86. package/dist/workflow-markdown.js +11 -0
  87. package/dist/workflow-markdown.js.map +1 -1
  88. package/dist/workflow-run-commands.js +37 -2
  89. package/dist/workflow-run-commands.js.map +1 -1
  90. package/dist/workflow-services.d.ts +1 -0
  91. package/dist/workflow-services.js +67 -6
  92. package/dist/workflow-services.js.map +1 -1
  93. package/dist/workflow-task-service.js +11 -3
  94. package/dist/workflow-task-service.js.map +1 -1
  95. package/dist/workspace.js +39 -9
  96. package/dist/workspace.js.map +1 -1
  97. package/docs/audio-video-transcription-skill.md +58 -0
  98. package/docs/command-contracts.md +11 -0
  99. package/docs/core-command-surface.md +6 -0
  100. package/docs/generated-artifact-api-catalog.md +366 -0
  101. package/docs/release-test-matrix.md +9 -5
  102. package/docs/runtime-adapters.md +20 -0
  103. package/docs/site-manifest.json +1 -0
  104. package/docs/sonar-quality-gates.md +79 -5
  105. package/package.json +1 -1
  106. package/skills/audio-video-transcription/SKILL.md +129 -0
  107. package/skills/audio-video-transcription/manifest.json +61 -0
  108. package/dist/web-console/assets/index-BNESIVvk.js +0 -11
@@ -0,0 +1,366 @@
1
+ # Generated Artifact API Catalog
2
+
3
+ Open Orchestra keeps the human-facing flow small: use `orchestra init` to create
4
+ or repair a workspace, and use `orchestra refresh` to reconcile managed
5
+ generated artifacts after initialization.
6
+
7
+ The lower-level commands in this catalog remain available as APIs for tests,
8
+ automation, integrations, and advanced troubleshooting. They should not be the
9
+ first commands shown to new users.
10
+
11
+ ## API Tags
12
+
13
+ - `system`: manages generated files, instruction blocks, manifests, or runtime
14
+ bootstrap artifacts.
15
+ - `process`: derives workflow, phase, skill, or playbook guidance from task
16
+ state.
17
+ - `experience`: renders runtime-specific output for an agent, IDE, web console,
18
+ or other user-facing integration.
19
+
20
+ ## Safety Contract
21
+
22
+ Generated artifact APIs must preserve user-authored content outside managed
23
+ Open Orchestra blocks. `--check` and `--dry-run` must not write files. `--force`
24
+ may replace managed blocks, but it must not overwrite unrelated project
25
+ instructions.
26
+
27
+ Prefer these top-level commands for normal use:
28
+
29
+ ```bash
30
+ orchestra init --check
31
+ orchestra init --force --target codex,claude
32
+ orchestra refresh --check --json
33
+ orchestra refresh --force --runtime-artifacts
34
+ ```
35
+
36
+ ## APIs
37
+
38
+ ### `runtime bootstrap`
39
+
40
+ Tags: `system`, `experience`
41
+
42
+ Renders or upserts runtime bootstrap instructions for a specific agent target.
43
+ Use it when an integration needs a single target file instead of the full
44
+ workspace initialization flow.
45
+
46
+ ```bash
47
+ orchestra runtime bootstrap --target codex --file AGENTS.md --check --json
48
+ orchestra runtime bootstrap --target claude --file CLAUDE.md --force
49
+ ```
50
+
51
+ Representative JSON result:
52
+
53
+ ```json
54
+ {
55
+ "mode": "check",
56
+ "target": "codex",
57
+ "file": "AGENTS.md",
58
+ "status": "unchanged",
59
+ "managedBlock": "runtime-bootstrap",
60
+ "changed": false,
61
+ "blocked": false
62
+ }
63
+ ```
64
+
65
+ ### `instructions apply`
66
+
67
+ Tags: `system`
68
+
69
+ Applies an instruction manifest that may contain multiple managed blocks. Use it
70
+ for tests and bulk reconciliation, not for first-run onboarding.
71
+
72
+ ```bash
73
+ orchestra instructions apply --manifest .agent-workflow/instructions.json --check --json
74
+ ```
75
+
76
+ Representative manifest payload:
77
+
78
+ ```json
79
+ {
80
+ "version": 1,
81
+ "entries": [
82
+ {
83
+ "file": "AGENTS.md",
84
+ "blockId": "runtime-bootstrap",
85
+ "target": "codex",
86
+ "contentFile": ".agent-workflow/generated/codex-bootstrap.md"
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ ### `instructions block`
93
+
94
+ Tags: `system`
95
+
96
+ Upserts one managed instruction block into one file. Use it for focused
97
+ automation when the caller already knows the exact block and target file.
98
+
99
+ ```bash
100
+ orchestra instructions block \
101
+ --file AGENTS.md \
102
+ --block runtime-bootstrap \
103
+ --content-file .agent-workflow/generated/codex-bootstrap.md \
104
+ --target codex \
105
+ --dry-run \
106
+ --json
107
+ ```
108
+
109
+ Representative JSON result:
110
+
111
+ ```json
112
+ {
113
+ "file": "AGENTS.md",
114
+ "blockId": "runtime-bootstrap",
115
+ "target": "codex",
116
+ "mode": "dry-run",
117
+ "status": "changed",
118
+ "changed": true
119
+ }
120
+ ```
121
+
122
+ ### `instructions imports`
123
+
124
+ Tags: `system`
125
+
126
+ Resolves imported instruction fragments from a registry entry. Use it when a
127
+ runtime or installer needs to preview composed instructions before writing a
128
+ managed block.
129
+
130
+ ```bash
131
+ orchestra instructions imports \
132
+ --registry .agent-workflow/instruction-registry.json \
133
+ --entry codex-runtime-bootstrap \
134
+ --target codex \
135
+ --json
136
+ ```
137
+
138
+ Representative JSON result:
139
+
140
+ ```json
141
+ {
142
+ "entry": "codex-runtime-bootstrap",
143
+ "target": "codex",
144
+ "imports": [
145
+ {
146
+ "id": "workflow-required",
147
+ "source": "runtime-bootstrap"
148
+ }
149
+ ],
150
+ "content": "Use Open Orchestra as the local control plane..."
151
+ }
152
+ ```
153
+
154
+ ### `instructions stale`
155
+
156
+ Tags: `system`
157
+
158
+ Detects stale managed instruction blocks by comparing embedded content hashes
159
+ with current generated content.
160
+
161
+ ```bash
162
+ orchestra instructions stale --manifest .agent-workflow/instructions.json --json
163
+ ```
164
+
165
+ Representative JSON result:
166
+
167
+ ```json
168
+ {
169
+ "stale": [
170
+ {
171
+ "file": "CLAUDE.md",
172
+ "blockId": "runtime-bootstrap",
173
+ "target": "claude",
174
+ "expectedHash": "abc123",
175
+ "actualHash": "def456"
176
+ }
177
+ ]
178
+ }
179
+ ```
180
+
181
+ ### `protocol render`
182
+
183
+ Tags: `process`, `experience`
184
+
185
+ Renders subagent collaboration protocol text without writing files.
186
+
187
+ ```bash
188
+ orchestra protocol render --target codex --task STORY-001 --json
189
+ ```
190
+
191
+ Representative JSON result:
192
+
193
+ ```json
194
+ {
195
+ "target": "codex",
196
+ "task": "STORY-001",
197
+ "sections": [
198
+ "delegation boundaries",
199
+ "handoff requirements",
200
+ "lifecycle commands"
201
+ ],
202
+ "content": "Use runtime-native subagents only when the parent runtime supports them..."
203
+ }
204
+ ```
205
+
206
+ ### `protocol block`
207
+
208
+ Tags: `system`, `process`, `experience`
209
+
210
+ Upserts the rendered subagent protocol into a runtime instruction file.
211
+
212
+ ```bash
213
+ orchestra protocol block --file AGENTS.md --target codex --task STORY-001 --check --json
214
+ ```
215
+
216
+ Representative JSON result:
217
+
218
+ ```json
219
+ {
220
+ "file": "AGENTS.md",
221
+ "blockId": "subagent-protocol",
222
+ "target": "codex",
223
+ "task": "STORY-001",
224
+ "status": "unchanged"
225
+ }
226
+ ```
227
+
228
+ ### `skills plan`
229
+
230
+ Tags: `process`
231
+
232
+ Selects task-scoped skills from role, phase, paths, risks, and acceptance
233
+ criteria. This is a planning API; it does not write runtime files.
234
+
235
+ ```bash
236
+ orchestra skills plan --task STORY-001 --json
237
+ ```
238
+
239
+ Representative JSON result:
240
+
241
+ ```json
242
+ {
243
+ "task": "STORY-001",
244
+ "selectedSkills": [
245
+ {
246
+ "id": "qa-evidence",
247
+ "reason": "acceptance criteria require observable CLI evidence"
248
+ }
249
+ ]
250
+ }
251
+ ```
252
+
253
+ ### `skills advise`
254
+
255
+ Tags: `process`, `experience`
256
+
257
+ Selects skills from an advisory prompt without requiring a registered task.
258
+ Use it for advisory mode, discovery, and integrations that have not created a
259
+ workflow task yet.
260
+
261
+ ```bash
262
+ orchestra skills advise \
263
+ --prompt "Generate a release-ready Playwright plan for the web console" \
264
+ --role qa \
265
+ --phase qa \
266
+ --json
267
+ ```
268
+
269
+ Representative JSON result:
270
+
271
+ ```json
272
+ {
273
+ "role": "qa",
274
+ "phase": "qa",
275
+ "selectedSkills": [
276
+ {
277
+ "id": "qa-evidence",
278
+ "activation": "Playwright evidence and acceptance coverage"
279
+ }
280
+ ]
281
+ }
282
+ ```
283
+
284
+ ### `skills render`
285
+
286
+ Tags: `process`, `experience`
287
+
288
+ Renders selected skills into target-specific text for Codex, Claude, Cursor,
289
+ VS Code, Windsurf, or generic runtimes.
290
+
291
+ ```bash
292
+ orchestra skills render --target codex --task STORY-001 --json
293
+ orchestra skills render --target cursor --skills qa-evidence,diagram-export
294
+ ```
295
+
296
+ Representative JSON result:
297
+
298
+ ```json
299
+ {
300
+ "target": "codex",
301
+ "task": "STORY-001",
302
+ "skills": [
303
+ {
304
+ "id": "qa-evidence",
305
+ "title": "QA Evidence Pack"
306
+ }
307
+ ],
308
+ "content": "When validating QA evidence, map every assertion to acceptance criteria..."
309
+ }
310
+ ```
311
+
312
+ ### `workflow render`
313
+
314
+ Tags: `process`, `experience`
315
+
316
+ Renders workflow phase guidance, optionally scoped to a runtime and phase.
317
+
318
+ ```bash
319
+ orchestra workflow render --task STORY-001 --target claude --phase developer --json
320
+ ```
321
+
322
+ Representative JSON result:
323
+
324
+ ```json
325
+ {
326
+ "task": "STORY-001",
327
+ "target": "claude",
328
+ "phase": "developer",
329
+ "loadedPlaybooks": [
330
+ "developer"
331
+ ],
332
+ "content": "Implement domain/model changes before command entry points..."
333
+ }
334
+ ```
335
+
336
+ ### `playbooks scaffold`
337
+
338
+ Tags: `system`, `process`
339
+
340
+ Creates missing phase playbook stubs. It should preserve existing playbooks and
341
+ is best used during project setup or repository maintenance.
342
+
343
+ ```bash
344
+ orchestra playbooks scaffold --phase developer,qa --dry-run --json
345
+ ```
346
+
347
+ Representative JSON result:
348
+
349
+ ```json
350
+ {
351
+ "mode": "dry-run",
352
+ "created": [
353
+ ".agent-workflow/playbooks/developer.md",
354
+ ".agent-workflow/playbooks/qa.md"
355
+ ],
356
+ "unchanged": []
357
+ }
358
+ ```
359
+
360
+ ## Documentation Guidance
361
+
362
+ - Public onboarding should mention only `init` and `refresh` for generated
363
+ artifact management.
364
+ - Reference docs may link to this catalog for advanced automation and testing.
365
+ - API examples should remain representative and avoid depending on local user
366
+ paths, secrets, or generated IDs.
@@ -43,7 +43,7 @@ manual intervention is required.
43
43
  | Secret scanning gate | `npm run secret-scan` | Gitleaks scan with `.gitleaks.toml` when the binary is installed; lightweight fallback for offline local development |
44
44
  | Duplicate-code gate | `npm run duplicates` | jscpd duplicate-code report with generated/runtime outputs excluded and collection-standards follow-up for duplicated domain lists |
45
45
  | Task split guard | `node --test test/task-split-assessment.test.js` | PO/BA functional oversize, Architect technical complexity, routine small-task non-blocking behavior, and markdown evidence rendering |
46
- | Sonar quality gate | GitHub Actions: `Sonar` | conditional quality gate for duplication, bugs, code smells, maintainability, coverage readiness, and security hotspots when `SONAR_TOKEN` is configured |
46
+ | Sonar quality gate | GitHub Actions: `Sonar` or local SonarQube import | conditional quality gate for duplication, bugs, code smells, maintainability, coverage readiness, and security hotspots when a Sonar provider is configured |
47
47
  | Browser E2E | `npm run test:e2e` | Playwright checks map scenario acceptance criteria to visible UI state, API persistence, artifact attachment, responsive layout, and recovery behavior |
48
48
  | Installed package init | `npm run test:e2e:init` | Installed CLI checks map scenario acceptance criteria to stdout, stderr, exit code, filesystem state, JSON contracts, evidence records, and release-readiness outcomes |
49
49
  | Public site build | `npm run site:build` | production site build |
@@ -57,10 +57,14 @@ The default release matrix is offline-friendly. Provider and tracker tests that
57
57
  need network access must honor `SKIP_NETWORK_TESTS` and report skipped status
58
58
  instead of failing offline CI.
59
59
 
60
- Sonar is conditional because it requires `SONAR_TOKEN`. When configured, a
61
- failing Sonar quality gate blocks release on new-code quality. When unavailable
62
- or offline, release evidence must state that Sonar was skipped and attach the
63
- local quality gates that ran instead.
60
+ Sonar is conditional because it requires a configured provider and token.
61
+ SonarCloud automatic runs should be intentionally enabled with
62
+ `SONAR_CLOUD_ENABLED=true`; private or large repositories can use local or
63
+ self-hosted SonarQube instead. When configured, a failing Sonar quality gate
64
+ blocks release on new-code quality after findings are triaged as fix-required,
65
+ accepted risk, false positive, tool limitation, or deferred debt. When
66
+ unavailable or offline, release evidence must state that Sonar was skipped and
67
+ attach the local quality gates that ran instead.
64
68
 
65
69
  The duplicate-code gate is local and CI-friendly after dependencies are
66
70
  installed. When it reports copied domain lists, command matrices, providers,
@@ -56,6 +56,15 @@ config. Runtime packets keep `directProviderApiAllowed: false`; provider API
56
56
  execution only happens in the workflow phase provider layer when policy allows
57
57
  it.
58
58
 
59
+ Provider-backed phases require explicit opt-in. Connecting a provider with
60
+ `--allow-direct-provider-api` records both the allowed provider and
61
+ `runtimePolicy.delegation.allowDirectProviderApi=true`; without that opt-in,
62
+ workflow phases fail before calling the provider. Successful provider-backed
63
+ phases are recorded as `executor: provider-backed-phase` with provider, model,
64
+ fallbacks, and `directProviderApiAllowed: true`. Runtime-native subagent
65
+ requests remain `directProviderApiAllowed: false`, even when provider routing is
66
+ configured for the same role.
67
+
59
68
  ## Init Modes
60
69
 
61
70
  Default project init keeps the current compact bootstrap behavior:
@@ -163,6 +172,14 @@ failed, or timed-out events so the parent runtime can reconcile claimed work,
163
172
  spawned agent ids, stale sessions, and handoff state without inventing a second
164
173
  source of truth.
165
174
 
175
+ Spawn request JSON includes `parentRuntimeAction`, a structured instruction for
176
+ the active parent runtime. Codex receives `kind=codex-spawn-agent` with
177
+ `tool=spawn_agent`; Claude receives `kind=claude-agent-request` with
178
+ `tool=claude-code-agent`; Cursor receives `kind=cursor-background-agent` with
179
+ `tool=cursor-background-agent`. The action points to the prompt artifact,
180
+ expected result artifact, ownership paths, allowed commands, and lifecycle
181
+ commands. It does not include secrets or direct provider credentials.
182
+
166
183
  ## Native Background Agent Notes
167
184
 
168
185
  Claude Code and Cursor do not need Orchestra to call vendor APIs directly.
@@ -173,6 +190,9 @@ They need a precise packet and lifecycle hooks:
173
190
  Claude runtime exposes `Task` as the tool name, treat it as the compatible
174
191
  legacy alias. Record the returned child id or role label through
175
192
  `runtime spawn-lifecycle`.
193
+ - Codex: render `runtime spawn-request`, read `parentRuntimeAction`, and call
194
+ the parent `spawn_agent` tool with the prompt artifact as the role-scoped
195
+ assignment. Keep the child detached unless the parent is blocked.
176
196
  - Cursor: render `runtime spawn-request`, then launch it as a Cursor Background
177
197
  Agent. Background work should stay detached from the current chat and report
178
198
  lifecycle state back to Orchestra before the workflow is resumed.
@@ -140,6 +140,7 @@
140
140
  "reference": {
141
141
  "links": [
142
142
  { "title": "Command contracts", "source": "docs/command-contracts.md", "heading": "Command Contracts" },
143
+ { "title": "Generated artifact APIs", "source": "docs/generated-artifact-api-catalog.md", "heading": "Generated Artifact API Catalog" },
143
144
  { "title": "Runtime LLM flow", "source": "docs/runtime-llm-flow.md", "heading": "Runtime LLM Flow" },
144
145
  { "title": "Tracker adapter contract", "source": "docs/tracker-adapter-contract.md", "heading": "Tracker Adapter Contract" },
145
146
  { "title": "Source of truth and learning", "source": "docs/source-of-truth-and-agent-learning.md", "heading": "Source of Truth and Agent Learning" }
@@ -8,18 +8,39 @@ does not replace secret scanning or runtime policy enforcement.
8
8
  The repository includes `sonar-project.properties` and a dedicated GitHub
9
9
  Actions workflow at `.github/workflows/sonar.yml`.
10
10
 
11
- Required GitHub secret:
11
+ Supported provider modes:
12
+
13
+ - `sonarcloud`: hosted SonarQube Cloud. Best for quick setup and public or
14
+ small repositories where hosted analysis is acceptable.
15
+ - `sonarqube-local`: local SonarQube for development and private-repo
16
+ dogfooding. The default local host is `http://localhost:9000`.
17
+ - `sonarqube-self-hosted`: organization-managed SonarQube Server. Use this for
18
+ regulated tenants, private codebases, or repositories where hosted LOC limits
19
+ and external API permissions are a concern.
20
+
21
+ Required GitHub secret when the GitHub Actions workflow is enabled:
12
22
 
13
23
  - `SONAR_TOKEN`: token for SonarQube Cloud or SonarQube Server.
14
24
 
15
25
  Optional GitHub secret:
16
26
 
17
- - `SONAR_HOST_URL`: required only for self-hosted SonarQube Server. Leave unset
18
- for SonarQube Cloud.
27
+ - `SONAR_HOST_URL`: required for self-hosted SonarQube Server. Leave unset for
28
+ SonarQube Cloud, or set `http://localhost:9000` only for local commands.
29
+
30
+ Optional GitHub variables:
31
+
32
+ - `SONAR_PROVIDER`: `sonarcloud`, `sonarqube-local`, or
33
+ `sonarqube-self-hosted`. GitHub-hosted runners normally use `sonarcloud` or a
34
+ reachable self-hosted server; local SonarQube is intended for local commands.
35
+ - `SONAR_CLOUD_ENABLED`: set to `true` to run SonarCloud automatically on push
36
+ and pull request events. When unset, SonarCloud runs only through manual
37
+ `workflow_dispatch`.
38
+ - `SONAR_QUALITY_GATE_WAIT`: set to `true` to fail the workflow when the remote
39
+ quality gate fails.
19
40
 
20
41
  The workflow skips analysis when `SONAR_TOKEN` is not configured. This keeps
21
- forks and offline development usable while making Sonar a CI quality gate for
22
- configured environments.
42
+ forks and offline development usable. For private repositories, keep
43
+ `SONAR_CLOUD_ENABLED` unset unless hosted analysis is intentionally approved.
23
44
 
24
45
  The workflow supports remote quality gate enforcement when the repository
25
46
  variable `SONAR_QUALITY_GATE_WAIT=true` is configured. In that mode the scanner
@@ -32,6 +53,59 @@ gate status. If the scanner can upload analysis but the wait step fails with
32
53
  `Project not found`, update the `SONAR_TOKEN` permissions or keep
33
54
  `SONAR_QUALITY_GATE_WAIT` unset until the token can read the project.
34
55
 
56
+ ## Local SonarQube
57
+
58
+ Open Orchestra includes `docker-compose.sonar.yml` for local SonarQube
59
+ dogfooding:
60
+
61
+ ```bash
62
+ docker compose -f docker-compose.sonar.yml up -d
63
+ ```
64
+
65
+ Open `http://localhost:9000`, complete the SonarQube first-run setup, create a
66
+ project key, and generate a project token. Then run scanner/import commands
67
+ against the local host. Example import after analysis is available:
68
+
69
+ ```bash
70
+ SONAR_TOKEN=<local-token> node bin/orchestra.js sonar import \
71
+ --provider sonarqube-local \
72
+ --host-url http://localhost:9000 \
73
+ --project-key open-orchestra \
74
+ --branch main \
75
+ --task GH-368-LOCAL-SONARQUBE-PROVIDER \
76
+ --json
77
+ ```
78
+
79
+ HTTP is accepted only for `sonarqube-local` on localhost. Self-hosted and cloud
80
+ hosts must use HTTPS.
81
+
82
+ Sonar reads TypeScript through `tsconfig.sonar.json`, a standalone analyzer
83
+ config that mirrors the build compiler options but lowers only the analyzer
84
+ target to `ES2022`. Keep the main build target unchanged unless runtime support
85
+ changes; the Sonar-specific file exists because SonarQube 9.9 analyzers reject
86
+ newer TypeScript targets such as `ES2023`, including when they appear in an
87
+ extended config.
88
+
89
+ Do not commit local SonarQube data, tokens, database volumes, or exported source
90
+ snippets.
91
+
92
+ ## Finding Triage
93
+
94
+ Sonar findings are not automatic fixes. Before remediation, classify each
95
+ finding as one of:
96
+
97
+ - `fix-required`: confirmed defect or maintainability issue that should be
98
+ corrected now.
99
+ - `accepted-risk`: real finding accepted for a documented reason, owner, and
100
+ review date.
101
+ - `false-positive`: analyzer cannot model the actual behavior.
102
+ - `tool-limitation`: edition, language, generated-code, or framework limitation.
103
+ - `deferred-debt`: valid issue intentionally scheduled for a later task.
104
+
105
+ ESLint suppressions and similar static-analysis exceptions must not be removed
106
+ blindly. Validate whether the suppression is still required, can be narrowed,
107
+ should be fixed, or must be accepted with linked rationale.
108
+
35
109
  Recommended minimum quality gate for new code:
36
110
 
37
111
  - 0 new blocker or critical issues.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jterrats/open-orchestra",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  "extensions/vscode-open-orchestra",
@@ -0,0 +1,129 @@
1
+ # Audio/Video Transcription Evidence
2
+
3
+ Transcribe workflow-local audio and video artifacts into reviewable evidence
4
+ without leaking media, secrets, or regulated data.
5
+
6
+ ## When To Load
7
+
8
+ - Trigger: `transcription`
9
+ - Trigger: `transcribe`
10
+ - Trigger: `transcript`
11
+ - Trigger: `audio`
12
+ - Trigger: `video`
13
+ - Trigger: `recording`
14
+ - Trigger: `demo recording`
15
+ - Trigger: `sprint review`
16
+ - Trigger: `interview`
17
+ - Trigger: `discovery call`
18
+ - Trigger: `support call`
19
+ - Trigger: `meeting recording`
20
+ - Trigger: `voice note`
21
+ - Trigger: `subtitle`
22
+ - Trigger: `vtt`
23
+ - Trigger: `srt`
24
+
25
+ ## Operating Rules
26
+
27
+ 1. Treat media as sensitive by default. Do not send audio, video, or raw
28
+ transcript text to an external provider unless an explicit policy opt-in
29
+ allows that provider and the task evidence requires it.
30
+ 2. Prefer local/offline engines for first pass transcription. If no approved
31
+ local engine is available, record a degraded evidence note instead of
32
+ silently uploading media elsewhere.
33
+ 3. Validate the source artifact before processing:
34
+ - path must be workflow-local or an approved evidence artifact reference;
35
+ - file must be readable and inside configured size/duration limits;
36
+ - format/codec support must be known or explicitly marked degraded.
37
+ 4. Record provenance for every transcript:
38
+ - source artifact or workflow-local path;
39
+ - source hash;
40
+ - duration and detected language when available;
41
+ - engine/provider/model;
42
+ - actor, task id, timestamp, and command/API route;
43
+ - consent, retention, and tenant/regulatory notes when supplied.
44
+ 5. Redact before persistence. Remove or mask secrets, API keys, tokens,
45
+ credentials, configured PII, health/financial/legal identifiers, and other
46
+ regulated markers from transcript artifacts and summaries.
47
+ 6. Keep outputs compact and structured:
48
+ - Markdown report for humans;
49
+ - JSON for tools and evidence linking;
50
+ - VTT/SRT only when timestamp confidence is adequate;
51
+ - raw transcripts should be stored as files, not pasted into handoffs.
52
+ 7. Extract workflow findings from transcript content:
53
+ - decisions;
54
+ - risks;
55
+ - action items;
56
+ - acceptance-criteria candidates;
57
+ - defects or support issues;
58
+ - lesson-learned candidates;
59
+ - unresolved questions.
60
+ 8. QA evidence must map transcript findings to acceptance criteria and timestamp
61
+ ranges. A transcript alone is not proof unless the relevant behavior or
62
+ decision is referenced with observable evidence.
63
+
64
+ ## Failure Modes
65
+
66
+ Fail closed or produce degraded evidence for:
67
+
68
+ - missing `ffmpeg` or local transcription engine;
69
+ - unsupported codec or corrupted media;
70
+ - oversized file or excessive duration;
71
+ - provider policy blocks external transcription;
72
+ - unreadable or non-workflow-local artifact path;
73
+ - redaction engine failure;
74
+ - partial transcript or low timestamp confidence;
75
+ - missing consent/retention requirements in regulated contexts.
76
+
77
+ ## Transcript Evidence Template
78
+
79
+ ```md
80
+ # Transcript Evidence
81
+
82
+ Task:
83
+ Source artifact:
84
+ Source hash:
85
+ Duration:
86
+ Language:
87
+ Engine/provider/model:
88
+ Actor:
89
+ Generated at:
90
+ Consent/retention:
91
+ Redaction policy:
92
+
93
+ ## Acceptance Criteria Mapping
94
+
95
+ | AC | Timestamp | Evidence | Result | Notes |
96
+ | -- | --------- | -------- | ------ | ----- |
97
+
98
+ ## Decisions
99
+
100
+ | Timestamp | Decision | Owner | Follow-up |
101
+ | --------- | -------- | ----- | --------- |
102
+
103
+ ## Risks / Defects
104
+
105
+ | Timestamp | Finding | Severity | Evidence | Owner |
106
+ | --------- | ------- | -------- | -------- | ----- |
107
+
108
+ ## Action Items
109
+
110
+ | Timestamp | Action | Owner | Due |
111
+ | --------- | ------ | ----- | --- |
112
+
113
+ ## Lesson Candidates
114
+
115
+ | Timestamp | Lesson candidate | Prevention |
116
+ | --------- | ---------------- | ---------- |
117
+
118
+ ## Gaps
119
+
120
+ | Gap | Owner | Rationale |
121
+ | --- | ----- | --------- |
122
+ ```
123
+
124
+ ## Evidence
125
+
126
+ - `file`
127
+ - `video`
128
+ - `log`
129
+ - `report`