@juangcarmona/lighthouse-sdlc 0.11.0 → 0.13.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 (34) hide show
  1. package/README.md +45 -9
  2. package/completion.md +48 -0
  3. package/host-contract.md +2 -0
  4. package/package.json +2 -1
  5. package/skills/integrate/SKILL.md +7 -1
  6. package/skills/propose/SKILL.md +1 -1
  7. package/skills/refine/SKILL.md +1 -1
  8. package/skills/review/SKILL.md +7 -1
  9. package/src/completion-actions.mjs +114 -0
  10. package/src/completion.mjs +169 -0
  11. package/src/github-profile.mjs +9 -1
  12. package/src/host-contract.mjs +8 -4
  13. package/src/implementation-runtime.mjs +66 -0
  14. package/src/implementation.mjs +143 -0
  15. package/src/install-workflows.mjs +30 -0
  16. package/src/integration-evidence.mjs +56 -0
  17. package/src/issue-actions.mjs +189 -0
  18. package/src/observe-protection.mjs +24 -0
  19. package/src/opencode-execute.mjs +188 -0
  20. package/src/opencode-progress.mjs +48 -0
  21. package/src/process-publication.mjs +90 -0
  22. package/src/proposal.mjs +96 -0
  23. package/workflows/lighthouse-sdlc-implement.lock.yml +251 -1085
  24. package/workflows/lighthouse-sdlc-implement.md +165 -29
  25. package/workflows/lighthouse-sdlc-integrate.lock.yml +257 -1076
  26. package/workflows/lighthouse-sdlc-integrate.md +175 -29
  27. package/workflows/lighthouse-sdlc-propose.lock.yml +241 -1085
  28. package/workflows/lighthouse-sdlc-propose.md +155 -29
  29. package/workflows/lighthouse-sdlc-refine.lock.yml +239 -1085
  30. package/workflows/lighthouse-sdlc-refine.md +151 -29
  31. package/workflows/lighthouse-sdlc-review.lock.yml +257 -1076
  32. package/workflows/lighthouse-sdlc-review.md +175 -29
  33. package/workflows/lighthouse-sdlc-router.yml +84 -145
  34. package/workflows/shared/lighthouse-opencode.md +22 -0
@@ -1,41 +1,167 @@
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 propose
4
- description: Execute only the Lighthouse proposal 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: propose
11
- LIGHTHOUSE_SKILL: node_modules/@juangcarmona/lighthouse-sdlc/skills/propose/SKILL.md
4
+ description: Produce a validated OpenSpec proposal PR from an owner-authorized ready issue.
12
5
  on:
13
6
  workflow_call:
14
7
  inputs:
15
- route:
16
- description: Lighthouse route selected by the host.
17
- required: true
18
- type: string
19
- run-id:
20
- description: Stable Lighthouse run identifier.
8
+ issue:
21
9
  required: true
22
10
  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: refine
11
+ needs: [prepare]
12
+ runs-on: [self-hosted, linux, lighthouse-workflow]
13
+ runs-on-slim: ubuntu-24.04
14
+ timeout-minutes: 15
15
+ permissions:
16
+ contents: read
17
+ engine:
18
+ id: opencode
19
+ command: node
33
20
  imports:
