@codyswann/lisa 2.7.0 → 2.8.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.
Files changed (123) hide show
  1. package/dist/core/lisa.d.ts +21 -0
  2. package/dist/core/lisa.d.ts.map +1 -1
  3. package/dist/core/lisa.js +40 -1
  4. package/dist/core/lisa.js.map +1 -1
  5. package/dist/utils/postinstall-trampoline.d.ts +20 -0
  6. package/dist/utils/postinstall-trampoline.d.ts.map +1 -1
  7. package/dist/utils/postinstall-trampoline.js +37 -0
  8. package/dist/utils/postinstall-trampoline.js.map +1 -1
  9. package/package.json +1 -1
  10. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa/agents/confluence-prd-intake.md +5 -5
  12. package/plugins/lisa/agents/github-agent.md +141 -0
  13. package/plugins/lisa/agents/github-build-intake.md +62 -0
  14. package/plugins/lisa/agents/github-prd-intake.md +64 -0
  15. package/plugins/lisa/agents/linear-prd-intake.md +5 -5
  16. package/plugins/lisa/agents/notion-prd-intake.md +5 -5
  17. package/plugins/lisa/commands/intake.md +2 -2
  18. package/plugins/lisa/commands/plan.md +2 -2
  19. package/plugins/lisa/rules/intent-routing.md +16 -11
  20. package/plugins/lisa/rules/tracker-resolution.md +76 -0
  21. package/plugins/lisa/skills/confluence-prd-intake/SKILL.md +11 -11
  22. package/plugins/{src/base/skills/confluence-to-jira → lisa/skills/confluence-to-tracker}/SKILL.md +31 -31
  23. package/plugins/lisa/skills/github-add-journey/SKILL.md +114 -0
  24. package/plugins/lisa/skills/github-build-intake/SKILL.md +188 -0
  25. package/plugins/lisa/skills/github-create/SKILL.md +101 -0
  26. package/plugins/lisa/skills/github-evidence/SKILL.md +116 -0
  27. package/plugins/lisa/skills/github-journey/SKILL.md +121 -0
  28. package/plugins/lisa/skills/github-prd-intake/SKILL.md +286 -0
  29. package/plugins/lisa/skills/github-read-issue/SKILL.md +248 -0
  30. package/plugins/lisa/skills/github-sync/SKILL.md +73 -0
  31. package/plugins/lisa/skills/github-to-tracker/SKILL.md +312 -0
  32. package/plugins/lisa/skills/github-validate-issue/SKILL.md +288 -0
  33. package/plugins/lisa/skills/github-verify/SKILL.md +29 -0
  34. package/plugins/lisa/skills/github-write-issue/SKILL.md +304 -0
  35. package/plugins/lisa/skills/implement/SKILL.md +4 -4
  36. package/plugins/lisa/skills/intake/SKILL.md +14 -4
  37. package/plugins/lisa/skills/jira-source-artifacts/SKILL.md +1 -1
  38. package/plugins/lisa/skills/jira-validate-ticket/SKILL.md +3 -3
  39. package/plugins/lisa/skills/jira-verify/SKILL.md +1 -1
  40. package/plugins/lisa/skills/jira-write-ticket/SKILL.md +3 -3
  41. package/plugins/lisa/skills/linear-prd-intake/SKILL.md +10 -10
  42. package/plugins/lisa/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
  43. package/plugins/lisa/skills/notion-prd-intake/SKILL.md +11 -11
  44. package/plugins/{src/base/skills/notion-to-jira → lisa/skills/notion-to-tracker}/SKILL.md +34 -34
  45. package/plugins/lisa/skills/plan/SKILL.md +8 -6
  46. package/plugins/lisa/skills/prd-ticket-coverage/SKILL.md +22 -12
  47. package/plugins/lisa/skills/product-walkthrough/SKILL.md +1 -1
  48. package/plugins/lisa/skills/spec-conformance/SKILL.md +2 -3
  49. package/plugins/lisa/skills/ticket-triage/SKILL.md +7 -7
  50. package/plugins/lisa/skills/tracker-add-journey/SKILL.md +24 -0
  51. package/plugins/lisa/skills/tracker-build-intake/SKILL.md +25 -0
  52. package/plugins/lisa/skills/tracker-create/SKILL.md +24 -0
  53. package/plugins/lisa/skills/tracker-evidence/SKILL.md +24 -0
  54. package/plugins/lisa/skills/tracker-journey/SKILL.md +24 -0
  55. package/plugins/lisa/skills/tracker-read/SKILL.md +25 -0
  56. package/plugins/lisa/skills/tracker-sync/SKILL.md +26 -0
  57. package/plugins/lisa/skills/tracker-validate/SKILL.md +35 -0
  58. package/plugins/lisa/skills/tracker-verify/SKILL.md +25 -0
  59. package/plugins/lisa/skills/tracker-write/SKILL.md +43 -0
  60. package/plugins/lisa/skills/verify/SKILL.md +1 -1
  61. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-expo/skills/jira-verify/SKILL.md +1 -1
  64. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails/skills/jira-verify/SKILL.md +1 -1
  67. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  68. package/plugins/src/base/agents/confluence-prd-intake.md +5 -5
  69. package/plugins/src/base/agents/github-agent.md +141 -0
  70. package/plugins/src/base/agents/github-build-intake.md +62 -0
  71. package/plugins/src/base/agents/github-prd-intake.md +64 -0
  72. package/plugins/src/base/agents/linear-prd-intake.md +5 -5
  73. package/plugins/src/base/agents/notion-prd-intake.md +5 -5
  74. package/plugins/src/base/commands/intake.md +2 -2
  75. package/plugins/src/base/commands/plan.md +2 -2
  76. package/plugins/src/base/rules/intent-routing.md +16 -11
  77. package/plugins/src/base/rules/tracker-resolution.md +76 -0
  78. package/plugins/src/base/skills/confluence-prd-intake/SKILL.md +11 -11
  79. package/plugins/{lisa/skills/confluence-to-jira → src/base/skills/confluence-to-tracker}/SKILL.md +31 -31
  80. package/plugins/src/base/skills/github-add-journey/SKILL.md +114 -0
  81. package/plugins/src/base/skills/github-build-intake/SKILL.md +188 -0
  82. package/plugins/src/base/skills/github-create/SKILL.md +101 -0
  83. package/plugins/src/base/skills/github-evidence/SKILL.md +116 -0
  84. package/plugins/src/base/skills/github-journey/SKILL.md +121 -0
  85. package/plugins/src/base/skills/github-prd-intake/SKILL.md +286 -0
  86. package/plugins/src/base/skills/github-read-issue/SKILL.md +248 -0
  87. package/plugins/src/base/skills/github-sync/SKILL.md +73 -0
  88. package/plugins/src/base/skills/github-to-tracker/SKILL.md +312 -0
  89. package/plugins/src/base/skills/github-validate-issue/SKILL.md +288 -0
  90. package/plugins/src/base/skills/github-verify/SKILL.md +29 -0
  91. package/plugins/src/base/skills/github-write-issue/SKILL.md +304 -0
  92. package/plugins/src/base/skills/implement/SKILL.md +4 -4
  93. package/plugins/src/base/skills/intake/SKILL.md +14 -4
  94. package/plugins/src/base/skills/jira-source-artifacts/SKILL.md +1 -1
  95. package/plugins/src/base/skills/jira-validate-ticket/SKILL.md +3 -3
  96. package/plugins/src/base/skills/jira-verify/SKILL.md +1 -1
  97. package/plugins/src/base/skills/jira-write-ticket/SKILL.md +3 -3
  98. package/plugins/src/base/skills/linear-prd-intake/SKILL.md +10 -10
  99. package/plugins/src/base/skills/{linear-to-jira → linear-to-tracker}/SKILL.md +30 -31
  100. package/plugins/src/base/skills/notion-prd-intake/SKILL.md +11 -11
  101. package/plugins/{lisa/skills/notion-to-jira → src/base/skills/notion-to-tracker}/SKILL.md +34 -34
  102. package/plugins/src/base/skills/plan/SKILL.md +8 -6
  103. package/plugins/src/base/skills/prd-ticket-coverage/SKILL.md +22 -12
  104. package/plugins/src/base/skills/product-walkthrough/SKILL.md +1 -1
  105. package/plugins/src/base/skills/spec-conformance/SKILL.md +2 -3
  106. package/plugins/src/base/skills/ticket-triage/SKILL.md +7 -7
  107. package/plugins/src/base/skills/tracker-add-journey/SKILL.md +24 -0
  108. package/plugins/src/base/skills/tracker-build-intake/SKILL.md +25 -0
  109. package/plugins/src/base/skills/tracker-create/SKILL.md +24 -0
  110. package/plugins/src/base/skills/tracker-evidence/SKILL.md +24 -0
  111. package/plugins/src/base/skills/tracker-journey/SKILL.md +24 -0
  112. package/plugins/src/base/skills/tracker-read/SKILL.md +25 -0
  113. package/plugins/src/base/skills/tracker-sync/SKILL.md +26 -0
  114. package/plugins/src/base/skills/tracker-validate/SKILL.md +35 -0
  115. package/plugins/src/base/skills/tracker-verify/SKILL.md +25 -0
  116. package/plugins/src/base/skills/tracker-write/SKILL.md +43 -0
  117. package/plugins/src/base/skills/verify/SKILL.md +1 -1
  118. package/plugins/src/expo/skills/jira-verify/SKILL.md +1 -1
  119. package/plugins/src/rails/skills/jira-verify/SKILL.md +1 -1
  120. /package/cdk/{copy-overwrite → merge}/.oxlintrc.json +0 -0
  121. /package/expo/{copy-overwrite → merge}/.oxlintrc.json +0 -0
  122. /package/nestjs/{copy-overwrite → merge}/.oxlintrc.json +0 -0
  123. /package/typescript/{copy-overwrite → merge}/.oxlintrc.json +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: product-walkthrough
