@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
@@ -1,41 +1,210 @@
1
1
  ---
2
- # Owned by @juangcarmona/lighthouse-sdlc. Compile with `gh aw compile`; do not edit the lock file.
2
+ # Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
3
3
  name: Lighthouse SDLC integrate
4
- description: Execute only the Lighthouse integration stage and return its declared stage result.
5
- private: true
6
- runs-on: [self-hosted, linux, lighthouse-sdlc]
7
- runs-on-slim: ubuntu-24.04
8
- strict: true
9
- env:
10
- LIGHTHOUSE_STAGE: integrate
11
- LIGHTHOUSE_SKILL: node_modules/@juangcarmona/lighthouse-sdlc/skills/integrate/SKILL.md
4
+ description: Assess integrate with OpenCode and retain a verified delivery record.
5
+ run-name: "integrate #${{ 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 }}
12
11
  on:
13
- workflow_call:
12
+ # The required preparation job authenticates the originating owner request.
13
+ roles: all
14
+ workflow_dispatch:
14
15
  inputs:
15
- route:
16
- description: Lighthouse route selected by the host.
16
+ issue:
17
+ description: Source issue
17
18
  required: true
18
19
  type: string
19
- run-id:
20
- description: Stable Lighthouse run identifier.
20
+ dispatch-request:
21
+ description: Authenticated router receipt comment ID
21
22
  required: true
22
23
  type: string
23
- input:
24
- description: Compact JSON input for this stage.
25
- required: false
26
- type: string
27
- default: '{}'
28
- previous-stage:
29
- description: Previous stage artifact name.
30
- required: false
31
- type: string
32
- default: implement
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: 15
29
+ env:
30
+ LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
31
+ LIGHTHOUSE_STAGE: integrate
32
+ LIGHTHOUSE_DISPATCH_REQUIRED: "true"
33
+ permissions:
34
+ contents: read
35
+ engine:
36
+ id: opencode
37
+ command: node
33
38
  imports:
34
- - shared/lighthouse-sdlc-stage.md
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
+ ref: ${{ needs.prepare.outputs.revision }}
65
+ persist-credentials: false
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-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/completion-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-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
+ if-no-files-found: error
90
+ retention-days: 14
91
+ - name: Preserve OpenCode diagnostic events
92
+ if: always()
93
+ uses: actions/upload-artifact@v7
94
+ with:
95
+ name: opencode-events-${{ inputs.issue }}-${{ github.run_attempt }}
96
+ path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
97
+ if-no-files-found: ignore
98
+ retention-days: 14
99
+ jobs:
100
+ prepare:
101
+ outputs:
102
+ eligible: ${{ steps.prepare.outputs.eligible }}
103
+ revision: ${{ steps.prepare.outputs.revision }}
104
+ name: Verify accepted commit, checks and evidence protection
105
+ runs-on: ubuntu-24.04
106
+ permissions:
107
+ actions: read
108
+ checks: read
109
+ contents: read
110
+ pull-requests: read
111
+ issues: write
112
+ env:
113
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
114
+ steps:
115
+ - uses: actions/checkout@v5
116
+ with:
117
+ repository: juangcarmona/lighthouse
118
+ ref: __LIGHTHOUSE_REF__
119
+ persist-credentials: false
120
+ - uses: actions/setup-node@v5
121
+ with:
122
+ node-version: 24
123
+ - name: Collect verified owner intent and reserve the issue
124
+ id: prepare
125
+ env:
126
+ GH_TOKEN: ${{ github.token }}
127
+ run: node src/packages/sdlc/src/completion-actions.mjs prepare
128
+ - name: Preserve the execution request
129
+ if: steps.prepare.outputs.eligible == 'true'
130
+ uses: actions/upload-artifact@v7
131
+ with:
132
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
133
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
134
+ if-no-files-found: error
135
+ retention-days: 14
136
+ - name: Release reservation if preparation failed
137
+ if: failure()
138
+ env:
139
+ GH_TOKEN: ${{ github.token }}
140
+ run: node src/packages/sdlc/src/completion-actions.mjs cleanup
141
+ publish:
142
+ concurrency:
143
+ group: lighthouse-process-publication
144
+ cancel-in-progress: false
145
+ name: Validate, publish and release
146
+ needs: [prepare, agent]
147
+ if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
148
+ runs-on: ubuntu-24.04
149
+ permissions:
150
+ actions: write
151
+ checks: read
152
+ contents: write
153
+ pull-requests: write
154
+ issues: write
155
+ env:
156
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
157
+ steps:
158
+ - uses: actions/checkout@v5
159
+ with:
160
+ repository: juangcarmona/lighthouse
161
+ ref: __LIGHTHOUSE_REF__
162
+ persist-credentials: false
163
+ - uses: actions/setup-node@v5
164
+ with:
165
+ node-version: 24
166
+ - name: Load the execution request
167
+ uses: actions/download-artifact@v8
168
+ with:
169
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
170
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
171
+ - name: Load the candidate result
172
+ if: needs.agent.result == 'success'
173
+ uses: actions/download-artifact@v8
174
+ with:
175
+ name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
176
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
177
+ - name: Require an executed agent
178
+ if: needs.agent.result != 'success'
179
+ run: |
180
+ echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
181
+ exit 1
182
+ - name: Recheck authority and publish the validated result
183
+ if: needs.agent.result == 'success'
184
+ env:
185
+ GH_TOKEN: ${{ github.token }}
186
+ run: node src/packages/sdlc/src/completion-actions.mjs publish
187
+ - name: Preserve merge and publication receipts
188
+ if: always()
189
+ uses: actions/upload-artifact@v7
190
+ with:
191
+ name: lighthouse-completion-${{ inputs.issue }}-${{ github.run_attempt }}
192
+ path: |
193
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/integration-receipt.json
194
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/publication-receipt.json
195
+ if-no-files-found: warn
196
+ retention-days: 30
197
+ - name: Release the issue reservation
198
+ if: always()
199
+ env:
200
+ GH_TOKEN: ${{ github.token }}
201
+ run: node src/packages/sdlc/src/completion-actions.mjs cleanup
35
202
  ---
