@juangcarmona/lighthouse-sdlc 0.12.0 → 0.14.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 (47) hide show
  1. package/README.md +86 -3
  2. package/completion.md +50 -0
  3. package/execution-environments.md +43 -0
  4. package/package.json +3 -1
  5. package/schemas/execution-environment.schema.json +12 -0
  6. package/skills/implement/SKILL.md +9 -8
  7. package/skills/integrate/SKILL.md +7 -1
  8. package/skills/propose/SKILL.md +1 -1
  9. package/skills/review/SKILL.md +7 -1
  10. package/src/actions-artifact.mjs +17 -0
  11. package/src/completion-actions.mjs +134 -0
  12. package/src/completion.mjs +188 -0
  13. package/src/delivery-events.mjs +42 -0
  14. package/src/execution-environment.mjs +78 -0
  15. package/src/github-profile.mjs +9 -1
  16. package/src/host-contract.mjs +7 -3
  17. package/src/implementation-runtime.mjs +90 -0
  18. package/src/implementation.mjs +155 -0
  19. package/src/install-workflows.mjs +14 -5
  20. package/src/integration-evidence.mjs +80 -0
  21. package/src/issue-actions.mjs +325 -38
  22. package/src/observe-protection.mjs +24 -0
  23. package/src/opencode-execute.mjs +128 -20
  24. package/src/opencode-progress.mjs +48 -0
  25. package/src/process-publication.mjs +90 -0
  26. package/src/proposal-review.mjs +91 -0
  27. package/src/proposal.mjs +110 -0
  28. package/src/stage-dispatch.mjs +148 -0
  29. package/src/stage-transition.mjs +25 -0
  30. package/src/worker-maintenance.mjs +83 -0
  31. package/src/worker-recovery.mjs +106 -0
  32. package/src/worker-reports.mjs +150 -0
  33. package/workflows/lighthouse-sdlc-apply-review.lock.yml +1335 -0
  34. package/workflows/lighthouse-sdlc-apply-review.md +205 -0
  35. package/workflows/lighthouse-sdlc-implement.lock.yml +285 -1158
  36. package/workflows/lighthouse-sdlc-implement.md +193 -28
  37. package/workflows/lighthouse-sdlc-integrate.lock.yml +288 -1154
  38. package/workflows/lighthouse-sdlc-integrate.md +197 -28
  39. package/workflows/lighthouse-sdlc-propose.lock.yml +274 -1157
  40. package/workflows/lighthouse-sdlc-propose.md +183 -28
  41. package/workflows/lighthouse-sdlc-refine.lock.yml +263 -90
  42. package/workflows/lighthouse-sdlc-refine.md +45 -4
  43. package/workflows/lighthouse-sdlc-review.lock.yml +288 -1154
  44. package/workflows/lighthouse-sdlc-review.md +197 -28
  45. package/workflows/lighthouse-sdlc-router.yml +91 -17
  46. package/workflows/lighthouse-worker-maintenance.yml +126 -0
  47. package/workflows/shared/lighthouse-opencode.md +4 -2
