@codyswann/lisa 4.55.27 → 4.55.29

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 (97) hide show
  1. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  2. package/dist/core/lisa-owned-hash-ledger.js +2 -0
  3. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  4. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  5. package/dist/core/upstream-evidence-manifest.js +8 -8
  6. package/expo/copy-overwrite/scripts/check-e2e-coverage.mjs +5 -1
  7. package/package.json +4 -4
  8. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  10. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +2 -0
  11. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  12. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +1 -1
  13. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +2 -0
  14. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +3 -1
  15. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +8 -0
  16. package/plugins/lisa/rules/eager/report-actionability.md +6 -3
  17. package/plugins/lisa/skills/lisa-atlassian-access/SKILL.md +2 -0
  18. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  19. package/plugins/lisa/skills/lisa-github-sync/SKILL.md +1 -1
  20. package/plugins/lisa/skills/lisa-linear-access/SKILL.md +2 -0
  21. package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +3 -1
  22. package/plugins/lisa/skills/lisa-tracker-sync/SKILL.md +8 -0
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-agy/skills/lisa-atlassian-access/SKILL.md +2 -0
  25. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  26. package/plugins/lisa-agy/skills/lisa-github-sync/SKILL.md +1 -1
  27. package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +2 -0
  28. package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +3 -1
  29. package/plugins/lisa-agy/skills/lisa-tracker-sync/SKILL.md +8 -0
  30. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  33. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-copilot/rules/eager/report-actionability.md +6 -3
  37. package/plugins/lisa-copilot/skills/lisa-atlassian-access/SKILL.md +2 -0
  38. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  39. package/plugins/lisa-copilot/skills/lisa-github-sync/SKILL.md +1 -1
  40. package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +2 -0
  41. package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +3 -1
  42. package/plugins/lisa-copilot/skills/lisa-tracker-sync/SKILL.md +8 -0
  43. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-cursor/rules/report-actionability.mdc +6 -3
  45. package/plugins/lisa-cursor/skills/lisa-atlassian-access/SKILL.md +2 -0
  46. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  47. package/plugins/lisa-cursor/skills/lisa-github-sync/SKILL.md +1 -1
  48. package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +2 -0
  49. package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +3 -1
  50. package/plugins/lisa-cursor/skills/lisa-tracker-sync/SKILL.md +8 -0
  51. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-expo-agy/plugin.json +1 -1
  54. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  59. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  64. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  69. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  74. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-rails-agy/plugin.json +1 -1
  79. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  83. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  84. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  88. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  89. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  91. package/plugins/src/base/rules/eager/report-actionability.md +6 -3
  92. package/plugins/src/base/skills/lisa-atlassian-access/SKILL.md +2 -0
  93. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +7 -0
  94. package/plugins/src/base/skills/lisa-github-sync/SKILL.md +1 -1
  95. package/plugins/src/base/skills/lisa-linear-access/SKILL.md +2 -0
  96. package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +3 -1
  97. package/plugins/src/base/skills/lisa-tracker-sync/SKILL.md +8 -0
@@ -10,6 +10,14 @@ Thin dispatcher. Resolves the configured destination tracker and delegates to th
10
10
 
11
11
  See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
+ ## Agent attribution
14
+
15
+ In agent-composed tracker comments and review messages, include one short plain-text attribution, such as `Agent-written by Codex.` Use the actual runtime's name; add a public lane name only when already known. An existing clear disclosure is enough. Do not publish session identifiers, invent a lane, alter supplied human text, or change machine-managed comment formats such as `[lisa-pr-link]`.
16
+
17
+ The account avatar identifies the credential owner, not necessarily the writer. When relaying a human decision, attribute it to the person and its actual source (a linked decision or an instruction in the current conversation). Present your own judgement as agent analysis, never as an owner ruling. Attribution itself grants no authority.
18
+
19
+ This is a writing convention: missing disclosure is not a reason to block work or file a compliance issue. Do not add identity infrastructure or extra audit comments just to supply it. Preserve an existing disclosure when a vendor skill posts or retries the same body.
20
+
13
21
  ## Workflow
14
22
 
15
23
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,8 +1,7 @@
1
1
  # Report Actionability — Every Report Says What the Reader Must Do (load-bearing)
2
2
 
