Update to SonarQube
Snapshot Oct 28, 2026 · 12:32 UTC · version 2.7.0
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 3 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Sep 30, 2026 · 23:13 UTC
a09533cc2d4a5dbed884353591ab8b6d61d3fb583ca797331af45d1c9484484e
Oct 28, 2026 · 12:32 UTC
6cea80a8da9052596520df33466190172aaaa75d08b168a7cd871e790948b374
Package file
Sep 30, 2026 · 23:13 UTC
373
Oct 28, 2026 · 12:32 UTC
390
Package file
Sep 30, 2026 · 23:13 UTC
{"sha256":"8856b2020a808546e2251001df245c9ec1327078faab8d04e0d6bb716bfa0826","size":620}
Oct 28, 2026 · 12:32 UTC
Not present
Package file
Sep 30, 2026 · 23:13 UTC
{"sha256":"a65858d032e7281e50a197eba2a8d180e066f2aa7264402e04577db6b2d4a71c","size":764}
Oct 28, 2026 · 12:32 UTC
Not present
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
.agents/plugins/marketplace.json →
.claude-plugin/marketplace.json →
.codex-plugin/assets/composer-icon-dark.png →
.codex-plugin/assets/composer-icon.png →
.codex-plugin/assets/logo-dark.png →
.codex-plugin/assets/logo.png →
.cursor-plugin/marketplace.json →
.factory-plugin/marketplace.json →
.gitar/review/squad-specific.md →
.github/plugin/marketplace.json →
LICENSE →
agents/sonarqube-reviewer.agent.md →
droids/sonarqube-reviewer.md →
mcp.json →
skills/sonar-analyze/SKILL.md →
skills/sonar-coverage/SKILL.md →
skills/sonar-dependency-risks/SKILL.md →
skills/sonar-duplication/SKILL.md →
skills/sonar-fix-issue/SKILL.md →
skills/sonar-integrate/SKILL.md →
skills/sonar-list-issues/SKILL.md →
skills/sonar-list-projects/SKILL.md →
scripts/setup.js
− removed · + added
--- before +++ after @@ -1,165 +1,165 @@ -#!/usr/bin/env node -"use strict"; - -const fs = require("node:fs"); -const path = require("node:path"); -const os = require("node:os"); - -const CLAUDE_INTEGRATION_ID = "claude-code"; - -const HOOK_DISPLAY_NAMES = { - "sonar-secrets": "Secrets Detection", - "sonar-sqaa": "Vortex analysis", - "sonar-secrets-hooks": "Secrets Detection", - "sonar-sqaa-hook": "Vortex analysis", -}; - -const DECLARATIVE_HOOK_FEATURE_IDS = new Set([ - "sonar-secrets-hooks", - "sonar-sqaa-hook", -]); - -// sonarqube-cli merged the standalone `sonar-sqaa-hook` container into the -// shared Vortex container for Claude; the analysis hook now shows up as this -// subfeature nested under `vortex-claude` instead of its own top-level id. -const CLAUDE_VORTEX_FEATURE_ID = "vortex-claude"; -const VORTEX_ANALYSIS_SUBFEATURE_ID = "sqaa-posttooluse"; - -function hasMergedVortexAnalysisHook(feature) { - return ( - feature?.featureId === CLAUDE_VORTEX_FEATURE_ID && - Array.isArray(feature.subfeatures) && - feature.subfeatures.some( - (subfeature) => subfeature?.featureId === VORTEX_ANALYSIS_SUBFEATURE_ID - ) - ); -} - -function hasSonarCli() { - const envPath = process.env.PATH || ""; - const dirs = envPath.split(path.delimiter); - const exts = - process.platform === "win32" - ? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD").split(";") - : [""]; - - for (const dir of dirs) { - for (const ext of exts) { - try { - fs.accessSync(path.join(dir, "sonar" + ext), fs.constants.F_OK); - return true; - } catch { - // not in this directory - } - } - } - return false; -} - -function readState() { - const statePath = path.join( - os.homedir(), - ".sonar", - "sonarqube-cli", - "state.json" - ); - try { - return JSON.parse(fs.readFileSync(statePath, "utf8")); - } catch { - return null; - } -} - -function canonicalPath(p) { - try { - return fs.realpathSync.native(p); - } catch { - return path.resolve(p); - } -} - -function samePath(a, b) { - if (!a || !b) return false; - const caseInsensitive = - process.platform === "darwin" || process.platform === "win32"; - const norm = (p) => { - const c = canonicalPath(p); - return caseInsensitive ? c.toLowerCase() : c; - }; - return norm(a) === norm(b); -} - -function featureAppliesToCwd(feature, cwd) { - if (feature?.scope === "global") { - return true; - } - if (feature?.scope === "project") { - return samePath(cwd, feature.targetRoot); - } - return false; -} - -function collectLegacyHookNames(state, cwd) { - const claudeHooks = (state?.agentExtensions ?? []).filter( - (entry) => - entry?.agentId === CLAUDE_INTEGRATION_ID && - entry.kind === "hook" && - typeof entry.name === "string" - ); - const globalHooks = claudeHooks.filter((entry) => entry.global === true); - const localHooks = claudeHooks.filter((entry) => - samePath(cwd, entry.projectRoot) - ); - return [...globalHooks, ...localHooks].map((entry) => entry.name); -} - -function collectDeclarativeHookNames(state, cwd) { - const claudeIntegration = (state?.integrations?.installed ?? []).find( - (entry) => entry?.integrationId === CLAUDE_INTEGRATION_ID - ); - if (!claudeIntegration) { - return []; - } - - return (claudeIntegration.features ?? []) - .filter((feature) => featureAppliesToCwd(feature, cwd)) - .filter( - (feature) => - (typeof feature?.featureId === "string" && - DECLARATIVE_HOOK_FEATURE_IDS.has(feature.featureId)) || - hasMergedVortexAnalysisHook(feature) - ) - .map((feature) => - hasMergedVortexAnalysisHook(feature) ? "sonar-sqaa-hook" : feature.featureId - ); -} - -function collectInstalledHookNames(state, cwd) { - const names = [ - ...collectLegacyHookNames(state, cwd), - ...collectDeclarativeHookNames(state, cwd), - ]; - return new Set(names); -} - -const cwd = process.cwd(); -const state = readState(); -const sonarOk = hasSonarCli(); -const installed = collectInstalledHookNames(state, cwd); - -const hookList = Array.from( - new Set(Array.from(installed).map((name) => HOOK_DISPLAY_NAMES[name] || name)) -).join(", "); - -const lines = [ - "SonarQube plugin initialised.", - " sonarqube-cli: " + - (sonarOk ? "✓ found" : "✗ not found — run /sonarqube:sonar-integrate"), - " SonarQube hooks: " + - (installed.size > 0 - ? "✓ " + hookList - : "✗ no hooks installed — run /sonarqube:sonar-integrate"), -]; - -process.stdout.write(JSON.stringify({ systemMessage: lines.join("\n") }) + "\n"); -process.exit(0); +#!/usr/bin/env node +"use strict"; + +const fs = require("node:fs"); +const path = require("node:path"); +const os = require("node:os"); + +const CLAUDE_INTEGRATION_ID = "claude-code"; + +const HOOK_DISPLAY_NAMES = { + "sonar-secrets": "Secrets Detection", + "sonar-sqaa": "Vortex analysis", + "sonar-secrets-hooks": "Secrets Detection", + "sonar-sqaa-hook": "Vortex analysis", +}; + +const DECLARATIVE_HOOK_FEATURE_IDS = new Set([ + "sonar-secrets-hooks", + "sonar-sqaa-hook", +]); + +// sonarqube-cli merged the standalone `sonar-sqaa-hook` container into the +// shared Vortex container for Claude; the analysis hook now shows up as this +// subfeature nested under `vortex-claude` instead of its own top-level id. +const CLAUDE_VORTEX_FEATURE_ID = "vortex-claude"; +const VORTEX_ANALYSIS_SUBFEATURE_ID = "sqaa-posttooluse"; + +function hasMergedVortexAnalysisHook(feature) { + return ( + feature?.featureId === CLAUDE_VORTEX_FEATURE_ID && + Array.isArray(feature.subfeatures) && + feature.subfeatures.some( + (subfeature) => subfeature?.featureId === VORTEX_ANALYSIS_SUBFEATURE_ID + ) + ); +} + +function hasSonarCli() { + const envPath = process.env.PATH || ""; + const dirs = envPath.split(path.delimiter); + const exts = + process.platform === "win32" + ? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD").split(";") + : [""]; + + for (const dir of dirs) { + for (const ext of exts) { + try { + fs.accessSync(path.join(dir, "sonar" + ext), fs.constants.F_OK); + return true; + } catch { + // not in this directory + } + } + } + return false; +} + +function readState() { + const statePath = path.join( + os.homedir(), + ".sonar", + "sonarqube-cli", + "state.json" + ); + try { + return JSON.parse(fs.readFileSync(statePath, "utf8")); + } catch { + return null; + } +} + +function canonicalPath(p) { + try { + return fs.realpathSync.native(p); + } catch { + return path.resolve(p); + } +} + +function samePath(a, b) { + if (!a || !b) return false; + const caseInsensitive = + process.platform === "darwin" || process.platform === "win32"; + const norm = (p) => { + const c = canonicalPath(p); + return caseInsensitive ? c.toLowerCase() : c; + }; + return norm(a) === norm(b); +} + +function featureAppliesToCwd(feature, cwd) { + if (feature?.scope === "global") { + return true; + } + if (feature?.scope === "project") { + return samePath(cwd, feature.targetRoot); + } + return false; +} + +function collectLegacyHookNames(state, cwd) { + const claudeHooks = (state?.agentExtensions ?? []).filter( + (entry) => + entry?.agentId === CLAUDE_INTEGRATION_ID && + entry.kind === "hook" && + typeof entry.name === "string" + ); + const globalHooks = claudeHooks.filter((entry) => entry.global === true); + const localHooks = claudeHooks.filter((entry) => + samePath(cwd, entry.projectRoot) + ); + return [...globalHooks, ...localHooks].map((entry) => entry.name); +} + +function collectDeclarativeHookNames(state, cwd) { + const claudeIntegration = (state?.integrations?.installed ?? []).find( + (entry) => entry?.integrationId === CLAUDE_INTEGRATION_ID + ); + if (!claudeIntegration) { + return []; + } + + return (claudeIntegration.features ?? []) + .filter((feature) => featureAppliesToCwd(feature, cwd)) + .filter( + (feature) => + (typeof feature?.featureId === "string" && + DECLARATIVE_HOOK_FEATURE_IDS.has(feature.featureId)) || + hasMergedVortexAnalysisHook(feature) + ) + .map((feature) => + hasMergedVortexAnalysisHook(feature) ? "sonar-sqaa-hook" : feature.featureId + ); +} + +function collectInstalledHookNames(state, cwd) { + const names = [ + ...collectLegacyHookNames(state, cwd), + ...collectDeclarativeHookNames(state, cwd), + ]; + return new Set(names); +} + +const cwd = process.cwd(); +const state = readState(); +const sonarOk = hasSonarCli(); +const installed = collectInstalledHookNames(state, cwd); + +const hookList = Array.from( + new Set(Array.from(installed).map((name) => HOOK_DISPLAY_NAMES[name] || name)) +).join(", "); + +const lines = [ + "SonarQube plugin initialised.", + " sonarqube-cli: " + + (sonarOk ? "✓ found" : "✗ not found — run /sonarqube:sonar-integrate"), + " SonarQube hooks: " + + (installed.size > 0 + ? "✓ " + hookList + : "✗ no hooks installed — run /sonarqube:sonar-integrate"), +]; + +process.stdout.write(JSON.stringify({ systemMessage: lines.join("\n") }) + "\n"); +process.exit(0);
Full technical diff · 76 changed fields
changed /files/.agents~1plugins~1marketplace.json/sha256
"a09533cc2d4a5dbed884353591ab8b6d61d3fb583ca797331af45d1c9484484e"
"6cea80a8da9052596520df33466190172aaaa75d08b168a7cd871e790948b374"
changed /files/.agents~1plugins~1marketplace.json/size
373
390
removed /files/.claude-plugin~1marketplace.json
{
"sha256": "8856b2020a808546e2251001df245c9ec1327078faab8d04e0d6bb716bfa0826",
"size": 620
}Field is absent
removed /files/.claude-plugin~1plugin.json
{
"sha256": "a65858d032e7281e50a197eba2a8d180e066f2aa7264402e04577db6b2d4a71c",
"size": 764
}Field is absent
removed /files/.codex-plugin~1assets~1composer-icon-dark.png
{
"sha256": "fda3a22b9fa041ea7630ae6ac263da36a54ab5172d046102cd92693025338cb6",
"size": 7705
}Field is absent
removed /files/.codex-plugin~1assets~1composer-icon.png
{
"sha256": "89048de870cebf93c7d7660ff434259da48f029536840d6c3d533678047ad84d",
"size": 8290
}Field is absent
removed /files/.codex-plugin~1assets~1logo-dark.png
{
"sha256": "fda3a22b9fa041ea7630ae6ac263da36a54ab5172d046102cd92693025338cb6",
"size": 7705
}Field is absent
removed /files/.codex-plugin~1assets~1logo.png
{
"sha256": "89048de870cebf93c7d7660ff434259da48f029536840d6c3d533678047ad84d",
"size": 8290
}Field is absent
changed /files/.codex-plugin~1plugin.json/sha256
"5229a119fed64d116bdc406401095c68e28f2474c26cf14d2c794190328b3271"
"0d619507086a4ceaf2c88a6f972e8424770643dc46110a146ab5b0610662beb6"
changed /files/.codex-plugin~1plugin.json/size
1943
1931
changed /files/.cursor-plugin~1marketplace.json/sha256
"3985ef713f5159cd69b3fb319326fab3ecf3d9a44e91d26dbe88b15ec5506b06"
"3baad4f8b9c9f49d6861d951bbc2b3095ec57e05ce4a2f5986ae914f9c5cffff"
changed /files/.cursor-plugin~1marketplace.json/size
678
696
changed /files/.cursor-plugin~1plugin.json/sha256
"d3b768d5ceb52b74dc660a0a342b1565d7ff66f060c548a844f200addf196854"
"be6184aff85de47105afa9abb8f5473239d7a6ea0bda630ec4652c308043a7d4"
changed /files/.cursor-plugin~1plugin.json/size
785
806
added /files/.factory-plugin~1marketplace.json
Field was absent
{
"sha256": "3baad4f8b9c9f49d6861d951bbc2b3095ec57e05ce4a2f5986ae914f9c5cffff",
"size": 696
}added /files/.factory-plugin~1plugin.json
Field was absent
{
"sha256": "7711e618ee18689b86f4498d5274e5cef9f7c94d764cd6e7d55cfee98c1a4667",
"size": 743
}added /files/.gitar~1review~1squad-specific.md
Field was absent
{
"sha256": "04a213f1720919e47d8204ba8674c46c21c96c247a5fa21c1ca800a7ac65429d",
"size": 184
}changed /files/.github~1CODEOWNERS/sha256
"3ecbd4a4c501695a25651bf18274da43715ed4f7581ef2d903ee96f6eeea5193"
"b04fa2dd20bddfa5b9f12196a9160fee5e8cbfc2de8ddb641f69fc3bcf779258"
changed /files/.github~1CODEOWNERS/size
210
212
changed /files/.github~1plugin~1marketplace.json/sha256
"8856b2020a808546e2251001df245c9ec1327078faab8d04e0d6bb716bfa0826"
"f34769e79e1156d913c6649000c5abc989b295f67de0c41f4ae12d94e413bf9c"
changed /files/.github~1plugin~1marketplace.json/size
620
638
removed /files/.github~1plugin~1plugin.json
{
"sha256": "9cb2627036a4b8f288a6ef5c048cbc06c84c4536ebe5db76a30b8c17d8c88a04",
"size": 724
}Field is absent
changed /files/.github~1renovate.json/sha256
"c049351f0cb07629effa5dcf2334668c4a901633d7d75ffc55f586863a2704ee"
"538a39ffa211379ba2059e58e30a7fdc4d9819019cc69890e2d208bded2cf0e9"
changed /files/.github~1renovate.json/size
142
148
changed /files/.gitignore/sha256
"3ceeb56b31ab247687626eb9530979e2d5e1249ee7120fd0018374f6fd0a1515"
"fad4bf46906c363b47c7cb8bc60b8c2ded6935616fc444dea595e1232c082188"
changed /files/.gitignore/size
173
193
changed /files/GEMINI.md/sha256
"b0497bcfd96bb530e3bed5fa44cb3b5d9d0717a724e3e7e6de65a9467cbad35b"
"7d9ee879a2de3a5f89226db9b3bca17bb93118089debc79e5061284ad84d7cea"
changed /files/GEMINI.md/size
5446
5964
changed /files/LICENSE/sha256
"5ed3eff27f4bbbc595e91b06981eb3eee50fc3f7e7ca04c3fdb2c20f03569bd1"
"cea2f0445fc9b53f874731b9f0adc99bab422781060253831dccd263d4f525b7"
changed /files/LICENSE/size
9678
9861
changed /files/README.md/sha256
"ecd60ee03bb8ac89ae20025f431f32f1e2f7edc8b9df3a6e75ba8dc70f3b5871"
"2600bd74c4ab36236c3c26c50c23c3b7da068e8b5df9bfeb6f83c9ba892a8173"
changed /files/README.md/size
10219
11589
changed /files/SECURITY.md/sha256
"ff94ac6750964ab542a0884019962bda31fee27450a356458e188d331fc18411"
"1cf2f72f07aa7c2f25cff7d976b7369debfd28bec7d05e7a4c36aff7ffad8dae"
changed /files/SECURITY.md/size
1188
1205
changed /files/agents~1sonarqube-reviewer.agent.md/sha256
"b34a4fe6a1717b180bcd09da293571af6d7b23afa83d8c3244de6b447ea30de8"
"1f5bf9e76b8b1a12f3c9bd4f34dffd903cdf9033653a5b1d48f88f73d1cbbbff"
changed /files/agents~1sonarqube-reviewer.agent.md/size
4162
4218
changed /files/assets~1logo.svg/sha256
"f229ce40967152b9f6ec6bab2b4989cf65bb3d723c044fd3a9945db58a686028"
"93de9248234e5a66dae098c96a2fdec382d9f92a50521c02ab600d10e2220d24"
changed /files/assets~1logo.svg/size
19688
19694
changed /files/claude-hooks~1hooks.json/sha256
"ca69a9b5a1f3f0b5bc07b29490743c66ce69ed022e0717700743cc2084946fdf"
"7ff6f51b4ae187fa29929e7974c33b0e13f81509318ec2ad315188cd2a6f98f4"
changed /files/claude-hooks~1hooks.json/size
272
288
added /files/droids~1sonarqube-reviewer.md
Field was absent
{
"sha256": "5e2d13df670ae174e54fd7236e9b043ba75cf16629cabd85253e7e796c0122d1",
"size": 4145
}changed /files/gemini-extension.json/sha256
"2c3cf2ab933033957dec14f07bb3e69c9a53bafc907a95aa7819f90e1e8def75"
"80f2b6d706161088ac08418110a6dad12830438fd553706b88a18a9dfa675ca1"
changed /files/gemini-extension.json/size
506
519
changed /files/kiro-power~1POWER.md/sha256
"7152e9aee8174f2295a801ad906b26c6b30fd3de7a4266b611c79576e5b1979e"
"c79c774cbf61cb4d32ad8ba92bc203cd090691512baa63c68c6b5e6fc45e9a04"
changed /files/kiro-power~1POWER.md/size
13913
17228
changed /files/kiro-power~1mcp.json/sha256
"9fc1ce60f5774b42ee805b390a43405536e51401e3e33a19dce204fe6c71497e"
"70a721057c9fc3c0f471d2b78da0ebea3a1e7b3efe507807daa2d7f1fb361256"
changed /files/kiro-power~1mcp.json/size
123
134
changed /files/mcp.json/sha256
"2b3827a30692ba8d188040e90f4d51bf10c0de900ab3889a7fe2fce4ee66ef0d"
"7d8ad6f6b19ec913068766078ae641e244f652007763f14692b5da0d0f79e983"
changed /files/mcp.json/size
106
114
changed /files/mcp_config.json/sha256
"2b3827a30692ba8d188040e90f4d51bf10c0de900ab3889a7fe2fce4ee66ef0d"
"7d8ad6f6b19ec913068766078ae641e244f652007763f14692b5da0d0f79e983"
changed /files/mcp_config.json/size
106
114
changed /files/plugin.json/sha256
"9cb2627036a4b8f288a6ef5c048cbc06c84c4536ebe5db76a30b8c17d8c88a04"
"c265b20d5a2ac208735463446d1dbbe21f14fb784496a2cb83b4f52a20545455"
changed /files/plugin.json/size
724
819
changed /files/rules~1sonarqube.md/sha256
"78b75a99020ce403ea3d4b43d569d4e224f745a9ca1a94d76d11fe03538da870"
"2d76d7ae03d0497a3cb1dba072d3fc3d831b763840bac24eb3fd773b7d89384d"
changed /files/rules~1sonarqube.md/size
5698
6217
changed /files/scripts~1setup.js/sha256
"b96ca90e1ee30db9b629224418c9345abe5a56f1496f026dcca321a641bd49d0"
"e825ba6bc55ff85ca3d2ff5aec9dd09060d8c0d94a583600d89fdf0ea28c0aed"
changed /files/scripts~1setup.js/size
4445
4610
changed /files/skills~1sonar-analyze~1SKILL.md/sha256
"575142711c38ff1d50b2b74c5de9a1be19cb050bd58c0a562716ac2779e0c87b"
"a66cf0e93a6a91de2e2e25bec9c7d7cd75a9278963be03f4ba46efa04d5d698c"
changed /files/skills~1sonar-analyze~1SKILL.md/size
7380
7507
changed /files/skills~1sonar-coverage~1SKILL.md/sha256
"cffca8cab282592be0c786566e7ca9828d5fa3d68e658717a9734591a58814a1"
"5efc9211a9e636a4fd5b9e810566e7c92e0cd6047a1ab1cb3f641553504fbf39"
changed /files/skills~1sonar-coverage~1SKILL.md/size
8252
8405
changed /files/skills~1sonar-dependency-risks~1SKILL.md/sha256
"c793c038e36df5f3a4342a79c6e486d797a0873cac22ca54a289df1222a0e4d0"
"4e349db17550cfef5034bd4d0276c9abbfc560d36946f3cce0829f064bbe8b80"
changed /files/skills~1sonar-dependency-risks~1SKILL.md/size
7594
7805
changed /files/skills~1sonar-duplication~1SKILL.md/sha256
"a73546e05609daf1d47068e2852590c7ae8527e454443c61dc25ffcc5dec46a3"
"aebbc10006aff2ef5f35930d3f32895648e7467da88b82831df176fdce077f9e"
changed /files/skills~1sonar-duplication~1SKILL.md/size
9779
9943
changed /files/skills~1sonar-fix-issue~1SKILL.md/sha256
"6b57ea6a2b6348b53dc20c0bbe79e27e4fd8520d67c30f1139d919f285bced74"
"77e094ac73581cd51db70d01f879fceb0a52fddcd9f56448845f23f831e08a53"
changed /files/skills~1sonar-fix-issue~1SKILL.md/size
2210
2269
changed /files/skills~1sonar-integrate~1SKILL.md/sha256
"a094f03868d5601f21e462612241cfd23a01a63a0e25dfdc9a9e830a8d1ace5d"
"4e3a0104ad2db6334a7f5bfe9ce84ea7acee5f6951ffe00012f3dfb2ba39078a"
changed /files/skills~1sonar-integrate~1SKILL.md/size
15018
13390
changed /files/skills~1sonar-list-issues~1SKILL.md/sha256
"5dfc6cc08df66a4a0ca5f25c1f3b5a3e89266daca5acea33493341fedcd92a9e"
"f1457b41208c0a2659c48762df19eccc62fd286fb29aa7b351c68d43430f5a8d"
changed /files/skills~1sonar-list-issues~1SKILL.md/size
6325
6441
changed /files/skills~1sonar-list-projects~1SKILL.md/sha256
"b13d7d8a62db78098d7a0577cee3952031ce791f496ce348436f5dd9de3685a3"
"7a331be7cce7b216f04081807e60d3887598babed47ab3ad404b12fd14801a91"
changed /files/skills~1sonar-list-projects~1SKILL.md/size
2977
3058
changed /files/skills~1sonar-quality-gate~1SKILL.md/sha256
"a10642dbea25b0c4fa724581af91bf80e7b84d61f8db470e8ef99bda03e418df"
"956081643e82f3c669baf6bde464ab5b47ac55706f2201c63e9e76ba8df9f5fa"
changed /files/skills~1sonar-quality-gate~1SKILL.md/size
16412
16644
added /files/skills~1sonar-triage-dependency-risks~1SKILL.md
Field was absent
{
"sha256": "14a68c0cad806bdac98710a2ba199c05f21918a2036a4449ff47a8b5d31b72ba",
"size": 11804
}Full snapshot data
{
"files": {
".agents/plugins/marketplace.json": {
"sha256": "6cea80a8da9052596520df33466190172aaaa75d08b168a7cd871e790948b374",
"size": 390
},
".codex-plugin/plugin.json": {
"sha256": "0d619507086a4ceaf2c88a6f972e8424770643dc46110a146ab5b0610662beb6",
"size": 1931
},
".cursor-plugin/marketplace.json": {
"sha256": "3baad4f8b9c9f49d6861d951bbc2b3095ec57e05ce4a2f5986ae914f9c5cffff",
"size": 696
},
".cursor-plugin/plugin.json": {
"sha256": "be6184aff85de47105afa9abb8f5473239d7a6ea0bda630ec4652c308043a7d4",
"size": 806
},
".factory-plugin/marketplace.json": {
"sha256": "3baad4f8b9c9f49d6861d951bbc2b3095ec57e05ce4a2f5986ae914f9c5cffff",
"size": 696
},
".factory-plugin/plugin.json": {
"sha256": "7711e618ee18689b86f4498d5274e5cef9f7c94d764cd6e7d55cfee98c1a4667",
"size": 743
},
".gitar/review/squad-specific.md": {
"sha256": "04a213f1720919e47d8204ba8674c46c21c96c247a5fa21c1ca800a7ac65429d",
"size": 184
},
".github/CODEOWNERS": {
"sha256": "b04fa2dd20bddfa5b9f12196a9160fee5e8cbfc2de8ddb641f69fc3bcf779258",
"size": 212
},
".github/plugin/marketplace.json": {
"sha256": "f34769e79e1156d913c6649000c5abc989b295f67de0c41f4ae12d94e413bf9c",
"size": 638
},
".github/renovate.json": {
"sha256": "538a39ffa211379ba2059e58e30a7fdc4d9819019cc69890e2d208bded2cf0e9",
"size": 148
},
".gitignore": {
"sha256": "fad4bf46906c363b47c7cb8bc60b8c2ded6935616fc444dea595e1232c082188",
"size": 193
},
"GEMINI.md": {
"sha256": "7d9ee879a2de3a5f89226db9b3bca17bb93118089debc79e5061284ad84d7cea",
"size": 5964
},
"LICENSE": {
"sha256": "cea2f0445fc9b53f874731b9f0adc99bab422781060253831dccd263d4f525b7",
"size": 9861
},
"README.md": {
"sha256": "2600bd74c4ab36236c3c26c50c23c3b7da068e8b5df9bfeb6f83c9ba892a8173",
"size": 11589
},
"SECURITY.md": {
"sha256": "1cf2f72f07aa7c2f25cff7d976b7369debfd28bec7d05e7a4c36aff7ffad8dae",
"size": 1205
},
"agents/sonarqube-reviewer.agent.md": {
"sha256": "1f5bf9e76b8b1a12f3c9bd4f34dffd903cdf9033653a5b1d48f88f73d1cbbbff",
"size": 4218
},
"assets/logo-dark.png": {
"sha256": "fda3a22b9fa041ea7630ae6ac263da36a54ab5172d046102cd92693025338cb6",
"size": 7705
},
"assets/logo.png": {
"sha256": "89048de870cebf93c7d7660ff434259da48f029536840d6c3d533678047ad84d",
"size": 8290
},
"assets/logo.svg": {
"sha256": "93de9248234e5a66dae098c96a2fdec382d9f92a50521c02ab600d10e2220d24",
"size": 19694
},
"claude-hooks/hooks.json": {
"sha256": "7ff6f51b4ae187fa29929e7974c33b0e13f81509318ec2ad315188cd2a6f98f4",
"size": 288
},
"droids/sonarqube-reviewer.md": {
"sha256": "5e2d13df670ae174e54fd7236e9b043ba75cf16629cabd85253e7e796c0122d1",
"size": 4145
},
"gemini-extension.json": {
"sha256": "80f2b6d706161088ac08418110a6dad12830438fd553706b88a18a9dfa675ca1",
"size": 519
},
"kiro-power/POWER.md": {
"sha256": "c79c774cbf61cb4d32ad8ba92bc203cd090691512baa63c68c6b5e6fc45e9a04",
"size": 17228
},
"kiro-power/mcp.json": {
"sha256": "70a721057c9fc3c0f471d2b78da0ebea3a1e7b3efe507807daa2d7f1fb361256",
"size": 134
},
"mcp.json": {
"sha256": "7d8ad6f6b19ec913068766078ae641e244f652007763f14692b5da0d0f79e983",
"size": 114
},
"mcp_config.json": {
"sha256": "7d8ad6f6b19ec913068766078ae641e244f652007763f14692b5da0d0f79e983",
"size": 114
},
"plugin.json": {
"sha256": "c265b20d5a2ac208735463446d1dbbe21f14fb784496a2cb83b4f52a20545455",
"size": 819
},
"rules/sonarqube.md": {
"sha256": "2d76d7ae03d0497a3cb1dba072d3fc3d831b763840bac24eb3fd773b7d89384d",
"size": 6217
},
"scripts/setup.js": {
"sha256": "e825ba6bc55ff85ca3d2ff5aec9dd09060d8c0d94a583600d89fdf0ea28c0aed",
"size": 4610
},
"skills/sonar-analyze/SKILL.md": {
"sha256": "a66cf0e93a6a91de2e2e25bec9c7d7cd75a9278963be03f4ba46efa04d5d698c",
"size": 7507
},
"skills/sonar-coverage/SKILL.md": {
"sha256": "5efc9211a9e636a4fd5b9e810566e7c92e0cd6047a1ab1cb3f641553504fbf39",
"size": 8405
},
"skills/sonar-dependency-risks/SKILL.md": {
"sha256": "4e349db17550cfef5034bd4d0276c9abbfc560d36946f3cce0829f064bbe8b80",
"size": 7805
},
"skills/sonar-duplication/SKILL.md": {
"sha256": "aebbc10006aff2ef5f35930d3f32895648e7467da88b82831df176fdce077f9e",
"size": 9943
},
"skills/sonar-fix-issue/SKILL.md": {
"sha256": "77e094ac73581cd51db70d01f879fceb0a52fddcd9f56448845f23f831e08a53",
"size": 2269
},
"skills/sonar-integrate/SKILL.md": {
"sha256": "4e3a0104ad2db6334a7f5bfe9ce84ea7acee5f6951ffe00012f3dfb2ba39078a",
"size": 13390
},
"skills/sonar-list-issues/SKILL.md": {
"sha256": "f1457b41208c0a2659c48762df19eccc62fd286fb29aa7b351c68d43430f5a8d",
"size": 6441
},
"skills/sonar-list-projects/SKILL.md": {
"sha256": "7a331be7cce7b216f04081807e60d3887598babed47ab3ad404b12fd14801a91",
"size": 3058
},
"skills/sonar-quality-gate/SKILL.md": {
"sha256": "956081643e82f3c669baf6bde464ab5b47ac55706f2201c63e9e76ba8df9f5fa",
"size": 16644
},
"skills/sonar-triage-dependency-risks/SKILL.md": {
"sha256": "14a68c0cad806bdac98710a2ba199c05f21918a2036a4449ff47a8b5d31b72ba",
"size": 11804
}
}
}SHA-256 of public snapshot: c8df6e64b4ca376ac26bcdd7d228113093660962f5d0f11c8096e7fc4191d5d9