36
203
 
37
- # Lighthouse SDLC integrate worker
204
+ # Integrate the accepted delivery
205
+
206
+ Follow `/harness/skills/integrate/SKILL.md` using `/input/context.json`. The host supplies the accepted PR revision, intent and policy fingerprints, changed paths and authenticated GitHub check results. Source under `/workspace` is read-only. Inspect affected guidance and acceptance evidence; a green check alone does not establish intended behavior. Distinguish missing verification from a failed check.
38
207
 
39
- Execute only `integrate` by following `${{ env.LIGHTHOUSE_SKILL }}` and reading the implementation result from `/tmp/gh-aw/agent/previous/stage-result.json` when present; for a supervised run, use the predecessor context in `/tmp/gh-aw/agent/input.json`. Recheck Done evidence, dependencies, branch, pull request and required checks.
208
+ Explain each decision and finding in public progress messages. Write `/output/envelope.json` with the supplied identity. Return `blocked` for unresolved current-stage evidence or decisions. For review, include `output.retrospective` as concise Markdown: what went well, what went wrong, start doing, stop doing and improvement candidates with evidence and an owner. Do not infer recurrence from retries of a single issue. Separate actual source defects from process gaps; proposed guards need their own review and regression proof.
40
209
 
41
- Prepare the configured merge or stacked-change action and leave protected or human decisions explicit. Do not merge unless the selected route and repository policy authorize it. Write one valid result to `/tmp/gh-aw/agent/stage-result.json` with `stage: integrate`, `gate: done`, the integration record in `output`, and separate evidence arrays. Do not invoke `review`; stop at the configured merge preparation, then call `noop` exactly once.
210
+ The publisher rechecks current authority, GitHub checks and reservation. Only an explicit owner dispatch with `merge: true` can authorize integration, and GitHub still enforces merge rules. A passed assessment never proves a merge occurred. Review records learning without changing permissions, opening issues or starting another stage. The host validates the envelope and records the gh-aw completion signal.