@codyswann/lisa 2.132.4 → 2.132.6

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 (79) hide show
  1. package/expo/copy-overwrite/tsconfig.expo.json +6 -8
  2. package/expo/package-lisa/package.lisa.json +59 -53
  3. package/package.json +1 -1
  4. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  6. package/plugins/lisa/skills/git-submit-pr/SKILL.md +14 -0
  7. package/plugins/lisa/skills/github-sync/SKILL.md +12 -0
  8. package/plugins/lisa/skills/implement/SKILL.md +3 -1
  9. package/plugins/lisa/skills/jira-sync/SKILL.md +12 -0
  10. package/plugins/lisa/skills/linear-sync/SKILL.md +12 -0
  11. package/plugins/lisa/skills/tracker-sync/SKILL.md +13 -1
  12. package/plugins/lisa-agy/plugin.json +1 -1
  13. package/plugins/lisa-agy/skills/git-submit-pr/SKILL.md +14 -0
  14. package/plugins/lisa-agy/skills/github-sync/SKILL.md +12 -0
  15. package/plugins/lisa-agy/skills/implement/SKILL.md +3 -1
  16. package/plugins/lisa-agy/skills/jira-sync/SKILL.md +12 -0
  17. package/plugins/lisa-agy/skills/linear-sync/SKILL.md +12 -0
  18. package/plugins/lisa-agy/skills/tracker-sync/SKILL.md +13 -1
  19. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  22. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-copilot/skills/git-submit-pr/SKILL.md +14 -0
  26. package/plugins/lisa-copilot/skills/github-sync/SKILL.md +12 -0
  27. package/plugins/lisa-copilot/skills/implement/SKILL.md +3 -1
  28. package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +12 -0
  29. package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +12 -0
  30. package/plugins/lisa-copilot/skills/tracker-sync/SKILL.md +13 -1
  31. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cursor/skills/git-submit-pr/SKILL.md +14 -0
  33. package/plugins/lisa-cursor/skills/github-sync/SKILL.md +12 -0
  34. package/plugins/lisa-cursor/skills/implement/SKILL.md +3 -1
  35. package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +12 -0
  36. package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +12 -0
  37. package/plugins/lisa-cursor/skills/tracker-sync/SKILL.md +13 -1
  38. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-expo-agy/plugin.json +1 -1
  41. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  51. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  56. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-rails-agy/plugin.json +1 -1
  61. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  66. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  71. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/src/base/skills/git-submit-pr/SKILL.md +14 -0
  74. package/plugins/src/base/skills/github-sync/SKILL.md +12 -0
  75. package/plugins/src/base/skills/implement/SKILL.md +3 -1
  76. package/plugins/src/base/skills/jira-sync/SKILL.md +12 -0
  77. package/plugins/src/base/skills/linear-sync/SKILL.md +12 -0
  78. package/plugins/src/base/skills/tracker-sync/SKILL.md +13 -1
  79. package/typescript/copy-overwrite/eslint.ignore.config.json +1 -0
@@ -1,17 +1,15 @@
1
1
  {
2
- "extends": ["expo/tsconfig.base", "@codyswann/lisa/tsconfig/base"],
2
+ "extends": [
3
+ "expo/tsconfig.base",
4
+ "@codyswann/lisa/tsconfig/base",
5
+ "./tsconfig.local.json"
6
+ ],
3
7
  "compilerOptions": {
4
8
  "strict": true,
5
9
  "jsx": "react-native",
6
10
  "noEmit": true,
7
11
  "declaration": false,
8
12
  "allowImportingTsExtensions": true,
9
- "paths": {
10
- "@/graphql/*": ["./generated/*"],
11
- "@/*": ["./*"]
12
- },
13
13
  "moduleSuffixes": [".ios", ".android", ".native", ".web", ""]
14
- },
15
- "include": ["**/*.ts", "**/*.tsx", "nativewind-env.d.ts"],
16
- "exclude": ["node_modules", "dist", "web-build", "components/ui"]
14
+ }
17
15
  }