3
- description: "Methodology for evaluating the live product via a real browser (Playwright MCP) when planning work or evaluating a PRD. Reading a PRD or a mock without seeing the current product produces tickets that misjudge the change — this skill grounds the analysis in what actually exists today. Invoke this skill from notion-to-jira (Phase 2b live-product walkthrough), jira-create, and any PRD intake flow whose work touches existing user-facing surfaces."
3
+ description: "Methodology for evaluating the live product via a real browser (Playwright MCP) when planning work or evaluating a PRD. Reading a PRD or a mock without seeing the current product produces tickets that misjudge the change — this skill grounds the analysis in what actually exists today. Invoke this skill from notion-to-tracker (Phase 2b live-product walkthrough), jira-create, and any PRD intake flow whose work touches existing user-facing surfaces."
4
4
  allowed-tools: ["Skill", "Bash", "Read", "mcp__plugin_playwright_playwright__browser_navigate", "mcp__plugin_playwright_playwright__browser_snapshot", "mcp__plugin_playwright_playwright__browser_take_screenshot", "mcp__plugin_playwright_playwright__browser_click", "mcp__plugin_playwright_playwright__browser_type", "mcp__plugin_playwright_playwright__browser_select_option", "mcp__plugin_playwright_playwright__browser_fill_form", "mcp__plugin_playwright_playwright__browser_press_key", "mcp__plugin_playwright_playwright__browser_hover", "mcp__plugin_playwright_playwright__browser_navigate_back", "mcp__plugin_playwright_playwright__browser_resize", "mcp__plugin_playwright_playwright__browser_tabs", "mcp__plugin_playwright_playwright__browser_console_messages", "mcp__plugin_playwright_playwright__browser_network_requests", "mcp__plugin_playwright_playwright__browser_wait_for", "mcp__plugin_playwright_playwright__browser_close"]