3
- A report that describes real work accurately can still fail, because the reader cannot tell **which items need them and which are already handled**. Prose that mixes fixed and open items reads as a single undifferentiated pile of problems; the reader either acts on something already done, or assumes something open was handled. Both are caused by the report, not by the work.
4
-
5
- The specific failure this rule exists to prevent, observed in a review cycle: six findings were returned, three were fixed, and the report described **two of them in detail without ever stating that six existed**. Every sentence in it was true. The reader still had to ask "did you fix them?" — and the answer was partly yes, partly no, and one finding had not even been read. A subset presented in the shape of a whole is worse than silence, because silence does not create false confidence.
3
+ Reports must distinguish completed work, remaining work, and decisions the reader
4
+ needs to make. Account for the whole reviewed scope and clearly label any subset.
6
5
 
7
6
  ## Mandatory
8
7
 
@@ -20,4 +19,8 @@ The specific failure this rule exists to prevent, observed in a review cycle: si
20
19
 
21
20
  Code-review findings, CI failures, test results, audit output, security scans, deploy status, and any list of problems handed to a human. It applies equally to reports you are proud of and reports that expose your own mistake — the second kind is where the temptation to describe a flattering subset is strongest.
22
21
 
22
+ ## Agent attribution
23
+
24
+ Follow `lisa-tracker-sync` — **Agent attribution** for agent-composed tracker comments and review messages. The short convention lives in that portable skill so agents without a rules surface receive it too.
25
+
23
26
  Detail, worked examples and the failure taxonomy: [reference/report-actionability.md](../reference/report-actionability.md).
@@ -12,6 +12,8 @@ Single chokepoint for all Atlassian operations. Routes each op to a substrate, e
12
12
 
13
13
  The caller passes one operation plus its arguments. Operations are listed in the dispatch table below. The skill returns either the structured operation result (JSON when the substrate provides it) or a clear error.
14
14
 
15
+ For agent-composed JIRA or Confluence comments, apply `lisa-tracker-sync` — **Agent attribution** before posting. Preserve an existing disclosure and the exact format of machine-managed comments.
16
+
15
17
  ```text
16
18
  operation: read-ticket key: PROJ-123
17
19
  operation: write-ticket payload: {...}
@@ -63,6 +63,13 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
63
63
  build-intake skills use to diagnose-and-route without fixing in place.
64
64
 
65
65
  Resolve `<owner>/<repo>` from `gh repo view --json nameWithOwner` (or the PR URL).
66
+
67
+ For agent-written review submissions, dismissal reasons, merge-message text and
68
+ existing PR updates, follow `lisa-tracker-sync` — **Agent attribution**.
69
+ Use the same short disclosure already present; a public lane name is optional.
70
+ Do not create an extra comment solely to attribute a label or auto-merge change,
71
+ or turn missing attribution into a merge gate. Attribute any relayed human
72
+ decision to its actual source; an agent's analysis is not an owner ruling.
66
73
  Use plain `gh` + `git` so Claude and Codex execute identically.
67
74
 
68
75
  ## 0. Take the babysitter lease
@@ -44,7 +44,7 @@ Optional arguments include `pr_url=<url>` for the live pull request and `merge_s
44
44
  For `--rollup`, skip this milestone path and use Step 5's classifier decision.
45
45
 
46
46
  1. **Idempotency check** — read the issue's recent comments. If the most recent comment with the prefix `[claude-sync] <milestone>` matches the current milestone AND the body content is unchanged, skip the post (no duplicate).
47
- 2. **Add the comment**:
47
+ 2. **Add the comment** using `lisa-tracker-sync` — **Agent attribution** for the agent-composed body; keep any existing disclosure:
48
48
 
49
49
  ```bash
50
50
  gh issue comment <number> --repo <org>/<repo> --body-file /tmp/sync-comment.md
@@ -298,6 +298,8 @@ the same way.
298
298
  Both comment operations take **either** `issue_id:` or `project_id:`. Exactly one
299
299
  is required; passing both, or neither, is refused naming the operation.
300
300
 
301
+ For agent-composed `save-comment` bodies, apply `lisa-tracker-sync` — **Agent attribution** before posting. Preserve an existing disclosure and the exact format of machine-managed comments.
302
+
301
303
  Linear treats a comment's target as one field on the same input type, so the
302
304
  project form is not a second mechanism — it is the same mutation with a
303
305
  different anchor. Direct introspection of `https://api.linear.app/graphql`:
@@ -10,6 +10,8 @@ Thin dispatcher. Resolves the configured destination tracker and delegates to th
10
10
 
11
11
  See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
+ Apply `lisa-tracker-sync` — **Agent attribution** when composing evidence comments; a disclosure already present in the body needs no second trailer.
14
+
13
15
  ## Workflow
14
16
 
