@codyswann/lisa 2.216.0 → 2.217.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  5. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +81 -4
  6. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +31 -0
  7. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +16 -0
  8. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  9. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  10. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  11. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  12. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +16 -0
  13. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  14. package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +12 -3
  15. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
  16. package/plugins/lisa/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  17. package/plugins/lisa/skills/lisa-github-to-tracker/SKILL.md +81 -4
  18. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +31 -0
  19. package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +16 -0
  20. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  21. package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  22. package/plugins/lisa/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  23. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  24. package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +16 -0
  25. package/plugins/lisa/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  26. package/plugins/lisa/skills/lisa-prd-backlink/SKILL.md +12 -3
  27. package/plugins/lisa/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
  28. package/plugins/lisa-agy/plugin.json +1 -1
  29. package/plugins/lisa-agy/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  30. package/plugins/lisa-agy/skills/lisa-github-to-tracker/SKILL.md +81 -4
  31. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +31 -0
  32. package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +16 -0
  33. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  34. package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  35. package/plugins/lisa-agy/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  36. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  37. package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +16 -0
  38. package/plugins/lisa-agy/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  39. package/plugins/lisa-agy/skills/lisa-prd-backlink/SKILL.md +12 -3
  40. package/plugins/lisa-agy/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
  41. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  44. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-copilot/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  48. package/plugins/lisa-copilot/skills/lisa-github-to-tracker/SKILL.md +81 -4
  49. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +31 -0
  50. package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +16 -0
  51. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  52. package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  53. package/plugins/lisa-copilot/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  54. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  55. package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +16 -0
  56. package/plugins/lisa-copilot/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  57. package/plugins/lisa-copilot/skills/lisa-prd-backlink/SKILL.md +12 -3
  58. package/plugins/lisa-copilot/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
  59. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-cursor/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  61. package/plugins/lisa-cursor/skills/lisa-github-to-tracker/SKILL.md +81 -4
  62. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +31 -0
  63. package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +16 -0
  64. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  65. package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  66. package/plugins/lisa-cursor/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  67. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  68. package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +16 -0
  69. package/plugins/lisa-cursor/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  70. package/plugins/lisa-cursor/skills/lisa-prd-backlink/SKILL.md +12 -3
  71. package/plugins/lisa-cursor/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
  72. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-expo-agy/plugin.json +1 -1
  75. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  80. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  85. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  89. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  90. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  94. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  95. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  99. package/plugins/lisa-rails-agy/plugin.json +1 -1
  100. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  104. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  105. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  109. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  110. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  112. package/plugins/src/base/skills/lisa-confluence-to-tracker/SKILL.md +78 -3
  113. package/plugins/src/base/skills/lisa-github-to-tracker/SKILL.md +81 -4
  114. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +31 -0
  115. package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +16 -0
  116. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +32 -0
  117. package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +16 -0
  118. package/plugins/src/base/skills/lisa-linear-to-tracker/SKILL.md +82 -4
  119. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +31 -0
  120. package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +16 -0
  121. package/plugins/src/base/skills/lisa-notion-to-tracker/SKILL.md +78 -2
  122. package/plugins/src/base/skills/lisa-prd-backlink/SKILL.md +12 -3
  123. package/plugins/src/base/skills/lisa-prd-ticket-coverage/SKILL.md +17 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
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-openclaw",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.216.0",
3
+ "version": "2.217.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,16 +38,24 @@ resolvable anchor exists).
38
38
  ```text
39
39
  ## confluence-to-tracker dry-run: <PRD title>
40
40
 
41
+ ### Requirement register
42
+ - R1 §"<section heading>": "<verbatim requirement text>"
43
+ - R2 §"<section heading>": "<verbatim requirement text>"
44
+ - ...
45
+
41
46
  ### Planned hierarchy
42
47
  - Epic: <summary>
43
48
  prd_section: "<heading text from the PRD that produced this epic>"
44
49
  prd_anchor: "<inline-comment anchor text>" # null if no specific section
50
+ requirements: [R1, R2] # register ids this ticket exists to satisfy; [] only for derived work
45
51
  - Story 1.1: <summary>
46
52
  prd_section: "<heading or user-story line>"
47
53
  prd_anchor: "<anchor>"
54
+ requirements: [R1]
48
55
  - Sub-task [<repo>]: <summary>
49
56
  prd_section: "<heading or AC bullet>"
50
57
  prd_anchor: "<anchor>"
58
+ requirements: [R1]
51
59
  - ...
52
60
  - Story 1.2: ...
53
61
 
@@ -93,6 +101,38 @@ Why parent-page-based, not label-based: scoped Atlassian API tokens cannot write
93
101
 
94
102
  Bypassing `lisa-tracker-write` produces thin tickets that the rest of the lifecycle (triage, ticket-verify, journey, evidence) treats as broken. Read operations on Atlassian (ticket reads, JQL search, Confluence page reads, comment fetches) are still performed in this skill — but ONLY via `lisa-atlassian-access` (`operation: read-ticket | search-issues | read-page | search-pages | list-sites`), never via direct MCP tool calls or `acli`.
95
103
 
104
+ ## Source Requirement Section (shared format)
105
+
106
+ Every ticket created by this skill — epic, story, and sub-task alike —
107
+ carries a `## Source Requirement` section in its description so anyone can
108
+ answer "why was this done?" without leaving the ticket:
109
+
110
+ ```markdown
111
+ ## Source Requirement
112
+
113
+ - **PRD**: [<PRD title>](<PRD URL>) §"<section heading>"
114
+ - **Requirement (R3)**: "<verbatim requirement text from the PRD>"
115
+
116
+ This ticket exists to satisfy the quoted requirement. If implementation
117
+ scope drifts from the quoted text, the PRD is the authority — raise the
118
+ conflict rather than silently reinterpreting it.
119
+ ```
120
+
121
+ Rules:
122
+
123
+ - **Verbatim quotes, never paraphrases.** The quote is what survives later
124
+ PRD edits, and it must be readable by a non-technical operator.
125
+ - **Multiple requirements** → one `**Requirement (Rn)**` line each.
126
+ - **Derived / cross-cutting work** (no single requirement) uses the
127
+ supporting form instead:
128
+ `- **Requirement**: Derived work supporting R3, R7 — no single PRD section.`
129
+ - **All the way down**: sub-tasks carry full quotes, not just a pointer at
130
+ the parent Story, so a leaf claimed by build-intake in isolation is
131
+ self-explanatory.
132
+ - JIRA descriptions render the section as `h2. Source Requirement`;
133
+ GitHub/Linear use the markdown heading. `lisa-tracker-write` and the
134
+ validators treat the section as mandatory for PRD-sourced tickets.
135
+
96
136
  ## Input