34
- - shared/lighthouse-sdlc-stage.md
21
+ - shared/lighthouse-opencode.md
22
+ # Subscription authentication runs inside the operator's Docker engine sandbox.
23
+ # This profile does not claim AWF network isolation or API-proxy credential isolation.
24
+ strict: false
25
+ features:
26
+ dangerously-disable-sandbox-agent: true
27
+ sandbox:
28
+ agent: false
29
+ tools:
30
+ github: false
31
+ safe-outputs:
32
+ create-issue: false
33
+ report-incomplete: false
34
+ threat-detection: false
35
+ report-failure-as-issue: false
36
+ report-missing-tool: false
37
+ report-missing-data: false
38
+ noop:
39
+ report-as-issue: false
40
+ network:
41
+ allowed: []
42
+ steps:
43
+ - name: Check out the authorized product revision
44
+ uses: actions/checkout@v5
45
+ with:
46
+ persist-credentials: false
47
+ - name: Load the pinned harness package
48
+ uses: actions/checkout@v5
49
+ with:
50
+ repository: juangcarmona/lighthouse
51
+ ref: __LIGHTHOUSE_REF__
52
+ path: tools
53
+ persist-credentials: false
54
+ - name: Load the authorized issue context
55
+ uses: actions/download-artifact@v8
56
+ with:
57
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
58
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
59
+ post-steps:
60
+ - name: Validate the Lighthouse result
61
+ run: node tools/src/packages/sdlc/src/issue-actions.mjs validate
62
+ - name: Preserve the result and runtime receipt
63
+ if: always()
64
+ uses: actions/upload-artifact@v7
65
+ with:
66
+ name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
67
+ path: |
68
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/envelope.json
69
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/runtime.json
70
+ if-no-files-found: error
71
+ retention-days: 14
72
+ - name: Preserve OpenCode diagnostic events
73
+ if: always()
74
+ uses: actions/upload-artifact@v7
75
+ with:
76
+ name: opencode-events-${{ inputs.issue }}-${{ github.run_attempt }}
77
+ path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
78
+ if-no-files-found: ignore
79
+ retention-days: 14
80
+ jobs:
81
+ prepare:
82
+ name: Authorize and reserve issue
83
+ runs-on: ubuntu-24.04
84
+ permissions:
85
+ actions: read
86
+ contents: read
87
+ issues: write
88
+ env:
89
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
90
+ steps:
91
+ - uses: actions/checkout@v5
92
+ with:
93
+ repository: juangcarmona/lighthouse
94
+ ref: __LIGHTHOUSE_REF__
95
+ persist-credentials: false
96
+ - uses: actions/setup-node@v5
97
+ with:
98
+ node-version: 24
99
+ - name: Collect verified owner intent and reserve the issue
100
+ id: prepare
101
+ env:
102
+ GH_TOKEN: ${{ github.token }}
103
+ run: node src/packages/sdlc/src/issue-actions.mjs prepare
104
+ - name: Preserve the execution request
105
+ uses: actions/upload-artifact@v7
106
+ with:
107
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
108
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
109
+ if-no-files-found: error
110
+ retention-days: 14
111
+ - name: Release reservation if preparation failed
112
+ if: failure()
113
+ env:
114
+ GH_TOKEN: ${{ github.token }}
115
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
116
+ publish:
117
+ name: Validate, publish and release
118
+ needs: [prepare, agent]
119
+ if: always() && needs.prepare.result == 'success'
120
+ runs-on: ubuntu-24.04
121
+ permissions:
122
+ contents: write
123
+ issues: write
124
+ pull-requests: write
125
+ env:
126
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
127
+ steps:
128
+ - uses: actions/checkout@v5
129
+ with:
130
+ repository: juangcarmona/lighthouse
131
+ ref: __LIGHTHOUSE_REF__
132
+ persist-credentials: false
133
+ - uses: actions/setup-node@v5
134
+ with:
135
+ node-version: 24
136
+ - name: Load the execution request
137
+ uses: actions/download-artifact@v8
138
+ with:
139
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
140
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
141
+ - name: Load the candidate result
142
+ if: needs.agent.result == 'success'
143
+ uses: actions/download-artifact@v8
144
+ with:
145
+ name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
146
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
147
+ - name: Recheck authority and publish the validated result
148
+ if: needs.agent.result == 'success'
149
+ env:
150
+ GH_TOKEN: ${{ github.token }}
151
+ run: node src/packages/sdlc/src/issue-actions.mjs publish
152
+ - name: Release the issue reservation
153
+ if: always()
154
+ env:
155
+ GH_TOKEN: ${{ github.token }}
156
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
35
157
  ---
36
158
 
37
- # Lighthouse SDLC propose worker
159
+ # Propose the authorized change
160
+
161
+ Execute only `propose` using the trusted context in `/input/context.json` and the packaged `/harness/skills/propose/SKILL.md`. The host has authenticated the passed refinement and the owner's explicit request. Inspect the current read-only source under `/workspace`, including product and architecture policy, relevant existing specifications and active changes.
162
+
163
+ Write brief public progress before source inspection and when you choose an approach or find a blocker. Explain the decision and supporting evidence. Keep tool payloads out of progress messages.
38
164
 
39
- Execute only `propose` by following `${{ env.LIGHTHOUSE_SKILL }}` and reading the refine 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`. ProductShape, ArcShape and OpenSpec remain their own authorities; preserve their citations and artifact references in evidence.
165
+ Follow `context.proposal.instructions` from the pinned OpenSpec provider, in order: proposal, specifications and design, then tasks. Return the actual Markdown files in `result.output.files`, each with `path` and `content`, under the authorized `context.proposal.root`. Include a concise proposal, design alternatives and trade-offs, testable specification scenarios, dependency-ordered unchecked tasks, validation and visual evidence plans where applicable. Every refined acceptance criterion needs a corresponding task or specification. Preserve existing product authority. Keep unresolved product decisions explicit rather than inventing approval.
40
166
 
41
- Do not invoke `implement` or any later stage. Return one valid result in `/tmp/gh-aw/agent/stage-result.json` with `stage: propose`, `gate: planned`, the change artifacts in `output`, and separate evidence arrays. Stop at the planned gate, then call `noop` exactly once. If a prerequisite or check fails, return the declared failure or blocked status with the evidence preserved.
167
+ Write `/output/envelope.json` using the supplied schema and identity. A complete proposal returns `passed` with gate `planned`; it is a candidate for owner review, not approved implementation. Return `blocked` with the precise missing decision when the proposal cannot be completed. The separate publisher checks the file boundary, runs OpenSpec strict validation and opens a proposal PR. The engine writes no repository files and has no GitHub credentials. End after the envelope; the trusted adapter records gh-aw completion.