@codyswann/lisa 3.51.3 → 3.51.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/upstream-evidence-manifest.js +3 -3
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +33 -15
- package/plugins/lisa/rules/reference/credential-substrate-precedence.md +11 -5
- package/plugins/lisa/rules/reference/integration-access-layer.md +12 -9
- package/plugins/lisa/skills/lisa-sonarcloud-access/SKILL.md +34 -16
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-sonarcloud-access/SKILL.md +34 -16
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/rules/reference/credential-substrate-precedence.md +11 -5
- package/plugins/lisa-copilot/rules/reference/integration-access-layer.md +12 -9
- package/plugins/lisa-copilot/skills/lisa-sonarcloud-access/SKILL.md +34 -16
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/credential-substrate-precedence-reference.mdc +11 -5
- package/plugins/lisa-cursor/rules/integration-access-layer-reference.mdc +12 -9
- package/plugins/lisa-cursor/skills/lisa-sonarcloud-access/SKILL.md +34 -16
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/reference/credential-substrate-precedence.md +11 -5
- package/plugins/src/base/rules/reference/integration-access-layer.md +12 -9
- package/plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md +34 -16
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-sonarcloud-access
|
|
3
|
-
description: "Vendor-neutral access layer for SonarQube Cloud/Server. Sonar triage skills MUST delegate through this skill rather than calling the SonarQube MCP tools directly.
|
|
3
|
+
description: "Vendor-neutral access layer for SonarQube Cloud/Server. Sonar triage skills MUST delegate through this skill rather than calling the SonarQube MCP tools directly. Preferred substrate: the official SonarQube MCP server (mcp__sonarqube__*), authenticated headlessly from SONARQUBE_CLI_TOKEN (+ SONARQUBE_CLI_ORG for Cloud, SONARQUBE_CLI_SERVER for Server); the Sonar Web API, authenticated with the same token, is the sanctioned fallback when the MCP is not wired on this surface."
|
|
4
4
|
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -12,16 +12,26 @@ this skill owns the tool selection.
|
|
|
12
12
|
|
|
13
13
|
## Substrate
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The **preferred** substrate is the **official SonarQube MCP server**, provided by
|
|
16
16
|
the `sonarqube` plugin and launched by the `sonar` CLI (`sonar run mcp`). It
|
|
17
17
|
authenticates headlessly from environment variables — no browser, no OS keychain —
|
|
18
18
|
so it is the same substrate on a developer machine and in a headless cloud routine.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
Prefer it because it owns the tool selection this skill exists to centralise.
|
|
20
|
+
|
|
21
|
+
It is not the only sanctioned substrate. The **Sonar Web API**, authenticated with
|
|
22
|
+
the same token, is a sanctioned fallback for read-only operations when the MCP is
|
|
23
|
+
not wired on this surface. An earlier revision of this file said otherwise — that
|
|
24
|
+
the MCP was "the only sanctioned substrate" and a missing MCP was "not a reason to
|
|
25
|
+
curl the Web API" — and that was wrong on its face: `.github/workflows/quality.yml`
|
|
26
|
+
already reads `api/ce/task` with a token to turn an opaque failed scan into an
|
|
27
|
+
operator-readable one. A rule the shipping repository contradicts is documentation,
|
|
28
|
+
not a constraint.
|
|
29
|
+
|
|
30
|
+
The distinction that does hold: a token-authenticated MCP **is** the
|
|
31
|
+
configured-provider substrate under `credential-substrate-precedence` (it is not
|
|
32
|
+
browser-OAuth), so there is no interactive tier to demote here. That is a statement
|
|
33
|
+
about tier ORDER, not about exclusivity. Identity-match against the configured org
|
|
34
|
+
remains mandatory on either substrate.
|
|
25
35
|
|
|
26
36
|
- `SONARQUBE_CLI_TOKEN` — required (Sonar user/analysis token).
|
|
27
37
|
- `SONARQUBE_CLI_ORG` — required for SonarQube Cloud.
|
|
@@ -89,16 +99,21 @@ being on PATH is not access. Probe by searching projects (the `projects` toolset
|
|
|
89
99
|
always enabled):
|
|
90
100
|
|
|
91
101
|
- If a `mcp__sonarqube__*` project-search tool returns, access is proven.
|
|
92
|
-
- If no `mcp__sonarqube__*` tool is present,
|
|
93
|
-
|
|
102
|
+
- If no `mcp__sonarqube__*` tool is present on this surface, that is a **demotion,
|
|
103
|
+
not a blocker**. Fall back to the Sonar Web API with the same resolved token for
|
|
104
|
+
the read-only operation at hand.
|
|
105
|
+
- Only when neither substrate can prove access — no MCP tool *and* no usable token
|
|
106
|
+
— is this a terminal tool-access-gate failure. Say so, and do not improvise a
|
|
107
|
+
third route:
|
|
94
108
|
|
|
95
109
|
```text
|
|
96
110
|
Error: no SonarQube access. Run /lisa:setup:sonar (or `sonar integrate <agent>`), and set SONARQUBE_CLI_TOKEN (+ SONARQUBE_CLI_ORG for Cloud / SONARQUBE_CLI_SERVER for Server).
|
|
97
111
|
```
|
|
98
112
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
113
|
+
The distinction matters because the two cases have different remedies. An absent
|
|
114
|
+
MCP on a surface that holds a valid credential is a wiring gap the agent can work
|
|
115
|
+
around; treating it as terminal manufactures a tool-access failure on a surface
|
|
116
|
+
that has access.
|
|
102
117
|
|
|
103
118
|
## Operation → toolset map
|
|
104
119
|
|
|
@@ -127,14 +142,17 @@ tool accepts them.
|
|
|
127
142
|
Every operation in the map above is **read-only** — quality, coverage, and
|
|
128
143
|
security data. So the `credential-substrate-precedence` guarded fallback for
|
|
129
144
|
mutating operations (write, read back, assert the tenant from the response, roll
|
|
130
|
-
back on mismatch) is not engaged here
|
|
131
|
-
|
|
145
|
+
back on mismatch) is not engaged here, because nothing in the map writes. The
|
|
146
|
+
Web API fallback is sanctioned for READS only; it does not open a mutation path.
|
|
147
|
+
A future operation that mutates Sonar state — marking
|
|
132
148
|
a hotspot safe, changing an issue's status — is a write and MUST reconcile by
|
|
133
149
|
read-back before any retry.
|
|
134
150
|
|
|
135
151
|
## Invariants
|
|
136
152
|
|
|
137
|
-
- The official SonarQube MCP is the
|
|
153
|
+
- The official SonarQube MCP is the preferred substrate, not the only one. The
|
|
154
|
+
Sonar Web API with the same token is a sanctioned read-only fallback, and a
|
|
155
|
+
missing MCP is a demotion rather than a terminal failure.
|
|
138
156
|
- `SONARQUBE_CLI_*` values are resolved through `lisa-secrets-access` and
|
|
139
157
|
exported in-process, with the bare environment variables as the documented
|
|
140
158
|
fallback. Never write them to a dotfile or a `.env` on a local surface.
|