97
137
 
98
138
  A Confluence PRD page URL or page ID. The PRD is expected to have:
@@ -156,6 +196,34 @@ If env vars are not available, ask the user to provide them explicitly before pr
156
196
  - Engineering comments (prefixed with "Engineering:" or wrench emoji) that identify technical constraints
157
197
  - Cross-PRD dependencies (references to other features or shared infrastructure)
158
198
 
199
+ ### Phase 1.4: Requirement Register (traceability)
200
+
201
+ Every ticket this skill creates must be able to answer "why was this done?"
202
+ by pointing at the PRD requirement it satisfies. Build that mapping now,
203
+ while parsing the PRD — it cannot be reliably reconstructed afterwards.
204
+
205
+ 1. **Atomize the PRD into requirements** in document order: goals, user
206
+ stories, functional and non-functional requirements, acceptance-criteria
207
+ bullets, and important notes. Use the same atomization
208
+ `lisa-prd-ticket-coverage` uses so the two views line up.
209
+ 2. **Assign sequential register ids** (`R1`, `R2`, …). Ids are
210
+ per-generation, not durable — the **verbatim quote is the durable
211
+ anchor**; if the PRD is edited and re-planned, ids may shift but quotes
212
+ still identify the requirement.
213
+ 3. **Record each entry** as `{ id, verbatim_text, section_heading }` plus
214
+ the inline-comment anchor capture described in the dry-run format above.
215
+ 4. **Tag every planned ticket** — epic, story, AND sub-task — with the
216
+ register ids it exists to satisfy. All the way down: sub-tasks carry
217
+ their own requirement quotes so a leaf dispatched in isolation is
218
+ self-explanatory. A ticket that genuinely traces to no single
219
+ requirement (cross-cutting infrastructure, derived enablement work)
220
+ gets `requirements: []` and must say which requirements it *supports*
221
+ in its Source Requirement section instead.
222
+
223
+ The register feeds three consumers: the `## Source Requirement` section on
224
+ every created ticket (Phases 3–5), the dry-run report (above), and the
225
+ requirement tokens in the PRD back-link (Phase 7).
226
+
159
227
  ### Phase 1.5: Extract Source Artifacts