@@ -55,12 +55,68 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@apollo/client": "^3.10.8",
58
+ "@hookform/resolvers": "^3.9.0",
59
+ "apollo-link-sentry": "^4.0.0",
60
+ "base-64": "^1.0.0",
61
+ "date-fns": "^3.6.0",
62
+ "date-fns-tz": "^3.1.3",
63
+ "events": "^3.3.0",
64
+ "graphql": "^16.12.0",
65
+ "i18n-js": "^4.5.1",
66
+ "patch-package": "^8.0.0",
67
+ "react-hook-form": "^7.70.0",
68
+ "tailwindcss": "^3.4.7",
69
+ "tar": ">=7.5.11",
70
+ "text-encoding-polyfill": "^0.6.7",
71
+ "usehooks-ts": "^3.1.1",
72
+ "zod": "^4.3.5"
73
+ },
74
+ "devDependencies": {
75
+ "@babel/core": "^7.20.0",
76
+ "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
77
+ "@codyswann/lisa": "^2.106.0",
78
+ "@graphql-codegen/cli": "^6.1.0",
79
+ "@graphql-codegen/typescript": "^4.1.6",
80
+ "@graphql-codegen/typescript-operations": "^4.4.2",
81
+ "@graphql-codegen/typescript-react-apollo": "^4.3.4",
82
+ "@lhci/cli": "^0.15.1",
83
+ "@playwright/test": "^1.57.0",
84
+ "@types/base-64": "^1.0.2",
85
+ "@types/eslint-plugin-jsx-a11y": "^6.10.1",
86
+ "@types/eslint-plugin-tailwindcss": "^3.17.0",
87
+ "babel-plugin-module-resolver": "^5.0.2",
88
+ "baseline-browser-mapping": "^2.9.2",
89
+ "jest": "^30.0.0",
90
+ "ts-jest": "^29.4.6",
91
+ "@types/jest": "^30.0.0",
92
+ "@jest/test-sequencer": "^30.2.0",
93
+ "jest-environment-jsdom": "^30.2.0",
94
+ "serve": "^14.2.0",
95
+ "eslint-plugin-oxlint": "^1.62.0",
96
+ "oxlint": "^1.62.0",
97
+ "oxlint-tsgolint": "^0.22.1"
98
+ },
99
+ "resolutions": {
100
+ "@isaacs/brace-expansion": "^5.0.1",
101
+ "eslint-plugin-react-hooks": "^7.0.0",
102
+ "fast-xml-parser": "^5.3.6",
103
+ "tar": ">=7.5.11"
104
+ },
105
+ "overrides": {
106
+ "@isaacs/brace-expansion": "^5.0.1",
107
+ "eslint-plugin-react-hooks": "^7.0.0",
108
+ "fast-xml-parser": "^5.3.6",
109
+ "zod-validation-error": "^4.0.0",
110
+ "tar": ">=7.5.11"
111
+ }
112
+ },
113
+ "defaults": {
114
+ "dependencies": {
58
115
  "@expo/html-elements": "^0.12.5",
59
116
  "@expo/metro-runtime": "~6.1.2",
60
117
  "@gluestack-ui/core": "^3.0.10",
61
118
  "@gluestack-ui/utils": "^3.0.7",
62
119
  "@gorhom/bottom-sheet": "^5.2.6",
63
- "@hookform/resolvers": "^3.9.0",
64
120
  "@legendapp/motion": "^2.4.0",
65
121
  "@react-native-async-storage/async-storage": "2.2.0",
66
122
  "@react-native-masked-view/masked-view": "^0.3.2",
@@ -69,11 +125,6 @@
69
125
  "@sentry/react-native": "~7.11.0",
70
126
  "@shopify/flash-list": "2.0.2",
71
127
  "@shopify/react-native-skia": "2.6.2",
72
- "apollo-link-sentry": "^4.0.0",
73
- "base-64": "^1.0.0",
74
- "date-fns": "^3.6.0",
75
- "date-fns-tz": "^3.1.3",
76
- "events": "^3.3.0",
77
128
  "expo": "~56.0.0",
78
129
  "expo-application": "~56.0.3",
79
130
  "expo-battery": "~56.0.4",
@@ -95,14 +146,10 @@
95
146
  "expo-status-bar": "~56.0.4",
96
147
  "expo-system-ui": "~56.0.5",
97
148
  "expo-updates": "~56.0.17",
98
- "graphql": "^16.12.0",
99
- "i18n-js": "^4.5.1",
100
149
  "lucide-react-native": "^0.562.0",
101
150
  "nativewind": "^4.2.1",
102
- "patch-package": "^8.0.0",
103
151
  "react": "19.2.3",
104
152
  "react-dom": "19.2.3",
105
- "react-hook-form": "^7.70.0",
106
153
  "react-native": "0.85.3",
107
154
  "react-native-gesture-handler": "~2.31.1",
108
155
  "react-native-keyboard-controller": "1.21.6",
@@ -110,59 +157,18 @@
110
157
  "react-native-safe-area-context": "^5.6.2",
111
158
  "react-native-screens": "4.25.2",
112
159
  "react-native-svg": "^15.15.1",
113
- "react-native-web": "^0.21.2",
114
- "tailwindcss": "^3.4.7",
115
- "tar": ">=7.5.11",
116
- "text-encoding-polyfill": "^0.6.7",
117
- "usehooks-ts": "^3.1.1",
118
- "zod": "^4.3.5"
160
+ "react-native-web": "^0.21.2"
119
161
  },
120
162
  "devDependencies": {
121
- "@babel/core": "^7.20.0",
122
- "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
123
- "@codyswann/lisa": "^2.106.0",
124
- "@graphql-codegen/cli": "^6.1.0",
125
- "@graphql-codegen/typescript": "^4.1.6",
126
- "@graphql-codegen/typescript-operations": "^4.4.2",
127
- "@graphql-codegen/typescript-react-apollo": "^4.3.4",
128
- "@lhci/cli": "^0.15.1",
129
- "@playwright/test": "^1.57.0",
130
163
  "@react-native-community/cli": "^20.0.2",
131
164
  "@react-native-community/cli-platform-android": "^20.0.2",
132
165
  "@react-native-community/cli-platform-ios": "^20.0.2",
133
166
  "@testing-library/react-native": "^13.0.0",
134
- "@types/base-64": "^1.0.2",
135
- "@types/eslint-plugin-jsx-a11y": "^6.10.1",
136
- "@types/eslint-plugin-tailwindcss": "^3.17.0",
137
167
  "@types/react": "~19.2.15",
138
168
  "@types/react-dom": "~19.2.3",
139
- "babel-plugin-module-resolver": "^5.0.2",
140
- "baseline-browser-mapping": "^2.9.2",
141
169
  "expo-atlas": "^0.4.0",
142
- "jest": "^30.0.0",
143
- "ts-jest": "^29.4.6",
144
- "@types/jest": "^30.0.0",
145
- "@jest/test-sequencer": "^30.2.0",
146
- "jest-environment-jsdom": "^30.2.0",
147
170
  "jest-expo": "~56.0.4",
148
- "react-test-renderer": "19.2.3",
149
- "serve": "^14.2.0",
150
- "eslint-plugin-oxlint": "^1.62.0",
151
- "oxlint": "^1.62.0",
152
- "oxlint-tsgolint": "^0.22.1"
153
- },
154
- "resolutions": {
155
- "@isaacs/brace-expansion": "^5.0.1",
156
- "eslint-plugin-react-hooks": "^7.0.0",
157
- "fast-xml-parser": "^5.3.6",
158
- "tar": ">=7.5.11"
159
- },
160
- "overrides": {
161
- "@isaacs/brace-expansion": "^5.0.1",
162
- "eslint-plugin-react-hooks": "^7.0.0",
163
- "fast-xml-parser": "^5.3.6",
164
- "zod-validation-error": "^4.0.0",
165
- "tar": ">=7.5.11"
171
+ "react-test-renderer": "19.2.3"
166
172
  }
167
173
  }