15
17
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
@@ -40,7 +42,7 @@ Apply this when authoring `evidence/comment.md` (and `evidence/comment.txt` for
40
42
 
41
43
  The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issues, and Linear. Vendor skills only own the post/transition mechanics; the comment body is your responsibility.
42
44
 
43
- 1. **AI disclosure at the top.** Lead with "Update from Claude (AI agent, not a human)" and address the reporter / QA / PM by name.
45
+ 1. **AI disclosure at the top.** Lead with "Update from <actual runtime name> (AI agent)" and address the reporter / QA / PM by name when known. This satisfies the shared attribution convention without a second trailer.
44
46
  2. **Own any prior mistake explicitly.** If an earlier triage or build pass got something wrong, say so up front. Don't bury it.
45
47
  3. **Numbered step-by-step walk** of what you actually did in the browser/app, in plain language a non-engineer can follow:
46
48
  - Exact env (URL, viewport size — e.g. `402×874` for an iOS-sized mobile flow)
@@ -10,6 +10,14 @@ Thin dispatcher. Resolves the configured destination tracker and delegates to th
10
10
 
11
11
  See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
+ ## Agent attribution
14
+
15
+ In agent-composed tracker comments and review messages, include one short plain-text attribution, such as `Agent-written by Codex.` Use the actual runtime's name; add a public lane name only when already known. An existing clear disclosure is enough. Do not publish session identifiers, invent a lane, alter supplied human text, or change machine-managed comment formats such as `[lisa-pr-link]`.
16
+
17
+ The account avatar identifies the credential owner, not necessarily the writer. When relaying a human decision, attribute it to the person and its actual source (a linked decision or an instruction in the current conversation). Present your own judgement as agent analysis, never as an owner ruling. Attribution itself grants no authority.
18
+
19
+ This is a writing convention: missing disclosure is not a reason to block work or file a compliance issue. Do not add identity infrastructure or extra audit comments just to supply it. Preserve an existing disclosure when a vendor skill posts or retries the same body.
20
+
13
21
  ## Workflow
14
22
 
15
23
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -5,9 +5,8 @@ alwaysApply: true
5
5
 
6
6
  # Report Actionability — Every Report Says What the Reader Must Do (load-bearing)
7
7
 
8
- A report that describes real work accurately can still fail, because the reader cannot tell **which items need them and which are already handled**. Prose that mixes fixed and open items reads as a single undifferentiated pile of problems; the reader either acts on something already done, or assumes something open was handled. Both are caused by the report, not by the work.
9
-
10
- The specific failure this rule exists to prevent, observed in a review cycle: six findings were returned, three were fixed, and the report described **two of them in detail without ever stating that six existed**. Every sentence in it was true. The reader still had to ask "did you fix them?" — and the answer was partly yes, partly no, and one finding had not even been read. A subset presented in the shape of a whole is worse than silence, because silence does not create false confidence.
8
+ Reports must distinguish completed work, remaining work, and decisions the reader
9
+ needs to make. Account for the whole reviewed scope and clearly label any subset.
11
10
 
12
11
  ## Mandatory
13
12
 
@@ -25,4 +24,8 @@ The specific failure this rule exists to prevent, observed in a review cycle: si
25
24
 
26
25
  Code-review findings, CI failures, test results, audit output, security scans, deploy status, and any list of problems handed to a human. It applies equally to reports you are proud of and reports that expose your own mistake — the second kind is where the temptation to describe a flattering subset is strongest.
27
26
 
27
+ ## Agent attribution
28
+
29
+ Follow `lisa-tracker-sync` — **Agent attribution** for agent-composed tracker comments and review messages. The short convention lives in that portable skill so agents without a rules surface receive it too.
30
+
28
31
  Detail, worked examples and the failure taxonomy: [reference/report-actionability.md](report-actionability-reference.mdc).
@@ -12,6 +12,8 @@ Single chokepoint for all Atlassian operations. Routes each op to a substrate, e
12
12
 
13
13
  The caller passes one operation plus its arguments. Operations are listed in the dispatch table below. The skill returns either the structured operation result (JSON when the substrate provides it) or a clear error.
14
14
 
15
+ For agent-composed JIRA or Confluence comments, apply `lisa-tracker-sync` — **Agent attribution** before posting. Preserve an existing disclosure and the exact format of machine-managed comments.
16
+
15
17
  ```text
16
18
  operation: read-ticket key: PROJ-123
17
19
  operation: write-ticket payload: {...}
@@ -63,6 +63,13 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
63
63
  build-intake skills use to diagnose-and-route without fixing in place.
64
64
 
65
65
  Resolve `<owner>/<repo>` from `gh repo view --json nameWithOwner` (or the PR URL).
66
+
67
+ For agent-written review submissions, dismissal reasons, merge-message text and
68
+ existing PR updates, follow `lisa-tracker-sync` — **Agent attribution**.
69
+ Use the same short disclosure already present; a public lane name is optional.
70
+ Do not create an extra comment solely to attribute a label or auto-merge change,
71
+ or turn missing attribution into a merge gate. Attribute any relayed human
72
+ decision to its actual source; an agent's analysis is not an owner ruling.
66
73
  Use plain `gh` + `git` so Claude and Codex execute identically.
67
74
 
68
75
  ## 0. Take the babysitter lease
@@ -44,7 +44,7 @@ Optional arguments include `pr_url=<url>` for the live pull request and `merge_s
44
44
  For `--rollup`, skip this milestone path and use Step 5's classifier decision.
45
45
 
46
46
  1. **Idempotency check** — read the issue's recent comments. If the most recent comment with the prefix `[claude-sync] <milestone>` matches the current milestone AND the body content is unchanged, skip the post (no duplicate).
47
- 2. **Add the comment**:
47
+ 2. **Add the comment** using `lisa-tracker-sync` — **Agent attribution** for the agent-composed body; keep any existing disclosure:
48
48
 
49
49
  ```bash
50
50
  gh issue comment <number> --repo <org>/<repo> --body-file /tmp/sync-comment.md
@@ -298,6 +298,8 @@ the same way.
298
298
  Both comment operations take **either** `issue_id:` or `project_id:`. Exactly one
299
299
  is required; passing both, or neither, is refused naming the operation.
300
300
 
301
+ For agent-composed `save-comment` bodies, apply `lisa-tracker-sync` — **Agent attribution** before posting. Preserve an existing disclosure and the exact format of machine-managed comments.
302
+
301
303
  Linear treats a comment's target as one field on the same input type, so the
302
304
  project form is not a second mechanism — it is the same mutation with a
303
305
  different anchor. Direct introspection of `https://api.linear.app/graphql`:
@@ -10,6 +10,8 @@ Thin dispatcher. Resolves the configured destination tracker and delegates to th
10
10
 
11
11
  See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
+ Apply `lisa-tracker-sync` — **Agent attribution** when composing evidence comments; a disclosure already present in the body needs no second trailer.
14
+
13
15
  ## Workflow
14
16
 
15
17
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
@@ -40,7 +42,7 @@ Apply this when authoring `evidence/comment.md` (and `evidence/comment.txt` for
40
42
 
41
43
  The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issues, and Linear. Vendor skills only own the post/transition mechanics; the comment body is your responsibility.
42
44
 
43
- 1. **AI disclosure at the top.** Lead with "Update from Claude (AI agent, not a human)" and address the reporter / QA / PM by name.
45
+ 1. **AI disclosure at the top.** Lead with "Update from <actual runtime name> (AI agent)" and address the reporter / QA / PM by name when known. This satisfies the shared attribution convention without a second trailer.
44
46
  2. **Own any prior mistake explicitly.** If an earlier triage or build pass got something wrong, say so up front. Don't bury it.
45
47
  3. **Numbered step-by-step walk** of what you actually did in the browser/app, in plain language a non-engineer can follow:
46
48
  - Exact env (URL, viewport size — e.g. `402×874` for an iOS-sized mobile flow)
@@ -10,6 +10,14 @@ Thin dispatcher. Resolves the configured destination tracker and delegates to th
10
10
 
11
11
  See the `config-resolution` rule for configuration and dispatch table.
12
12
 
13
+ ## Agent attribution
14
+
15
+ In agent-composed tracker comments and review messages, include one short plain-text attribution, such as `Agent-written by Codex.` Use the actual runtime's name; add a public lane name only when already known. An existing clear disclosure is enough. Do not publish session identifiers, invent a lane, alter supplied human text, or change machine-managed comment formats such as `[lisa-pr-link]`.
16
+
17
+ The account avatar identifies the credential owner, not necessarily the writer. When relaying a human decision, attribute it to the person and its actual source (a linked decision or an instruction in the current conversation). Present your own judgement as agent analysis, never as an owner ruling. Attribution itself grants no authority.
18
+
19
+ This is a writing convention: missing disclosure is not a reason to block work or file a compliance issue. Do not add identity infrastructure or extra audit comments just to supply it. Preserve an existing disclosure when a vendor skill posts or retries the same body.
20
+
13
21
  ## Workflow
14
22
 
15
23
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
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-nestjs",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
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-nestjs",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
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-nestjs",
3
- "version": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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": "4.55.27",
3
+ "version": "4.55.29",
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"