160
228
 
161
229
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, peer Confluence pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -202,8 +270,10 @@ For each PRD epic, **invoke the `lisa-tracker-write` skill** (do not invoke `lis
202
270
 
203
271
  - `project_key`: resolved by `lisa-tracker-write` from `.lisa.config.json`
204
272
  - `issue_type`: `Epic`
273
+ - `prd_source`: the originating PRD URL — mandatory for every ticket this skill creates; it arms the validator's S16 traceability gate
205
274
  - `summary`: epic title from the PRD
206
275
  - `description_body`: a draft of the 3-audience description containing:
276
+ - A **Source Requirement** section (see the shared format above) citing the Confluence page URL, section heading, and the verbatim text of every register requirement (`R-id`) this epic exists to satisfy
207
277
  - **Context / Business Value**: epic summary from the PRD, originating Confluence URL, business outcome
208
278
  - **Technical Approach**: cross-cutting integration points and constraints surfaced in Phase 2 codebase research
209
279
  - List of user stories the epic contains
@@ -232,9 +302,10 @@ For each story, **invoke `lisa-tracker-write`** with:
232
302
 
233
303
  - `project_key`: resolved by `lisa-tracker-write` from `.lisa.config.json`
234
304
  - `issue_type`: `Story`
305
+ - `prd_source`: the originating PRD URL — mandatory for every ticket this skill creates; it arms the validator's S16 traceability gate
235
306
  - `epic_parent`: the Epic key captured in Phase 3 (mandatory)
236
307
  - `summary`: prefixed per the naming convention above
237
- - `description_body`: 3-audience description as in `lisa-notion-to-tracker` Phase 4
308
+ - `description_body`: 3-audience description as in `lisa-notion-to-tracker` Phase 4, including as its first element a **Source Requirement** section (shared format above) quoting the register requirement(s) this story satisfies
238
309
  - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table below
239
310
 
240
311
  | Story type | Inherits domains |
@@ -259,6 +330,7 @@ Delegate sub-task creation to **parallel agents** (one per epic or batch of stor
259
330
  Each sub-task MUST:
260
331
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]` and in the description's `## Repository` / `h2. Repository` section
261
332
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
333
+ 3. **Carry its own `## Source Requirement` section** (shared format above) with the full verbatim quote(s) from the Phase 1.4 register — a leaf claimed by build-intake in isolation must be self-explanatory. When a sub-task is split per-repo, every split child inherits the same requirement quote(s).
262
334
 
263
335
  **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa-tracker-write` applies `status:ready` here so downstream build intake (`lisa-tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa-tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
264
336
 
@@ -283,6 +355,7 @@ After all tickets are created, present a summary table to the user:
283
355
  - All Epics with keys and URLs
284
356
  - All Stories grouped by Epic
285
357
  - All Sub-tasks grouped by Story with repo tags
358
+ - **Requirement coverage** — one row per Phase 1.4 register entry (`R-id`, quote excerpt, tickets that declare it); requirements with zero tickets are a gap to resolve before reporting success
286
359
  - Repo distribution
287
360
  - **Artifact Preservation Matrix**
288
361
  - Blockers list with recommendations and alternatives
@@ -298,7 +371,8 @@ Invoke `lisa-prd-backlink` with:
298
371
 
299
372
  - `source_type: "confluence"`
300
373
  - `source_ref`: the original Confluence page URL
301
- - `tickets`: the full list created in Phases 3–5, each entry as `{ key, title, type, url, parent_key }`
374
+ - `tickets`: the full list created in Phases 3–5, each entry as `{ key, title, type, url, parent_key, requirements }` — `requirements` is the list of Phase 1.4 register ids the ticket satisfies (empty for derived work)
375
+ - `requirement_register`: the Phase 1.4 register (`{ id, verbatim_text, section_heading }` entries), so the back-link section can render the requirement → tickets view
302
376
 
303
377
  If `lisa-prd-backlink` fails (page permission denied, Confluence unreachable), surface the error in the Phase 6 report rather than aborting — the tickets are already created. Recommend the user re-run `lisa-prd-backlink` standalone once the source is reachable.
304
378
 
@@ -327,10 +401,11 @@ tickets that downstream skills (triage, journey, evidence) cannot use.
327
401
 
328
402
  For each sub-task, invoke `lisa-tracker-write` with:
329
403
  - issue_type: "Sub-task"
404
+ - prd_source: [the originating PRD URL — mandatory; arms the S16 traceability gate]
330
405
  - parent: the parent story key
331
406
  - project_key: [PROJECT]
332
407
  - summary: prefixed with the repo in brackets, e.g. "[backend-api] Add audit log table"
333
- - description_body: a 3-section draft (Context / Technical Approach / Acceptance Criteria) plus `h2. Repository` naming exactly one repo
408
+ - description_body: a 3-section draft (Context / Technical Approach / Acceptance Criteria) plus `h2. Repository` naming exactly one repo, plus `h2. Source Requirement` quoting the PRD requirement(s) this sub-task satisfies VERBATIM with the PRD link and register id(s) — [paste the exact requirement text and R-ids for each sub-task from the requirement register; do not let the agent paraphrase]
334
409
  - gherkin_acceptance_criteria: derived from the story's functional requirements
335
410
  - sign_in_account: [test user credentials from config — name + role + how to obtain]
336
411
  - target_environment: "dev"
@@ -36,21 +36,29 @@ This skill supports two modes, controlled by a `dry_run` flag in `$ARGUMENTS`:
36
36
  - **`dry_run: false`** (default — full mode): run all phases, write tickets via `lisa-tracker-write`, run the preservation gate, report.
37
37
  - **`dry_run: true`** (planning + validation only — no writes): run Phases 1, 1.5, 1.6, 2, 3, 4 to plan the hierarchy and draft each ticket spec, then call `lisa-tracker-validate` (with `--spec-only`) on every drafted ticket. Aggregate the per-ticket validator reports into a single dry-run report. **Skip Phase 5 (sub-task creation), Phase 5.5 (preservation gate), and Phase 6 (results report)** — none of those make sense without writes. Return the dry-run report so the caller (e.g. `lisa-github-prd-intake`) can decide whether to proceed.
38
38
 
39
- Dry-run output format is identical to `lisa-notion-to-tracker` / `lisa-confluence-to-tracker` / `lisa-linear-to-tracker`. Reuse the same fields, including `prd_anchor` and `prd_section`. For GitHub, `prd_anchor` is a section heading from the PRD body when the failure traces to a specific section; otherwise `null` (the caller posts unanchored failures as a rollup comment on the PRD issue).
39
+ Dry-run output format is identical to `lisa-notion-to-tracker` / `lisa-confluence-to-tracker` / `lisa-linear-to-tracker`. Reuse the same fields, including `prd_anchor` and `prd_section`, the `### Requirement register` section, and the per-node `requirements:` lists. For GitHub, `prd_anchor` is a section heading from the PRD body when the failure traces to a specific section; otherwise `null` (the caller posts unanchored failures as a rollup comment on the PRD issue).
40
40
 
41
41
  ```text
42
42
  ## github-to-tracker dry-run: <PRD title>
43
43
 
44
+ ### Requirement register
45
+ - R1 §"<section heading>": "<verbatim requirement text>"
46
+ - R2 §"<section heading>": "<verbatim requirement text>"
47
+ - ...
48
+
44
49
  ### Planned hierarchy
45
50
  - Epic: <summary>
46
51
  prd_section: "<heading text from the PRD body or sub-issue title that produced this epic>"
47
52
  prd_anchor: "<heading text or sub-issue ref or null>"
53
+ requirements: [R1, R2] # register ids this ticket exists to satisfy; [] only for derived work
48
54
  - Story 1.1: <summary>
49
55
  prd_section: "<heading or user-story line>"
50
56
  prd_anchor: "<heading or sub-issue ref or null>"
57
+ requirements: [R1]
51
58
  - Sub-task [<repo>]: <summary>
52
59
  prd_section: "<heading or AC bullet>"
53
60
  prd_anchor: "<heading or sub-issue ref or null>"
61
+ requirements: [R1]
54
62
  - ...
55
63
  - Story 1.2: ...
56
64
 
@@ -85,6 +93,38 @@ Bypassing the shim layer produces tickets that the rest of the lifecycle (triage
85
93
 
86
94
  The `gh` reads in this skill are limited to reading the source PRD issue, its sub-issues, and its comments. They never write.
87
95
 
96
+ ## Source Requirement Section (shared format)
97
+
98
+ Every ticket created by this skill — Epic, Story, and Sub-task alike —
99
+ carries a `## Source Requirement` section in its body so anyone can
100
+ answer "why was this done?" without leaving the ticket:
101
+
102
+ ```markdown
103
+ ## Source Requirement
104
+
105
+ - **PRD**: [<PRD title>](<PRD URL>) §"<section heading>"
106
+ - **Requirement (R3)**: "<verbatim requirement text from the PRD>"
107
+
108
+ This ticket exists to satisfy the quoted requirement. If implementation
109
+ scope drifts from the quoted text, the PRD is the authority — raise the
110
+ conflict rather than silently reinterpreting it.
111
+ ```
112
+
113
+ Rules:
114
+
115
+ - **Verbatim quotes, never paraphrases.** The quote is what survives later
116
+ PRD edits, and it must be readable by a non-technical operator.
117
+ - **Multiple requirements** → one `**Requirement (Rn)**` line each.
118
+ - **Derived / cross-cutting work** (no single requirement) uses the
119
+ supporting form instead:
120
+ `- **Requirement**: Derived work supporting R3, R7 — no single PRD section.`
121
+ - **All the way down**: sub-tasks carry full quotes, not just a pointer at
122
+ the parent Story, so a leaf claimed by build-intake in isolation is
123
+ self-explanatory.
124
+ - JIRA descriptions render the section as `h2. Source Requirement`;
125
+ GitHub/Linear use the markdown heading. `lisa-tracker-write` and the
126
+ validators treat the section as mandatory for PRD-sourced tickets.
127
+
88
128
  ## Input
89
129
 
90
130
  A GitHub issue ref. The PRD is expected to have:
@@ -141,6 +181,36 @@ If env vars are not available, ask the user to provide them explicitly before pr
141
181
  - Engineering comments (prefixed with "Engineering:" or 🔧) that identify technical constraints.
142
182
  - Cross-PRD dependencies (references to other GitHub issues, Notion / Confluence / Linear PRDs, shared infrastructure).
143
183
 
184
+ ### Phase 1.4: Requirement Register (traceability)
185
+
186
+ Every ticket this skill creates must be able to answer "why was this done?"
187
+ by pointing at the PRD requirement it satisfies. Build that mapping now,
188
+ while parsing the PRD — it cannot be reliably reconstructed afterwards.
189
+
190
+ 1. **Atomize the PRD into requirements** in document order: goals, user
191
+ stories, functional and non-functional requirements, acceptance-criteria
192
+ bullets, and important notes — across the PRD issue body AND every
193
+ sub-issue body. Use the same atomization `lisa-prd-ticket-coverage`
194
+ uses so the two views line up.
195
+ 2. **Assign sequential register ids** (`R1`, `R2`, …). Ids are
196
+ per-generation, not durable — the **verbatim quote is the durable
197
+ anchor**; if the PRD is edited and re-planned, ids may shift but quotes
198
+ still identify the requirement.
199
+ 3. **Record each entry** as `{ id, verbatim_text, section_heading }`,
200
+ where `section_heading` is the markdown heading (or sub-issue ref)
201
+ the requirement lives under — the same value used for `prd_anchor`.
202
+ 4. **Tag every planned ticket** — Epic, Story, AND Sub-task — with the
203
+ register ids it exists to satisfy. All the way down: sub-tasks carry
204
+ their own requirement quotes so a leaf dispatched in isolation is
205
+ self-explanatory. A ticket that genuinely traces to no single
206
+ requirement (cross-cutting infrastructure, derived enablement work)
207
+ gets `requirements: []` and must say which requirements it *supports*
208
+ in its Source Requirement section instead.
209
+
210
+ The register feeds three consumers: the `## Source Requirement` section on
211
+ every created ticket (Phases 3–5), the dry-run report (above), and the
212
+ requirement tokens in the PRD back-link (Phase 7).
213
+
144
214
  ### Phase 1.5: Extract Source Artifacts
145
215
 
146
216
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, peer Notion / Confluence / Linear pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -186,8 +256,10 @@ Walkthrough findings are surfaced back to product via the orchestrating intake s
186
256
  For each epic identified in Phase 1, **invoke the `lisa-tracker-write` shim** (do not call `lisa-jira-write-ticket` or `lisa-github-write-issue` directly). Pass it everything it needs to enforce its quality gates:
187
257
 
188
258
  - `issue_type`: `Epic`
259
+ - `prd_source`: the originating PRD URL — mandatory for every ticket this skill creates; it arms the validator's S16 traceability gate
189
260
  - `summary`: epic title from the PRD
190
261
  - `body`: a draft of the multi-section description containing:
262
+ - A **Source Requirement** section (see the shared format above) citing the GitHub Issue PRD URL, section heading, and the verbatim text of every register requirement (`R-id`) this epic exists to satisfy
191
263
  - **Context / Business Value**: epic summary from the PRD, originating GitHub PRD URL, business outcome
192
264
  - **Technical Approach**: cross-cutting integration points and constraints surfaced in Phase 2 codebase research
193
265
  - List of user stories the epic contains
@@ -217,9 +289,10 @@ For each Epic, plan two kinds of Stories:
217
289
  For each Story, **invoke `lisa-tracker-write`** with:
218
290
 
219
291
  - `issue_type`: `Story`
292
+ - `prd_source`: the originating PRD URL — mandatory for every ticket this skill creates; it arms the validator's S16 traceability gate
220
293
  - `parent_ref` / `epic_parent`: the Epic ref captured in Phase 3 (mandatory)
221
294
  - `summary`: prefixed per the naming convention above
222
- - `body`: multi-section description as in `lisa-notion-to-tracker` Phase 4
295
+ - `body`: multi-section description as in `lisa-notion-to-tracker` Phase 4, including as its first element a **Source Requirement** section (shared format above) quoting the register requirement(s) this story satisfies
223
296
  - `artifacts`: the Phase 1.5 artifacts filtered by domain per the inheritance table:
224
297
 
225
298
  | Story type | Inherits domains |
@@ -244,6 +317,7 @@ Delegate sub-task creation to **parallel agents** (one per epic or batch of stor
244
317
  Each sub-task MUST:
245
318
  1. **Be scoped to exactly ONE repo** — indicated in brackets in the summary: `[repo-name]` and in the body/description's `## Repository` / `h2. Repository` section.
246
319
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking.
320
+ 3. **Carry its own `## Source Requirement` section** (shared format above) with the full verbatim quote(s) from the Phase 1.4 register — a leaf claimed by build-intake in isolation must be self-explanatory. When a sub-task is split per-repo, every split child inherits the same requirement quote(s).
247
321
 
248
322
  **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready label. `lisa-tracker-write` applies `status:ready` here so downstream build intake (`lisa-github-build-intake`) claims the leaves and never the Epic or Stories. Apply `status:ready` to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa-github-write-issue` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
249
323
 
@@ -268,6 +342,7 @@ After all tickets are created, present a summary table to the user:
268
342
  - All Epics with refs and URLs
269
343
  - All Stories grouped by Epic
270
344
  - All Sub-tasks grouped by Story with repo tags
345
+ - **Requirement coverage** — one row per Phase 1.4 register entry (`R-id`, quote excerpt, tickets that declare it); requirements with zero tickets are a gap to resolve before reporting success
271
346
  - Repo distribution
272
347
  - **Artifact Preservation Matrix**
273
348
  - Blockers list with recommendations and alternatives
@@ -283,7 +358,8 @@ Invoke `lisa-prd-backlink` with:
283
358
 
284
359
  - `source_type: "github"`
285
360
  - `source_ref`: the original GitHub Issue URL or `<org>/<repo>#<n>` token
286
- - `tickets`: the full list created in Phases 3–5, each entry as `{ key, title, type, url, parent_key }`
361
+ - `tickets`: the full list created in Phases 3–5, each entry as `{ key, title, type, url, parent_key, requirements }` — `requirements` is the list of Phase 1.4 register ids the ticket satisfies (empty for derived work)
362
+ - `requirement_register`: the Phase 1.4 register (`{ id, verbatim_text, section_heading }` entries), so the back-link section can render the requirement → tickets view
287
363
 
288
364
  If `lisa-prd-backlink` fails (permission denied, GitHub unreachable, issue locked), surface the error in the Phase 6 report rather than aborting — the tickets are already created. Recommend the user re-run `lisa-prd-backlink` standalone once the source is reachable.
289
365
 
@@ -312,9 +388,10 @@ that downstream skills (triage, journey, evidence) cannot use.
312
388
 
313
389
  For each sub-task, invoke `lisa-tracker-write` with:
314
390
  - issue_type: "Sub-task"
391
+ - prd_source: [the originating PRD URL — mandatory; arms the S16 traceability gate]
315
392
  - parent_ref: the parent story ref
316
393
  - summary: prefixed with the repo in brackets, e.g. "[backend-api] Add audit log table"
317
- - body: a multi-section draft (Context / Technical Approach / Acceptance Criteria / etc.) plus `## Repository` / `h2. Repository` naming exactly one repo
394
+ - body: a multi-section draft (Context / Technical Approach / Acceptance Criteria / etc.) plus `## Repository` / `h2. Repository` naming exactly one repo, plus `## Source Requirement` quoting the PRD requirement(s) this sub-task satisfies VERBATIM with the PRD link and register id(s) — [paste the exact requirement text and R-ids for each sub-task from the requirement register; do not let the agent paraphrase]
318
395
  - gherkin_acceptance_criteria: derived from the story's functional requirements
319
396
  - sign_in_account: [test user credentials from config]
320
397
  - target_environment: "dev"
@@ -65,6 +65,7 @@ remote_links: [{ url: "https://github.com/.../pull/42", title: "PR #42" }]
65
65
  journey_followup: auto # auto | none — see S11
66
66
  build_ready: true # caller asserts the build-ready role (status:ready) is/would be applied — see S15
67
67
  child_refs: ["my-org/my-repo#601", "my-org/my-repo#602"] # known child work (sub-issues / task-list / "Blocked by" parentage) — see S15
68
+ prd_source: "https://notion.so/..." # set when the issue was generated from a PRD — requires the Source Requirement section, see S16
68
69
  ```
69
70
 
70
71
  If the caller passes only an issue ref, fetch via `gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,state,milestone,assignees`, parse the body sections, derive the spec fields, then run gates. The parser lives in `lisa-github-read-issue` (composition).
@@ -92,6 +93,7 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
92
93
  | S13 Relationship Search | `dependency` | true |
93
94
  | S14 Evidence manifest binding (leaf work units) | `acceptance-criteria` | true |
94
95
  | S15 Leaf-only build-ready | `structural` | false |
96
+ | S16 Source Requirement traceability | `product-clarity` | true |
95
97
  | F1 Issue type label exists in repo | `structural` | false |
96
98
  | F2 Parent sub-issue exists and is the right type | `structural` | false |
97
99
  | F3 Linked issues exist | `structural` | false |
@@ -235,6 +237,34 @@ Remediation: `"Build-ready (status:ready) is leaf-only per leaf-only-lifecycle.
235
237
 
236
238
  `product_relevant: false` — a build-ready container is a lifecycle/decomposition error for the caller to repair, not a product question.
237
239
 
240
+ #### S16 — Source Requirement traceability (PRD-sourced issues)
241
+
242
+ Answers "why was this done?": every issue generated from a PRD must carry
243
+ the requirement it exists to satisfy, quoted verbatim, at every level of
244
+ the hierarchy — sub-issues included, so a leaf claimed by build-intake in
245
+ isolation is self-explanatory.
246
+
247
+ **When the gate applies.** Run S16 whenever the spec declares `prd_source`
248
+ (all `*-to-tracker` decomposition paths set it). Without `prd_source`
249
+ (ad-hoc issues with no PRD lineage) the gate is `N/A` — but if a
250
+ `Source Requirement` section is present anyway, still validate its shape
251
+ so a malformed section never passes silently.
252
+
253
+ **What must be present.** a `Source Requirement` section (`##` markdown heading) containing:
254
+
255
+ 1. A link to the source PRD (the `**PRD**:` line), and
256
+ 2. At least one `**Requirement` line with **verbatim quoted text**, or the
257
+ explicit derived-work form (`Derived work supporting R3, R7 — no single
258
+ PRD section.`).
259
+
260
+ Missing section, missing PRD link, empty/paraphrased requirement text
261
+ (quotes shorter than a few words, or prose with no quotation), or a bare
262
+ R-id with no quote: FAIL with remediation
263
+ `"Add a Source Requirement section citing the PRD link and quoting the requirement(s) this issue satisfies verbatim (see the Source Requirement shared format in the *-to-tracker skills). Derived work must name the requirements it supports."`
264
+
265
+ `product_relevant: true` — a issue whose requirement cannot be traced is
266
+ a product-clarity problem: nobody can tell why the work exists.
267
+
238
268
  ### Feasibility Gates (require GitHub lookups; skip in `--spec-only`)
239
269
 
240
270
  #### F1 — Issue type label exists in repo
@@ -321,6 +351,7 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
321
351
  - [PASS|FAIL|N/A] S13 Relationship Search — <one-line reason>
322
352
  - [PASS|FAIL|N/A] S14 Evidence manifest binding — <one-line reason>
323
353
  - [PASS|FAIL|N/A] S15 Leaf-only build-ready — <one-line reason>
354
+ - [PASS|FAIL|N/A] S16 Source Requirement traceability — <one-line reason>
324
355
 
325
356
  ### Feasibility Gates (omit this section when --spec-only)
326
357
  - [PASS|FAIL|N/A] F1 Issue type label exists in repo — <one-line reason>