168
174
  }
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "lodash": ">=4.18.1"
84
84
  },
85
85
  "name": "@codyswann/lisa",
86
- "version": "2.132.4",
86
+ "version": "2.132.6",
87
87
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
88
88
  "main": "dist/index.js",
89
89
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -13,6 +13,7 @@ Recognized optional hints:
13
13
  - `work_item_ref=<ref>` — source tracker item for native development linkage. Examples: `CodySwannGT/lisa#614`, `https://github.com/CodySwannGT/lisa/issues/614`, `ENG-123`, `PROJ-456`.
14
14
  - `target_branch=<branch>` or `base=<branch>` — intended PR base branch, used to decide whether a GitHub closing keyword is safe.
15
15
  - `tracker_provider=<github|linear|jira|none>` — explicit provider when the ref shape is ambiguous.
16
+ - `pr_url=<url>` — live pull request URL, only needed when updating tracker backlinks from an existing PR context.
16
17
 
17
18
  ## Workflow
18
19
 
@@ -31,6 +32,7 @@ Recognized optional hints:
31
32
  - If exists: Update description with latest changes
32
33
  - If not: Create PR with comprehensive description (not a draft)
33
34
  - Include native development linkage for the source work item when `work_item_ref` can be inferred from `$ARGUMENTS`, the current branch name, an existing PR body, or the issue/ticket context passed by the caller.
35
+ - After the PR exists, ensure the source work item has a backlink to the PR: invoke `lisa:tracker-sync` with the work item, milestone `pr-ready`, the live `pr_url`, and `tracker_provider` when known. This makes ticket -> PR linkage mandatory, not just a best-effort milestone comment.
34
36
  - After the PR exists, re-resolve the live Pull Request node id and, when `github.projects.v2` is enabled, invoke `lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <pull-request-node-id>` so linked pull requests join the configured shared Project without replacing the PR as the durable review/merge surface.
35
37
  5. **Auto-merge**: Choose merge strategy by PR type:
36
38
  - **Promotion PRs** (env → env, e.g. `dev` → `staging`): use `gh pr merge --auto --merge` (never squash). Squashing flattens the constituent `chore(release): X.Y.Z [skip ci]` commits into one commit titled with the PR title, stripping the `[skip ci]` markers and breaking the release workflow's promotion-detection regex — the destination branch then double-bumps its version. `--merge` keeps each `chore(release)` commit (and its `[skip ci]` marker) intact under a clean merge commit subject the workflow can recognize.
@@ -62,6 +64,18 @@ Add provider-appropriate linkage to the PR title and/or body without changing th
62
64
 
63
65
  When updating an existing PR, preserve any existing linkage line unless the new `work_item_ref` is more specific. Do not duplicate equivalent references.
64
66
 
67
+ ### Work Item Backlink
68
+
69
+ After creating or updating the PR, always make the reverse link durable on the source work item when `work_item_ref` is available:
70
+
71
+ 1. Resolve the live PR URL with `gh pr view <pr-number> --json url --jq .url`.
72
+ 2. Invoke `lisa:tracker-sync` with the original work item ref, milestone `pr-ready`, `pr_url=<url>`, and `tracker_provider=<provider>` when known.
73
+ 3. The vendor sync skill must prefer the provider's native development-link primitive where one is available and verifiable.
74
+ 4. If native linkage is unavailable, unconfigured, or cannot be verified, the vendor sync skill must create or update a single managed `[lisa-pr-link]` comment on the work item containing the PR URL. The fallback comment is not optional; it is the ticket-side half of the two-way link.
75
+ 5. When the PR later merges, invoke `lisa:tracker-sync` again with milestone `pr-merged`, the same `pr_url`, and the merge SHA when available, so the managed backlink reflects the final state.
76
+
77
+ Do not report PR submission as fully synced while the PR body references the ticket but the ticket has neither a verified native PR link nor the managed backlink comment.
78
+
65
79
  ### GitHub ProjectV2 Coordination
66
80
 
67
81
  After PR creation or update, resolve the live Pull Request node id:
@@ -10,6 +10,8 @@ Sync current plan progress to a GitHub Issue: `$ARGUMENTS`
10
10
 
