@codyswann/lisa 2.60.1 → 2.61.1
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/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/agents/github-agent.md +4 -5
- package/plugins/lisa/agents/github-build-intake.md +1 -1
- package/plugins/lisa/rules/config-resolution.md +3 -4
- package/plugins/lisa/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +13 -13
- package/plugins/lisa/skills/confluence-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/git-submit-pr/SKILL.md +27 -0
- package/plugins/lisa/skills/github-build-intake/SKILL.md +19 -21
- package/plugins/lisa/skills/github-evidence/SKILL.md +3 -26
- package/plugins/lisa/skills/github-evidence/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-journey/SKILL.md +2 -2
- package/plugins/lisa/skills/github-prd-intake/SKILL.md +10 -10
- package/plugins/lisa/skills/github-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/github-sync/SKILL.md +5 -5
- package/plugins/lisa/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/lisa/skills/implement/SKILL.md +8 -1
- package/plugins/lisa/skills/intake/SKILL.md +12 -12
- package/plugins/lisa/skills/intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/jira-build-intake/SKILL.md +11 -11
- package/plugins/lisa/skills/linear-build-intake/SKILL.md +9 -9
- package/plugins/lisa/skills/linear-prd-intake/SKILL.md +12 -12
- package/plugins/lisa/skills/linear-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/lisa/skills/notion-prd-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/setup-github/SKILL.md +0 -1
- package/plugins/lisa/skills/tracker-build-intake/SKILL.md +2 -2
- package/plugins/lisa/skills/tracker-build-intake/agents/openai.yaml +2 -2
- package/plugins/lisa/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/lisa/skills/tracker-sync/SKILL.md +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-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-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-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-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-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-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/github-agent.md +4 -5
- package/plugins/src/base/agents/github-build-intake.md +1 -1
- package/plugins/src/base/rules/config-resolution.md +3 -4
- package/plugins/src/base/rules/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +13 -13
- package/plugins/src/base/skills/git-submit-pr/SKILL.md +27 -0
- package/plugins/src/base/skills/github-build-intake/SKILL.md +19 -21
- package/plugins/src/base/skills/github-evidence/SKILL.md +3 -26
- package/plugins/src/base/skills/github-journey/SKILL.md +2 -2
- package/plugins/src/base/skills/github-prd-intake/SKILL.md +10 -10
- package/plugins/src/base/skills/github-sync/SKILL.md +5 -5
- package/plugins/src/base/skills/github-write-issue/SKILL.md +2 -2
- package/plugins/src/base/skills/implement/SKILL.md +8 -1
- package/plugins/src/base/skills/intake/SKILL.md +12 -12
- package/plugins/src/base/skills/jira-build-intake/SKILL.md +11 -11
- package/plugins/src/base/skills/linear-build-intake/SKILL.md +9 -9
- package/plugins/src/base/skills/linear-prd-intake/SKILL.md +12 -12
- package/plugins/src/base/skills/notion-prd-intake/SKILL.md +11 -11
- package/plugins/src/base/skills/setup-github/SKILL.md +0 -1
- package/plugins/src/base/skills/tracker-build-intake/SKILL.md +2 -2
- package/plugins/src/base/skills/tracker-evidence/SKILL.md +2 -2
- package/plugins/src/base/skills/tracker-sync/SKILL.md +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: notion-prd-intake
|
|
3
|
-
description: "Scans a Notion PRD database for pages in the configured `ready` status and runs
|
|
3
|
+
description: "Scans a Notion PRD database for pages in the configured `ready` status and runs the first eligible one through the dry-run validation pipeline. A PRD that passes every gate gets tickets written and the status flipped to the configured `ticketed` value; a PRD that fails gets clarifying-question comments and the status flipped to the configured `blocked` value. The skill is the runtime for the ready → in_review → blocked|ticketed lifecycle. Composes existing skills (notion-to-tracker, tracker-validate, tracker-source-artifacts, product-walkthrough); does not reimplement their logic."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit", "AskUserQuestion"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit", "AskUserQuestion"]
|
|
|
14
14
|
https://www.notion.so/geminisports/28fd00244d7d47c5866876f7de48c0fe?v=34eba63a2800815891a3000c643f0ea8
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Run one intake cycle against that database.
|
|
17
|
+
Run one intake cycle against that database. The first eligible PRD in the configured `ready` status is claimed, validated, routed to either `blocked` (with clarifying comments) or `ticketed` (with destination tickets created), then the cycle exits. Remaining ready PRDs stay queued for later scheduler invocations.
|
|
18
18
|
|
|
19
19
|
## Workflow resolution
|
|
20
20
|
|
|
@@ -56,7 +56,7 @@ This skill shares its PRD closure rollup phase (3f) with `lisa:github-prd-intake
|
|
|
56
56
|
|
|
57
57
|
## Confirmation policy
|
|
58
58
|
|
|
59
|
-
Do NOT ask the caller whether to proceed. Once invoked with a database URL, run the cycle to completion — claim, validate, branch to `blocked` or `ticketed`, write the summary. The caller (a human or a cron) has already authorized the run by invoking the skill; re-prompting defeats the purpose of a background
|
|
59
|
+
Do NOT ask the caller whether to proceed. Once invoked with a database URL, run the cycle to completion for the first eligible PRD — claim, validate, branch to `blocked` or `ticketed`, write the summary, and exit. The caller (a human or a cron) has already authorized the run by invoking the skill; re-prompting defeats the purpose of a background queue.
|
|
60
60
|
|
|
61
61
|
Specifically forbidden:
|
|
62
62
|
|
|
@@ -110,9 +110,9 @@ For a `select`-type property substitute `"select"` for `"status"`. The response
|
|
|
110
110
|
|
|
111
111
|
If the result set is empty, stop and report `"No PRDs with $STATUS_PROP=$READY. Nothing to do."` Exit cleanly — this is the common idle case for a scheduled run.
|
|
112
112
|
|
|
113
|
-
### Phase 3 — Process
|
|
113
|
+
### Phase 3 — Process the first eligible ready PRD
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
Select the first ready PRD page returned by Phase 2 and process only that page. Later scheduler invocations process the remaining ready PRDs.
|
|
116
116
|
|
|
117
117
|
#### 3a. Claim
|
|
118
118
|
|
|
@@ -155,7 +155,7 @@ Per-ticket gates prove each ticket is well-formed; they do NOT prove the *set* o
|
|
|
155
155
|
|
|
156
156
|
| Verdict | Action |
|
|
157
157
|
|---------|--------|
|
|
158
|
-
| `COMPLETE` | Done. Leave `$STATUS_PROP = $TICKETED`.
|
|
158
|
+
| `COMPLETE` | Done. Leave `$STATUS_PROP = $TICKETED`. End the cycle. |
|
|
159
159
|
| `COMPLETE_WITH_SCOPE_CREEP` | Post an advisory Notion comment naming the scope-creep tickets (so product can decide whether to close them as out-of-scope). Leave `$STATUS_PROP = $TICKETED`. |
|
|
160
160
|
| `GAPS_FOUND` | The created ticket set is incomplete. (a) For each gap, post a Notion comment using the same product-facing template as Phase 3c.3 — block-anchored when `prd_anchor` is non-null, page-level otherwise; category badge from the gap's `category` field; `What's unclear` and `Recommendation` from the audit report's `what` and `recommendation` fields. Apply the same forbidden-language rules from Phase 3c.5. (b) Post one summary comment listing the tickets that *were* successfully created (so product knows what to keep vs. what to extend). (c) Transition `$STATUS_PROP` from `$TICKETED` back to `$BLOCKED` by invoking `lisa:notion-access` operation `write-page` with the blocked-status payload. |
|
|
161
161
|
| `NO_TICKETS_FOUND` | Should not happen if step 2 succeeded. If it does, log it as an Error in the cycle summary and leave `$STATUS_PROP = $TICKETED` with a comment flagging the audit failure for human review. |
|
|
@@ -239,9 +239,9 @@ rich_text: <Notion rich_text array — the comment body>
|
|
|
239
239
|
|
|
240
240
|
The access skill resolves a `prd_anchor` substring to the matching block ID by paging through the PRD's children and posts the comment with `discussion_id` or `parent: { block_id }` as appropriate. If `block_anchor` is `null`, the access skill posts a page-level comment via `parent: { page_id }`.
|
|
241
241
|
|
|
242
|
-
#### 3d.
|
|
242
|
+
#### 3d. Stop
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
Stop immediately after the claimed PRD is ticketed, blocked, or recorded as an error.
|
|
245
245
|
|
|
246
246
|
#### 3f. PRD closure rollup (config-gated)
|
|
247
247
|
|
|
@@ -300,7 +300,7 @@ This phase implements exactly one PRD-lifecycle hop — `$TICKETED → $SHIPPED`
|
|
|
300
300
|
|
|
301
301
|
### Phase 4 — Summary report
|
|
302
302
|
|
|
303
|
-
After processing
|
|
303
|
+
After processing the single selected PRD, emit a summary:
|
|
304
304
|
|
|
305
305
|
```text
|
|
306
306
|
## notion-prd-intake summary
|
|
@@ -325,10 +325,10 @@ Print to the agent's output. Do not write this summary to Notion or the destinat
|
|
|
325
325
|
|
|
326
326
|
## Idempotency & safety
|
|
327
327
|
|
|
328
|
-
- **
|
|
328
|
+
- **One item per cycle**: this skill processes the first eligible ready PRD from Phase 2, then exits. New or remaining ready PRDs are picked up by later scheduler invocations.
|
|
329
329
|
- **No writes outside the lifecycle**: this skill only ever writes to the destination tracker via `lisa:notion-to-tracker` (which delegates to `lisa:tracker-write`), and only ever changes the Notion status property to `$IN_REVIEW`, `$BLOCKED`, `$TICKETED`, or `$SHIPPED` (the last via the rollup phase 3f only). It never edits PRD content, never touches `$DRAFT`, never deletes pages. It sets `$SHIPPED` and may archive the PRD page **only** through the config-gated rollup phase (3f).
|
|
330
330
|
- **Claim-first ordering**: the status flip to `$IN_REVIEW` is set BEFORE validation runs, so a re-entrant call won't double-process.
|
|
331
|
-
- **Failure
|
|
331
|
+
- **Failure handling**: an exception processing the selected PRD is caught and recorded under "Errors" in the summary, then the cycle exits. The PRD that errored is left in `$IN_REVIEW` — the human investigates from there.
|
|
332
332
|
- **Rollup idempotency**: rollup (Phase 3f) is a no-op on a PRD already in `$STATUS_PROP = $SHIPPED` (and already archived when `closeOnShipped` is `true`) — no duplicate transition, no duplicate archive, no duplicate comment. The all-terminal condition is a pure function of the children's current states (deduped by child-ref identity), so recomputing it is safe to re-run. Archival NEVER precedes the all-terminal condition.
|
|
333
333
|
|
|
334
334
|
## Configuration
|
|
@@ -110,7 +110,6 @@ Defaults from `config-resolution`. The `done` role is **env-keyed** — create a
|
|
|
110
110
|
```bash
|
|
111
111
|
ensure_label "$(read_role build ready status:ready)" FBCA04 "Ready for build (human signal)"
|
|
112
112
|
ensure_label "$(read_role build claimed status:in-progress)" 0E8A16 "Build in progress (agent owns)"
|
|
113
|
-
ensure_label "$(read_role build review status:code-review)" 5319E7 "PR open, awaiting review"
|
|
114
113
|
ensure_label "$(read_role build blocked status:blocked)" D93F0B "Blocked — human attention required"
|
|
115
114
|
ensure_label "$(read_role build done.dev status:on-dev)" 1D76DB "Deployed to dev"
|
|
116
115
|
ensure_label "$(read_role build done.staging status:on-stg)" 1D76DB "Deployed to staging"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tracker-build-intake
|
|
3
|
-
description: "Vendor-neutral wrapper for the build-queue
|
|
3
|
+
description: "Vendor-neutral wrapper for the build-queue scanner. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-build-intake (JQL/project-key queue), lisa:github-build-intake (GitHub repo queue keyed off the `status:ready` label), or lisa:linear-build-intake (Linear team queue keyed off the `status:ready` label). Every vendor scanner processes at most one eligible item per cycle and enforces the claim-time arm of the `leaf-only-lifecycle` rule — dispatch leaf work units only; move or safe-block a container with open child work (or a childless Epic/Story/Spike) that carries a stale build-ready role according to the vendor's lifecycle semantics. Counterpart to lisa:intake's PRD-side dispatchers."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -53,7 +53,7 @@ Intermediate env states are not native closure. A vendor scanner that resolves `
|
|
|
53
53
|
|
|
54
54
|
## Rules
|
|
55
55
|
|
|
56
|
-
- Single cycle per invocation — the vendor skill processes
|
|
56
|
+
- Single cycle per invocation — the vendor skill processes at most one eligible `Ready` item and exits. Scheduler repetition works the rest of the queue.
|
|
57
57
|
- The vendor skills run their own pre-flight checks (JIRA workflow transitions for the JIRA path; label namespace adoption for the GitHub and Linear paths) before processing items. Never bypass.
|
|
58
58
|
- **Leaf-only dispatch, every vendor.** Per the `leaf-only-lifecycle` rule, each vendor scanner dispatches leaf work units only and moves or safe-blocks a container (open child work, or a childless Epic/Story/Spike) carrying a stale build-ready role according to its lifecycle semantics. This shim does not re-implement the gate — it relies on the vendor scanner's Phase 3a — but the contract is uniform across `jira`, `github`, and `linear` so behavior never drifts by tracker.
|
|
59
59
|
- **Terminal native closure, every capable vendor.** Per the same rule, each vendor scanner finalizes native open/closed state only at the true terminal `done` value. This shim never performs native closure itself, but callers can rely on the dispatched vendor scanner to apply the contract.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tracker-evidence
|
|
3
|
-
description: "Vendor-neutral wrapper for posting verification evidence. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-evidence, lisa:github-evidence, or lisa:linear-evidence. Uploads evidence to the GitHub `pr-assets` release, updates the PR description, posts a comment on the originating ticket/issue, and
|
|
3
|
+
description: "Vendor-neutral wrapper for posting verification evidence. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-evidence, lisa:github-evidence, or lisa:linear-evidence. Uploads evidence to the GitHub `pr-assets` release, updates the PR description, posts a comment on the originating ticket/issue, and leaves workflow transitions to the tracker-specific lifecycle owner."
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -45,6 +45,6 @@ The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issue
|
|
|
45
45
|
- **Feature/UX completion:** state plainly which acceptance criteria each screenshot covers, and call out any deferred or out-of-scope surface explicitly so QA/PM doesn't have to infer.
|
|
46
46
|
6. **"What would help me confirm" (bug) / "How to QA" (feature) section.** Concrete actionable retest steps with the exact selection criteria (e.g., "pick a record whose Status column shows `—`, not `Processing` or `Pending Review`").
|
|
47
47
|
7. **Explicit invitation to be corrected.** End with a line like *"If any of the steps I listed are different from what you expected / actually did, please tell me explicitly which step I got wrong."* Non-optional — small differences (which record, which device, exact tap order, expected behavior) change everything, and naming the door open short-circuits ticket bounce-loops.
|
|
48
|
-
8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub:
|
|
48
|
+
8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
|
|
49
49
|
|
|
50
50
|
**Why this format:** It (a) gives the reporter a frame-by-frame they can compare against, (b) avoids the JIRA image-collapse failure mode while still working everywhere else, (c) names the most plausible discrepancies up front so the loop short-circuits, (d) explicitly opens the door to being corrected so tickets don't bounce on assumed alignment. The same mechanics that resolve a stuck bug ticket also give QA an unambiguous handoff for a freshly-built feature.
|
|
@@ -40,7 +40,7 @@ The state machine (first match wins, evaluated over the **required** leaves only
|
|
|
40
40
|
- **Blocked dominates** — one blocked leaf surfaces blocked on the parent even while others progress.
|
|
41
41
|
- **The parent never carries `ready`** — `ready` is a human "claim this leaf" signal; rollup only moves a parent between non-ready container states.
|
|
42
42
|
- **Rollup is recursive** — an Epic rolls up from its Stories, each of which rolls up from its own leaves. Evaluate bottom-up.
|
|
43
|
-
- **The terminal is the configured env-keyed `done`** — multi-env projects roll up to whichever `done` value matches the env their leaves shipped to (see `config-resolution` "Env-keyed `done`"). **Single-environment collapse (this repo):** `deploy.branches` declares only `production: main`, so `done` is a single value and the lifecycle collapses to `ready → claimed (in-progress) →
|
|
43
|
+
- **The terminal is the configured env-keyed `done`** — multi-env projects roll up to whichever `done` value matches the env their leaves shipped to (see `config-resolution` "Env-keyed `done`"). **Single-environment collapse (this repo):** `deploy.branches` declares only `production: main`, so `done` is a single value and the GitHub build lifecycle collapses to `ready → claimed (in-progress) → done`; the rollup terminal is simply `done` (or the PRD-side `ticketed` for PRD containers), with **no** dev/staging promotion hops and **no** env-keyed multi-entry chain to resolve.
|
|
44
44
|
|
|
45
45
|
**Safe-by-default when not yet supported.** A vendor sync path that has not implemented native rollup MUST be a documented no-op that surfaces the derived state as a suggestion/comment rather than guessing a transition — never an unsafe default. Without `--rollup`, the sync skills behave exactly as before (milestone comment on the work item; no parent derivation).
|
|
46
46
|
|