5
5
  ---
6
6
 
@@ -24,10 +24,9 @@ Based on the source, load the full spec:
24
24
  | Source | How to Load |
25
25
  |--------|-------------|
26
26
  | Plan file (`.md`) | `Read` the file |
27
- | JIRA key | Invoke `/jira-read-ticket <KEY>` to get the full context bundle (primary ticket + epic + linked tickets) |
27
+ | JIRA key or GitHub issue ref | Invoke `/tracker-read <ref>` (vendor-neutral; dispatches to `/jira-read-ticket` or `/github-read-issue` per `.lisa.config.json` `tracker`) to get the full context bundle (primary ticket + epic / parent + linked tickets) |
28
28
  | Linear key | Fetch via Linear MCP if available; else `Bash` with Linear CLI; else report "Linear reader unavailable" |
29
- | GitHub issue | `gh issue view <number> --json title,body,comments,labels,milestone` |
30
- | PRD | `Read` the file or fetch via Notion MCP if it's a Notion URL |
29
+ | PRD | `Read` the file or fetch via Notion / Confluence MCP, or `gh issue view` for a GitHub PRD |
31
30
 
32
31
  ## Phase 2 — Extract Requirements
33
32
 
@@ -1,30 +1,30 @@
1
1
  ---
2
2
  name: ticket-triage
3
- description: "Analytical triage gate for JIRA tickets. Detects requirement ambiguities, identifies edge cases from codebase analysis, and plans verification methodology. Posts findings to the ticket and produces a verdict (BLOCKED/PASSED_WITH_FINDINGS/PASSED) that gates whether implementation can proceed."
3
+ description: "Analytical triage gate for tickets in the configured destination tracker (JIRA or GitHub Issues). Detects requirement ambiguities, identifies edge cases from codebase analysis, and plans verification methodology. Posts findings to the ticket and produces a verdict (BLOCKED/PASSED_WITH_FINDINGS/PASSED) that gates whether implementation can proceed. Vendor-neutral: the caller (jira-agent or github-agent) is responsible for fetching the ticket via lisa:tracker-read, running the pre-flight gate via lisa:tracker-verify, and posting findings via the matching vendor comment tool."
4
4
  allowed-tools: ["Read", "Glob", "Grep", "Bash"]
5
5
  ---
6
6
 
7
7
  # Ticket Triage: $ARGUMENTS
8
8
 
9
- Perform analytical triage on the JIRA ticket. The caller MUST have run `lisa:jira-read-ticket` first and provided the resulting context bundle — which includes the primary ticket, all linked tickets (blocks / is blocked by / relates to / duplicates), epic parent, epic siblings, subtasks, and remote PR state. Do not triage from a bare ticket summary — if the bundle is missing link or epic context, stop and instruct the caller to run `/lisa:jira-read-ticket` first.
9
+ Perform analytical triage on the ticket. The caller MUST have run `lisa:tracker-read` (or its vendor-specific underlying skill — `lisa:jira-read-ticket` for JIRA, `lisa:github-read-issue` for GitHub) first and provided the resulting context bundle — which includes the primary ticket, all linked tickets (blocks / is blocked by / relates to / duplicates), parent (Epic in JIRA, parent sub-issue in GitHub), siblings, sub-tasks / sub-issues, and remote PR state. Do not triage from a bare ticket summary — if the bundle is missing link or parent context, stop and instruct the caller to run `/tracker-read` first.
10
10
 
11
11
  Repository name for scoped labels and comment headers: determine via `basename $(git rev-parse --show-toplevel)`.
12
12
 
13
13
  ## Phase 0 -- Pre-flight Description Gate
14
14
 
15
- Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `lisa:jira-verify`; this phase consumes its output. If `lisa:jira-verify` returned `FAIL` for any of the following, emit `BLOCKED` immediately with the missing-requirements list and skip to Phase 6:
15
+ Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `lisa:tracker-verify`; this phase consumes its output. If `lisa:tracker-verify` returned `FAIL` for any of the following, emit `BLOCKED` immediately with the missing-requirements list and skip to Phase 6:
16
16
 
17
- - Epic parent missing (non-bug, non-epic)
17
+ - Parent missing (Epic parent for JIRA non-bug-non-epic; parent sub-issue for GitHub non-bug-non-epic)
18
18
  - Description quality failures (no Gherkin acceptance criteria, missing audience sections)
19
19
  - Validation Journey missing on a runtime-behavior ticket
20
20
  - Target backend environment missing on a runtime-behavior ticket
21
21
  - Sign-in credentials missing on a ticket that touches authenticated surfaces
22
22
  - Single-repo scope violated (Bug / Task / Sub-task spanning repos)