11
11
  If no argument is provided, search for an issue ref (`org/repo#<number>` or `https://github.com/<org>/<repo>/issues/<n>` URL) in the active plan file (most recently modified `.md` in `plans/`).
12
12
 
13
+ Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
14
+
13
15
  ## Workflow
14
16
 
15
17
  ### Step 1: Identify Issue and Context
@@ -50,6 +52,16 @@ If no argument is provided, search for an issue ref (`org/repo#<number>` or `htt
50
52
 
51
53
  3. **Report** to the user what was synced.
52
54
 
55
+ ### Step 3b: Ensure PR Backlink
56
+
57
+ When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the GitHub Issue has a durable ticket -> PR link:
58
+
59
+ 1. Prefer GitHub's native development link by making sure the PR body contains `Refs #<n>` / `Closes #<n>` (or the fully qualified cross-repo form) and verify with `gh issue view <number> --json timelineItems` or an equivalent GitHub read that exposes the linked PR.
60
+ 2. If native linkage cannot be verified, post or update a single managed issue comment starting with `[lisa-pr-link]`. Include the PR URL, milestone (`pr-ready` or `pr-merged`), and merge SHA when available.
61
+ 3. Keep the fallback idempotent: search existing comments for `[lisa-pr-link]` and the PR URL; update/replace that managed comment where the provider allows updates, otherwise skip when the current body already matches. Do not append duplicate backlink comments on reruns.
62
+
63
+ This fallback is required even though GitHub usually links PRs natively from PR body keywords; the issue must show the PR from at least one ticket-side surface.
64
+
53
65
  ### Step 4: Suggest Status Transition
54
66
 
55
67
  Based on the milestone, suggest (but do NOT automatically perform) a label transition:
@@ -71,6 +71,7 @@ When the request came from a tracker work item, preserve its native identifier f
71
71
  - Capture `tracker_provider` and `work_item_ref` from the resolved input before creating or reusing a branch. Examples: `github` + `CodySwannGT/lisa#614`, `linear` + `ENG-123`, `jira` + `ENG-123`.
72
72
  - If a new branch is needed and the provider can link branches by identifier, include the identifier in the branch name before the human-readable slug. Linear and JIRA integrations commonly link from branch names; GitHub issue linkage is PR-body driven, but including the issue number in the branch name is still useful. Keep branch names URL-safe, for example `codex/ENG-123-add-checkout-copy` or `codex/614-add-checkout-copy`.
73
73
  - Pass the work-item ref and target branch to `lisa:git-submit-pr` when opening or updating the PR, for example `work_item_ref=CodySwannGT/lisa#614 target_branch=<base resolved from the ticket's environment above>` (not hardcoded `main`). The PR workflow owns provider-specific body text and must decide whether to use a closing keyword or a non-closing reference.
74
+ - After `lisa:git-submit-pr` returns a PR URL, ensure the reverse backlink is present on the source work item by running `lisa:tracker-sync <work_item_ref> pr-ready pr_url=<url> tracker_provider=<provider>`. The sync path must prefer native provider linkage and fall back to one managed `[lisa-pr-link]` comment when native linkage is unavailable or cannot be verified.
74
75
  - If the provider has no native branch or PR development-linkage surface, continue without linkage and mention that the provider was skipped.
75
76
 
76
77
  Using the general-purpose agent in Team Lead session, Determine which flow applies:
@@ -159,8 +160,9 @@ Before shutting down the team, execute the Verify flow:
159
160
  5. Commit ALL outstanding changes in logical batches on the branch (minus sensitive data/information) — not just changes made by the agent team. This includes pre-existing uncommitted changes that were on the branch before the plan started. Do NOT filter commits to only "task-related" files. If it shows up in git status, it gets committed (unless it contains secrets).
160
161
  6. Push the changes - if any pre-push hook blocks you, create a task for the agent team to fix the error/problem whether it was pre-existing or not
161
162
  7. Open a pull request with auto-merge on via `lisa:git-submit-pr`, targeting the **base branch resolved from the ticket's environment** (`target_branch=<base>`, per the branch step above), and including the work-item ref when one exists so the PR can be linked natively to the source issue.
163
+ 7a. Confirm two-way linkage before treating PR submission as complete: the PR body/title/branch must reference the work item, and the work item must have either a verified native PR link or a single managed `[lisa-pr-link]` fallback comment from `lisa:tracker-sync`.
162
164
  8. PR Watch Loop: Monitor the PR using `git-submit-pr`'s drive-to-merge behavior. Create a task for the agent team to resolve any code review comments by either implementing the suggestions or commenting why they should not be implemented and close the comment. Fix any failing checks and repush. If the PR is `BEHIND`, blocked by stale review state, or cannot enable auto-merge, follow the harness-agnostic `git-submit-pr` re-sync, review-gate, and direct-merge fallback loop until the PR is actually merged or a blocking failure is surfaced.
163
- 9. Merge the PR
165
+ 9. Merge the PR, then refresh the ticket-side backlink with `lisa:tracker-sync <work_item_ref> pr-merged pr_url=<url> merge_sha=<sha> tracker_provider=<provider>` when a work item exists.
164
166
  10. Monitor the deploy action that triggers automatically from the successful merge
165
167
  11. If deploy fails, create a task for the agent team to fix the failure, open a new PR and then go back to step 7
166
168
  12. Remote verification: `verification-specialist` verifies in target environment (same checks as local verification, but on remote), and refreshes the verdict (step 2a) to reflect the remote result.
@@ -12,6 +12,8 @@ Sync current plan progress to JIRA ticket: $ARGUMENTS
12
12
 
13
13
  If no argument provided, search for a ticket URL in the active plan file (most recently modified `.md` in `plans/`).
14
14
 
15
+ Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
16
+
15
17
  ## Workflow
16
18
 
17
19
  ### Step 1: Identify Ticket and Context
@@ -48,6 +50,16 @@ Before adding a comment, check for an existing milestone comment to avoid duplic
48
50
  - Add PR link to a custom field or comment
49
51
  5. **Report** what was synced to the user
50
52
 
53
+ ### Step 3b: Ensure PR Backlink
54
+
55
+ When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the JIRA ticket has a durable ticket -> PR link:
56
+
57
+ 1. Prefer the JIRA development-link surface when the site's GitHub/JIRA integration or remote-link API is available through `lisa:atlassian-access`; verify by re-reading the ticket's remote links / development metadata.
58
+ 2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed JIRA comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
59
+ 3. Keep the fallback idempotent: read existing comments, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If the current access layer cannot update comments in place, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
60
+
61
+ The PR body/branch issue key is the PR -> ticket side. This step is the required ticket -> PR side.
62
+
51
63
  ### Step 4: Suggest Status Transition
52
64
 
53
65
  Based on the milestone, suggest (but don't automatically perform) a status transition:
@@ -31,6 +31,7 @@ This skill **suggests** transitions but does not auto-transition the native Line
31
31
 
32
32
  - `<IDENTIFIER>` is the Linear Issue identifier (e.g. `ENG-123`). If not provided, the skill searches the active plan file for a linked Linear Issue.
33
33
  - `<milestone>` is one of `plan-created`, `implementation-in-progress`, `pr-ready`, `pr-merged`.
34
+ - Optional tokens include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
34
35
 
35
36
  ## Phase 1 — Resolve Issue
36
37
 
@@ -66,6 +67,16 @@ Next: implementation begins. Suggested status: **Todo** (label: `status:ready`).
66
67
 
67
68
  Call `mcp__linear-server__save_comment({issueId: <id>, body: <comment>})`.
68
69
 
70
+ ## Phase 3b — Ensure PR Backlink
71
+
72
+ When `$ARGUMENTS` includes `pr_url=<url>` for `pr-ready` or `pr-merged`, ensure the Linear Issue has a durable ticket -> PR link:
73
+
74
+ 1. Prefer Linear's native GitHub attachment / pull request link when the integration has attached the PR through the branch name, PR title, or PR body issue identifier. Verify by re-reading the Issue and its attachments / relations where the Linear access layer exposes them.
75
+ 2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed Linear comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
76
+ 3. Keep the fallback idempotent: read existing comments where the access layer exposes them, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If comment update is unavailable, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
77
+
78
+ The PR branch/title/body identifier is the PR -> Linear side. This phase is the required Linear -> PR side.
79
+
69
80
  ## Phase 4 — Update Status Label (when caller requests)
70
81
 
71
82
  If the caller passes `--update-label`, update the `status:*` label set via `mcp__linear-server__save_issue`:
@@ -113,3 +124,4 @@ When the caller passes `--rollup`, this skill **derives a parent/container's `st
113
124
  - Never post empty or minimal comments — if a milestone has no meaningful content, skip the post.
114
125
  - Do not delete prior milestone comments. They are the audit trail.
115
126
  - If `save_comment` fails, retry once. If it fails again, surface the error.
127
+ - Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
@@ -20,7 +20,7 @@ See the `config-resolution` rule for configuration and dispatch table.
20
20
  - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
21
21
  3. Pass through the output.
22
22
 
23
- `$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below) and `--update-label`. The shim never interprets these — the vendor skill does.
23
+ `$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below), `--update-label`, `pr_url=<url>`, and `merge_sha=<sha>`. The shim never interprets these — the vendor skill does.
24
24
 
25
25
  If `$ARGUMENTS` is empty, all vendor skills auto-detect a ticket reference from the active plan file (most recently modified `.md` in `plans/`).
26
26
 
@@ -45,8 +45,20 @@ The state machine (first match wins, evaluated over the **required** leaves only
45
45
 
46
46
  **Safe-by-default when not yet supported.** A vendor sync path that has not implemented native rollup MUST be a documented no-op that surfaces the derived state as a suggestion/comment rather than guessing a transition — never an unsafe default. Without `--rollup`, the sync skills behave exactly as before (milestone comment on the work item; no parent derivation).
47
47
 
48
+ ## Pull request backlinking
49
+
50
+ When `$ARGUMENTS` includes `pr_url=<url>` with milestone `pr-ready` or `pr-merged`, the dispatch target must ensure ticket -> PR linkage, not just post a generic progress note:
51
+
52
+ 1. Prefer the provider's native development-link primitive when Lisa can write and verify it for that provider.
53
+ 2. Verify the native link using the provider read surface when available.
54
+ 3. If the native link is unavailable, unconfigured, cross-system, or cannot be verified, create or update one managed backlink comment on the work item containing the PR URL and current milestone.
55
+ 4. Keep the comment idempotent by using a stable marker such as `[lisa-pr-link]`; reruns update or skip the existing managed comment rather than appending duplicates.
56
+
57
+ This is the reverse half of `lisa:git-submit-pr`'s PR body linkage. A PR that mentions a ticket is not considered fully synced until the ticket also has either a verified native PR link or the managed fallback comment.
58
+
48
59
  ## Rules
49
60
 
50
61
  - Idempotent updates — running sync at the same milestone twice should not produce duplicate comments. Vendor skills enforce this.
51
62
  - Never auto-transition the underlying state. Linear's label-based transition (`status:*`) is the canonical signal and is updated only when the caller passes `--update-label`. Native states stay as suggestions.
52
63
  - Parent rollup derives state from children per the `leaf-only-lifecycle` rule; it never sets a parent to `ready` and never resolves a dev/staging `done` in this single-environment repo.
64
+ - Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -13,6 +13,7 @@ Recognized optional hints:
13
13
  - `work_item_ref=<ref>` — source tracker item for native development linkage. Examples: `CodySwannGT/lisa#614`, `https://github.com/CodySwannGT/lisa/issues/614`, `ENG-123`, `PROJ-456`.
14
14
  - `target_branch=<branch>` or `base=<branch>` — intended PR base branch, used to decide whether a GitHub closing keyword is safe.
15
15
  - `tracker_provider=<github|linear|jira|none>` — explicit provider when the ref shape is ambiguous.
16
+ - `pr_url=<url>` — live pull request URL, only needed when updating tracker backlinks from an existing PR context.
16
17
 
17
18
  ## Workflow
18
19
 
@@ -31,6 +32,7 @@ Recognized optional hints:
31
32
  - If exists: Update description with latest changes
32
33
  - If not: Create PR with comprehensive description (not a draft)
33
34
  - Include native development linkage for the source work item when `work_item_ref` can be inferred from `$ARGUMENTS`, the current branch name, an existing PR body, or the issue/ticket context passed by the caller.
35
+ - After the PR exists, ensure the source work item has a backlink to the PR: invoke `lisa:tracker-sync` with the work item, milestone `pr-ready`, the live `pr_url`, and `tracker_provider` when known. This makes ticket -> PR linkage mandatory, not just a best-effort milestone comment.
34
36
  - After the PR exists, re-resolve the live Pull Request node id and, when `github.projects.v2` is enabled, invoke `lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <pull-request-node-id>` so linked pull requests join the configured shared Project without replacing the PR as the durable review/merge surface.
35
37
  5. **Auto-merge**: Choose merge strategy by PR type:
36
38
  - **Promotion PRs** (env → env, e.g. `dev` → `staging`): use `gh pr merge --auto --merge` (never squash). Squashing flattens the constituent `chore(release): X.Y.Z [skip ci]` commits into one commit titled with the PR title, stripping the `[skip ci]` markers and breaking the release workflow's promotion-detection regex — the destination branch then double-bumps its version. `--merge` keeps each `chore(release)` commit (and its `[skip ci]` marker) intact under a clean merge commit subject the workflow can recognize.
@@ -62,6 +64,18 @@ Add provider-appropriate linkage to the PR title and/or body without changing th
62
64
 
63
65
  When updating an existing PR, preserve any existing linkage line unless the new `work_item_ref` is more specific. Do not duplicate equivalent references.
64
66
 
67
+ ### Work Item Backlink
68
+
69
+ After creating or updating the PR, always make the reverse link durable on the source work item when `work_item_ref` is available:
70
+
71
+ 1. Resolve the live PR URL with `gh pr view <pr-number> --json url --jq .url`.
72
+ 2. Invoke `lisa:tracker-sync` with the original work item ref, milestone `pr-ready`, `pr_url=<url>`, and `tracker_provider=<provider>` when known.
73
+ 3. The vendor sync skill must prefer the provider's native development-link primitive where one is available and verifiable.
74
+ 4. If native linkage is unavailable, unconfigured, or cannot be verified, the vendor sync skill must create or update a single managed `[lisa-pr-link]` comment on the work item containing the PR URL. The fallback comment is not optional; it is the ticket-side half of the two-way link.
75
+ 5. When the PR later merges, invoke `lisa:tracker-sync` again with milestone `pr-merged`, the same `pr_url`, and the merge SHA when available, so the managed backlink reflects the final state.
76
+
77
+ Do not report PR submission as fully synced while the PR body references the ticket but the ticket has neither a verified native PR link nor the managed backlink comment.
78
+
65
79
  ### GitHub ProjectV2 Coordination
66
80
 
67
81
  After PR creation or update, resolve the live Pull Request node id:
@@ -10,6 +10,8 @@ Sync current plan progress to a GitHub Issue: `$ARGUMENTS`
10
10
 
11
11
  If no argument is provided, search for an issue ref (`org/repo#<number>` or `https://github.com/<org>/<repo>/issues/<n>` URL) in the active plan file (most recently modified `.md` in `plans/`).
12
12
 
13
+ Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
14
+
13
15
  ## Workflow
14
16
 
15
17
  ### Step 1: Identify Issue and Context
@@ -50,6 +52,16 @@ If no argument is provided, search for an issue ref (`org/repo#<number>` or `htt
50
52
 
51
53
  3. **Report** to the user what was synced.
52
54
 
55
+ ### Step 3b: Ensure PR Backlink
56
+
57
+ When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the GitHub Issue has a durable ticket -> PR link:
58
+
59
+ 1. Prefer GitHub's native development link by making sure the PR body contains `Refs #<n>` / `Closes #<n>` (or the fully qualified cross-repo form) and verify with `gh issue view <number> --json timelineItems` or an equivalent GitHub read that exposes the linked PR.
60
+ 2. If native linkage cannot be verified, post or update a single managed issue comment starting with `[lisa-pr-link]`. Include the PR URL, milestone (`pr-ready` or `pr-merged`), and merge SHA when available.
61
+ 3. Keep the fallback idempotent: search existing comments for `[lisa-pr-link]` and the PR URL; update/replace that managed comment where the provider allows updates, otherwise skip when the current body already matches. Do not append duplicate backlink comments on reruns.
62
+
63
+ This fallback is required even though GitHub usually links PRs natively from PR body keywords; the issue must show the PR from at least one ticket-side surface.
64
+
53
65
  ### Step 4: Suggest Status Transition
54
66
 
55
67
  Based on the milestone, suggest (but do NOT automatically perform) a label transition:
@@ -71,6 +71,7 @@ When the request came from a tracker work item, preserve its native identifier f
71
71
  - Capture `tracker_provider` and `work_item_ref` from the resolved input before creating or reusing a branch. Examples: `github` + `CodySwannGT/lisa#614`, `linear` + `ENG-123`, `jira` + `ENG-123`.
72
72
  - If a new branch is needed and the provider can link branches by identifier, include the identifier in the branch name before the human-readable slug. Linear and JIRA integrations commonly link from branch names; GitHub issue linkage is PR-body driven, but including the issue number in the branch name is still useful. Keep branch names URL-safe, for example `codex/ENG-123-add-checkout-copy` or `codex/614-add-checkout-copy`.
73
73
  - Pass the work-item ref and target branch to `lisa:git-submit-pr` when opening or updating the PR, for example `work_item_ref=CodySwannGT/lisa#614 target_branch=<base resolved from the ticket's environment above>` (not hardcoded `main`). The PR workflow owns provider-specific body text and must decide whether to use a closing keyword or a non-closing reference.
74
+ - After `lisa:git-submit-pr` returns a PR URL, ensure the reverse backlink is present on the source work item by running `lisa:tracker-sync <work_item_ref> pr-ready pr_url=<url> tracker_provider=<provider>`. The sync path must prefer native provider linkage and fall back to one managed `[lisa-pr-link]` comment when native linkage is unavailable or cannot be verified.
74
75
  - If the provider has no native branch or PR development-linkage surface, continue without linkage and mention that the provider was skipped.
75
76
 
76
77
  Using the general-purpose agent in Team Lead session, Determine which flow applies:
@@ -159,8 +160,9 @@ Before shutting down the team, execute the Verify flow:
159
160
  5. Commit ALL outstanding changes in logical batches on the branch (minus sensitive data/information) — not just changes made by the agent team. This includes pre-existing uncommitted changes that were on the branch before the plan started. Do NOT filter commits to only "task-related" files. If it shows up in git status, it gets committed (unless it contains secrets).
160
161
  6. Push the changes - if any pre-push hook blocks you, create a task for the agent team to fix the error/problem whether it was pre-existing or not
161
162
  7. Open a pull request with auto-merge on via `lisa:git-submit-pr`, targeting the **base branch resolved from the ticket's environment** (`target_branch=<base>`, per the branch step above), and including the work-item ref when one exists so the PR can be linked natively to the source issue.
163
+ 7a. Confirm two-way linkage before treating PR submission as complete: the PR body/title/branch must reference the work item, and the work item must have either a verified native PR link or a single managed `[lisa-pr-link]` fallback comment from `lisa:tracker-sync`.
162
164
  8. PR Watch Loop: Monitor the PR using `git-submit-pr`'s drive-to-merge behavior. Create a task for the agent team to resolve any code review comments by either implementing the suggestions or commenting why they should not be implemented and close the comment. Fix any failing checks and repush. If the PR is `BEHIND`, blocked by stale review state, or cannot enable auto-merge, follow the harness-agnostic `git-submit-pr` re-sync, review-gate, and direct-merge fallback loop until the PR is actually merged or a blocking failure is surfaced.
163
- 9. Merge the PR
165
+ 9. Merge the PR, then refresh the ticket-side backlink with `lisa:tracker-sync <work_item_ref> pr-merged pr_url=<url> merge_sha=<sha> tracker_provider=<provider>` when a work item exists.
164
166
  10. Monitor the deploy action that triggers automatically from the successful merge
165
167
  11. If deploy fails, create a task for the agent team to fix the failure, open a new PR and then go back to step 7
166
168
  12. Remote verification: `verification-specialist` verifies in target environment (same checks as local verification, but on remote), and refreshes the verdict (step 2a) to reflect the remote result.
@@ -12,6 +12,8 @@ Sync current plan progress to JIRA ticket: $ARGUMENTS
12
12
 
13
13
  If no argument provided, search for a ticket URL in the active plan file (most recently modified `.md` in `plans/`).
14
14
 
15
+ Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
16
+
15
17
  ## Workflow
16
18
 
17
19
  ### Step 1: Identify Ticket and Context
@@ -48,6 +50,16 @@ Before adding a comment, check for an existing milestone comment to avoid duplic
48
50
  - Add PR link to a custom field or comment
49
51
  5. **Report** what was synced to the user
50
52
 
53
+ ### Step 3b: Ensure PR Backlink
54
+
55
+ When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the JIRA ticket has a durable ticket -> PR link:
56
+
57
+ 1. Prefer the JIRA development-link surface when the site's GitHub/JIRA integration or remote-link API is available through `lisa:atlassian-access`; verify by re-reading the ticket's remote links / development metadata.
58
+ 2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed JIRA comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
59
+ 3. Keep the fallback idempotent: read existing comments, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If the current access layer cannot update comments in place, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
60
+
61
+ The PR body/branch issue key is the PR -> ticket side. This step is the required ticket -> PR side.
62
+
51
63
  ### Step 4: Suggest Status Transition
52
64
 
53
65
  Based on the milestone, suggest (but don't automatically perform) a status transition:
@@ -31,6 +31,7 @@ This skill **suggests** transitions but does not auto-transition the native Line
31
31
 
32
32
  - `<IDENTIFIER>` is the Linear Issue identifier (e.g. `ENG-123`). If not provided, the skill searches the active plan file for a linked Linear Issue.
33
33
  - `<milestone>` is one of `plan-created`, `implementation-in-progress`, `pr-ready`, `pr-merged`.
34
+ - Optional tokens include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
34
35
 
35
36
  ## Phase 1 — Resolve Issue
36
37
 
@@ -66,6 +67,16 @@ Next: implementation begins. Suggested status: **Todo** (label: `status:ready`).
66
67
 
67
68
  Call `mcp__linear-server__save_comment({issueId: <id>, body: <comment>})`.
68
69
 
70
+ ## Phase 3b — Ensure PR Backlink
71
+
72
+ When `$ARGUMENTS` includes `pr_url=<url>` for `pr-ready` or `pr-merged`, ensure the Linear Issue has a durable ticket -> PR link:
73
+
74
+ 1. Prefer Linear's native GitHub attachment / pull request link when the integration has attached the PR through the branch name, PR title, or PR body issue identifier. Verify by re-reading the Issue and its attachments / relations where the Linear access layer exposes them.
75
+ 2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed Linear comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
76
+ 3. Keep the fallback idempotent: read existing comments where the access layer exposes them, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If comment update is unavailable, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
77
+
78
+ The PR branch/title/body identifier is the PR -> Linear side. This phase is the required Linear -> PR side.
79
+
69
80
  ## Phase 4 — Update Status Label (when caller requests)
70
81
 
71
82
  If the caller passes `--update-label`, update the `status:*` label set via `mcp__linear-server__save_issue`:
@@ -113,3 +124,4 @@ When the caller passes `--rollup`, this skill **derives a parent/container's `st
113
124
  - Never post empty or minimal comments — if a milestone has no meaningful content, skip the post.
114
125
  - Do not delete prior milestone comments. They are the audit trail.
115
126
  - If `save_comment` fails, retry once. If it fails again, surface the error.
127
+ - Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
@@ -20,7 +20,7 @@ See the `config-resolution` rule for configuration and dispatch table.
20
20
  - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
21
21
  3. Pass through the output.
22
22
 
23
- `$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below) and `--update-label`. The shim never interprets these — the vendor skill does.
23
+ `$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below), `--update-label`, `pr_url=<url>`, and `merge_sha=<sha>`. The shim never interprets these — the vendor skill does.
24
24
 
25
25
  If `$ARGUMENTS` is empty, all vendor skills auto-detect a ticket reference from the active plan file (most recently modified `.md` in `plans/`).
26
26
 
@@ -45,8 +45,20 @@ The state machine (first match wins, evaluated over the **required** leaves only
45
45
 
46
46
  **Safe-by-default when not yet supported.** A vendor sync path that has not implemented native rollup MUST be a documented no-op that surfaces the derived state as a suggestion/comment rather than guessing a transition — never an unsafe default. Without `--rollup`, the sync skills behave exactly as before (milestone comment on the work item; no parent derivation).
47
47
 
48
+ ## Pull request backlinking
49
+
50
+ When `$ARGUMENTS` includes `pr_url=<url>` with milestone `pr-ready` or `pr-merged`, the dispatch target must ensure ticket -> PR linkage, not just post a generic progress note:
51
+
52
+ 1. Prefer the provider's native development-link primitive when Lisa can write and verify it for that provider.
53
+ 2. Verify the native link using the provider read surface when available.
54
+ 3. If the native link is unavailable, unconfigured, cross-system, or cannot be verified, create or update one managed backlink comment on the work item containing the PR URL and current milestone.
55
+ 4. Keep the comment idempotent by using a stable marker such as `[lisa-pr-link]`; reruns update or skip the existing managed comment rather than appending duplicates.
56
+
57
+ This is the reverse half of `lisa:git-submit-pr`'s PR body linkage. A PR that mentions a ticket is not considered fully synced until the ticket also has either a verified native PR link or the managed fallback comment.
58
+
48
59
  ## Rules
49
60
 
50
61
  - Idempotent updates — running sync at the same milestone twice should not produce duplicate comments. Vendor skills enforce this.
51
62
  - Never auto-transition the underlying state. Linear's label-based transition (`status:*`) is the canonical signal and is updated only when the caller passes `--update-label`. Native states stay as suggestions.
52
63
  - Parent rollup derives state from children per the `leaf-only-lifecycle` rule; it never sets a parent to `ready` and never resolves a dev/staging `done` in this single-environment repo.
64
+ - Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
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-cdk",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
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-cdk",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
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-cdk",
3
- "version": "2.132.4",
3
+ "version": "2.132.6",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"