@codyswann/lisa 3.51.3 → 3.51.5
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/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +16 -6
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +1 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +5 -5
- package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +9 -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/hooks/block-direct-issue-create.sh +16 -6
- 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/hooks/block-direct-issue-create.sh +16 -6
- 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/hooks/block-direct-issue-create.sh +16 -6
- 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/hooks/block-direct-issue-create.sh +16 -6
- 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/hooks/block-direct-issue-create.sh +16 -6
- 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
|
@@ -796,11 +796,17 @@ def normalise_repo(value):
|
|
|
796
796
|
token would call the same repository two different places depending on how
|
|
797
797
|
it was typed.
|
|
798
798
|
|
|
799
|
+
Casing is PRESERVED here and folded only at the point of comparison. The
|
|
800
|
+
refusal names this string back to an operator, and echoing
|
|
801
|
+
`codyswanngt/lisa` at someone who typed `CodySwannGT/lisa` reads as a
|
|
802
|
+
different repository — a message that has to be squinted at is the thing
|
|
803
|
+
this change is repairing.
|
|
804
|
+
|
|
799
805
|
Args:
|
|
800
806
|
value: The raw token.
|
|
801
807
|
|
|
802
808
|
Returns:
|
|
803
|
-
|
|
809
|
+
An as-typed `owner/name`, or None when the token names no repository.
|
|
804
810
|
"""
|
|
805
811
|
text = value.strip().strip("'\"")
|
|
806
812
|
if text.endswith(".git"):
|
|
@@ -808,7 +814,7 @@ def normalise_repo(value):
|
|
|
808
814
|
parts = [part for part in text.split("/") if part and not part.endswith(":")]
|
|
809
815
|
if len(parts) < 2:
|
|
810
816
|
return None
|
|
811
|
-
return
|
|
817
|
+
return "%s/%s" % (parts[-2], parts[-1])
|
|
812
818
|
|
|
813
819
|
|
|
814
820
|
def target_repository(args):
|
|
@@ -857,15 +863,19 @@ def roles_for(target):
|
|
|
857
863
|
permissive about which token, never about whether one is required.
|
|
858
864
|
|
|
859
865
|
Args:
|
|
860
|
-
target: The addressed repository, or None.
|
|
866
|
+
target: The addressed repository as typed, or None.
|
|
861
867
|
|
|
862
868
|
Returns:
|
|
863
869
|
A (roles, cross_repo_target) pair. The target is None when the calling
|
|
864
|
-
project is the one being written to.
|
|
870
|
+
project is the one being written to. When set it is the as-typed
|
|
871
|
+
spelling, because the refusal names it back to an operator.
|
|
865
872
|
"""
|
|
866
|
-
|
|
873
|
+
# GitHub is case-insensitive about owner and name, so the comparison folds
|
|
874
|
+
# case while the reported string keeps the operator's own spelling.
|
|
875
|
+
folded = target.lower() if target is not None else None
|
|
876
|
+
if folded is None or (own_repo and folded == own_repo):
|
|
867
877
|
return [ready_role], None
|
|
868
|
-
if upstream_repo and
|
|
878
|
+
if upstream_repo and folded == upstream_repo:
|
|
869
879
|
role = upstream_ready_role
|
|
870
880
|
else:
|
|
871
881
|
# Another repository Lisa has no configuration for. Its lane is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAmdjC,CAAC"}
|
|
@@ -288,6 +288,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
288
288
|
]),
|
|
289
289
|
"scripts/lisa-hooks/block-direct-issue-create.sh": Object.freeze([
|
|
290
290
|
"014510942610f36b17f006dee4b96c7737abad3e3acc4f5b416ab6d52403c793",
|
|
291
|
+
"17c442bf60259d8183c7359bc54f992e8b7f305798704af1ed33f3e22e1a6006",
|
|
291
292
|
"22184f1dd1b96e818741bd4ae659446299535d7ce594817155edebac4172a7ba",
|
|
292
293
|
"60a4f94ec671b2372f7492680ab327d97aff686588ce85791f54e0fbd098b0ca",
|
|
293
294
|
"63c2f9b54ea30997905bc6e17709dd1300436204ac82ad16717d7cc215af262b",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
13
13
|
"all/copy-overwrite/scripts/lisa-environment-prepare.mjs": "f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
|
|
14
14
|
"all/copy-overwrite/scripts/lisa-floor-collisions.mjs": "16f609ebf97f4f52e462ed97a774c2b56a33a99865cc11a5c069fbbbb45b007c",
|
|
15
15
|
"all/copy-overwrite/scripts/lisa-gates.mjs": "96077d0bbcf53ccc6b1baadef319cb9fa9979413bcff418ecea5abd136ff3491",
|
|
16
|
-
"all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh": "
|
|
16
|
+
"all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh": "17c442bf60259d8183c7359bc54f992e8b7f305798704af1ed33f3e22e1a6006",
|
|
17
17
|
"all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh": "3e709e1ec8a5843c00684bc477ad32ddab2c5fdb11f71d5aeec0c49609eaf025",
|
|
18
18
|
"all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh": "d3ef2562b718156912f0877f8a0668026f5966fcca43eb9e064aa57a4e9a4976",
|
|
19
19
|
"all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh": "83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
|
|
@@ -343,7 +343,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
343
343
|
"plugins/src/base/commands/verify.md": "ffbc553ec86e77845da72b5b0eb0dbb2b5a93b781ac8a7dbb2ef0f31f38f7b96",
|
|
344
344
|
"plugins/src/base/commands/wiki/install.md": "51392cf053c17edd549bfbaba5d19ce669dc79021aafa7cfa100324ad38de11f",
|
|
345
345
|
"plugins/src/base/hooks/block-direct-issue-create.agy.sh": "2adaf15910b6d00e69c202d263d407a21b31c0afce0039c6c042e51c278d2325",
|
|
346
|
-
"plugins/src/base/hooks/block-direct-issue-create.sh": "
|
|
346
|
+
"plugins/src/base/hooks/block-direct-issue-create.sh": "ccf9594392c6450afac82052f26803d405c939c9044e34f7248ca253a42570e7",
|
|
347
347
|
"plugins/src/base/hooks/block-instruction-file-edits.agy.sh": "aa249cae53caeb3e0fb6d6af114e2756084f45a2896332fb063a9f20e4902125",
|
|
348
348
|
"plugins/src/base/hooks/block-instruction-file-edits.sh": "d47314b66d6ce85f77d6e058f861eede4462b2b0a33d54e82ff1c931167ec3f7",
|
|
349
349
|
"plugins/src/base/hooks/block-managed-file-edits.sh": "9b566bd1ff465147955300ce66b75c866db461a04dc67866c22bb928c757a616",
|
|
@@ -431,7 +431,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
431
431
|
"plugins/src/base/rules/reference/coding-philosophy.md": "fed8381f16a5d6793a49d84d5813d62125808cb2f4981a558b119cf63e2586d9",
|
|
432
432
|
"plugins/src/base/rules/reference/config-resolution.md": "83c46e2bb8c3f84aba013196a5e6a41104136e36e37b197e4d7a4e896f7d6aa9",
|
|
433
433
|
"plugins/src/base/rules/reference/convergent-review.md": "788a9d4dc2af7a928c3ccbb4d53a92856bb3544941ce512cfe38068d6b35850d",
|
|
434
|
-
"plugins/src/base/rules/reference/credential-substrate-precedence.md": "
|
|
434
|
+
"plugins/src/base/rules/reference/credential-substrate-precedence.md": "2ae7833b6a0d8416d78946e5bc480384002ec71bdf9dd6b10aded9186ddddf43",
|
|
435
435
|
"plugins/src/base/rules/reference/dependency-decision-records.md": "84f9fb8fa0a606307e828ec355ccbf2258beeeb88795dd113abe9bb2c37db39f",
|
|
436
436
|
"plugins/src/base/rules/reference/dependency-internalization-kit.md": "8c8e9bddbe2165905c3919ae9dd3d131b557cf9c7eb370393dfa85827076c73b",
|
|
437
437
|
"plugins/src/base/rules/reference/dependency-trust-classes.md": "82216b80d4807e0ad302d04924032cc6a7a95b26f72ea853e378572a5c31821c",
|
|
@@ -444,7 +444,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
444
444
|
"plugins/src/base/rules/reference/factory-model.md": "b28a2ea4df7c33390111667a2807d9003cf8c9a14829f6fb0dbc929b05bfed3a",
|
|
445
445
|
"plugins/src/base/rules/reference/falsifiable-checks.md": "a0d7c3be070937042d17e98bdb955b87f30be5d298be91e33c1e6883cae2635d",
|
|
446
446
|
"plugins/src/base/rules/reference/history-audit.md": "20a46390f71fadda499c61193d430c3d53df49b55a4cefa50a112f82fa4b05ef",
|
|
447
|
-
"plugins/src/base/rules/reference/integration-access-layer.md": "
|
|
447
|
+
"plugins/src/base/rules/reference/integration-access-layer.md": "c5fc07f5f46ba1f99403b6e4fd5603d153411a9bb1838bea320b26a5bd5273d6",
|
|
448
448
|
"plugins/src/base/rules/reference/intent-routing.md": "988f8f45b41056c2adaa1a3e5f6ea926ac56a2fd041c07f98a9c2b271050efdd",
|
|
449
449
|
"plugins/src/base/rules/reference/leaf-only-lifecycle.md": "3d6d531fdca61a348fa1dd1bdb4c28fe66c85fb955238ef668a78cce4a36a7a1",
|
|
450
450
|
"plugins/src/base/rules/reference/learnings-ladder.md": "4b6760e8ec58dea0e646cfa1b0518f468cc959ef3be55e3f87c225ec076f53c7",
|
|
@@ -687,7 +687,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
687
687
|
"plugins/src/base/skills/lisa-setup-workstation/scripts/catalogue.mjs": "eb0b8ec8a5d4fd81402dcbf40e6ccb55eb5e0c960f11aa928e45b99de43fabbc",
|
|
688
688
|
"plugins/src/base/skills/lisa-setup-workstation/scripts/cli.mjs": "53b369907ce168991169521f50070f9741640c0c466ece7c7c4736455903fb00",
|
|
689
689
|
"plugins/src/base/skills/lisa-setup-workstation/scripts/workstation.mjs": "6ab19c08aa9db7643aa49133ba1d0febf1c1dbdc9a503026a01b1ce0a83f68ab",
|
|
690
|
-
"plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md": "
|
|
690
|
+
"plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md": "94340f41e45b2e3bcf3ef99c6b60a760140f9418e50aaa90be836ce2cfc18cc1",
|
|
691
691
|
"plugins/src/base/skills/lisa-spec-conformance/SKILL.md": "50e79afcfabf16d36273325aabb58571c9a0e1cafe7a2865e2da10c6d46571eb",
|
|
692
692
|
"plugins/src/base/skills/lisa-sync-down/SKILL.md": "15799079e2d64ba512fa492efea6a1a2f96a19f23935d85a7e91d9e115fbd9a4",
|
|
693
693
|
"plugins/src/base/skills/lisa-task-decomposition/SKILL.md": "eb78838e1f121a7a619a841333b1adfce124dad8881853d14107512ead09d30f",
|
|
@@ -198,7 +198,10 @@ const LisaBlockDirectIssueCreate = async () => {
|
|
|
198
198
|
const text = value.replace(/\.git$/, "");
|
|
199
199
|
const parts = text.split("/").filter(part => part && !part.endsWith(":"));
|
|
200
200
|
if (parts.length < 2) return undefined;
|
|
201
|
-
|
|
201
|
+
// Casing preserved; folded only where it is compared. The refusal names
|
|
202
|
+
// this back to an operator, and echoing a lowercased slug at someone who
|
|
203
|
+
// typed the canonical spelling reads as a different repository.
|
|
204
|
+
return `${parts.at(-2)}/${parts.at(-1)}`;
|
|
202
205
|
};
|
|
203
206
|
|
|
204
207
|
/**
|
|
@@ -233,10 +236,13 @@ const LisaBlockDirectIssueCreate = async () => {
|
|
|
233
236
|
resolved: FilingPolicy,
|
|
234
237
|
target: string | undefined
|
|
235
238
|
): Verdict => {
|
|
236
|
-
|
|
239
|
+
// GitHub is case-insensitive about owner and name, so the comparison folds
|
|
240
|
+
// case while the reported string keeps the operator's own spelling.
|
|
241
|
+
const folded = target?.toLowerCase();
|
|
242
|
+
if (folded === undefined || folded === resolved.ownRepo)
|
|
237
243
|
return { roles: [resolved.readyRole], named: undefined };
|
|
238
244
|
const role =
|
|
239
|
-
|
|
245
|
+
folded === resolved.upstreamRepo
|
|
240
246
|
? resolved.upstreamReadyRole
|
|
241
247
|
: DEFAULT_READY_ROLE;
|
|
242
248
|
if (resolved.ownRepo !== undefined || !resolved.callerIsGithub)
|
package/package.json
CHANGED
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"zod-validation-error": "^4.0.0"
|
|
142
142
|
},
|
|
143
143
|
"name": "@codyswann/lisa",
|
|
144
|
-
"version": "3.51.
|
|
144
|
+
"version": "3.51.5",
|
|
145
145
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
146
146
|
"main": "dist/index.js",
|
|
147
147
|
"exports": {
|
|
@@ -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.
|
|
@@ -793,11 +793,17 @@ def normalise_repo(value):
|
|
|
793
793
|
token would call the same repository two different places depending on how
|
|
794
794
|
it was typed.
|
|
795
795
|
|
|
796
|
+
Casing is PRESERVED here and folded only at the point of comparison. The
|
|
797
|
+
refusal names this string back to an operator, and echoing
|
|
798
|
+
`codyswanngt/lisa` at someone who typed `CodySwannGT/lisa` reads as a
|
|
799
|
+
different repository — a message that has to be squinted at is the thing
|
|
800
|
+
this change is repairing.
|
|
801
|
+
|
|
796
802
|
Args:
|
|
797
803
|
value: The raw token.
|
|
798
804
|
|
|
799
805
|
Returns:
|
|
800
|
-
|
|
806
|
+
An as-typed `owner/name`, or None when the token names no repository.
|
|
801
807
|
"""
|
|
802
808
|
text = value.strip().strip("'\"")
|
|
803
809
|
if text.endswith(".git"):
|
|
@@ -805,7 +811,7 @@ def normalise_repo(value):
|
|
|
805
811
|
parts = [part for part in text.split("/") if part and not part.endswith(":")]
|
|
806
812
|
if len(parts) < 2:
|
|
807
813
|
return None
|
|
808
|
-
return
|
|
814
|
+
return "%s/%s" % (parts[-2], parts[-1])
|
|
809
815
|
|
|
810
816
|
|
|
811
817
|
def target_repository(args):
|
|
@@ -854,15 +860,19 @@ def roles_for(target):
|
|
|
854
860
|
permissive about which token, never about whether one is required.
|
|
855
861
|
|
|
856
862
|
Args:
|
|
857
|
-
target: The addressed repository, or None.
|
|
863
|
+
target: The addressed repository as typed, or None.
|
|
858
864
|
|
|
859
865
|
Returns:
|
|
860
866
|
A (roles, cross_repo_target) pair. The target is None when the calling
|
|
861
|
-
project is the one being written to.
|
|
867
|
+
project is the one being written to. When set it is the as-typed
|
|
868
|
+
spelling, because the refusal names it back to an operator.
|
|
862
869
|
"""
|
|
863
|
-
|
|
870
|
+
# GitHub is case-insensitive about owner and name, so the comparison folds
|
|
871
|
+
# case while the reported string keeps the operator's own spelling.
|
|
872
|
+
folded = target.lower() if target is not None else None
|
|
873
|
+
if folded is None or (own_repo and folded == own_repo):
|
|
864
874
|
return [ready_role], None
|
|
865
|
-
if upstream_repo and
|
|
875
|
+
if upstream_repo and folded == upstream_repo:
|
|
866
876
|
role = upstream_ready_role
|
|
867
877
|
else:
|
|
868
878
|
# Another repository Lisa has no configuration for. Its lane is
|
|
@@ -179,8 +179,14 @@ the chokepoint cannot answer for is a setup gap to fix, not a store to add.
|
|
|
179
179
|
4. Keep MCP adapters and name the operations for which MCP is the only substrate.
|
|
180
180
|
5. Make the terminal failure name the exact credential and remediation command.
|
|
181
181
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
authenticates headlessly from `SONARQUBE_CLI_TOKEN
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
An access skill whose MCP is provider-credential-authenticated has no interactive
|
|
183
|
+
tier to demote — that MCP *is* the tier 1 substrate (`lisa-sonarcloud-access`: the
|
|
184
|
+
official SonarQube MCP authenticates headlessly from `SONARQUBE_CLI_TOKEN`).
|
|
185
|
+
Reserve a browser-OAuth demotion for vendors whose MCP is keychain-bound and
|
|
186
|
+
therefore dead headless.
|
|
187
|
+
|
|
188
|
+
That is a claim about tier ORDER and never about exclusivity. "Tier 1 needs no
|
|
189
|
+
demotion" does not license "there is no other substrate": where the vendor exposes
|
|
190
|
+
a token-authenticated Web API, it remains a sanctioned read-only fallback for a
|
|
191
|
+
surface on which the MCP is not wired, and a missing MCP there is a demotion rather
|
|
192
|
+
than a terminal tool-access failure.
|
|
@@ -33,14 +33,17 @@ unavailable" means.
|
|
|
33
33
|
Do not blind-retry a failed or absent substrate, and never silently no-op when no
|
|
34
34
|
tier is available.
|
|
35
35
|
|
|
36
|
-
Some MCPs authenticate headlessly from an env token
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
for vendors whose MCP is
|
|
43
|
-
|
|
36
|
+
Some MCPs authenticate headlessly from an env token — such an MCP **is** the
|
|
37
|
+
configured-provider substrate on both developer machines and cloud routines, so it
|
|
38
|
+
sits at tier 1 with nothing above it to demote. The official SonarQube MCP is one
|
|
39
|
+
such case (`SONARQUBE_CLI_TOKEN` [+ `SONARQUBE_CLI_ORG`/`SONARQUBE_CLI_SERVER`]):
|
|
40
|
+
`lisa-sonarcloud-access` prefers it and falls back to the token-authenticated Sonar
|
|
41
|
+
Web API for reads on a surface where it is not wired. Reserve the browser-OAuth
|
|
42
|
+
demotion for vendors whose MCP is keychain-bound and therefore dead headless.
|
|
43
|
+
|
|
44
|
+
Being top of the ladder is not the same as being the whole ladder. An access layer
|
|
45
|
+
may say "prefer this substrate"; it may not say "this is the only one" while the
|
|
46
|
+
vendor exposes a token-authenticated API the same credential already opens.
|
|
44
47
|
|
|
45
48
|
## Access Skills
|
|
46
49
|
|
|
@@ -66,7 +69,7 @@ Source audit date: 2026-06-23. Scope: `plugins/src/**/skills/**` and
|
|
|
66
69
|
| Notion | setup-only references | `notion-access` | Done. |
|
|
67
70
|
| Linear | Multiple base queue/read/write/verify skills | Raw Linear MCP | Access layer added; consumers still need migration to `linear-access`. |
|
|
68
71
|
| Jam | None in `plugins/src` at audit time | No access layer | Access layer added for host rules that include Jam triage. |
|
|
69
|
-
| SonarCloud | Routed through `sonarcloud-access` | Official SonarQube MCP
|
|
72
|
+
| SonarCloud | Routed through `sonarcloud-access` | Official SonarQube MCP preferred; token-authed Web API as the read-only fallback | Migrated to the official token-authed SonarQube MCP; the bespoke REST *dispatch* was removed, which is not the same as forbidding a Web API read. |
|
|
70
73
|
| Sentry | No Sentry MCP references in `plugins/src`; CLI/REST mentions only | CLI/REST scattered in observability docs | Access layer added for future MCP-backed consumers. |
|
|
71
74
|
| PostHog | No PostHog MCP references in `plugins/src`; observability docs mention PostHog detection | No access layer | Access layer added for future MCP-backed consumers. |
|
|
72
75
|
| Google Play | No MCP surface; EAS submit docs only | `play-store-access` for Expo post-submit release visibility | Done for Expo stack. |
|
|
@@ -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.
|
|
@@ -793,11 +793,17 @@ def normalise_repo(value):
|
|
|
793
793
|
token would call the same repository two different places depending on how
|
|
794
794
|
it was typed.
|
|
795
795
|
|
|
796
|
+
Casing is PRESERVED here and folded only at the point of comparison. The
|
|
797
|
+
refusal names this string back to an operator, and echoing
|
|
798
|
+
`codyswanngt/lisa` at someone who typed `CodySwannGT/lisa` reads as a
|
|
799
|
+
different repository — a message that has to be squinted at is the thing
|
|
800
|
+
this change is repairing.
|
|
801
|
+
|
|
796
802
|
Args:
|
|
797
803
|
value: The raw token.
|
|
798
804
|
|
|
799
805
|
Returns:
|
|
800
|
-
|
|
806
|
+
An as-typed `owner/name`, or None when the token names no repository.
|
|
801
807
|
"""
|
|
802
808
|
text = value.strip().strip("'\"")
|
|
803
809
|
if text.endswith(".git"):
|
|
@@ -805,7 +811,7 @@ def normalise_repo(value):
|
|
|
805
811
|
parts = [part for part in text.split("/") if part and not part.endswith(":")]
|
|
806
812
|
if len(parts) < 2:
|
|
807
813
|
return None
|
|
808
|
-
return
|
|
814
|
+
return "%s/%s" % (parts[-2], parts[-1])
|
|
809
815
|
|
|
810
816
|
|
|
811
817
|
def target_repository(args):
|
|
@@ -854,15 +860,19 @@ def roles_for(target):
|
|
|
854
860
|
permissive about which token, never about whether one is required.
|
|
855
861
|
|
|
856
862
|
Args:
|
|
857
|
-
target: The addressed repository, or None.
|
|
863
|
+
target: The addressed repository as typed, or None.
|
|
858
864
|
|
|
859
865
|
Returns:
|
|
860
866
|
A (roles, cross_repo_target) pair. The target is None when the calling
|
|
861
|
-
project is the one being written to.
|
|
867
|
+
project is the one being written to. When set it is the as-typed
|
|
868
|
+
spelling, because the refusal names it back to an operator.
|
|
862
869
|
"""
|
|
863
|
-
|
|
870
|
+
# GitHub is case-insensitive about owner and name, so the comparison folds
|
|
871
|
+
# case while the reported string keeps the operator's own spelling.
|
|
872
|
+
folded = target.lower() if target is not None else None
|
|
873
|
+
if folded is None or (own_repo and folded == own_repo):
|
|
864
874
|
return [ready_role], None
|
|
865
|
-
if upstream_repo and
|
|
875
|
+
if upstream_repo and folded == upstream_repo:
|
|
866
876
|
role = upstream_ready_role
|
|
867
877
|
else:
|
|
868
878
|
# Another repository Lisa has no configuration for. Its lane is
|