@juangcarmona/lighthouse-sdlc 0.3.0 → 0.5.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.
- package/README.md +17 -1
- package/capabilities.json +50 -0
- package/commands/capabilities.md +13 -0
- package/commands/control-plane.md +3 -0
- package/commands/decompose.md +3 -0
- package/commands/github-decompose.md +3 -0
- package/commands/github-labels.md +3 -0
- package/commands/github-triage.md +3 -0
- package/commands/launch.md +3 -0
- package/commands/memory.md +3 -0
- package/commands/reconcile-labels.md +3 -0
- package/commands/route.md +3 -0
- package/commands/stacked.md +3 -0
- package/commands/stage-result.md +3 -0
- package/commands/state.md +3 -0
- package/contract.json +10 -3
- package/package.json +21 -2
- package/schemas/capabilities.schema.json +27 -0
- package/schemas/capability-catalog.schema.json +88 -0
- package/schemas/control-plane.schema.json +18 -3
- package/schemas/decomposition.schema.json +13 -0
- package/schemas/sdlc-contract.schema.json +7 -2
- package/schemas/stage-result.schema.json +22 -0
- package/schemas/stages.schema.json +27 -0
- package/schemas/workflow-state.schema.json +22 -0
- package/skills/implement/SKILL.md +2 -2
- package/skills/integrate/SKILL.md +2 -2
- package/skills/propose/SKILL.md +2 -2
- package/skills/refine/SKILL.md +2 -2
- package/skills/review/SKILL.md +2 -2
- package/skills/triage/SKILL.md +2 -2
- package/src/capabilities.mjs +84 -0
- package/src/contracts.mjs +39 -0
- package/src/control-plane.mjs +51 -0
- package/src/decompose.mjs +53 -0
- package/src/github.mjs +67 -0
- package/src/memory.mjs +22 -0
- package/src/reconcile.mjs +169 -0
- package/src/routes.mjs +22 -0
- package/src/sdlc.mjs +243 -7
- package/src/stacked.mjs +50 -0
- package/src/triage.mjs +2 -2
- package/src/workflow.mjs +66 -0
- package/stages.json +12 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This package provides the provider-neutral delivery contract for Lighthouse adopters.
|
|
4
4
|
|
|
5
|
-
It owns the six lifecycle skills, their command entrypoints, route and gate descriptors,
|
|
5
|
+
It owns the six lifecycle skills, their command entrypoints, route, stage and gate descriptors, deterministic triage and decomposition projections, rebuildable state checks and the provider-neutral control-plane contract.
|
|
6
6
|
|
|
7
7
|
It does not run agents, store transcripts, dispatch work between repositories or replace ProductShape, ArcShape, OpenSpec or an agent host.
|
|
8
8
|
|
|
@@ -10,6 +10,22 @@ Install it with the Lighthouse CLI or run `lighthouse-sdlc verify` from the pack
|
|
|
10
10
|
|
|
11
11
|
Run `lighthouse-sdlc triage --input <file>` to validate one structured triage result and receive its proposed workflow and classification labels. The command is read-only by default; `--apply --labels-file <file>` writes only after the report is ready and the labels file still matches the input.
|
|
12
12
|
|
|
13
|
+
Use `lighthouse-sdlc route --route <name>` to inspect a route before running it, `stage-result --input <file>` to validate a stage result, `state --input <events.json>` to replay workflow events, `control-plane --input <file>` to validate host declarations, `decompose --input <file>` to produce a dependency-checked slice plan and `stacked --input <file>` to produce an ordered pull-request plan.
|
|
14
|
+
|
|
15
|
+
Use `lighthouse-sdlc github-triage --repo <owner/repo> --issue <number> --assessment <file>` for the first GitHub projection. It reads issue metadata by default; `--apply` is the explicit label mutation boundary and rereads the issue before writing.
|
|
16
|
+
|
|
17
|
+
Use `lighthouse-sdlc github-decompose --repo <owner/repo> --issue <number> --input <file>` to turn a validated slice plan into child-issue operations. The default is a preview; `--apply` creates the child issues in dependency order with the parent link and acceptance evidence in each body.
|
|
18
|
+
|
|
19
|
+
Declare selected adoption capabilities in a JSON file that follows `schemas/capabilities.schema.json`. `reconcile-labels` previews and optionally applies the first local label projection; `github-labels` reads the repository labels through `gh`, creates only missing labels after an explicit `--apply`, preserves existing values and records `.lighthouse/reconciliation/labels.json`.
|
|
20
|
+
|
|
21
|
+
`capabilities.json` is the versioned adoption catalog. It currently declares the GitHub labels capability, its label roles and classifications, suggested colors and descriptions, declared transition policy and allowed operations.
|
|
22
|
+
|
|
23
|
+
The catalog is descriptive until a consumer creates an explicit plan. `lighthouse upgrade` can discover it, but only `lighthouse capabilities apply --plan-file ... --authorize ...` may write provider state.
|
|
24
|
+
|
|
25
|
+
Every catalog entry must name a registered adapter. Package verification fails when an entry has no adapter, and a new adapter is complete only when its plan, apply, verification, evidence and packaged-consumer fixture are covered by CI.
|
|
26
|
+
|
|
27
|
+
`selected-by-default` capabilities appear as pending until the adopter selects or declines them. `opt-in` capabilities appear as available and do not make `upgrade` or `verify` fail until the adopter selects them.
|
|
28
|
+
|
|
13
29
|
Evidence is explicit: an absent field appears in `missingEvidence`, a check that cannot run appears in `unavailableChecks`, and a judgement awaiting review appears in `pendingReview`. Only `provided` evidence can make a report ready to apply.
|
|
14
30
|
|
|
15
31
|
The package is a source of lifecycle instructions and contracts; an adopter's host adapter decides where provider-specific projections are installed.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./schemas/capability-catalog.schema.json",
|
|
3
|
+
"schemaVersion": 1,
|
|
4
|
+
"package": { "name": "@juangcarmona/lighthouse-sdlc", "version": "0.5.0" },
|
|
5
|
+
"capabilities": [
|
|
6
|
+
{
|
|
7
|
+
"id": "labels",
|
|
8
|
+
"provider": "github",
|
|
9
|
+
"adapter": "github-labels",
|
|
10
|
+
"version": "1",
|
|
11
|
+
"title": "Lighthouse tracker labels",
|
|
12
|
+
"selection": "selected-by-default",
|
|
13
|
+
"configuration": {
|
|
14
|
+
"roles": ["state", "command", "classification"],
|
|
15
|
+
"labels": [
|
|
16
|
+
{ "name": "triage", "role": "state", "color": "8B949E", "description": "Work item is being assessed." },
|
|
17
|
+
{ "name": "refine", "role": "state", "color": "4DA3FF", "description": "Work item is being refined." },
|
|
18
|
+
{ "name": "implement", "role": "state", "color": "1F6FEB", "description": "Work item is being implemented." },
|
|
19
|
+
{ "name": "wip", "role": "state", "color": "D29922", "description": "Work item is actively in progress." },
|
|
20
|
+
{ "name": "review", "role": "state", "color": "A371F7", "description": "Work item is awaiting review." },
|
|
21
|
+
{ "name": "size-s", "role": "classification", "dimension": "size", "value": "S", "color": "BFE3FF", "description": "Small work item." },
|
|
22
|
+
{ "name": "size-m", "role": "classification", "dimension": "size", "value": "M", "color": "80C2FF", "description": "Medium work item." },
|
|
23
|
+
{ "name": "size-l", "role": "classification", "dimension": "size", "value": "L", "color": "4DA3FF", "description": "Large work item." },
|
|
24
|
+
{ "name": "size-xl", "role": "classification", "dimension": "size", "value": "XL", "color": "1F6FEB", "description": "Extra-large work item." },
|
|
25
|
+
{ "name": "urgency-normal", "role": "classification", "dimension": "urgency", "value": "normal", "color": "8B949E", "description": "Normal urgency." },
|
|
26
|
+
{ "name": "urgency-asap", "role": "classification", "dimension": "urgency", "value": "asap", "color": "D29922", "description": "High urgency." },
|
|
27
|
+
{ "name": "urgency-now", "role": "classification", "dimension": "urgency", "value": "now", "color": "CF222E", "description": "Immediate urgency." },
|
|
28
|
+
{ "name": "impact-low", "role": "classification", "dimension": "impact", "value": "low", "color": "E9D5FF", "description": "Low impact." },
|
|
29
|
+
{ "name": "impact-medium", "role": "classification", "dimension": "impact", "value": "medium", "color": "A371F7", "description": "Medium impact." },
|
|
30
|
+
{ "name": "impact-high", "role": "classification", "dimension": "impact", "value": "high", "color": "6E40C9", "description": "High impact." },
|
|
31
|
+
{ "name": "risk-low", "role": "classification", "dimension": "risk", "value": "low", "color": "FFEBE9", "description": "Low delivery risk." },
|
|
32
|
+
{ "name": "risk-medium", "role": "classification", "dimension": "risk", "value": "medium", "color": "F0883E", "description": "Medium delivery risk." },
|
|
33
|
+
{ "name": "risk-high", "role": "classification", "dimension": "risk", "value": "high", "color": "CF222E", "description": "High delivery risk." },
|
|
34
|
+
{ "name": "blast-radius-low", "role": "classification", "dimension": "blast-radius", "value": "low", "color": "C7F0E8", "description": "Small affected surface." },
|
|
35
|
+
{ "name": "blast-radius-medium", "role": "classification", "dimension": "blast-radius", "value": "medium", "color": "4FB3A4", "description": "Medium affected surface." },
|
|
36
|
+
{ "name": "blast-radius-high", "role": "classification", "dimension": "blast-radius", "value": "high", "color": "0F766E", "description": "Large affected surface." }
|
|
37
|
+
],
|
|
38
|
+
"transitions": [{ "from": "triage", "to": "refine" }],
|
|
39
|
+
"transitionPolicy": {
|
|
40
|
+
"mode": "declared-only",
|
|
41
|
+
"description": "Only transitions declared by the adopter are legal; the catalog supplies the initial triage-to-refine example."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"operations": {
|
|
45
|
+
"allowed": ["create", "preserve"],
|
|
46
|
+
"blocked": ["modify", "rename", "remove", "ambiguous"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Capability adoption
|
|
2
|
+
|
|
3
|
+
The SDLC package publishes `capabilities.json` as the versioned catalog of adoptable provider capabilities.
|
|
4
|
+
|
|
5
|
+
The Lighthouse CLI reads this catalog during `upgrade`; package installation and upgrade never write to an external provider.
|
|
6
|
+
|
|
7
|
+
Use `lighthouse capabilities select --id labels --provider github` to make the default selection explicit, or `lighthouse capabilities decline --id labels --provider github` to record an intentional opt-out without contacting GitHub.
|
|
8
|
+
|
|
9
|
+
Use `lighthouse capabilities plan --id labels --provider github --repo <owner/repo> --plan-file .lighthouse/reconciliation/labels.plan.json` to read the current labels and produce a deterministic plan; pass `--input <capabilities.json>` when the adopter declares a mapping instead of using the catalog projection.
|
|
10
|
+
|
|
11
|
+
Use `lighthouse capabilities apply --plan-file .lighthouse/reconciliation/labels.plan.json --authorize <plan-hash>` only after reviewing the plan; the command rereads GitHub, creates missing labels, preserves existing values and records evidence.
|
|
12
|
+
|
|
13
|
+
The plan blocks modifications, renames, removals and ambiguous matches; rerunning the same plan is safe and a failed run can resume after a fresh read.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Reconcile GitHub labels
|
|
2
|
+
|
|
3
|
+
Run `lighthouse-sdlc github-labels --repo <owner/repo> --input .lighthouse/capabilities.json` to preview the repository label plan. Add `--apply` only after reviewing it; the command creates missing labels, preserves existing labels and writes reconciliation evidence.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Reconcile labels
|
|
2
|
+
|
|
3
|
+
Run `lighthouse-sdlc reconcile-labels --input .lighthouse/capabilities.json --existing labels.json` to preview the label capability plan. Add `--apply` only after reviewing it; the command adds missing labels to the local fixture, preserves existing values and writes reconciliation evidence.
|
package/contract.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./schemas/sdlc-contract.schema.json",
|
|
3
3
|
"name": "@juangcarmona/lighthouse-sdlc",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"stages": [
|
|
6
6
|
{ "name": "triage", "skill": "skills/triage/SKILL.md", "command": "commands/triage.md", "gate": "triaged" },
|
|
7
7
|
{ "name": "refine", "skill": "skills/refine/SKILL.md", "command": "commands/refine.md", "gate": "ready" },
|
|
@@ -10,14 +10,21 @@
|
|
|
10
10
|
{ "name": "integrate", "skill": "skills/integrate/SKILL.md", "command": "commands/integrate.md", "gate": "done" },
|
|
11
11
|
{ "name": "review", "skill": "skills/review/SKILL.md", "command": "commands/review.md", "gate": null }
|
|
12
12
|
],
|
|
13
|
-
"utilities": ["status"],
|
|
13
|
+
"utilities": ["status", "route", "state", "stage-result", "control-plane", "memory", "launch", "decompose", "stacked", "github-triage", "github-decompose", "reconcile-labels", "github-labels"],
|
|
14
14
|
"routes": ["supervised", "plan-only", "unattended", "hotfix", "stacked"],
|
|
15
15
|
"metaCommands": ["ff", "hotfix", "decompose", "stacked"],
|
|
16
16
|
"gates": ["triaged", "ready", "planned", "done"],
|
|
17
17
|
"assets": {
|
|
18
18
|
"routes": "routes.json",
|
|
19
19
|
"gates": "gates.json",
|
|
20
|
+
"stages": "stages.json",
|
|
20
21
|
"controlPlaneSchema": "schemas/control-plane.schema.json",
|
|
21
|
-
"triageSchema": "schemas/triage.schema.json"
|
|
22
|
+
"triageSchema": "schemas/triage.schema.json",
|
|
23
|
+
"stageResultSchema": "schemas/stage-result.schema.json",
|
|
24
|
+
"stateSchema": "schemas/workflow-state.schema.json",
|
|
25
|
+
"decompositionSchema": "schemas/decomposition.schema.json",
|
|
26
|
+
"capabilitiesSchema": "schemas/capabilities.schema.json",
|
|
27
|
+
"capabilityCatalog": "capabilities.json",
|
|
28
|
+
"capabilityCatalogSchema": "schemas/capability-catalog.schema.json"
|
|
22
29
|
}
|
|
23
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juangcarmona/lighthouse-sdlc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Provider-neutral SDLC skills, commands and route contracts for Lighthouse adopters",
|
|
6
6
|
"repository": {
|
|
@@ -22,10 +22,12 @@
|
|
|
22
22
|
"files": [
|
|
23
23
|
"commands",
|
|
24
24
|
"contract.json",
|
|
25
|
+
"capabilities.json",
|
|
25
26
|
"gates.json",
|
|
26
27
|
"meta-commands",
|
|
27
28
|
"README.md",
|
|
28
29
|
"routes.json",
|
|
30
|
+
"stages.json",
|
|
29
31
|
"schemas",
|
|
30
32
|
"skills",
|
|
31
33
|
"src"
|
|
@@ -36,8 +38,25 @@
|
|
|
36
38
|
"exports": {
|
|
37
39
|
".": "./src/sdlc.mjs",
|
|
38
40
|
"./triage": "./src/triage.mjs",
|
|
41
|
+
"./contracts": "./src/contracts.mjs",
|
|
42
|
+
"./control-plane": "./src/control-plane.mjs",
|
|
43
|
+
"./decompose": "./src/decompose.mjs",
|
|
44
|
+
"./github": "./src/github.mjs",
|
|
45
|
+
"./memory": "./src/memory.mjs",
|
|
46
|
+
"./routes": "./src/routes.mjs",
|
|
47
|
+
"./reconcile": "./src/reconcile.mjs",
|
|
48
|
+
"./capabilities": "./src/capabilities.mjs",
|
|
49
|
+
"./stacked": "./src/stacked.mjs",
|
|
50
|
+
"./workflow": "./src/workflow.mjs",
|
|
39
51
|
"./contract.json": "./contract.json",
|
|
40
52
|
"./schemas/control-plane.schema.json": "./schemas/control-plane.schema.json",
|
|
41
|
-
"./schemas/triage.schema.json": "./schemas/triage.schema.json"
|
|
53
|
+
"./schemas/triage.schema.json": "./schemas/triage.schema.json",
|
|
54
|
+
"./schemas/stages.schema.json": "./schemas/stages.schema.json",
|
|
55
|
+
"./schemas/stage-result.schema.json": "./schemas/stage-result.schema.json",
|
|
56
|
+
"./schemas/workflow-state.schema.json": "./schemas/workflow-state.schema.json",
|
|
57
|
+
"./schemas/decomposition.schema.json": "./schemas/decomposition.schema.json",
|
|
58
|
+
"./schemas/capabilities.schema.json": "./schemas/capabilities.schema.json",
|
|
59
|
+
"./schemas/capability-catalog.schema.json": "./schemas/capability-catalog.schema.json",
|
|
60
|
+
"./capabilities.json": "./capabilities.json"
|
|
42
61
|
}
|
|
43
62
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/lighthouse-capabilities.schema.json",
|
|
4
|
+
"title": "Lighthouse capability declaration",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "capabilities"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"schemaVersion": { "const": 1 },
|
|
11
|
+
"capabilities": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"minItems": 1,
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["id", "provider", "version"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"id": { "type": "string", "minLength": 1 },
|
|
20
|
+
"provider": { "type": "string", "minLength": 1 },
|
|
21
|
+
"version": { "type": "string", "minLength": 1 },
|
|
22
|
+
"configuration": { "type": "object" }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/capability-catalog.schema.json",
|
|
4
|
+
"title": "Lighthouse adoptable capability catalog",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "package", "capabilities"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"schemaVersion": { "const": 1 },
|
|
11
|
+
"package": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"required": ["name", "version"],
|
|
15
|
+
"properties": {
|
|
16
|
+
"name": { "const": "@juangcarmona/lighthouse-sdlc" },
|
|
17
|
+
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" }
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"capabilities": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"minItems": 1,
|
|
23
|
+
"items": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"additionalProperties": false,
|
|
26
|
+
"required": ["id", "provider", "adapter", "version", "title", "selection", "configuration", "operations"],
|
|
27
|
+
"properties": {
|
|
28
|
+
"id": { "type": "string", "minLength": 1 },
|
|
29
|
+
"provider": { "type": "string", "minLength": 1 },
|
|
30
|
+
"adapter": { "type": "string", "minLength": 1 },
|
|
31
|
+
"version": { "type": "string", "minLength": 1 },
|
|
32
|
+
"title": { "type": "string", "minLength": 1 },
|
|
33
|
+
"selection": { "enum": ["selected-by-default", "opt-in"] },
|
|
34
|
+
"configuration": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": true,
|
|
37
|
+
"properties": {
|
|
38
|
+
"roles": { "type": "array", "items": { "enum": ["state", "command", "classification"] } },
|
|
39
|
+
"labels": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"required": ["name", "role", "description"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"name": { "type": "string", "minLength": 1 },
|
|
47
|
+
"role": { "enum": ["state", "command", "classification"] },
|
|
48
|
+
"dimension": { "type": "string" },
|
|
49
|
+
"value": { "type": "string" },
|
|
50
|
+
"color": { "type": "string", "pattern": "^[0-9A-Fa-f]{6}$" },
|
|
51
|
+
"description": { "type": "string", "minLength": 1 }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"transitions": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"additionalProperties": false,
|
|
60
|
+
"required": ["from", "to"],
|
|
61
|
+
"properties": { "from": { "type": "string" }, "to": { "type": "string" } }
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"transitionPolicy": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"required": ["mode", "description"],
|
|
68
|
+
"properties": {
|
|
69
|
+
"mode": { "enum": ["declared-only"] },
|
|
70
|
+
"description": { "type": "string", "minLength": 1 }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"operations": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["allowed", "blocked"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"allowed": { "type": "array", "items": { "enum": ["create", "preserve", "modify", "rename", "remove", "ambiguous", "unsupported"] } },
|
|
81
|
+
"blocked": { "type": "array", "items": { "enum": ["create", "preserve", "modify", "rename", "remove", "ambiguous", "unsupported"] } }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -19,9 +19,24 @@
|
|
|
19
19
|
},
|
|
20
20
|
"routes": { "type": "array", "items": { "type": "string" } },
|
|
21
21
|
"gates": { "type": "array", "items": { "type": "string" } },
|
|
22
|
-
"state": { "type": "object", "additionalProperties": false, "required": ["provider"], "properties": { "provider": { "type": "string" } } },
|
|
23
|
-
"memory": { "type": "object", "additionalProperties": false, "required": ["provider", "scopes"], "properties": { "provider": { "type": "string" }, "scopes": { "type": "array", "items": { "
|
|
24
|
-
"roles": { "type": "object", "additionalProperties": { "type": "string" } },
|
|
22
|
+
"state": { "type": "object", "additionalProperties": false, "required": ["provider"], "properties": { "provider": { "type": "string" }, "states": { "type": "array", "items": { "enum": ["ready", "running", "waiting-human", "blocked", "succeeded", "failed", "cancelled"] } } } },
|
|
23
|
+
"memory": { "type": "object", "additionalProperties": false, "required": ["provider", "scopes"], "properties": { "provider": { "type": "string" }, "scopes": { "type": "array", "items": { "enum": ["run", "project", "shared"] } }, "shared": { "type": "boolean" } } },
|
|
24
|
+
"roles": { "type": "object", "additionalProperties": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/role" }] } },
|
|
25
25
|
"adapters": { "type": "object", "additionalProperties": { "type": "string" } }
|
|
26
|
+
},
|
|
27
|
+
"$defs": {
|
|
28
|
+
"role": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["inputSchema", "outputSchema", "tools", "writeScope"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"inputSchema": { "type": "string" },
|
|
34
|
+
"outputSchema": { "type": "string" },
|
|
35
|
+
"tools": { "type": "array", "items": { "type": "string" } },
|
|
36
|
+
"writeScope": { "type": "array", "items": { "type": "string" } },
|
|
37
|
+
"limits": { "type": "object" },
|
|
38
|
+
"stopConditions": { "type": "array", "items": { "type": "string" } }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
26
41
|
}
|
|
27
42
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/lighthouse-decomposition.schema.json",
|
|
4
|
+
"title": "Lighthouse decomposition input",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "parent", "slices"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"parent": { "type": "object", "required": ["id", "title"], "properties": { "id": { "type": "string" }, "title": { "type": "string" } }, "additionalProperties": true },
|
|
11
|
+
"slices": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["id", "title", "acceptance", "dependencies"], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "acceptance": { "type": "array", "items": { "type": "string" } }, "dependencies": { "type": "array", "items": { "type": "string" } }, "scope": { "type": "array", "items": { "type": "string" } }, "labels": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": true } }
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -17,12 +17,17 @@
|
|
|
17
17
|
"assets": {
|
|
18
18
|
"type": "object",
|
|
19
19
|
"additionalProperties": false,
|
|
20
|
-
"required": ["routes", "gates", "controlPlaneSchema", "triageSchema"],
|
|
20
|
+
"required": ["routes", "gates", "stages", "controlPlaneSchema", "triageSchema", "stageResultSchema", "stateSchema", "decompositionSchema", "capabilitiesSchema"],
|
|
21
21
|
"properties": {
|
|
22
22
|
"routes": { "type": "string" },
|
|
23
23
|
"gates": { "type": "string" },
|
|
24
|
+
"stages": { "type": "string" },
|
|
24
25
|
"controlPlaneSchema": { "type": "string" },
|
|
25
|
-
"triageSchema": { "type": "string" }
|
|
26
|
+
"triageSchema": { "type": "string" },
|
|
27
|
+
"stageResultSchema": { "type": "string" },
|
|
28
|
+
"stateSchema": { "type": "string" },
|
|
29
|
+
"decompositionSchema": { "type": "string" },
|
|
30
|
+
"capabilitiesSchema": { "type": "string" }
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
},
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/lighthouse-stage-result.schema.json",
|
|
4
|
+
"title": "Lighthouse SDLC stage result",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "runId", "stage", "status", "gate", "evidence", "missingEvidence", "unavailableChecks", "pendingReview", "nextAction"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"runId": { "type": "string", "minLength": 1 },
|
|
11
|
+
"stage": { "enum": ["triage", "refine", "propose", "implement", "integrate", "review"] },
|
|
12
|
+
"status": { "enum": ["ready", "blocked", "failed", "passed"] },
|
|
13
|
+
"gate": { "type": ["string", "null"] },
|
|
14
|
+
"input": { "type": "object" },
|
|
15
|
+
"output": { "type": "object" },
|
|
16
|
+
"evidence": { "type": "array", "items": { "type": "object", "required": ["id", "status"], "properties": { "id": { "type": "string" }, "status": { "enum": ["passed", "failed", "unavailable", "unconfigured", "pending-review", "not-applicable"] }, "source": { "type": "string" }, "reason": { "type": "string" } }, "additionalProperties": false } },
|
|
17
|
+
"missingEvidence": { "type": "array", "items": { "type": "string" } },
|
|
18
|
+
"unavailableChecks": { "type": "array", "items": { "type": "string" } },
|
|
19
|
+
"pendingReview": { "type": "array", "items": { "type": "string" } },
|
|
20
|
+
"nextAction": { "type": "string", "minLength": 1 }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/sdlc-stages.schema.json",
|
|
4
|
+
"title": "Lighthouse SDLC stages",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["$schema", "version", "stages"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"version": { "const": 1 },
|
|
11
|
+
"stages": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/stage" } }
|
|
12
|
+
},
|
|
13
|
+
"$defs": {
|
|
14
|
+
"stage": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["id", "gate", "input", "output", "mutation"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"id": { "type": "string" },
|
|
20
|
+
"gate": { "type": ["string", "null"] },
|
|
21
|
+
"input": { "type": "string" },
|
|
22
|
+
"output": { "type": "string" },
|
|
23
|
+
"mutation": { "enum": ["none", "explicit", "workspace"] }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/juangcarmona/lighthouse/schemas/lighthouse-workflow-state.schema.json",
|
|
4
|
+
"title": "Lighthouse workflow state event",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "eventId", "runId", "route", "stage", "from", "to", "actor", "timestamp", "reason", "evidence"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"eventId": { "type": "string", "minLength": 1 },
|
|
11
|
+
"runId": { "type": "string", "minLength": 1 },
|
|
12
|
+
"parentRunId": { "type": "string" },
|
|
13
|
+
"route": { "type": "string", "minLength": 1 },
|
|
14
|
+
"stage": { "type": "string", "minLength": 1 },
|
|
15
|
+
"from": { "type": ["string", "null"] },
|
|
16
|
+
"to": { "type": "string", "enum": ["ready", "running", "waiting-human", "blocked", "succeeded", "failed", "cancelled"] },
|
|
17
|
+
"actor": { "type": "string", "minLength": 1 },
|
|
18
|
+
"timestamp": { "type": "string", "minLength": 1 },
|
|
19
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
20
|
+
"evidence": { "type": "array" }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -13,8 +13,8 @@ Implement one planned slice at a time.
|
|
|
13
13
|
2. Start with the smallest failing deterministic check when the stack supports red-green development.
|
|
14
14
|
3. Make the smallest change that turns the check green, then run the required unit, integration and applicable higher-level checks.
|
|
15
15
|
4. Record changed paths, commands, results, evidence and any finding that needs a human decision.
|
|
16
|
-
5.
|
|
16
|
+
5. Return a stage result with `stage: implement`, `gate: done`, implementation evidence as output and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays; stop at `done` when the Definition of Done is satisfied.
|
|
17
17
|
|
|
18
18
|
## Completion
|
|
19
19
|
|
|
20
|
-
The slice has reviewable code and
|
|
20
|
+
The slice has reviewable code and a valid `done` stage result for every required check, with no silent scope expansion or automatic transition to integration.
|
|
@@ -13,8 +13,8 @@ Prepare a completed slice for the project's forge and branch policy.
|
|
|
13
13
|
2. Verify the branch, commit, pull request and required CI checks against project policy.
|
|
14
14
|
3. Synchronize the work item and pull request state using the project's configured labels.
|
|
15
15
|
4. Prepare the merge or stacked change action and leave protected or human decisions explicit.
|
|
16
|
-
5. Return the integration record without merging unless the selected route and repository policy authorize it.
|
|
16
|
+
5. Return a stage result with `stage: integrate`, the integration record as output, evidence entries and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays without merging unless the selected route and repository policy authorize it.
|
|
17
17
|
|
|
18
18
|
## Completion
|
|
19
19
|
|
|
20
|
-
The change is ready for its configured merge action, every required check is linked and unresolved decisions have an owner.
|
|
20
|
+
The change is ready for its configured merge action, every required check is linked and unresolved decisions have an owner in the integration result.
|
package/skills/propose/SKILL.md
CHANGED
|
@@ -13,8 +13,8 @@ Describe the smallest implementable solution for a Ready item.
|
|
|
13
13
|
2. Create or update the OpenSpec change artifacts through the installed OpenSpec workflow.
|
|
14
14
|
3. Describe the solution, interfaces, data effects, test impact, slices, risks and Definition of Done.
|
|
15
15
|
4. Write `change-overview` prose with the Humanizer skill while preserving facts, links, commands, frontmatter and code.
|
|
16
|
-
5.
|
|
16
|
+
5. Return a stage result with `stage: propose`, `gate: planned`, the change artifacts as output, evidence entries and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays.
|
|
17
17
|
|
|
18
18
|
## Completion
|
|
19
19
|
|
|
20
|
-
The change artifacts explain the future state, the slices are dependency ordered, the evidence plan is explicit and the
|
|
20
|
+
The change artifacts explain the future state, the slices are dependency ordered, the evidence plan is explicit and the `planned` decision remains visible.
|
package/skills/refine/SKILL.md
CHANGED
|
@@ -13,8 +13,8 @@ Turn a triaged item into a problem that can be designed.
|
|
|
13
13
|
2. State the problem, affected users, constraints, acceptance criteria and explicit out-of-scope work.
|
|
14
14
|
3. Resolve or record dependencies, risks, assumptions and missing evidence.
|
|
15
15
|
4. Check the Definition of Ready and return the evidence that supports each check.
|
|
16
|
-
5.
|
|
16
|
+
5. Return a stage result with `stage: refine`, `gate: ready`, the bounded problem as output, evidence entries and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays.
|
|
17
17
|
|
|
18
18
|
## Completion
|
|
19
19
|
|
|
20
|
-
The work item has a bounded problem statement, testable acceptance criteria, resolved owners for open dependencies and a
|
|
20
|
+
The work item has a bounded problem statement, testable acceptance criteria, resolved owners for open dependencies and a `ready` stage result that names the next decision.
|
package/skills/review/SKILL.md
CHANGED
|
@@ -13,8 +13,8 @@ Close the delivery record and make the next improvement visible.
|
|
|
13
13
|
2. Classify findings as accepted, deferred, fixed or rejected with an owner and follow-up reference.
|
|
14
14
|
3. Record the evidence, outcome, useful learning and any product or architecture follow-up.
|
|
15
15
|
4. Confirm the work item and pull request have the project's final labels.
|
|
16
|
-
5.
|
|
16
|
+
5. Return a stage result with `stage: review`, `gate: null`, the review record as output, evidence entries and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays without opening another delivery gate.
|
|
17
17
|
|
|
18
18
|
## Completion
|
|
19
19
|
|
|
20
|
-
The completed change has a durable review
|
|
20
|
+
The completed change has a durable review result, classified findings and a clear follow-up owner.
|
package/skills/triage/SKILL.md
CHANGED
|
@@ -14,8 +14,8 @@ Classify one work item before refinement.
|
|
|
14
14
|
3. Record size, urgency, impact, dependencies, risk, blast radius, route and owner with confidence and evidence for each assessment.
|
|
15
15
|
4. Mark each evidence field as provided, unavailable or pending-review; leave absent fields without an evidence item.
|
|
16
16
|
5. Propose only the project's declared workflow and classification labels and report the transition.
|
|
17
|
-
6. Return
|
|
17
|
+
6. Return a stage result with `stage: triage`, `gate: triaged`, the triage record as output, evidence entries and separate `missingEvidence`, `unavailableChecks` and `pendingReview` arrays.
|
|
18
18
|
|
|
19
19
|
## Completion
|
|
20
20
|
|
|
21
|
-
The record names the route, owner, labels, assessments, confidence
|
|
21
|
+
The record names the route, owner, labels, assessments, confidence and next decision, and the stage result stops at `triaged` without starting a later stage.
|