@@ -0,0 +1,205 @@
1
+ ---
2
+ # Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
3
+ name: Lighthouse SDLC apply-review
4
+ description: Apply authorized feedback to the existing proposal or implementation PR.
5
+ run-name: "apply-review #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
6
+ concurrency:
7
+ group: lighthouse-issue-${{ inputs.issue }}
8
+ cancel-in-progress: false
9
+ queue: max
10
+ job-discriminator: ${{ github.run_id }}
11
+ on:
12
+ # The required preparation job authenticates the originating owner request.
13
+ roles: all
14
+ workflow_dispatch:
15
+ inputs:
16
+ issue:
17
+ description: Source issue
18
+ required: true
19
+ type: string
20
+ dispatch-request:
21
+ description: Authenticated router receipt comment ID
22
+ required: true
23
+ type: string
24
+ needs: [prepare]
25
+ if: needs.prepare.outputs.eligible == 'true'
26
+ runs-on: [self-hosted, linux, lighthouse-workflow]
27
+ runs-on-slim: ubuntu-24.04
28
+ timeout-minutes: 55
29
+ env:
30
+ LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
31
+ LIGHTHOUSE_WORKER: apply-review
32
+ LIGHTHOUSE_DISPATCH_REQUIRED: "true"
33
+ permissions:
34
+ contents: read
35
+ engine:
36
+ id: opencode
37
+ command: node
38
+ imports:
39
+ - shared/lighthouse-opencode.md
40
+ # Subscription authentication runs inside the operator's Docker engine sandbox.
41
+ # This profile does not claim AWF network isolation or API-proxy credential isolation.
42
+ strict: false
43
+ features:
44
+ dangerously-disable-sandbox-agent: true
45
+ sandbox:
46
+ agent: false
47
+ tools:
48
+ github: false
49
+ safe-outputs:
50
+ create-issue: false
51
+ report-incomplete: false
52
+ threat-detection: false
53
+ report-failure-as-issue: false
54
+ report-missing-tool: false
55
+ report-missing-data: false
56
+ noop:
57
+ report-as-issue: false
58
+ network:
59
+ allowed: []
60
+ steps:
61
+ - name: Check out the authorized product revision
62
+ uses: actions/checkout@v5
63
+ with:
64
+ persist-credentials: false
65
+ ref: ${{ needs.prepare.outputs.source_revision }}
66
+ - name: Load the pinned harness package
67
+ uses: actions/checkout@v5
68
+ with:
69
+ repository: juangcarmona/lighthouse
70
+ ref: __LIGHTHOUSE_REF__
71
+ path: tools
72
+ persist-credentials: false
73
+ - name: Load the authorized issue context
74
+ uses: actions/download-artifact@v8
75
+ with:
76
+ name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
77
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
78
+ post-steps:
79
+ - name: Validate the Lighthouse result
80
+ run: node tools/src/packages/sdlc/src/issue-actions.mjs validate
81
+ - name: Preserve the result and runtime receipt
82
+ if: always()
83
+ uses: actions/upload-artifact@v7
84
+ with:
85
+ name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}result-${{ inputs.issue }}-${{ github.run_attempt }}
86
+ path: |
87
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/envelope.json
88
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/runtime.json
89
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/changes.json
90
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/checks.json
91
+ if-no-files-found: error
92
+ retention-days: 14
93
+ - name: Preserve implementation evidence
94
+ if: always()
95
+ uses: actions/upload-artifact@v7
96
+ with:
97
+ name: implementation-evidence-${{ inputs.issue }}-${{ github.run_attempt }}
98
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/evidence/
99
+ if-no-files-found: ignore
100
+ retention-days: 30
101
+ - name: Preserve OpenCode diagnostic events
102
+ if: always()
103
+ uses: actions/upload-artifact@v7
104
+ with:
105
+ name: opencode-implement-events-${{ inputs.issue }}-${{ github.run_attempt }}
106
+ path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
107
+ if-no-files-found: ignore
108
+ retention-days: 14
109
+ jobs:
110
+ prepare:
111
+ outputs:
112
+ eligible: ${{ steps.prepare.outputs.eligible }}
113
+ source_revision: ${{ steps.prepare.outputs.source_revision }}
114
+ artifact_prefix: ${{ steps.prepare.outputs.artifact_prefix }}
115
+ name: Authorize and reserve issue
116
+ runs-on: ubuntu-24.04
117
+ permissions:
118
+ actions: read
119
+ contents: read
120
+ issues: write
121
+ env:
122
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
123
+ steps:
124
+ - uses: actions/checkout@v5
125
+ with:
126
+ repository: juangcarmona/lighthouse
127
+ ref: __LIGHTHOUSE_REF__
128
+ persist-credentials: false
129
+ - uses: actions/setup-node@v5
130
+ with:
131
+ node-version: 24
132
+ - name: Collect verified owner intent and reserve the issue
133
+ id: prepare
134
+ env:
135
+ GH_TOKEN: ${{ github.token }}
136
+ run: node src/packages/sdlc/src/issue-actions.mjs prepare
137
+ - name: Preserve the execution request
138
+ if: steps.prepare.outputs.eligible == 'true'
139
+ uses: actions/upload-artifact@v7
140
+ with:
141
+ name: lighthouse-${{ steps.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
142
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
143
+ if-no-files-found: error
144
+ retention-days: 14
145
+ - name: Release reservation if preparation failed
146
+ if: failure()
147
+ env:
148
+ GH_TOKEN: ${{ github.token }}
149
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
150
+ publish:
151
+ name: Validate, publish and release
152
+ needs: [prepare, agent]
153
+ if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
154
+ runs-on: ubuntu-24.04
155
+ permissions:
156
+ actions: write
157
+ contents: write
158
+ issues: write
159
+ pull-requests: write
160
+ env:
161
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
162
+ steps:
163
+ - uses: actions/checkout@v5
164
+ with:
165
+ repository: juangcarmona/lighthouse
166
+ ref: __LIGHTHOUSE_REF__
167
+ persist-credentials: false
168
+ - uses: actions/setup-node@v5
169
+ with:
170
+ node-version: 24
171
+ - name: Load the execution request
172
+ uses: actions/download-artifact@v8
173
+ with:
174
+ name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
175
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
176
+ - name: Load the candidate result
177
+ if: needs.agent.result == 'success'
178
+ uses: actions/download-artifact@v8
179
+ with:
180
+ name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}result-${{ inputs.issue }}-${{ github.run_attempt }}
181
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
182
+ - name: Require an executed agent
183
+ if: needs.agent.result != 'success'
184
+ run: |
185
+ echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
186
+ exit 1
187
+ - name: Recheck authority and publish the validated result
188
+ if: needs.agent.result == 'success'
189
+ env:
190
+ GH_TOKEN: ${{ github.token }}
191
+ run: node src/packages/sdlc/src/issue-actions.mjs publish
192
+ - name: Release the issue reservation
193
+ if: always()
194
+ env:
195
+ GH_TOKEN: ${{ github.token }}
196
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
197
+ ---
198
+
199
+ # Apply the owner feedback
200
+
201
+ Read `/input/context.json` and execute its supplied lifecycle skill and envelope contract. The stage remains `propose` or `implement`; this worker performs only the authorized correction on the existing PR. Read the full bounded conversation in `context.proposalReview` or `context.review`. Distinguish already-satisfied feedback from outstanding requests and preserve unrelated work. Ambiguous or conflicting requests require a precise question and a blocked result.
202
+
203
+ For a proposal, return the complete revised OpenSpec artifacts using the supplied provider instructions and keep implementation tasks pending. For implementation, update only the configured paths in the disposable workspace, run the configured checks, and retain evidence under `/output/evidence/`. The host independently verifies the candidate and rechecks the PR head and discussion before updating the same branch. It cannot merge through this worker.
204
+
205
+ Write `/output/envelope.json` with the supplied stage and identity. Report successful correction only when the required checks and decisions are satisfied. Stop after producing the candidate; publication belongs to the trusted host.