23
- - Relationship discovery missing (no links AND no documented git+JQL search)
23
+ - Relationship discovery missing (no links AND no documented git + tracker-search outcome)
24
24
 
25
- The caller (jira-agent) is responsible for transitioning the ticket to `Blocked`, reassigning to the **Reporter**, and posting a comment listing the missing requirements. This skill only emits the verdict and the missing-requirements list.
25
+ The caller (jira-agent or github-agent) is responsible for transitioning the ticket to `Blocked` (JIRA status) or relabeling to `status:blocked` (GitHub), reassigning to the **Reporter / original author**, and posting a comment listing the missing requirements. This skill only emits the verdict and the missing-requirements list.
26
26
 
27
- If `lisa:jira-verify` returned `PASS` for all the above, proceed to Phase 1.
27
+ If `lisa:tracker-verify` returned `PASS` for all the above, proceed to Phase 1.
28
28
 
29
29
  ## Phase 1 -- Relevance Check
30
30
 
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: tracker-add-journey
3
+ description: "Vendor-neutral wrapper for appending a Validation Journey section to an existing ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-add-journey or lisa:github-add-journey."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Add Journey: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-add-journey` with `$ARGUMENTS` verbatim. Arg: a JIRA ticket key.
18
+ - `github` → invoke `lisa:github-add-journey` with `$ARGUMENTS` verbatim. Arg: `org/repo#<number>` or a GitHub issue URL.
19
+ 3. Pass through the output.
20
+
21
+ ## Rules
22
+
23
+ - The Validation Journey content format is identical across both vendors (markdown sections with `[EVIDENCE: name]` markers). The only difference is how the section is appended — JIRA via `editJiraIssue`, GitHub via `gh issue edit --body-file`.
24
+ - If the ticket already has a Validation Journey, the vendor skill reports it and stops. This shim does not retry.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: tracker-build-intake
3
+ description: "Vendor-neutral wrapper for the build-queue batch scanner. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-build-intake (JQL/project-key queue) or lisa:github-build-intake (GitHub repo queue keyed off the `status:ready` label). Counterpart to lisa:intake's PRD-side dispatchers."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Build Intake: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor build-queue scanner.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a JIRA project key (e.g., `SE`) or a JQL filter.
18
+ - `github` → invoke `lisa:github-build-intake` with `$ARGUMENTS` verbatim. Arg shape: a GitHub `org/repo` token or a full GitHub repo URL.
19
+ 3. Pass through the cycle summary verbatim.
20
+
21
+ ## Rules
22
+
23
+ - Single cycle per invocation — the vendor skill processes the current `Ready` set and exits.
24
+ - The vendor skills run their own pre-flight checks (JIRA workflow transitions for the JIRA path; label namespace adoption for the GitHub path) before processing items. Never bypass.
25
+ - Never run two intake cycles concurrently against overlapping queues — the scheduling layer is responsible for serialization.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: tracker-create
3
+ description: "Vendor-neutral wrapper for creating tickets/issues from code files or descriptions. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-create or lisa:github-create. Plans hierarchy structure (epic / story / sub-task), then delegates each individual write through the tracker-write shim."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Create: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor planning skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-create` with `$ARGUMENTS` verbatim.
18
+ - `github` → invoke `lisa:github-create` with `$ARGUMENTS` verbatim.
19
+ 3. Pass through the output.
20
+
21
+ ## Rules
22
+
23
+ - Both vendor skills delegate every individual ticket write through `lisa:tracker-write`. They never call vendor-specific write tools directly.
24
+ - This shim is for ad-hoc creation from code files / descriptions. PRD-driven creation goes through the `*-to-tracker` skills (notion / confluence / linear / github).
@@ -0,0 +1,24 @@
1
+ ---
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 or lisa:github-evidence. Uploads evidence to the GitHub `pr-assets` release, updates the PR description, posts a comment on the originating ticket/issue, and transitions the ticket/issue to its post-build review state."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Evidence: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor evidence skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>`.
18
+ - `github` → invoke `lisa:github-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<ISSUE_REF> <EVIDENCE_DIR> <PR_NUMBER>` where `ISSUE_REF` is `org/repo#<number>` or a GitHub issue URL.
19
+ 3. Pass through the vendor skill's output.
20
+
21
+ ## Rules
22
+
23
+ - The GitHub `pr-assets` release lives on the implementation repo (the one with the PR), regardless of which tracker hosts the ticket/issue. Both vendor skills upload there.
24
+ - Never post evidence to a different ticket than the one named — `$ARGUMENTS` is the source of truth.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: tracker-journey
3
+ description: "Vendor-neutral wrapper for executing a ticket/issue's Validation Journey end-to-end. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-journey or lisa:github-journey. Parses the journey, satisfies prerequisites, executes the steps, captures evidence at each marker, and posts results via tracker-evidence."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Journey: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor journey skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-journey` with `$ARGUMENTS` verbatim. Arg shape: `<TICKET_ID> [PR_NUMBER]`.
18
+ - `github` → invoke `lisa:github-journey` with `$ARGUMENTS` verbatim. Arg shape: `<ISSUE_REF> [PR_NUMBER]`.
19
+ 3. Pass through the output.
20
+
21
+ ## Rules
22
+
23
+ - The journey content is identical across vendors; only the parser source differs (the JIRA vendor reads description via Atlassian MCP; the GitHub vendor reads body via `gh issue view --json body`).
24
+ - Evidence posting always goes through `lisa:tracker-evidence` — never bypass.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: tracker-read
3
+ description: "Vendor-neutral wrapper for fetching the full scope of a ticket/issue and its related graph. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-read-ticket or lisa:github-read-issue. Returns a consolidated context bundle so downstream agents never act on a single ticket in isolation."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Read: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor read skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-read-ticket` with `$ARGUMENTS` verbatim. The argument is a JIRA key (e.g., `PROJ-123`).
18
+ - `github` → invoke `lisa:github-read-issue` with `$ARGUMENTS` verbatim. The argument is `org/repo#<number>` or a full GitHub issue URL.
19
+ 3. Return the vendor skill's context bundle verbatim.
20
+
21
+ ## Rules
22
+
23
+ - Read-only — never modify the ticket/issue.
24
+ - The two vendors emit different context-bundle formats (because their data models differ). Callers must be tolerant of both — or, more precisely, agents at the next layer (e.g. `tracker-agent`-equivalent) parse the per-vendor bundle.
25
+ - If the input format doesn't match the configured tracker (e.g. tracker is jira but `$ARGUMENTS` looks like a GitHub URL), stop and report — never auto-translate.
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: tracker-sync
3
+ description: "Vendor-neutral wrapper for posting milestone updates to the linked ticket/issue. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-sync or lisa:github-sync. Posts at: plan created, implementation in progress, PR ready, PR merged. Suggests (never auto-transitions) the next status."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Sync: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor sync skill.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-sync` with `$ARGUMENTS` verbatim.
18
+ - `github` → invoke `lisa:github-sync` with `$ARGUMENTS` verbatim.
19
+ 3. Pass through the output.
20
+
21
+ If `$ARGUMENTS` is empty, both vendor skills auto-detect a ticket reference from the active plan file (most recently modified `.md` in `plans/`).
22
+
23
+ ## Rules
24
+
25
+ - Idempotent updates — running sync at the same milestone twice should not produce duplicate comments. Vendor skills enforce this.
26
+ - Never auto-transition status. Suggestions only.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: tracker-validate
3
+ description: "Vendor-neutral wrapper for the pre-write quality gate. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-validate-ticket or lisa:github-validate-issue. Read-only — never writes to either tracker. Used by tracker-write Phase 5.5 (pre-write gate), tracker-verify (post-write checks), and the *-to-tracker dry-run paths. Output is structured PASS/FAIL per gate so callers can parse it."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Validate: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor validator.
10
+
11
+ See the `tracker-resolution` rule for the full configuration schema and skill-mapping table.
12
+
13
+ ## Workflow
14
+
15
+ 1. **Resolve tracker config** (same logic as `lisa:tracker-write` Step 1):
16
+
17
+ ```bash
18
+ tracker=$(jq -r '.tracker // "jira"' .lisa.config.local.json 2>/dev/null \
19
+ || jq -r '.tracker // "jira"' .lisa.config.json 2>/dev/null \
20
+ || echo "jira")
21
+ ```
22
+
23
+ 2. **Dispatch**
24
+
25
+ - `jira` → invoke `lisa:jira-validate-ticket` with `$ARGUMENTS` verbatim.
26
+ - `github` → invoke `lisa:github-validate-issue` with `$ARGUMENTS` verbatim.
27
+ - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json."`
28
+
29
+ 3. **Pass through the validator's structured report unchanged.** Callers (e.g. `lisa:jira-write-ticket` Phase 5.5) parse the gate lines; do not paraphrase.
30
+
31
+ ## Rules
32
+
33
+ - Read-only — never write to either tracker.
34
+ - Never re-implement gate logic here. The gate definitions are the vendor validator's responsibility.
35
+ - Never silently transform the input — pass `$ARGUMENTS` through verbatim.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: tracker-verify
3
+ description: "Vendor-neutral wrapper for the post-write verification gate. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-verify or lisa:github-verify. Fetches the live ticket/issue and runs the validator gates against the stored state — catches anything dropped or reformatted on write. Read-only."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Verify: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor post-write verifier.
10
+
11
+ See the `tracker-resolution` rule for configuration and dispatch table.
12
+
13
+ ## Workflow
14
+
15
+ 1. Resolve tracker config (same logic as `lisa:tracker-write`).
16
+ 2. Dispatch:
17
+ - `jira` → invoke `lisa:jira-verify` with `$ARGUMENTS` verbatim.
18
+ - `github` → invoke `lisa:github-verify` with `$ARGUMENTS` verbatim.
19
+ 3. Pass through the verifier's structured report unchanged.
20
+
21
+ ## Rules
22
+
23
+ - Read-only.
24
+ - The same gates run pre-write and post-write — this shim simply chooses the vendor implementation.
25
+ - If the vendor verify reports `FAIL`, callers must NOT auto-fix from this layer. Surface the failures to the caller and let the higher-level skill decide.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: tracker-write
3
+ description: "Vendor-neutral wrapper for ticket creation and updates. Reads `tracker` from .lisa.config.json (default: jira) and dispatches to lisa:jira-write-ticket or lisa:github-write-issue. Callers in vendor-neutral skills (notion-to-tracker, linear-to-tracker, confluence-to-tracker, github-to-tracker, implement, verify) MUST invoke this skill instead of the vendor-specific ones — that is what makes the tracker switchable per project. The Phase-5.5 validate-pre-write gate, post-write verify, and Phase-8 announce-comment behavior live in the vendor skills; this shim is dispatch only."
4
+ allowed-tools: ["Skill", "Bash", "Read"]
5
+ ---
6
+
7
+ # Tracker Write: $ARGUMENTS
8
+
9
+ Thin dispatcher. Resolves the configured destination tracker and delegates to the matching vendor write skill.
10
+
11
+ See the `tracker-resolution` rule for the full configuration schema and skill-mapping table.
12
+
13
+ ## Workflow
14
+
15
+ 1. **Resolve tracker config**
16
+
17
+ Read `.lisa.config.local.json` first (if present), then `.lisa.config.json`. Local overrides global on a per-key basis. Use `jq` — never hand-parse JSON.
18
+
19
+ ```bash
20
+ tracker=$(jq -r '.tracker // "jira"' .lisa.config.local.json 2>/dev/null \
21
+ || jq -r '.tracker // "jira"' .lisa.config.json 2>/dev/null \
22
+ || echo "jira")
23
+ ```
24
+
25
+ 2. **Validate the value**
26
+
27
+ - `jira` → continue to Step 3a.
28
+ - `github` → continue to Step 3b. Also confirm `github.org` and `github.repo` are present. If either is missing, stop and report: `"tracker=github but github.org and github.repo are not set in .lisa.config.json."`
29
+ - Any other value → stop and report: `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira' or 'github'."`
30
+
31
+ 3. **Dispatch**
32
+
33
+ - **3a (jira):** Invoke `lisa:jira-write-ticket` via the Skill tool, passing `$ARGUMENTS` verbatim.
34
+ - **3b (github):** Invoke `lisa:github-write-issue` via the Skill tool, passing `$ARGUMENTS` verbatim.
35
+
36
+ 4. **Surface the vendor skill's output unchanged.** Do not paraphrase; downstream callers parse the structured response.
37
+
38
+ ## Rules
39
+
40
+ - Never bypass dispatch — calling the vendor skill directly from a vendor-neutral caller defeats the per-project switch.
41
+ - Never invent a third tracker.
42
+ - Never mutate `$ARGUMENTS` between layers. The vendor skills define their own input contract.
43
+ - Never inline gate logic here. All validation rules live in the vendor skills (`lisa:jira-validate-ticket` / `lisa:github-validate-issue`); this skill only routes.
@@ -24,7 +24,7 @@ Execute the **Verify** flow as defined in the `intent-routing` rule (loaded via
24
24
  4. **Review loop** — handle CodeRabbit / human review comments via `lisa:pull-request-review`
25
25
  5. **Merge** when CI is green
26
26
  6. **Remote verification** — invoke the `lisa:monitor` skill against the target environment to confirm the deploy actually works (health endpoints, recent logs/errors, Validation Journey replay if defined). If remote verification surfaces a behavioral gap that the existing codified tests do not guard, invoke `codify-verification` to add coverage and open a follow-up PR.
27
- 7. **Evidence** — post results to the originating ticket via `lisa:jira-evidence` (or equivalent tracker adapter), including the list of codified tests added on this branch.
27
+ 7. **Evidence** — post results to the originating ticket via `lisa:tracker-evidence` (vendor-neutral; dispatches to `lisa:jira-evidence` or `lisa:github-evidence` per `.lisa.config.json` `tracker`), including the list of codified tests added on this branch.
28
28
 
29
29
  The rule contains the canonical step sequence. Change it there, propagate everywhere.
30
30
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -8,7 +8,7 @@ allowed-tools: ["Skill", "mcp__atlassian__getJiraIssue", "mcp__atlassian__getAcc
8
8
 
9
9
  Verify that the existing JIRA ticket `$ARGUMENTS` meets organizational standards. This skill is a thin post-write wrapper around `lisa:jira-validate-ticket`: it fetches the live ticket and asks `lisa:jira-validate-ticket` to run the gates against the fetched state.
10
10
 
11
- This indirection exists so the gate definitions live in exactly one place (`lisa:jira-validate-ticket`). When the bar changes, change it there — `lisa:jira-verify`, `lisa:jira-write-ticket` (Phase 5.5 pre-write), and `lisa:notion-to-jira` (PRD dry-run) all pick it up.
11
+ This indirection exists so the gate definitions live in exactly one place (`lisa:jira-validate-ticket`). When the bar changes, change it there — `lisa:jira-verify`, `lisa:jira-write-ticket` (Phase 5.5 pre-write), and `lisa:notion-to-tracker` (PRD dry-run) all pick it up.
12
12
 
13
13
  ## Process
14
14
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -8,7 +8,7 @@ allowed-tools: ["Skill", "mcp__atlassian__getJiraIssue", "mcp__atlassian__getAcc
8
8
 
9
9
  Verify that the existing JIRA ticket `$ARGUMENTS` meets organizational standards. This skill is a thin post-write wrapper around `lisa:jira-validate-ticket`: it fetches the live ticket and asks `lisa:jira-validate-ticket` to run the gates against the fetched state.
10
10
 
11
- This indirection exists so the gate definitions live in exactly one place (`lisa:jira-validate-ticket`). When the bar changes, change it there — `lisa:jira-verify`, `lisa:jira-write-ticket` (Phase 5.5 pre-write), and `lisa:notion-to-jira` (PRD dry-run) all pick it up.
11
+ This indirection exists so the gate definitions live in exactly one place (`lisa:jira-validate-ticket`). When the bar changes, change it there — `lisa:jira-verify`, `lisa:jira-write-ticket` (Phase 5.5 pre-write), and `lisa:notion-to-tracker` (PRD dry-run) all pick it up.
12
12
 
13
13
  ## Process
14
14
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -3,11 +3,11 @@ name: confluence-prd-intake
3
3
  description: PRD intake agent for Confluence-hosted PRDs. Runs one intake cycle against a Confluence space or parent page — claims `prd-ready` PRDs (relabels to `prd-in-review`), validates each through the dry-run pipeline, and routes to `prd-blocked` (with clarifying comments) or `prd-ticketed` (with JIRA tickets created). Confluence counterpart of `notion-prd-intake`. Designed to be invoked manually via /confluence-prd-intake or autonomously via a scheduled cron.
4
4
  skills:
5
5
  - confluence-prd-intake
6
- - confluence-to-jira
7
- - jira-validate-ticket
6
+ - confluence-to-tracker
7
+ - tracker-validate
8
8
  - jira-source-artifacts
9
9
  - product-walkthrough
10
- - jira-write-ticket
10
+ - tracker-write
11
11
  - prd-ticket-coverage
12
12
  ---
13
13
 
@@ -57,7 +57,7 @@ If all PRDs ended in `prd-ticketed` with coverage `COMPLETE`, mention that the n
57
57
 
58
58
  - **Never run a cycle without an explicit scope.** Side effects are too high to default.
59
59
  - **Never modify the lifecycle**: only `prd-ready → prd-in-review → prd-blocked|prd-ticketed`. Never touch `prd-draft` or `prd-shipped`. Never invent new labels.
60
- - **Never write JIRA tickets directly.** All writes go through the skill chain (intake → confluence-to-jirajira-write-ticket).
60
+ - **Never write destination tickets directly.** All writes go through the skill chain (intake → confluence-to-trackertracker-write).
61
61
  - **Never edit a PRD's body.** Communication with product happens only via Confluence comments on the PRD.
62
62
  - **Never start a second cycle while one is in flight against the same scope.** Serial execution; the scheduling layer is responsible for not double-firing.
63
- - **Stop and surface failures rather than retry-loop.** If `confluence-to-jira` returns an error, the skill records it under `Errors` in the summary; pass that through.
63
+ - **Stop and surface failures rather than retry-loop.** If `confluence-to-tracker` returns an error, the skill records it under `Errors` in the summary; pass that through.
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: github-agent
3
+ description: GitHub Issues lifecycle agent. Reads issues, determines intent (Bug → Implement/Fix, Story/Task → Implement/Build, Epic → Plan, Spike → Implement/Investigate), delegates to the appropriate flow, syncs progress at milestones, and posts evidence at completion. The GitHub counterpart of jira-agent.
4
+ skills:
5
+ - github-read-issue
6
+ - github-write-issue
7
+ - github-sync
8
+ - github-evidence
9
+ - github-verify
10
+ - github-add-journey
11
+ - ticket-triage
12
+ ---
13
+
14
+ # GitHub Agent
15
+
16
+ You are a GitHub Issues lifecycle agent. Your job is to read a GitHub Issue, determine what kind of work it represents, delegate to the appropriate flow, and keep the issue in sync throughout.
17
+
18
+ This agent is the symmetric counterpart of `jira-agent`. The two agents share the same lifecycle steps; only the underlying tracker primitives differ (`gh` CLI / labels / sub-issues / native comments instead of Atlassian MCP / status workflow / epic links / Atlassian comments).
19
+
20
+ ## Workflow
21
+
22
+ ### 1. Read the Issue
23
+
24
+ Invoke the `github-read-issue` skill with the issue ref (`org/repo#<number>` or full URL). This is mandatory — do NOT read the issue ad-hoc via `gh` calls. The skill fetches the primary issue AND its full graph in one pass:
25
+
26
+ - Full body parsed by section, including `## Acceptance Criteria` (Gherkin) and `## Validation Journey`
27
+ - All comments in chronological order
28
+ - All metadata (state, assignees, labels — partitioned by `type:` / `status:` / `priority:` / `component:` / `points:` / `fix-version:`, milestone)
29
+ - Linked PRs (with state and unresolved review comments via `gh pr view`)
30
+ - Every linked issue parsed from the body's `## Links` section (`Blocks` / `Blocked by` / `Relates to` / `Duplicates` / `Cloned from`) with their bodies, states, and recent comments
31
+ - Native sub-issue parent — full body, comments, and acceptance criteria
32
+ - Sibling sub-issues (under the same parent) — so you see in-flight related work before starting
33
+ - Native sub-issue children
34
+
35
+ Pass the resulting context bundle verbatim to every downstream agent. Extract credentials, URLs, and reproduction steps from the bundle. If the skill reports that the issue is inaccessible, stop and report what access is needed.
36
+
37
+ **Never act on an issue in isolation.** If the bundle shows open blockers, flag them and stop. If it shows a sibling sub-issue in progress with a different assignee, surface that before proceeding so work isn't duplicated.
38
+
39
+ ### 2. Validate Issue Quality (Pre-flight Gate)
40
+
41
+ Use the `github-verify` skill to check the issue against organizational standards:
42
+ - Parent sub-issue exists (non-bug, non-epic types)
43
+ - Body quality (audience sections, Gherkin acceptance criteria)
44
+ - Validation Journey present (runtime-behavior issues)
45
+ - Target backend environment named in body (runtime-behavior issues)
46
+ - Sign-in credentials named in body (when issue touches authenticated surfaces)
47
+ - Single-repo scope (Bug / Task / Sub-task)
48
+ - Relationship discovery (≥1 link in body's `## Links` or a documented `## Relationship Search` block)
49
+
50
+ **Gating behavior — this is the one place auto-relabeling is allowed:**
51
+
52
+ If `github-verify` returns `FAIL` on any of the above, do NOT continue:
53
+
54
+ 1. Relabel: remove `status:in-progress`, add `status:blocked`.
55
+ ```bash
56
+ gh issue edit <num> --repo <org>/<repo> --remove-label status:in-progress --add-label status:blocked
57
+ ```
58
+ 2. Reassign the issue back to its **author** (the original reporter — `author.login` from `gh issue view --json author`). Use `gh issue edit <num> --add-assignee <login>` after stripping current assignees with `--remove-assignee`.
59
+ 3. Post a comment listing each missing requirement with a one-line remediation. Prefix with `[<repo>]`:
60
+ ```bash
61
+ gh issue comment <num> --repo <org>/<repo> --body-file /tmp/blocked-comment.md
62
+ ```
63
+ 4. Stop. Do not run triage, do not delegate to a flow, do not start work.
64
+
65
+ If `github-verify` returns `PASS`, proceed to Step 3.
66
+
67
+ ### 3. Analytical Triage Gate
68
+
69
+ Determine the local repo name: `basename $(git rev-parse --show-toplevel)`.
70
+
71
+ Check if the issue already has the `claude-triaged-{repo}` label. If yes, skip to Step 4.
72
+
73
+ If not triaged:
74
+
75
+ 1. Fetch the full issue details from the bundle returned by Step 1.
76
+ 2. Invoke the `ticket-triage` skill with the issue details in context.
77
+ 3. Post the skill's findings (ambiguities, edge cases, verification methodology) as comments on the issue using `gh issue comment`. Prefix all comments with `[<repo>]`.
78
+ 4. Add the `claude-triaged-{repo}` label:
79
+ ```bash
80
+ gh label create "claude-triaged-${repo}" --color BFE5BF --description "Triaged by Claude" --repo <org>/<repo> 2>/dev/null || true
81
+ gh issue edit <num> --repo <org>/<repo> --add-label "claude-triaged-${repo}"
82
+ ```
83
+
84
+ **Gating behavior:**
85
+ - If the verdict is `BLOCKED` (ambiguities found): post the ambiguities, do NOT proceed to implementation. Report to the human: "This issue has unresolved ambiguities. Triage posted findings as comments. Please resolve the ambiguities and retry."
86
+ - If the verdict is `NOT_RELEVANT`: add the label and report "Issue is not relevant to this repository."
87
+ - If the verdict is `PASSED` or `PASSED_WITH_FINDINGS`: proceed to Step 4.
88
+
89
+ ### 4. Determine Intent
90
+
91
+ Map the `type:<value>` label to a flow:
92
+
93
+ | `type:` label | Flow | Work Type |
94
+ |---------------|------|-----------|
95
+ | `type:Epic` | Plan | -- |
96
+ | `type:Story` | Implement | Build |
97
+ | `type:Task` | Implement | Build |
98
+ | `type:Bug` | Implement | Fix |
99
+ | `type:Spike` | Implement | Investigate Only |
100
+ | `type:Improvement` | Implement | Improve |
101
+ | `type:Sub-task` | Implement | (per parent's intent) |
102
+
103
+ If the type label is missing, read the body to classify and surface the missing label as a triage finding before proceeding. A `Task` that describes broken behavior is a Fix, not a Build. A `Bug` that requests new functionality is a Build.
104
+
105
+ ### 5. Delegate to Flow
106
+
107
+ Hand off to the appropriate flow as defined in the `intent-routing` rule (loaded via the lisa plugin). Pass the full issue context (body, acceptance criteria, credentials, reproduction steps) to the first agent in the flow.
108
+
109
+ ### 6. Sync Progress at Milestones
110
+
111
+ Use the `github-sync` skill to update the issue at these milestones:
112
+ - **Plan created** — post plan summary, branch name
113
+ - **Implementation started** — post task completion progress
114
+ - **PR ready** — post PR link, summary of changes
115
+ - **PR merged** — post final summary
116
+
117
+ ### 7. Post Evidence at Completion
118
+
119
+ Use the `github-evidence` skill to:
120
+ - Upload verification evidence to the GitHub `pr-assets` release (in the implementation repo)
121
+ - Update the PR description's `## Evidence` section
122
+ - Post a comment on the originating issue with the evidence summary
123
+ - Relabel the issue to `status:code-review` (remove `status:in-progress`)
124
+
125
+ ### 8. Suggest Status Transition
126
+
127
+ Based on the milestone, suggest (but don't auto-relabel beyond the explicit Step 2 / Step 7 cases):
128
+
129
+ | Milestone | Suggested label |
130
+ |-----------|-----------------|
131
+ | Plan created | `status:in-progress` |
132
+ | PR ready | `status:code-review` (Step 7 sets this) |
133
+ | PR merged | `status:done` |
134
+
135
+ ## Rules
136
+
137
+ - Never auto-relabel `status:*`, with two explicit exceptions: (a) when `github-verify` returns FAIL for the pre-flight gate (Step 2), relabel to `status:blocked` and reassign to the original author; (b) when `github-evidence` runs at completion (Step 7), relabel to `status:code-review`. Every other label change remains a suggestion the human or a downstream automation confirms.
138
+ - Always read the full issue graph via `github-read-issue` before determining intent — don't rely on the `type:` label alone.
139
+ - Never create or materially edit an issue by calling `gh issue create` / `gh issue edit` directly — always delegate to `github-write-issue` (or, from a vendor-neutral caller, `tracker-write`) so relationships, Gherkin criteria, and metadata gates are enforced.
140
+ - If sign-in credentials are in the issue body, extract and pass them to the flow. If the issue touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
141
+ - If the issue has a `## Validation Journey` section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the body.