@codyswann/lisa 2.201.0 → 2.203.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 +29 -10
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-ready/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +12 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +2 -2
- package/plugins/lisa/commands/lisa/agent-ready.md +6 -0
- package/plugins/lisa/rules/eager/factory-model.md +40 -0
- package/plugins/lisa/rules/reference/factory-model.md +107 -0
- package/plugins/lisa/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/lisa/skills/lisa-agent-ready/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-agy/commands/lisa/agent-ready.md +6 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/commands/lisa/agent-ready.md +6 -0
- package/plugins/lisa-copilot/rules/eager/factory-model.md +40 -0
- package/plugins/lisa-copilot/rules/reference/factory-model.md +107 -0
- package/plugins/lisa-copilot/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/commands/lisa/agent-ready.md +6 -0
- package/plugins/lisa-cursor/rules/factory-model-reference.mdc +112 -0
- package/plugins/lisa-cursor/rules/factory-model.mdc +45 -0
- package/plugins/lisa-cursor/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/commands/lisa/agent-ready.md +6 -0
- package/plugins/src/base/rules/eager/factory-model.md +40 -0
- package/plugins/src/base/rules/reference/factory-model.md +107 -0
- package/plugins/src/base/skills/lisa-agent-ready/SKILL.md +123 -0
- package/plugins/src/base/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/src/base/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/ui/index.html +177 -25
|
@@ -93,6 +93,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
|
|
|
93
93
|
| F2 Epic parent exists and is an Epic | `structural` | false |
|
|
94
94
|
| F3 Linked tickets exist | `structural` | false |
|
|
95
95
|
| F4 Required custom fields populated | `structural` | false |
|
|
96
|
+
| F5 Required external access provable | `technical` | true |
|
|
96
97
|
|
|
97
98
|
Category values are drawn from this fixed set:
|
|
98
99
|
|
|
@@ -246,6 +247,31 @@ For each entry in `links`, invoke `lisa-atlassian-access` `operation: read-ticke
|
|
|
246
247
|
|
|
247
248
|
Use the same project-issue-type-metadata lookup from F1 (via `lisa-atlassian-access`) to learn required custom fields for the issue type. Any required custom field not provided in the spec: FAIL.
|
|
248
249
|
|
|
250
|
+
#### F5 — Required external access provable
|
|
251
|
+
|
|
252
|
+
The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
|
|
253
|
+
reach every external surface the work requires. Enumerate the surfaces this item depends on:
|
|
254
|
+
|
|
255
|
+
- artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
|
|
256
|
+
- systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
|
|
257
|
+
alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
|
|
258
|
+
- tooling the work plainly implies (a deploy target, a database, a third-party API).
|
|
259
|
+
|
|
260
|
+
For each surface, prove **read** access from the current runtime with the cheapest read-only probe
|
|
261
|
+
through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
|
|
262
|
+
(`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
|
|
263
|
+
the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
|
|
264
|
+
access layer, a keychain credential — mirroring the intake agent's discover-first duty.
|
|
265
|
+
|
|
266
|
+
- `PASS` — every required surface is provably readable.
|
|
267
|
+
- `N/A` — the item needs nothing beyond the repository and the tracker itself.
|
|
268
|
+
- `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
|
|
269
|
+
and what was probed. Intake callers must route this to `blocked` + human escalation with the
|
|
270
|
+
missing access spelled out — an input the factory cannot execute never enters the factory.
|
|
271
|
+
|
|
272
|
+
Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
|
|
273
|
+
system, and never invent or ask for credentials inline.
|
|
274
|
+
|
|
249
275
|
## Execution
|
|
250
276
|
|
|
251
277
|
1. Parse `$ARGUMENTS`. If it's a ticket key, fetch the ticket via `lisa-atlassian-access` `operation: read-ticket` and derive the spec from the fetched fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (sub-tasks plus `is blocked by` parentage, resolved as in `lisa-jira-read-ticket`) so S15 can classify the ticket. When the fetched description is ADF, walk the document tree and extract section headings from ADF `heading` nodes, then collect the text between heading nodes for section-specific gates. If the fetched description is a single paragraph containing literal Markdown/wiki heading markers, treat that as a formatting failure rather than accepting substring matches. Otherwise parse the YAML spec.
|
|
@@ -283,6 +309,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
|
|
|
283
309
|
- [PASS|FAIL|N/A] F2 Epic parent exists and is an Epic — <one-line reason>
|
|
284
310
|
- [PASS|FAIL|N/A] F3 Linked tickets exist — <one-line reason>
|
|
285
311
|
- [PASS|FAIL|N/A] F4 Required custom fields populated — <one-line reason>
|
|
312
|
+
- [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
|
|
286
313
|
|
|
287
314
|
### Verdict: PASS | FAIL
|
|
288
315
|
### Failures: <count>
|
|
@@ -301,7 +328,7 @@ The verdict is `PASS` if and only if every applicable gate is `PASS`. Any `FAIL`
|
|
|
301
328
|
|
|
302
329
|
### Failure-detail fields
|
|
303
330
|
|
|
304
|
-
- **gate**: the gate ID (`S1`–`S15`, `F1`–`
|
|
331
|
+
- **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
|
|
305
332
|
- **category**: the gate's fixed category from the table above. Callers use this to label or filter comments — `product-clarity`, `acceptance-criteria`, `design-ux`, `scope`, `dependency`, `data`, `technical`, or `structural`.
|
|
306
333
|
- **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem (e.g., the agent built a malformed spec, an issue type is invalid in the project) and the caller should fix it without bothering the product team. `true` means the PRD needs product input to resolve.
|
|
307
334
|
- **what**: plain-language description of the issue. No gate IDs, no JIRA jargon, no engineering shorthand. A product owner reading this on a Notion comment should understand what is unclear and why.
|
|
@@ -94,6 +94,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
|
|
|
94
94
|
| F2 Project parent exists and is in same team | `structural` | false |
|
|
95
95
|
| F3 Linked items exist | `structural` | false |
|
|
96
96
|
| F4 Required labels exist (or can be created) | `structural` | false |
|
|
97
|
+
| F5 Required external access provable | `technical` | true |
|
|
97
98
|
|
|
98
99
|
Category values are the same fixed set as `lisa-jira-validate-ticket`:
|
|
99
100
|
|
|
@@ -253,6 +254,31 @@ For each entry in `relations`, call `lisa-linear-access operation: get-issue` to
|
|
|
253
254
|
|
|
254
255
|
For each label referenced (`status:*`, `component:<name>`, `prd-*`), confirm via `lisa-linear-access operation: list-issue-labels` (or `lisa-linear-access operation: list-project-labels` for Project labels) that it exists OR is creatable. Linear labels are team-scoped or workspace-scoped; flag if the requested scope is wrong.
|
|
255
256
|
|
|
257
|
+
#### F5 — Required external access provable
|
|
258
|
+
|
|
259
|
+
The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
|
|
260
|
+
reach every external surface the work requires. Enumerate the surfaces this item depends on:
|
|
261
|
+
|
|
262
|
+
- artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
|
|
263
|
+
- systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
|
|
264
|
+
alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
|
|
265
|
+
- tooling the work plainly implies (a deploy target, a database, a third-party API).
|
|
266
|
+
|
|
267
|
+
For each surface, prove **read** access from the current runtime with the cheapest read-only probe
|
|
268
|
+
through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
|
|
269
|
+
(`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
|
|
270
|
+
the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
|
|
271
|
+
access layer, a keychain credential — mirroring the intake agent's discover-first duty.
|
|
272
|
+
|
|
273
|
+
- `PASS` — every required surface is provably readable.
|
|
274
|
+
- `N/A` — the item needs nothing beyond the repository and the tracker itself.
|
|
275
|
+
- `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
|
|
276
|
+
and what was probed. Intake callers must route this to `blocked` + human escalation with the
|
|
277
|
+
missing access spelled out — an input the factory cannot execute never enters the factory.
|
|
278
|
+
|
|
279
|
+
Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
|
|
280
|
+
system, and never invent or ask for credentials inline.
|
|
281
|
+
|
|
256
282
|
## Execution
|
|
257
283
|
|
|
258
284
|
1. Parse `$ARGUMENTS`. If it's an identifier, fetch the item and derive the spec from the fetched fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (sub-issues, project-member issues, plus `blocked_by` parentage, resolved as in `lisa-linear-read-issue`) so S15 can classify the item. Otherwise parse the YAML spec.
|
|
@@ -290,6 +316,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
|
|
|
290
316
|
- [PASS|FAIL|N/A] F2 Project parent exists and is in same team — <one-line reason>
|
|
291
317
|
- [PASS|FAIL|N/A] F3 Linked items exist — <one-line reason>
|
|
292
318
|
- [PASS|FAIL|N/A] F4 Required labels exist (or can be created) — <one-line reason>
|
|
319
|
+
- [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
|
|
293
320
|
|
|
294
321
|
### Verdict: PASS | FAIL
|
|
295
322
|
### Failures: <count>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-setup-automations
|
|
3
|
-
description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates
|
|
3
|
+
description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates six automations: intake-repair (every 60 min), intake PRD (every 60 min), intake tickets (every 10 min), exploratory-bugs (once a day), exploratory-prds (once a day), monitor (once a day). Two flags — auto-start-prds and auto-start-tickets — control whether the ideated PRDs / filed bug tickets are created auto-pickup-ready (prd_ready / ready, default true) or left for human review. Tear down with /tear-down-automations."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -28,18 +28,20 @@ create them; invoke the runtime's automation tool with the spec below.
|
|
|
28
28
|
|
|
29
29
|
## Parameters
|
|
30
30
|
|
|
31
|
-
- `auto-start-prds` (default **
|
|
31
|
+
- `auto-start-prds` (default **true**) — passed as `prd_ready` to the **exploratory-prds**
|
|
32
32
|
automation. `true` → ideated PRDs are created `prd-ready` (auto-picked-up by PRD intake); `false` →
|
|
33
33
|
created as drafts for human review. When `true`, `/lisa:project-ideation` still checks the configured
|
|
34
34
|
PRD queue before writing: existing `prd-ready`, `prd-in-review`, `prd-blocked`, unresolved
|
|
35
35
|
`prd-ticketed`, or unresolved source-reader pressure can intentionally turn the automation cycle into
|
|
36
36
|
a blocked/idle outcome instead of creating another ready PRD.
|
|
37
|
-
- `auto-start-tickets` (default **
|
|
37
|
+
- `auto-start-tickets` (default **true**) — passed as `ready` to the **exploratory-bugs**
|
|
38
38
|
automation. `true` → filed bug/usability tickets are created build-ready (auto-picked-up by ticket
|
|
39
39
|
intake); `false` → created in the backlog for human triage.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
The defaults are autonomous by design — the factory model wants inputs flowing through the gates
|
|
42
|
+
without a human between the loops and the pipeline. Pass `false` explicitly to opt a project into
|
|
43
|
+
human triage. The two flags affect **only** the two exploratory automations; the intake gates'
|
|
44
|
+
adversarial validation remains the quality control either way.
|
|
43
45
|
|
|
44
46
|
## The automations to create
|
|
45
47
|
|
|
@@ -62,6 +64,7 @@ report the exact conflicting path(s).
|
|
|
62
64
|
| **intake-tickets** | `/lisa:intake <build queue>` (e.g. `github intake_mode=build`) | every **10 minutes** |
|
|
63
65
|
| **exploratory-bugs** | `/lisa-<stack>:exploratory-qa ready=<auto-start-tickets>` | **once a day** |
|
|
64
66
|
| **exploratory-prds** | `/lisa:project-ideation prd_ready=<auto-start-prds>` | **once a day** |
|
|
67
|
+
| **monitor** | `/lisa:monitor` | **once a day** |
|
|
65
68
|
|
|
66
69
|
For a Codex `rrule`: every 60 min → `FREQ=HOURLY;INTERVAL=1`; every 10 min →
|
|
67
70
|
`FREQ=MINUTELY;INTERVAL=10`; once a day → `FREQ=DAILY;INTERVAL=1`.
|
|
@@ -92,6 +95,11 @@ place (same names) rather than creating duplicates.
|
|
|
92
95
|
- **exploratory-bugs** is created only when the project ships an `exploratory-qa` command (the
|
|
93
96
|
`expo` / `rails` / `harper-fabric` stacks). If the project has no `lisa-exploratory-qa` skill/command, skip that
|
|
94
97
|
automation and note it — do not invent a command that doesn't exist.
|
|
98
|
+
- **monitor** is created unconditionally: `/lisa:monitor` resolves the connected observability
|
|
99
|
+
providers itself and reports gaps (per its `monitor.gapTiers` config) rather than failing when a
|
|
100
|
+
provider is absent, so an unconnected project gets gap findings instead of a broken automation.
|
|
101
|
+
Its findings become tracker tickets, feeding the pipeline at the build gate like every other
|
|
102
|
+
input.
|
|
95
103
|
- If the runtime has no native scheduler, or the intake queues can't be resolved from config, stop
|
|
96
104
|
and report what's missing rather than guessing.
|
|
97
105
|
- For Codex, if the durable checkout cannot be created, fetched, or verified as a non-bare Git work
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-tear-down-automations
|
|
3
|
-
description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
|
|
3
|
+
description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds, monitor) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -21,9 +21,9 @@ removes them with its **native** scheduling mechanism.
|
|
|
21
21
|
|
|
22
22
|
## Scope (remove only what setup created)
|
|
23
23
|
|
|
24
|
-
- Remove the
|
|
24
|
+
- Remove the six automations `/setup-automations` creates for the current project, matched by the
|
|
25
25
|
stable `lisa-auto-<project>-` name prefix: `intake-repair`, `intake-prd`, `intake-tickets`,
|
|
26
|
-
`exploratory-bugs`, `exploratory-prds`.
|
|
26
|
+
`exploratory-bugs`, `exploratory-prds`, `monitor`.
|
|
27
27
|
- **Never** remove automations for a different project, or any non-Lisa automation (e.g. unrelated
|
|
28
28
|
crawlers/ingestors). Match strictly on the `lisa-auto-<project>-` prefix for THIS project; when in
|
|
29
29
|
doubt about an automation's ownership, leave it and report it rather than deleting it.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Make a brownfield project agent-ready: build the initial knowledge wiki from everything the agent can reach, write wiki/gaps.md with the questions only a human can answer, and converge over re-runs (humans answer, agents absorb) until zero gaps remain. Run before letting the automation fleet operate a brownfield project unattended."
|
|
3
|
+
argument-hint: "[path]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa-agent-ready skill to build the initial knowledge wiki from every reachable source, write the human-answerable gaps to wiki/gaps.md, absorb any answered gaps from a prior run, and report whether the project is agent-ready or how many gaps remain. $ARGUMENTS
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "The Factory Model"
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The Factory Model
|
|
7
|
+
|
|
8
|
+
Lisa's purpose is to run **software factories** in the host project: agent-operated production
|
|
9
|
+
lines that research, plan, implement, and verify software with as few humans as possible. This
|
|
10
|
+
reference maps the model onto the concrete Lisa surfaces so agents act on it rather than around it.
|
|
11
|
+
|
|
12
|
+
## Who this is for
|
|
13
|
+
|
|
14
|
+
The goal of the factory setup is to let **non-technical people create scalable, enterprise-grade
|
|
15
|
+
software** by describing outcomes; the factories supply the engineering discipline. This lowers the
|
|
16
|
+
floor without capping the ceiling — engineers get leverage from the same machinery — and it is why
|
|
17
|
+
the validation gates carry product-readable failure text (`product_relevant`, plain-language
|
|
18
|
+
`what`/`recommendation` fields): the person standing at the gate does not read stack traces. Every
|
|
19
|
+
outward-facing artifact an agent produces (blocked reasons, clarifying questions, tickets,
|
|
20
|
+
verification reports, console copy) is written for that operator.
|
|
21
|
+
|
|
22
|
+
## The four factories
|
|
23
|
+
|
|
24
|
+
| Factory | Creates | Lisa surface | Gate (input signal) |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| **Research** | PRDs | `/lisa:research`, `/lisa:project-ideation` | Prompts and ideation are the main entry points |
|
|
27
|
+
| **Plan** | Work units (epics, stories, tickets, tasks) | `/lisa:plan` → the `*-to-tracker` pipeline | PRD flipped to `prd-ready`, claimed by PRD intake |
|
|
28
|
+
| **Implement** | Quality software (tests, code, UI, APIs, infrastructure) | `/lisa:implement` → build flows | Work unit flipped to `status:ready`, claimed by build intake |
|
|
29
|
+
| **Verify** | A go/no-go decision | `/lisa:verify-prd` (PRD level), `/lisa:verify` (change level) | Shipped PRD rolled up by intake |
|
|
30
|
+
|
|
31
|
+
Verify's no-go path is deliberate: failures re-open the PRD as `ticketed` with **build-ready** fix
|
|
32
|
+
tickets that flow straight back into Implement — never `blocked`. The loop is self-healing.
|
|
33
|
+
|
|
34
|
+
## The gates
|
|
35
|
+
|
|
36
|
+
Handoff happens **outside** the factories. Agents, humans, and automations submit inputs; the
|
|
37
|
+
intake agent (`/lisa:intake`, the `*-prd-intake` / `*-build-intake` agents) adversarially evaluates
|
|
38
|
+
each one:
|
|
39
|
+
|
|
40
|
+
- **Quality**: the validation gates (three-audience description, Gherkin acceptance criteria,
|
|
41
|
+
Validation Journey, structure, scope).
|
|
42
|
+
- **Executability**: the factory must have the tooling *and provable read access to that tooling*
|
|
43
|
+
for everything the input requires — linked documents, dashboards, cloud resources, third-party
|
|
44
|
+
APIs (validator gate **F5 — Required external access provable**). An input the factory cannot
|
|
45
|
+
execute never enters the factory.
|
|
46
|
+
- **Discover-first duty**: intake tries to resolve gaps itself (alternate substrates, configured
|
|
47
|
+
access layers, searching for the missing context). What it genuinely cannot resolve it rejects —
|
|
48
|
+
`blocked` plus a human-needed marker, with clarifying questions or the exact missing access named.
|
|
49
|
+
|
|
50
|
+
## The loops
|
|
51
|
+
|
|
52
|
+
Three schedules feed the pipeline continuously, created by `/lisa:setup-automations` on the
|
|
53
|
+
runtime's native scheduler (Claude Routines, Codex Automations):
|
|
54
|
+
|
|
55
|
+
| Loop | Automation | Feeds | Cadence |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| QA | `exploratory-bugs` (`/lisa:exploratory-qa`) | Implement gate (bug tickets) | daily |
|
|
58
|
+
| Product Planning | `exploratory-prds` (`/lisa:project-ideation`) | Research/Plan gate (PRDs) | daily |
|
|
59
|
+
| Monitoring | `monitor` (`/lisa:monitor`) | Implement gate (regression tickets) | daily |
|
|
60
|
+
|
|
61
|
+
Plus the pipeline movers: `intake-prd` (hourly), `intake-tickets` (every 10 minutes),
|
|
62
|
+
`intake-repair` (hourly). **Autonomy is the default**: `auto-start-prds` and `auto-start-tickets`
|
|
63
|
+
default to `true`, so loop outputs enter the gates pickup-ready and the adversarial intake is the
|
|
64
|
+
quality control. Projects opt into human triage by passing `false`.
|
|
65
|
+
|
|
66
|
+
## Where humans stand
|
|
67
|
+
|
|
68
|
+
Humans act only at explicit exterior gates:
|
|
69
|
+
|
|
70
|
+
- flipping a draft they chose to hold back to `prd-ready` / `status:ready`,
|
|
71
|
+
- approving protected deployments (`github.environments.require_approval`),
|
|
72
|
+
- reviewing low-confidence learning PRs (auto-merge off),
|
|
73
|
+
- answering what intake rejected and raised.
|
|
74
|
+
|
|
75
|
+
Inside a flow, never pause to ask a human whether to proceed — the invocation was the authorization.
|
|
76
|
+
Headless discipline follows: no interactive prompts, idempotent re-runs, clean exits on empty
|
|
77
|
+
queues, and loud, specific failures when something is genuinely blocking.
|
|
78
|
+
|
|
79
|
+
## The brownfield on-ramp
|
|
80
|
+
|
|
81
|
+
Greenfield projects are agent-ready by construction. A brownfield project must earn readiness in
|
|
82
|
+
two ordered steps before the automation fleet runs unattended:
|
|
83
|
+
|
|
84
|
+
1. **Knowledge convergence** (`/lisa:agent-ready`): build the initial knowledge wiki from every
|
|
85
|
+
reachable source — repository, git history, tracker, connected systems — under the operating
|
|
86
|
+
premise *"starting tomorrow, you maintain this project without human input; today is your only
|
|
87
|
+
chance to ask questions."* Everything derivable is derived and written into the wiki; what only
|
|
88
|
+
a human can answer becomes a product-readable entry in `wiki/gaps.md`. Humans answer inline, a
|
|
89
|
+
**fresh session** re-runs the skill, verified answers are absorbed into wiki pages, and the loop
|
|
90
|
+
repeats until a run reports zero open gaps.
|
|
91
|
+
2. **Standards adoption**: apply Lisa's full lint rules, guardrails, and thresholds — the project
|
|
92
|
+
goes red by design — then refactor to conformance **without changing business logic or
|
|
93
|
+
functionality**, via the improve/fix flows, with behavior preservation proven by tests and
|
|
94
|
+
empirical verification.
|
|
95
|
+
|
|
96
|
+
Knowledge before standards: an agent refactoring a codebase it does not yet understand is exactly
|
|
97
|
+
the unattended guessing the gates exist to prevent.
|
|
98
|
+
|
|
99
|
+
## Quality and parity
|
|
100
|
+
|
|
101
|
+
Everything else Lisa installs — skills, hooks, quality checks, guardrails, CI gates, rulesets —
|
|
102
|
+
exists to enforce enterprise-grade quality and verification standards that keep the software
|
|
103
|
+
maintainable. Never weaken a gate to get work through it; fix the work, or raise the
|
|
104
|
+
risk-acceptance decision to a human.
|
|
105
|
+
|
|
106
|
+
Every supported coding agent is a first-class factory operator: Claude Code, Codex, Cursor,
|
|
107
|
+
OpenCode, Antigravity (agy), Copilot. Behavior stays in parity across them, and anything persisted
|
|
108
|
+
for agents (rules, learnings, configuration) must be visible to all of them from a single source of
|
|
109
|
+
truth.
|
|
110
|
+
|
|
111
|
+
End state: end users have zero direct contact with coding agents. They interact with the tracker,
|
|
112
|
+
the PRD source, and the shipped software — the factories do the rest.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "The Factory Model (load-bearing)"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The Factory Model (load-bearing)
|
|
7
|
+
|
|
8
|
+
This project runs as a set of **software factories** — agent-operated production lines with as few
|
|
9
|
+
humans as possible. You are factory machinery, not a chat assistant. Four factories: **Research**
|
|
10
|
+
(creates PRDs) → **Plan** (PRDs → work units) → **Implement** (work units → quality software) →
|
|
11
|
+
**Verify** (go/no-go by using the software like a human; failures become build-ready tickets that
|
|
12
|
+
flow straight back into Implement).
|
|
13
|
+
|
|
14
|
+
The rules that follow from this:
|
|
15
|
+
|
|
16
|
+
1. **Humans are not inside the factories.** Never pause mid-flow to ask a human whether to proceed.
|
|
17
|
+
All handoff happens at the **gates** — the ready-role flips (`prd-ready`, `status:ready`) plus
|
|
18
|
+
intake's adversarial validation.
|
|
19
|
+
2. **The gate is adversarial.** An input enters a factory only when it is high-quality,
|
|
20
|
+
unambiguous, and the factory has the tooling *and provable access to that tooling* to execute it
|
|
21
|
+
(validator gate F5). Try to discover the answers to gaps first; what you genuinely cannot
|
|
22
|
+
resolve, reject to `blocked` and raise to a human with the exact missing thing named.
|
|
23
|
+
3. **Everything runs on schedule.** The intake, QA, Product Planning, and Monitoring loops run as
|
|
24
|
+
native automations (Claude Routines / Codex Automations). Every flow must therefore work
|
|
25
|
+
headless: no interactive prompts, idempotent re-runs, clean exits on empty queues.
|
|
26
|
+
4. **Quality is enforced, not requested.** The skills, hooks, quality checks, and guardrails exist
|
|
27
|
+
to keep the software enterprise-grade and maintainable. Never weaken a gate to get work through
|
|
28
|
+
it — fix the work.
|
|
29
|
+
5. **Write outward for a non-technical operator.** The goal of the factory setup is to let
|
|
30
|
+
non-technical people create scalable software. Everything that crosses a gate outward — blocked
|
|
31
|
+
reasons, clarifying questions, ticket descriptions, verification reports — must be readable by
|
|
32
|
+
someone who does not code; they own product intent, the factories own the engineering.
|
|
33
|
+
6. **Every supported coding agent is a first-class operator.** Claude Code, Codex, Cursor,
|
|
34
|
+
OpenCode, Antigravity, Copilot — behavior must stay in parity, and anything persisted for
|
|
35
|
+
agents must be visible to all of them.
|
|
36
|
+
|
|
37
|
+
Brownfield on-ramp: an existing codebase becomes agent-ready **before** the fleet runs unattended
|
|
38
|
+
— `/lisa:agent-ready` converges human knowledge into the wiki (gaps loop until none remain), then
|
|
39
|
+
standards adoption refactors to conformance without behavior change.
|
|
40
|
+
|
|
41
|
+
End state: end users have zero direct contact with coding agents — they interact with the tracker,
|
|
42
|
+
the PRD source, and the shipped software.
|
|
43
|
+
|
|
44
|
+
Full reference (factory ↔ Lisa surface mapping, loop details, human exterior gates):
|
|
45
|
+
[reference/factory-model.md](factory-model-reference.mdc).
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lisa-agent-ready
|
|
3
|
+
description: "Make a brownfield project agent-ready: build the initial knowledge wiki from everything the agent can reach (repository, git history, connected trackers, docs, observability), then write wiki/gaps.md — the questions only a human can answer before agents can operate the project autonomously. Iterative convergence: humans answer the gaps inline, a fresh session re-runs the skill, verified answers are absorbed into wiki pages, and the loop repeats until a run reports zero open gaps and declares the project agent-ready. This is the knowledge half of brownfield onboarding; standards adoption (applying Lisa's lint rules, guardrails, and thresholds, then refactoring to conform without changing behavior) follows it."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "WebFetch"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Agent-Ready Onboarding: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Run this skill as if the following is literally true — it is the operating premise, not a
|
|
10
|
+
role-play flourish:
|
|
11
|
+
|
|
12
|
+
> **Starting tomorrow, you — the agent — maintain this project without any human input. Today is
|
|
13
|
+
> your only chance to ask questions.** Use the existing connections, the git history, the tracker,
|
|
14
|
+
> the docs, and anything else you have access to, to build the initial knowledge wiki. Critically:
|
|
15
|
+
> write down every gap a human must fill in **today** for you to be able to operate autonomously —
|
|
16
|
+
> the questions you would otherwise have to guess at tomorrow.
|
|
17
|
+
|
|
18
|
+
Greenfield projects start agent-ready by construction. Brownfield projects carry years of tacit
|
|
19
|
+
knowledge in heads, not files — this skill converges that knowledge into the wiki before the
|
|
20
|
+
factories are allowed to run unattended.
|
|
21
|
+
|
|
22
|
+
## What counts as a gap (the judgment rule)
|
|
23
|
+
|
|
24
|
+
A **gap** is something that is (a) not derivable from any source you can reach, and (b) dangerous
|
|
25
|
+
to guess — guessing would risk business logic, product intent, money, data, security, or an
|
|
26
|
+
irreversible external effect. Examples: "why does the billing cutoff run at 02:00 and what breaks
|
|
27
|
+
if it moves", "which of these two payment flows is the live one", "who are the users of the admin
|
|
28
|
+
panel and what must never change for them".
|
|
29
|
+
|
|
30
|
+
**Not a gap**: anything you can derive by reading harder — architecture, conventions, test
|
|
31
|
+
behavior, deploy topology, dead code. Derive it and write it into the wiki instead. A lazy gap
|
|
32
|
+
that a later reader could have answered from the repository is a defect of this skill's output.
|
|
33
|
+
|
|
34
|
+
## Phases
|
|
35
|
+
|
|
36
|
+
### Phase 0 — Preflight
|
|
37
|
+
|
|
38
|
+
1. Ensure the knowledge wiki exists. If the project has no `wiki/`, install it first (delegate to
|
|
39
|
+
the wiki install/setup surface — `/lisa:wiki:install` / `lisa-wiki-setup`); do not hand-roll a
|
|
40
|
+
wiki layout.
|
|
41
|
+
2. Inventory every reachable source: the repository and its full git history, the configured
|
|
42
|
+
`tracker` and `source`, connected MCP servers and access layers (observability, docs,
|
|
43
|
+
analytics), CI history, deployed environments named in config. Record the inventory in the wiki
|
|
44
|
+
so later runs and later agents know what was consulted.
|
|
45
|
+
3. Detect a prior run: if `wiki/gaps.md` exists, this is an **absorption run** — go to Phase 3
|
|
46
|
+
first, then re-audit.
|
|
47
|
+
|
|
48
|
+
### Phase 1 — Ingest
|
|
49
|
+
|
|
50
|
+
Delegate to the wiki's ingestion surface (`lisa-wiki-ingest` and its connectors) across the
|
|
51
|
+
repository, the git history, and each connected source from the Phase 0 inventory. Bounded and
|
|
52
|
+
resumable — prefer several focused ingests over one unbounded crawl.
|
|
53
|
+
|
|
54
|
+
### Phase 2 — Deep-read for autonomy
|
|
55
|
+
|
|
56
|
+
Beyond raw ingestion, author the pages an unattended operator needs, deriving everything derivable:
|
|
57
|
+
architecture and domain glossary, environment/deploy topology, who the users are (personas, if
|
|
58
|
+
discoverable), business rules encoded in code and tests, operational runbooks (how to see logs,
|
|
59
|
+
how to roll back), and the project's danger zones (migrations, money paths, irreversible jobs).
|
|
60
|
+
Update `wiki/index.md` and record the run in `wiki/log.md` per wiki conventions.
|
|
61
|
+
|
|
62
|
+
### Phase 3 — Absorb answered gaps (re-runs only)
|
|
63
|
+
|
|
64
|
+
For each gap in `wiki/gaps.md` a human has answered inline:
|
|
65
|
+
|
|
66
|
+
1. Verify the answer against reachable sources where possible; ask-back in the gap entry (keep it
|
|
67
|
+
`open` with a follow-up question) only when the answer is contradictory or incomplete.
|
|
68
|
+
2. Absorb the verified answer into the proper wiki page(s) — the wiki is the durable home, the
|
|
69
|
+
gaps file is a queue, not a knowledge store.
|
|
70
|
+
3. Mark the entry `absorbed` with a pointer to the page(s) it landed in, and move it to the
|
|
71
|
+
resolved section of the file.
|
|
72
|
+
|
|
73
|
+
Never treat your own inference as a human answer, and never resolve an open gap by guessing.
|
|
74
|
+
|
|
75
|
+
### Phase 4 — Gaps audit
|
|
76
|
+
|
|
77
|
+
Regenerate the open section of `wiki/gaps.md` (create it on the first run). Every entry is written
|
|
78
|
+
for a **non-technical operator** — plain language, no stack traces, no repo jargon — because the
|
|
79
|
+
person answering may not code:
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
## Open gaps (answer inline under each question, then re-run /lisa:agent-ready in a new session)
|
|
83
|
+
|
|
84
|
+
### <stable-slug>
|
|
85
|
+
- **Question**: <one plain-language question>
|
|
86
|
+
- **Why it blocks autonomy**: <what an unattended agent cannot safely do without this>
|
|
87
|
+
- **What was searched**: <the sources consulted before declaring this a gap>
|
|
88
|
+
- **How to answer**: <where the answer likely lives / what format is useful>
|
|
89
|
+
- **Answer**: _(human fills in)_
|
|
90
|
+
- **Status**: open
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Order entries by autonomy impact (what would cause the worst unattended decision first). Keep the
|
|
94
|
+
file short — a gaps file with fifty entries means Phase 2 stopped too early.
|
|
95
|
+
|
|
96
|
+
### Phase 5 — Converge and report
|
|
97
|
+
|
|
98
|
+
- **Open gaps remain** → report the count and the top items, and instruct: a human answers inline
|
|
99
|
+
in `wiki/gaps.md`, then re-runs `/lisa:agent-ready` in a **new session** (a fresh session avoids
|
|
100
|
+
anchoring on this run's assumptions). Commit the wiki changes through the normal wiki PR flow.
|
|
101
|
+
- **Zero open gaps** → declare the project **agent-ready for knowledge**: record the verdict and
|
|
102
|
+
date in the gaps file header and the wiki log, and point at the next step — standards adoption.
|
|
103
|
+
|
|
104
|
+
## After convergence: standards adoption
|
|
105
|
+
|
|
106
|
+
Knowledge first, standards second. Once the loop reports no gaps, apply Lisa's full standards
|
|
107
|
+
(lint rules, guardrails, thresholds) and expect the project to go red — that is the point. Agents
|
|
108
|
+
then refactor the codebase to conform **without changing business logic or functionality**, via
|
|
109
|
+
the existing improve/fix flows, proving behavior is preserved with the test suite and empirical
|
|
110
|
+
verification. Only then should the automation fleet run unattended on a brownfield project.
|
|
111
|
+
|
|
112
|
+
## Rules
|
|
113
|
+
|
|
114
|
+
- Never invent an answer to an open gap; the entire value of the file is that its answers came
|
|
115
|
+
from humans.
|
|
116
|
+
- Gap entries are product-readable (factory-model rule: write outward for a non-technical
|
|
117
|
+
operator).
|
|
118
|
+
- Idempotent: re-runs regenerate the open section in place and never lose or reword a human's
|
|
119
|
+
inline answers.
|
|
120
|
+
- The wiki is the durable store; `wiki/gaps.md` is a queue. Every absorbed answer must land in a
|
|
121
|
+
real wiki page with the gaps entry pointing at it.
|
|
122
|
+
- Follow the wiki's own conventions for commits, `wiki/index.md`, and `wiki/log.md` — this skill
|
|
123
|
+
adds no parallel bookkeeping.
|
|
@@ -23,6 +23,7 @@ Inspect only the Lisa automation fleet for the current project:
|
|
|
23
23
|
- `intake-tickets`
|
|
24
24
|
- `exploratory-bugs` when the current stack supports `exploratory-qa`
|
|
25
25
|
- `exploratory-prds`
|
|
26
|
+
- `monitor`
|
|
26
27
|
|
|
27
28
|
Resolve the expected project identifier, fleet naming prefix, queue arguments, cadence, and stack-support rules from the same contract used by `setup-automations` and `tear-down-automations`. Do **not** invent a second source of truth for fleet naming or queue resolution.
|
|
28
29
|
|
|
@@ -96,6 +96,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
|
|
|
96
96
|
| F2 Parent sub-issue exists and is the right type | `structural` | false |
|
|
97
97
|
| F3 Linked issues exist | `structural` | false |
|
|
98
98
|
| F4 Required labels populated | `structural` | false |
|
|
99
|
+
| F5 Required external access provable | `technical` | true |
|
|
99
100
|
|
|
100
101
|
Category values are the same fixed set as `lisa-jira-validate-ticket`:
|
|
101
102
|
|
|
@@ -257,6 +258,31 @@ For each entry in `links`, run `gh issue view <number> --repo <link-org>/<link-r
|
|
|
257
258
|
|
|
258
259
|
Per `Phase 5` of `lisa-github-write-issue`, every issue MUST carry: `type:<issue_type>`, `status:<status>`, `priority:<priority>`. If any are missing from the spec / live issue, FAIL with the missing label name.
|
|
259
260
|
|
|
261
|
+
#### F5 — Required external access provable
|
|
262
|
+
|
|
263
|
+
The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
|
|
264
|
+
reach every external surface the work requires. Enumerate the surfaces this issue depends on:
|
|
265
|
+
|
|
266
|
+
- artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
|
|
267
|
+
- systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
|
|
268
|
+
alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
|
|
269
|
+
- tooling the work plainly implies (a deploy target, a database, a third-party API).
|
|
270
|
+
|
|
271
|
+
For each surface, prove **read** access from the current runtime with the cheapest read-only probe
|
|
272
|
+
through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
|
|
273
|
+
(`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
|
|
274
|
+
the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
|
|
275
|
+
access layer, a keychain credential — mirroring the intake agent's discover-first duty.
|
|
276
|
+
|
|
277
|
+
- `PASS` — every required surface is provably readable.
|
|
278
|
+
- `N/A` — the issue needs nothing beyond the repository and the tracker itself.
|
|
279
|
+
- `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
|
|
280
|
+
and what was probed. Intake callers must route this to `blocked` + human escalation with the
|
|
281
|
+
missing access spelled out — an input the factory cannot execute never enters the factory.
|
|
282
|
+
|
|
283
|
+
Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
|
|
284
|
+
system, and never invent or ask for credentials inline.
|
|
285
|
+
|
|
260
286
|
## Execution
|
|
261
287
|
|
|
262
288
|
1. Parse `$ARGUMENTS`. If it's an issue ref, fetch via `gh issue view --json` and derive the spec fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (native sub-issues plus body task-list / `Blocked by #<n>` parentage, resolved as in `lisa-github-read-issue`) so S15 can classify the issue. Otherwise parse the YAML spec.
|
|
@@ -294,6 +320,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
|
|
|
294
320
|
- [PASS|FAIL|N/A] F2 Parent sub-issue exists and is the right type — <one-line reason>
|
|
295
321
|
- [PASS|FAIL|N/A] F3 Linked issues exist — <one-line reason>
|
|
296
322
|
- [PASS|FAIL|N/A] F4 Required labels populated — <one-line reason>
|
|
323
|
+
- [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
|
|
297
324
|
|
|
298
325
|
### Verdict: PASS | FAIL
|
|
299
326
|
### Failures: <count>
|
|
@@ -313,7 +340,7 @@ The verdict is `PASS` if every applicable gate is `PASS`. Any `FAIL` makes the v
|
|
|
313
340
|
|
|
314
341
|
Same shape and meaning as `lisa-jira-validate-ticket` so downstream PRD-intake skills (Notion, Confluence, Linear, GitHub) can format comments uniformly:
|
|
315
342
|
|
|
316
|
-
- **gate**: the gate ID (`S1`–`S15`, `F1`–`
|
|
343
|
+
- **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
|
|
317
344
|
- **category**: the gate's fixed category from the table.
|
|
318
345
|
- **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem the caller should fix without bothering product.
|
|
319
346
|
- **what**: plain-language, product-readable.
|
|
@@ -93,6 +93,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
|
|
|
93
93
|
| F2 Epic parent exists and is an Epic | `structural` | false |
|
|
94
94
|
| F3 Linked tickets exist | `structural` | false |
|
|
95
95
|
| F4 Required custom fields populated | `structural` | false |
|
|
96
|
+
| F5 Required external access provable | `technical` | true |
|
|
96
97
|
|
|
97
98
|
Category values are drawn from this fixed set:
|
|
98
99
|
|
|
@@ -246,6 +247,31 @@ For each entry in `links`, invoke `lisa-atlassian-access` `operation: read-ticke
|
|
|
246
247
|
|
|
247
248
|
Use the same project-issue-type-metadata lookup from F1 (via `lisa-atlassian-access`) to learn required custom fields for the issue type. Any required custom field not provided in the spec: FAIL.
|
|
248
249
|
|
|
250
|
+
#### F5 — Required external access provable
|
|
251
|
+
|
|
252
|
+
The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
|
|
253
|
+
reach every external surface the work requires. Enumerate the surfaces this item depends on:
|
|
254
|
+
|
|
255
|
+
- artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
|
|
256
|
+
- systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
|
|
257
|
+
alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
|
|
258
|
+
- tooling the work plainly implies (a deploy target, a database, a third-party API).
|
|
259
|
+
|
|
260
|
+
For each surface, prove **read** access from the current runtime with the cheapest read-only probe
|
|
261
|
+
through the sanctioned access layer: the matching MCP tool or `lisa-*-access` skill, CLI auth
|
|
262
|
+
(`aws sts get-caller-identity`, `gh auth status`, vendor equivalents), or an authenticated fetch of
|
|
263
|
+
the linked artifact. Attempt to resolve a gap before failing — an alternate substrate, a configured
|
|
264
|
+
access layer, a keychain credential — mirroring the intake agent's discover-first duty.
|
|
265
|
+
|
|
266
|
+
- `PASS` — every required surface is provably readable.
|
|
267
|
+
- `N/A` — the item needs nothing beyond the repository and the tracker itself.
|
|
268
|
+
- `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
|
|
269
|
+
and what was probed. Intake callers must route this to `blocked` + human escalation with the
|
|
270
|
+
missing access spelled out — an input the factory cannot execute never enters the factory.
|
|
271
|
+
|
|
272
|
+
Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
|
|
273
|
+
system, and never invent or ask for credentials inline.
|
|
274
|
+
|
|
249
275
|
## Execution
|
|
250
276
|
|
|
251
277
|
1. Parse `$ARGUMENTS`. If it's a ticket key, fetch the ticket via `lisa-atlassian-access` `operation: read-ticket` and derive the spec from the fetched fields — including `build_ready` (label set contains `status:ready`) and `child_refs` (sub-tasks plus `is blocked by` parentage, resolved as in `lisa-jira-read-ticket`) so S15 can classify the ticket. When the fetched description is ADF, walk the document tree and extract section headings from ADF `heading` nodes, then collect the text between heading nodes for section-specific gates. If the fetched description is a single paragraph containing literal Markdown/wiki heading markers, treat that as a formatting failure rather than accepting substring matches. Otherwise parse the YAML spec.
|
|
@@ -283,6 +309,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
|
|
|
283
309
|
- [PASS|FAIL|N/A] F2 Epic parent exists and is an Epic — <one-line reason>
|
|
284
310
|
- [PASS|FAIL|N/A] F3 Linked tickets exist — <one-line reason>
|
|
285
311
|
- [PASS|FAIL|N/A] F4 Required custom fields populated — <one-line reason>
|
|
312
|
+
- [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
|
|
286
313
|
|
|
287
314
|
### Verdict: PASS | FAIL
|
|
288
315
|
### Failures: <count>
|
|
@@ -301,7 +328,7 @@ The verdict is `PASS` if and only if every applicable gate is `PASS`. Any `FAIL`
|
|
|
301
328
|
|
|
302
329
|
### Failure-detail fields
|
|
303
330
|
|
|
304
|
-
- **gate**: the gate ID (`S1`–`S15`, `F1`–`
|
|
331
|
+
- **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
|
|
305
332
|
- **category**: the gate's fixed category from the table above. Callers use this to label or filter comments — `product-clarity`, `acceptance-criteria`, `design-ux`, `scope`, `dependency`, `data`, `technical`, or `structural`.
|
|
306
333
|
- **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem (e.g., the agent built a malformed spec, an issue type is invalid in the project) and the caller should fix it without bothering the product team. `true` means the PRD needs product input to resolve.
|
|
307
334
|
- **what**: plain-language description of the issue. No gate IDs, no JIRA jargon, no engineering shorthand. A product owner reading this on a Notion comment should understand what is unclear and why.
|