@raishin/vanguard-frontier-agentic 2.0.1 → 2.1.0

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 (130) hide show
  1. package/.claude-plugin/plugin.json +11 -1
  2. package/.cursor-plugin/plugin.json +11 -1
  3. package/.github/plugin/marketplace.json +1 -1
  4. package/README.md +21 -7
  5. package/agents/qa/README.md +51 -0
  6. package/agents/qa/ci-test-pipeline-review-agent/AGENT.md +51 -0
  7. package/agents/qa/ci-test-pipeline-review-agent/harnesses/claude-code.agent.md +35 -0
  8. package/agents/qa/ci-test-pipeline-review-agent/harnesses/codex.toml +34 -0
  9. package/agents/qa/ci-test-pipeline-review-agent/harnesses/copilot.agent.md +35 -0
  10. package/agents/qa/ci-test-pipeline-review-agent/harnesses/cursor.agent.md +35 -0
  11. package/agents/qa/ci-test-pipeline-review-agent/harnesses/gemini.agent.md +35 -0
  12. package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-cli.agent.json +5 -0
  13. package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-ide.agent.md +35 -0
  14. package/agents/qa/ci-test-pipeline-review-agent/metadata.json +33 -0
  15. package/agents/qa/helm-chart-quality-review-agent/AGENT.md +56 -0
  16. package/agents/qa/helm-chart-quality-review-agent/harnesses/claude-code.agent.md +40 -0
  17. package/agents/qa/helm-chart-quality-review-agent/harnesses/codex.toml +39 -0
  18. package/agents/qa/helm-chart-quality-review-agent/harnesses/copilot.agent.md +40 -0
  19. package/agents/qa/helm-chart-quality-review-agent/harnesses/cursor.agent.md +40 -0
  20. package/agents/qa/helm-chart-quality-review-agent/harnesses/gemini.agent.md +40 -0
  21. package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
  22. package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-ide.agent.md +40 -0
  23. package/agents/qa/helm-chart-quality-review-agent/metadata.json +35 -0
  24. package/agents/qa/kubernetes-manifest-quality-review-agent/AGENT.md +55 -0
  25. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/claude-code.agent.md +32 -0
  26. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/codex.toml +38 -0
  27. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/copilot.agent.md +32 -0
  28. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/cursor.agent.md +32 -0
  29. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/gemini.agent.md +32 -0
  30. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
  31. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-ide.agent.md +32 -0
  32. package/agents/qa/kubernetes-manifest-quality-review-agent/metadata.json +35 -0
  33. package/agents/qa/llm-ai-pipeline-test-review-agent/AGENT.md +52 -0
  34. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/claude-code.agent.md +36 -0
  35. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/codex.toml +36 -0
  36. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/copilot.agent.md +36 -0
  37. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/cursor.agent.md +36 -0
  38. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/gemini.agent.md +36 -0
  39. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-cli.agent.json +5 -0
  40. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-ide.agent.md +36 -0
  41. package/agents/qa/llm-ai-pipeline-test-review-agent/metadata.json +35 -0
  42. package/agents/qa/playwright-e2e-execution-run-agent/AGENT.md +50 -0
  43. package/agents/qa/playwright-e2e-execution-run-agent/harnesses/claude-code.agent.md +39 -0
  44. package/agents/qa/playwright-e2e-execution-run-agent/harnesses/cursor.agent.md +39 -0
  45. package/agents/qa/playwright-e2e-execution-run-agent/metadata.json +28 -0
  46. package/agents/qa/playwright-e2e-suite-review-agent/AGENT.md +51 -0
  47. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/claude-code.agent.md +35 -0
  48. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/codex.toml +34 -0
  49. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/copilot.agent.md +35 -0
  50. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/cursor.agent.md +35 -0
  51. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/gemini.agent.md +35 -0
  52. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-cli.agent.json +5 -0
  53. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-ide.agent.md +35 -0
  54. package/agents/qa/playwright-e2e-suite-review-agent/metadata.json +35 -0
  55. package/agents/qa/plc-control-logic-safety-review-agent/AGENT.md +53 -0
  56. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/claude-code.agent.md +37 -0
  57. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/codex.toml +36 -0
  58. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/copilot.agent.md +37 -0
  59. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/cursor.agent.md +37 -0
  60. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/gemini.agent.md +37 -0
  61. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-cli.agent.json +5 -0
  62. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-ide.agent.md +37 -0
  63. package/agents/qa/plc-control-logic-safety-review-agent/metadata.json +33 -0
  64. package/agents/qa/rpa-workflow-resilience-review-agent/AGENT.md +52 -0
  65. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/claude-code.agent.md +36 -0
  66. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/codex.toml +35 -0
  67. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/copilot.agent.md +36 -0
  68. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/cursor.agent.md +36 -0
  69. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/gemini.agent.md +36 -0
  70. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-cli.agent.json +5 -0
  71. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-ide.agent.md +36 -0
  72. package/agents/qa/rpa-workflow-resilience-review-agent/metadata.json +34 -0
  73. package/agents/qa/test-coverage-quality-review-agent/AGENT.md +50 -0
  74. package/agents/qa/test-coverage-quality-review-agent/harnesses/claude-code.agent.md +34 -0
  75. package/agents/qa/test-coverage-quality-review-agent/harnesses/codex.toml +33 -0
  76. package/agents/qa/test-coverage-quality-review-agent/harnesses/copilot.agent.md +34 -0
  77. package/agents/qa/test-coverage-quality-review-agent/harnesses/cursor.agent.md +34 -0
  78. package/agents/qa/test-coverage-quality-review-agent/harnesses/gemini.agent.md +34 -0
  79. package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
  80. package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-ide.agent.md +34 -0
  81. package/agents/qa/test-coverage-quality-review-agent/metadata.json +33 -0
  82. package/agents/qa/test-flakiness-triage-agent/AGENT.md +52 -0
  83. package/agents/qa/test-flakiness-triage-agent/harnesses/claude-code.agent.md +36 -0
  84. package/agents/qa/test-flakiness-triage-agent/harnesses/codex.toml +33 -0
  85. package/agents/qa/test-flakiness-triage-agent/harnesses/copilot.agent.md +36 -0
  86. package/agents/qa/test-flakiness-triage-agent/harnesses/cursor.agent.md +36 -0
  87. package/agents/qa/test-flakiness-triage-agent/harnesses/gemini.agent.md +36 -0
  88. package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-cli.agent.json +5 -0
  89. package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-ide.agent.md +36 -0
  90. package/agents/qa/test-flakiness-triage-agent/metadata.json +33 -0
  91. package/catalog/agents.json +1163 -881
  92. package/catalog/asset-integrity.json +473 -28
  93. package/catalog/install-roles.json +29 -1
  94. package/catalog/skill-manifest.json +220 -0
  95. package/catalog/skills.json +907 -619
  96. package/package.json +5 -2
  97. package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
  98. package/scripts/generate-readme-counts.mjs +162 -0
  99. package/skills/qa/ci-test-pipeline-review/SKILL.md +45 -0
  100. package/skills/qa/ci-test-pipeline-review/metadata.json +21 -0
  101. package/skills/qa/ci-test-pipeline-review/references/workflow-and-output.md +124 -0
  102. package/skills/qa/helm-chart-quality-review/SKILL.md +61 -0
  103. package/skills/qa/helm-chart-quality-review/metadata.json +23 -0
  104. package/skills/qa/helm-chart-quality-review/references/workflow-and-output.md +174 -0
  105. package/skills/qa/kubernetes-manifest-quality-review/SKILL.md +92 -0
  106. package/skills/qa/kubernetes-manifest-quality-review/metadata.json +23 -0
  107. package/skills/qa/kubernetes-manifest-quality-review/references/workflow-and-output.md +246 -0
  108. package/skills/qa/llm-ai-pipeline-test-review/SKILL.md +52 -0
  109. package/skills/qa/llm-ai-pipeline-test-review/metadata.json +23 -0
  110. package/skills/qa/llm-ai-pipeline-test-review/references/workflow-and-output.md +221 -0
  111. package/skills/qa/playwright-e2e-execution-run/SKILL.md +54 -0
  112. package/skills/qa/playwright-e2e-execution-run/metadata.json +24 -0
  113. package/skills/qa/playwright-e2e-execution-run/references/workflow-and-output.md +133 -0
  114. package/skills/qa/playwright-e2e-suite-review/SKILL.md +44 -0
  115. package/skills/qa/playwright-e2e-suite-review/metadata.json +23 -0
  116. package/skills/qa/playwright-e2e-suite-review/references/workflow-and-output.md +176 -0
  117. package/skills/qa/plc-control-logic-safety-review/SKILL.md +47 -0
  118. package/skills/qa/plc-control-logic-safety-review/metadata.json +21 -0
  119. package/skills/qa/plc-control-logic-safety-review/references/workflow-and-output.md +231 -0
  120. package/skills/qa/rpa-workflow-resilience-review/SKILL.md +47 -0
  121. package/skills/qa/rpa-workflow-resilience-review/metadata.json +22 -0
  122. package/skills/qa/rpa-workflow-resilience-review/references/workflow-and-output.md +210 -0
  123. package/skills/qa/test-coverage-quality-review/SKILL.md +44 -0
  124. package/skills/qa/test-coverage-quality-review/metadata.json +21 -0
  125. package/skills/qa/test-coverage-quality-review/references/workflow-and-output.md +139 -0
  126. package/skills/qa/test-flakiness-triage/SKILL.md +43 -0
  127. package/skills/qa/test-flakiness-triage/metadata.json +21 -0
  128. package/skills/qa/test-flakiness-triage/references/workflow-and-output.md +114 -0
  129. package/tests/eval-qa-cluster.mjs +111 -0
  130. package/tests/validate-readme-counts.mjs +179 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raishin/vanguard-frontier-agentic",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Cloud and zero-trust agentic workflow marketplace for skills, agents, rules, MCP references, and compliance-aware architecture.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -56,6 +56,9 @@
56
56
  "validate:multi-harness-marketplace": "python3 tests/validate-multi-harness-marketplace.py",
57
57
  "validate:codex-marketplace": "python3 tests/validate-codex-marketplace.py",
58
58
  "validate:finops-fixtures": "python3 tests/validate-finops-price-fixtures.py",
59
+ "validate:readme-counts": "node tests/validate-readme-counts.mjs",
60
+ "validate:qa-cluster": "node tests/eval-qa-cluster.mjs",
61
+ "readme-counts:write": "node scripts/generate-readme-counts.mjs",
59
62
  "test:marketplace-validators": "python3 tests/test-marketplace-validators.py",
60
63
  "maestro-routing:write": "python3 tests/_generate_maestro_routing_fixtures.py",
61
64
  "plugin-manifest:write": "node scripts/generate-plugin-manifest.mjs",
@@ -66,7 +69,7 @@
66
69
  "test:gemini-bundling": "python3 tests/test-gemini-skill-bundling.py",
67
70
  "test:cursor-kiro-notices": "node tests/export-cursor-kiro-skill-notice.test.mjs",
68
71
  "test:fuzz": "node tests/fuzz-properties.test.mjs",
69
- "validate": "npm run validate:catalog && npm run validate:aws && npm run manifest:check && npm run validate:allowed-tools && npm run validate:skill-schema && npm run validate:agent-schema && npm run validate:links && npm run validate:asset-integrity && npm run validate:mcp-trust-matrix && npm run validate:no-lifecycle-scripts && npm run validate:promotion-gatekeeper && npm run validate:install-coverage && npm run validate:maestro-routing && npm run validate:plugin-manifest && npm run validate:kiro-powers && npm run validate:multi-harness-marketplace && npm run validate:codex-marketplace && npm run validate:finops-fixtures",
72
+ "validate": "npm run validate:catalog && npm run validate:aws && npm run manifest:check && npm run validate:allowed-tools && npm run validate:skill-schema && npm run validate:agent-schema && npm run validate:links && npm run validate:asset-integrity && npm run validate:mcp-trust-matrix && npm run validate:no-lifecycle-scripts && npm run validate:promotion-gatekeeper && npm run validate:install-coverage && npm run validate:maestro-routing && npm run validate:plugin-manifest && npm run validate:kiro-powers && npm run validate:multi-harness-marketplace && npm run validate:codex-marketplace && npm run validate:finops-fixtures && npm run validate:readme-counts && npm run validate:qa-cluster",
70
73
  "release:sbom": "command -v syft >/dev/null 2>&1 && syft scan dir:. -o spdx-json=sbom.spdx.json || echo 'syft not installed; SBOM is generated in CI by anchore/sbom-action'",
71
74
  "lint:md": "npx --yes markdownlint-cli2 \"**/*.md\" \"#node_modules\" \"#.git\" \"#.code-review-graph\" \"#CHANGELOG.md\"",
72
75
  "lint:spell": "codespell",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanguard-frontier-agentic",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Curated marketplace for cloud and zero-trust AI workflows. 331 agents, 286 skills, and rules across AWS, Azure, OCI, GCP, Alibaba Cloud, Huawei Cloud, Kubernetes, and Terraform.",
5
5
  "author": {
6
6
  "name": "Raishin",
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate catalog counts and inject them into README.md.
4
+ *
5
+ * Counts:
6
+ * skills = SKILL.md files under skills/ (recursive)
7
+ * agents = metadata.json files under agents/ (recursive)
8
+ * providers = distinct `provider` values across agents metadata files
9
+ * roles = keys under `.roles` in catalog/install-roles.json
10
+ * rules = length of JSON array in catalog/rules.json
11
+ * mcp = length of JSON array in catalog/mcp-references.json
12
+ *
13
+ * Mode:
14
+ * (default) overwrite README.md in place
15
+ * --check compare expected vs actual, exit 1 if stale, 0 if current
16
+ *
17
+ * Run: npm run readme-counts:write
18
+ */
19
+
20
+ import fs from "node:fs";
21
+ import path from "node:path";
22
+ import { fileURLToPath } from "node:url";
23
+
24
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
25
+ const readmePath = path.join(repoRoot, "README.md");
26
+ const check = process.argv.includes("--check");
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Helpers
30
+ // ---------------------------------------------------------------------------
31
+
32
+ /** Recursively list all files under `dir`. Returns relative paths from `dir`. */
33
+ function listFiles(dir) {
34
+ return fs.readdirSync(dir, { recursive: true }).map(String);
35
+ }
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Compute counts
39
+ // ---------------------------------------------------------------------------
40
+
41
+ const skillFiles = listFiles(path.join(repoRoot, "skills"));
42
+ const skillCount = skillFiles.filter((f) => f.endsWith("SKILL.md")).length;
43
+
44
+ const agentFiles = listFiles(path.join(repoRoot, "agents"));
45
+ const agentMetaFiles = agentFiles.filter((f) => f.endsWith("metadata.json"));
46
+ const agentCount = agentMetaFiles.length;
47
+
48
+ const allProviders = new Set();
49
+ for (const f of agentMetaFiles) {
50
+ const fullPath = path.join(repoRoot, "agents", f);
51
+ const m = JSON.parse(fs.readFileSync(fullPath, "utf8"));
52
+ if (m.provider) allProviders.add(m.provider);
53
+ }
54
+ const providerCount = allProviders.size;
55
+
56
+ const rolesData = JSON.parse(
57
+ fs.readFileSync(path.join(repoRoot, "catalog", "install-roles.json"), "utf8"),
58
+ );
59
+ const roleCount = Object.keys(rolesData.roles).length;
60
+
61
+ const rulesData = JSON.parse(
62
+ fs.readFileSync(path.join(repoRoot, "catalog", "rules.json"), "utf8"),
63
+ );
64
+ const ruleCount = Array.isArray(rulesData) ? rulesData.length : 0;
65
+
66
+ const mcpData = JSON.parse(
67
+ fs.readFileSync(path.join(repoRoot, "catalog", "mcp-references.json"), "utf8"),
68
+ );
69
+ const mcpCount = Array.isArray(mcpData) ? mcpData.length : 0;
70
+
71
+ const counts = {
72
+ skills: skillCount,
73
+ agents: agentCount,
74
+ providers: providerCount,
75
+ roles: roleCount,
76
+ rules: ruleCount,
77
+ mcp: mcpCount,
78
+ };
79
+
80
+ // ---------------------------------------------------------------------------
81
+ // Build the marker block
82
+ // ---------------------------------------------------------------------------
83
+
84
+ const markerBlock =
85
+ `<!-- readme-counts:start -->\n` +
86
+ `<!-- Generated by scripts/generate-readme-counts.mjs — do not edit by hand. Run: npm run readme-counts:write -->\n` +
87
+ `| Catalog | Count |\n` +
88
+ `| --- | --- |\n` +
89
+ `| Skills | ${skillCount} |\n` +
90
+ `| Agents | ${agentCount} |\n` +
91
+ `| Providers | ${providerCount} |\n` +
92
+ `| Install roles | ${roleCount} |\n` +
93
+ `| Rules | ${ruleCount} |\n` +
94
+ `| MCP references | ${mcpCount} |\n` +
95
+ `<!-- readme-counts:end -->`;
96
+
97
+ // ---------------------------------------------------------------------------
98
+ // Transform README content
99
+ // ---------------------------------------------------------------------------
100
+
101
+ function buildExpectedContent(original) {
102
+ let content = original;
103
+
104
+ // 1. Replace the marker block (markers preserved, inner content replaced)
105
+ const markerStartRe = /<!-- readme-counts:start -->[\s\S]*?<!-- readme-counts:end -->/;
106
+ if (markerStartRe.test(content)) {
107
+ content = content.replace(markerStartRe, markerBlock);
108
+ }
109
+
110
+ // 2. Replace inline count spans <!-- count:KEY -->OLDNUMBER<!-- /count -->
111
+ const inlineRe = /<!-- count:(skills|agents|providers|roles|rules|mcp) -->\d+<!-- \/count -->/g;
112
+ content = content.replace(inlineRe, (_, key) => {
113
+ return `<!-- count:${key} -->${counts[key]}<!-- /count -->`;
114
+ });
115
+
116
+ return content;
117
+ }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // Main
121
+ // ---------------------------------------------------------------------------
122
+
123
+ const original = fs.readFileSync(readmePath, "utf8");
124
+ const expected = buildExpectedContent(original);
125
+
126
+ if (check) {
127
+ if (original === expected) {
128
+ console.log("OK: README counts current");
129
+ process.exit(0);
130
+ }
131
+
132
+ // Print a basic diff-style report to stderr
133
+ const origLines = original.split("\n");
134
+ const expLines = expected.split("\n");
135
+ const maxLen = Math.max(origLines.length, expLines.length);
136
+ const diffLines = [];
137
+ for (let i = 0; i < maxLen; i++) {
138
+ const o = origLines[i];
139
+ const e = expLines[i];
140
+ if (o !== e) {
141
+ diffLines.push(`Line ${i + 1}:`);
142
+ if (o !== undefined) diffLines.push(` - ${o}`);
143
+ if (e !== undefined) diffLines.push(` + ${e}`);
144
+ }
145
+ }
146
+ process.stderr.write(
147
+ `ERROR: README.md counts are stale. Run: npm run readme-counts:write\n\n` +
148
+ diffLines.join("\n") +
149
+ "\n",
150
+ );
151
+ process.exit(1);
152
+ } else {
153
+ if (original === expected) {
154
+ console.log("OK: README.md already up to date — no changes written.");
155
+ } else {
156
+ fs.writeFileSync(readmePath, expected, "utf8");
157
+ console.log(
158
+ `OK: README.md updated (skills=${skillCount}, agents=${agentCount}, ` +
159
+ `providers=${providerCount}, roles=${roleCount}, rules=${ruleCount}, mcp=${mcpCount})`,
160
+ );
161
+ }
162
+ }
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: ci-test-pipeline-review
3
+ description: Use this skill when reviewing how a CI pipeline runs tests — gating, sharding, parallelism, fail-fast behavior, artifact retention, and flaky-test quarantine wiring. Trigger when a user provides a CI workflow file (GitHub Actions, GitLab CI, CircleCI, Jenkins), asks why CI is slow or unreliable as a merge gate, or wants to know whether their test pipeline actually blocks bad merges. This skill reviews CI configuration statically; it does not trigger or run pipelines.
4
+ allowed-tools: Read Grep Glob
5
+ metadata:
6
+ author: "github: Raishin"
7
+ version: "0.1.0"
8
+ updated: "2026-05-17"
9
+ category: delivery
10
+ lifecycle: experimental
11
+ ---
12
+
13
+ # CI Test Pipeline Review
14
+
15
+ ## Purpose
16
+ This skill reviews how a CI pipeline runs tests — not the tests themselves, but the pipeline that decides whether they block a merge. A test suite only protects the main branch if the pipeline runs it, runs it on the merge gate, fails the build when it fails, and finishes fast enough that developers do not route around it. The review catches non-blocking test steps, soft-failure escape hatches, missing required-check enforcement, un-sharded slow suites, fail-fast that hides parallel failures, missing artifacts, and quarantine lanes wired so that quarantined tests silently never run again.
17
+
18
+ ## Lean operating rules
19
+ - Treat a test step that cannot fail the build — `|| true`, `continue-on-error: true`, `set +e`, an exit code swallowed, a non-blocking/optional check — as CRITICAL: the suite exists but gates nothing, and every "green" merge is unverified.
20
+ - Treat tests that run only post-merge (on `push` to main, nightly) and not on the pull-request merge gate as HIGH — regressions are caught after they are already on the main branch.
21
+ - Treat the test job not being a required status check for branch protection as HIGH — the run is advisory and a merge can proceed red. (Flag as inference if branch-protection config is not provided.)
22
+ - Treat `fail-fast: true` on a test matrix as MEDIUM — it cancels sibling shards on the first failure, hiding how many shards actually failed and forcing repeated partial runs.
23
+ - Treat a large suite in a single un-sharded job as HIGH when wall-clock time blocks merges — recommend a shard matrix sized to the suite.
24
+ - Treat the absence of test-result and failure-artifact upload (JUnit XML, traces, screenshots, logs) as HIGH — a CI-only failure is then undebuggable and engineers re-run blindly.
25
+ - Treat caching of dependencies/build but not keyed correctly (stale cache, no lockfile in the key) as MEDIUM — stale caches cause non-reproducible passes and failures.
26
+ - Treat a quarantine lane that excludes flaky tests from gating with no scheduled non-blocking run and no tracking as HIGH — quarantined tests then never run again and the coverage is silently lost.
27
+ - Treat secrets exposed to test jobs triggered by `pull_request_target` or to fork PRs as CRITICAL security exposure — flag and stop.
28
+ - Treat a missing concurrency/cancel-in-progress group on PR test runs as LOW — wasted runners, not a correctness issue.
29
+ - Do not recommend disabling or making a flaky check non-blocking as the fix — recommend quarantine with a scheduled run and an owner.
30
+ - Label every finding with evidence basis: CI config provided, branch-protection config provided, documentation-based, or inference.
31
+
32
+ ## References
33
+ Load these only when needed:
34
+ - [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review or formatting the final answer.
35
+
36
+ ## Response minimum
37
+ Return, at minimum:
38
+ - Gating findings (non-blocking steps, soft-failure escape hatches, required-check enforcement)
39
+ - Merge-gate timing findings (PR vs. post-merge, sharding, parallelism)
40
+ - Fail-fast and matrix configuration findings
41
+ - Artifact and observability findings (test results, failure artifacts)
42
+ - Quarantine-lane wiring findings
43
+ - Security findings (secret exposure to test jobs)
44
+ - Severity-labelled finding list (critical / high / medium / low)
45
+ - Safe next actions
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": "ci-test-pipeline-review",
3
+ "name": "CI Test Pipeline Review",
4
+ "type": "skill",
5
+ "provider": "generic",
6
+ "harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
7
+ "summary": "Review how a CI pipeline runs tests — gating, sharding, parallelism, fail-fast, artifact retention, quarantine wiring, and secret exposure — to verify the test suite actually blocks bad merges. Static review only.",
8
+ "source_type": "original",
9
+ "official_docs": [
10
+ "https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs",
11
+ "https://docs.github.com/en/repositories/configuring-branches-and-merges/about-protected-branches",
12
+ "https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions",
13
+ "https://docs.gitlab.com/ee/ci/yaml/",
14
+ "https://playwright.dev/docs/test-sharding"
15
+ ],
16
+ "security_notes": "Static review only — reads CI workflow and branch-protection configuration, never triggers or runs pipelines. Flags secret exposure to test jobs on pull_request_target or fork PRs. Never request or accept CI secrets, deploy keys, or registry tokens; ask for sanitized workflow files.",
17
+ "last_verified": "2026-05-17",
18
+ "path": "skills/qa/ci-test-pipeline-review",
19
+ "author": "github: Raishin",
20
+ "version": "0.1.0"
21
+ }
@@ -0,0 +1,124 @@
1
+ # Workflow and Output Contract
2
+
3
+ ## Workflow
4
+
5
+ ### Step 1 — Collect inputs
6
+
7
+ Ask the user to provide one or more of the following as sanitized files (no CI secrets, no deploy keys, no registry tokens — replace with placeholders):
8
+ - The CI workflow file(s) that run tests (`.github/workflows/*.yml`, `.gitlab-ci.yml`, `.circleci/config.yml`, `Jenkinsfile`)
9
+ - The branch-protection / merge-rule configuration, if available (which checks are required to merge)
10
+ - Any reusable workflow or composite action the test job calls
11
+ - Optional: a recent pipeline run summary showing job durations
12
+
13
+ If branch-protection configuration is not provided, required-check findings are stated as `inference` — say so and ask for it.
14
+
15
+ ### Step 2 — Gating audit
16
+
17
+ Confirm the test step can actually fail the build.
18
+
19
+ ```yaml
20
+ # CRITICAL — test failures are swallowed; the job is always green
21
+ - run: npm test || true
22
+
23
+ # CRITICAL — step failure does not fail the job
24
+ - run: npm test
25
+ continue-on-error: true
26
+ ```
27
+ Scan for every escape hatch: `|| true`, `continue-on-error: true`, `set +e`, `; exit 0`, a test command piped so its exit code is lost (`npm test | tee log`), or a soft/optional/advisory check label. Any of these on the test step is CRITICAL — the suite runs, looks green, and verifies nothing.
28
+
29
+ ### Step 3 — Merge-gate placement audit
30
+
31
+ Confirm tests run on the pull-request merge gate, not only after merge.
32
+
33
+ - Tests triggered only on `push` to main, on a schedule, or in a nightly job → HIGH. Regressions are then detected after they are already on the protected branch.
34
+ - Tests run on `pull_request` but the job is not in the repo's required status checks → HIGH (or `inference` if branch protection is not provided). The run is advisory; a red PR can still merge.
35
+ - Recommended: the test job runs on `pull_request` and is a required status check; merges queue behind a green run.
36
+
37
+ ### Step 4 — Speed and sharding audit
38
+
39
+ Review wall-clock time on the merge gate.
40
+
41
+ - A large suite in a single job with no sharding, where the job duration is long enough that developers complain or route around it → HIGH. Recommend a shard matrix:
42
+ ```yaml
43
+ strategy:
44
+ fail-fast: false
45
+ matrix:
46
+ shard: [1, 2, 3, 4]
47
+ steps:
48
+ - run: npx playwright test --shard=${{ matrix.shard }}/4
49
+ ```
50
+ - `workers`/parallelism pinned to 1 with no reason → MEDIUM.
51
+ - Dependency or build cache missing, or keyed without the lockfile hash → MEDIUM: stale caches produce non-reproducible results.
52
+
53
+ ### Step 5 — Fail-fast and matrix audit
54
+
55
+ - `fail-fast: true` (the default on GitHub Actions matrices) on a test shard matrix → MEDIUM. The first shard failure cancels the others, so a developer sees "1 shard failed" when 3 did, fixes one cause, re-runs, and discovers the next. Set `fail-fast: false` for test matrices so every shard reports.
56
+ - No `concurrency` group with `cancel-in-progress` on PR runs → LOW: superseded commits keep burning runners.
57
+
58
+ ### Step 6 — Artifact and observability audit
59
+
60
+ - No upload of test results (JUnit XML) and failure artifacts (traces, screenshots, videos, logs) → HIGH. A CI-only failure is then undebuggable; engineers re-run blindly hoping for green.
61
+ - Artifacts uploaded only on success, or retention too short to investigate → MEDIUM.
62
+ - Recommended: upload JUnit XML always, and traces/screenshots/logs `if: failure()`.
63
+
64
+ ### Step 7 — Quarantine-lane audit
65
+
66
+ If a flaky-test quarantine mechanism exists in CI:
67
+ - Quarantined tests excluded from the gate but with **no scheduled non-blocking run** → HIGH: the tests never execute again and the coverage is silently lost.
68
+ - Quarantine with no tracking issue and no owner → HIGH (consistent with the flakiness-triage skill).
69
+ - Recommended: quarantined tests run in a separate non-blocking job on every PR or on a schedule, their results visible, each with an owner and a fix deadline.
70
+
71
+ ### Step 8 — Security audit
72
+
73
+ - Test jobs triggered by `pull_request_target` that check out and execute PR-author code with secrets in scope → CRITICAL. A fork PR can exfiltrate secrets. Flag and stop.
74
+ - Secrets passed to test jobs that run on fork PRs → CRITICAL.
75
+ - Long-lived credentials where OIDC / short-lived tokens would work → MEDIUM.
76
+
77
+ ### Step 9 — Produce the output
78
+
79
+ Format findings using the Output section below.
80
+
81
+ ---
82
+
83
+ ## Output
84
+
85
+ Return findings in this structure:
86
+
87
+ ```
88
+ ## Verdict
89
+ <one sentence: pipeline gates merges / suite runs but gates nothing / mixed>
90
+
91
+ ## Evidence level
92
+ <CI config + branch protection provided | CI config only | documentation-based | inference>
93
+
94
+ ## Findings
95
+
96
+ ### CRITICAL
97
+ - [C1] <finding>: <description> — <remediation>
98
+
99
+ ### HIGH
100
+ - [H1] <finding>: <description> — <remediation>
101
+
102
+ ### MEDIUM
103
+ - [M1] <finding>: <description> — <remediation>
104
+
105
+ ### LOW
106
+ - [L1] <finding>: <description> — <remediation>
107
+
108
+ ## Safe next actions
109
+ 1. <action>
110
+ 2. <action>
111
+
112
+ ## Open questions
113
+ - <question requiring user clarification>
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Security notes
119
+
120
+ - Never request or accept CI secrets, deploy keys, or registry tokens. Ask for workflow files with placeholders.
121
+ - This is a static review: do not trigger pipelines, dispatch workflows, or contact CI.
122
+ - A test step with a soft-failure escape hatch (`|| true`, `continue-on-error`) is the highest-impact finding possible — the entire suite is decorative. Lead with it.
123
+ - `pull_request_target` running PR-author code with secrets in scope is a real exfiltration path; treat it as CRITICAL and tell the user to stop merging through that pipeline until it is fixed.
124
+ - Do not recommend making a flaky check non-blocking as the fix — that converts a known problem into an invisible one. Recommend quarantine with a scheduled run and an owner.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: helm-chart-quality-review
3
+ description: Use this skill when a user provides a Helm chart or asks to review Helm chart quality, security, or testability — including Chart.yaml, values.yaml, templates/, tests/, or chart-testing CI configuration.
4
+ allowed-tools: Read Grep Glob
5
+ metadata:
6
+ author: "github: Raishin"
7
+ version: "0.1.0"
8
+ updated: "2026-05-17"
9
+ category: delivery
10
+ lifecycle: experimental
11
+ ---
12
+
13
+ # Helm Chart Quality Review
14
+
15
+ ## Purpose
16
+ This skill reviews Helm chart source for quality, security, and testability defects. It reads chart files statically — Chart.yaml, values.yaml, values.schema.json, templates/, tests/, and CI configuration — without installing the chart or contacting a Kubernetes cluster. The review surfaces defects that allow bad workloads to be deployed silently: insecure container security contexts, missing resource governance, absent health probes, RBAC over-permission, hardcoded or default credentials, and missing helm test coverage.
17
+
18
+ ## Lean operating rules
19
+ - Treat `privileged: true`, `capabilities.add: [ALL]` or any combination that grants root-equivalent privileges as CRITICAL — stop and flag before continuing.
20
+ - Treat `hostNetwork: true`, `hostPID: true`, or `hostIPC: true` as CRITICAL — these give a container visibility into the node's network stack, process table, or IPC namespace.
21
+ - Treat secrets rendered inline in a ConfigMap (not a Secret resource) as CRITICAL — plain-text secrets are visible to any workload that can read ConfigMaps in the namespace.
22
+ - Treat a `ClusterRoleBinding` to the `default` service account as CRITICAL — any workload in the namespace inherits cluster-scoped access.
23
+ - Treat `capabilities.add: [SYS_ADMIN]` or `[NET_ADMIN]` as CRITICAL — these grant near-root kernel capabilities.
24
+ - Treat hardcoded `:latest` image tags without override capability as HIGH — breaks reproducibility and makes rollback unreliable.
25
+ - Treat `securityContext.runAsRoot: true` or the absence of `runAsNonRoot` on pod or container spec as HIGH — workloads should not run as UID 0.
26
+ - Treat `allowPrivilegeEscalation` not explicitly set to `false` as HIGH — a child process can gain more privileges than the parent.
27
+ - Treat cluster-scoped RBAC roles where namespace-scoped would suffice as HIGH — blast radius of a compromise is the entire cluster.
28
+ - Treat `serviceAccount.automountServiceAccountToken` not set to `false` when the workload does not call the Kubernetes API as HIGH — the token is mounted unnecessarily and exploitable.
29
+ - Treat missing `resources.requests` and `resources.limits` on every container as HIGH — without limits, a misbehaving pod can trigger node over-subscription and OOM kills on neighbours.
30
+ - Treat missing `livenessProbe` or `readinessProbe` as HIGH — rolling updates proceed blind; a pod stuck in a failed state can be sent live traffic.
31
+ - Treat sensitive default credential values (`admin`, `password`, empty string) in values.yaml as CRITICAL — users forget to override defaults and ship them to production.
32
+ - Treat the absence of `values.schema.json` when required values carry no type or pattern constraint as MEDIUM — `helm install` accepts arbitrary input with no validation.
33
+ - Treat missing `readOnlyRootFilesystem: true` as MEDIUM — a container with a writable root filesystem can modify its own binaries or drop exploit payloads.
34
+ - Treat missing `startupProbe` for slow-starting containers as MEDIUM — liveness checks kill containers that need more startup time, causing crash loops.
35
+ - Treat no `PodDisruptionBudget` for stateful or singleton workloads as MEDIUM — node drains can take the workload to zero replicas.
36
+ - Treat no `HorizontalPodAutoscaler` where the workload is expected to scale as LOW.
37
+ - Treat probe timeouts or failure thresholds at defaults with no tuning rationale as LOW.
38
+ - Treat no `NOTES.txt` as LOW — users have no post-install guidance.
39
+ - Treat a chart version that is not semver-compliant as LOW.
40
+ - Treat `tests/` that contain only pod-existence checks and no service reachability or functional assertion as LOW — existence proves the pod started, not that the service works.
41
+ - Treat no `tests/` directory at all as MEDIUM — helm test integration is absent.
42
+ - Treat no CI integration for chart-testing (`ct lint-and-install` or equivalent) as MEDIUM — the chart is not regression-tested on install.
43
+ - Label every finding with its evidence basis: `chart source provided`, `values only`, `documentation-based`, or `inference`.
44
+ - Do not request kubeconfig, cluster credentials, cloud provider credentials, or live values files containing secrets. Ask for sanitized versions with placeholder values.
45
+ - Static review only — never install a chart, never contact a Kubernetes cluster, never run `helm upgrade` or `kubectl apply`.
46
+
47
+ ## References
48
+ Load these only when needed:
49
+ - [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review or formatting the final answer.
50
+
51
+ ## Response minimum
52
+ Return, at minimum:
53
+ - Linting and template correctness findings
54
+ - Values hygiene findings (sensitive defaults, schema validation, `:latest` tags)
55
+ - Template security findings (securityContext, capabilities, host namespaces, secrets in ConfigMap)
56
+ - Resource governance findings (requests/limits, PDB, HPA)
57
+ - Health and observability findings (liveness, readiness, startup probes)
58
+ - Testability findings (helm test, chart-testing CI)
59
+ - RBAC and service account findings
60
+ - Severity-labelled finding list (CRITICAL / HIGH / MEDIUM / LOW)
61
+ - Safe next actions
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "helm-chart-quality-review",
3
+ "name": "Helm Chart Quality Review",
4
+ "type": "skill",
5
+ "provider": "generic",
6
+ "harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
7
+ "summary": "Review a Helm chart for quality, security, and testability defects — linting gaps, insecure securityContext, missing resource limits, absent health probes, RBAC over-permission, hardcoded secrets, and missing helm test coverage — statically, without installing or contacting a cluster.",
8
+ "source_type": "original",
9
+ "official_docs": [
10
+ "https://helm.sh/docs/chart_best_practices/",
11
+ "https://helm.sh/docs/helm/helm_lint/",
12
+ "https://helm.sh/docs/helm/helm_template/",
13
+ "https://helm.sh/docs/topics/chart_tests/",
14
+ "https://github.com/helm/chart-testing",
15
+ "https://kubernetes.io/docs/concepts/security/pod-security-standards/",
16
+ "https://kubernetes.io/docs/tasks/configure-pod-container/security-context/"
17
+ ],
18
+ "security_notes": "Static review only — reads chart source files (Chart.yaml, values.yaml, templates/, tests/), never installs a chart, never connects to a Kubernetes cluster, never requests kubeconfig, cluster credentials, or cloud provider credentials. Do not accept values files containing live credentials, connection strings, or tenant IDs; ask for sanitized versions with placeholder values.",
19
+ "last_verified": "2026-05-17",
20
+ "path": "skills/qa/helm-chart-quality-review",
21
+ "author": "github: Raishin",
22
+ "version": "0.1.0"
23
+ }
@@ -0,0 +1,174 @@
1
+ # Workflow and Output Contract
2
+
3
+ ## Workflow
4
+
5
+ ### Step 1 — Collect inputs
6
+
7
+ Ask the user to provide one or more of the following as sanitized files (no live credentials, no kubeconfig, no cluster tokens — replace secrets with placeholders):
8
+ - `Chart.yaml` — name, version, appVersion, dependencies
9
+ - `values.yaml` — default values and their inline documentation
10
+ - `values.schema.json` — JSON Schema validation for values (if present)
11
+ - `templates/` — all template manifests (Deployment, StatefulSet, DaemonSet, Service, ConfigMap, Secret, RBAC resources, ServiceAccount, HPA, PDB, etc.)
12
+ - `tests/` — helm test hook manifests
13
+ - CI configuration (`ct.yaml`, `.github/workflows/*.yml`, `.gitlab-ci.yml`, or equivalent) if available
14
+
15
+ If `values.schema.json` is absent, note it and flag as MEDIUM. If `tests/` is absent, note it and flag as MEDIUM. If CI configuration is not provided, state findings about chart-testing CI as `inference`.
16
+
17
+ ---
18
+
19
+ ### Step 2 — Linting and template correctness audit
20
+
21
+ Check for structural and syntactic correctness.
22
+
23
+ - Missing required `Chart.yaml` fields (`apiVersion`, `name`, `version`) → flag as blocking; the chart fails `helm lint`.
24
+ - Chart `version` not semver-compliant (e.g. `1.0` instead of `1.0.0`) → LOW.
25
+ - Undefined template variables that would cause `helm template` to fail → HIGH.
26
+ - `helm template` renders manifests with empty required fields (image tag empty, pod name empty) → HIGH.
27
+ - No `NOTES.txt` providing post-install next steps → LOW.
28
+
29
+ ---
30
+
31
+ ### Step 3 — Values hygiene audit
32
+
33
+ Check for default value problems and schema coverage.
34
+
35
+ - Hardcoded image tags set to `:latest` with no override mechanism → HIGH (breaks reproducibility and rollback).
36
+ - Image digests hardcoded without a user-overridable `image.tag` or `image.digest` field → HIGH.
37
+ - Sensitive default values: empty password (`password: ""`), literal `admin` or `password` as a default credential → CRITICAL. Users deploy defaults to production without noticing.
38
+ - Required values with no `values.schema.json` type or pattern constraint → MEDIUM; `helm install` accepts arbitrary input with no validation.
39
+ - Deeply nested values with no inline comment documentation → LOW; operators cannot understand what to tune without reading templates.
40
+
41
+ ---
42
+
43
+ ### Step 4 — Template security audit
44
+
45
+ Check container and pod security configuration.
46
+
47
+ ```yaml
48
+ # CRITICAL — container runs as root
49
+ securityContext:
50
+ runAsUser: 0
51
+
52
+ # CRITICAL — privileged mode grants near-root kernel access
53
+ securityContext:
54
+ privileged: true
55
+
56
+ # CRITICAL — grants all Linux capabilities
57
+ securityContext:
58
+ capabilities:
59
+ add: ["ALL"]
60
+
61
+ # CRITICAL — host namespace sharing
62
+ spec:
63
+ hostNetwork: true
64
+ hostPID: true
65
+ hostIPC: true
66
+ ```
67
+
68
+ - `runAsRoot: true` or `runAsNonRoot` absent from both pod-level and container-level securityContext → HIGH.
69
+ - `allowPrivilegeEscalation` not set to `false` → HIGH; a child process can acquire more privileges than its parent.
70
+ - `capabilities.add: [SYS_ADMIN]` or `[NET_ADMIN]` → CRITICAL.
71
+ - `capabilities.add: [ALL]` → CRITICAL.
72
+ - `privileged: true` → CRITICAL.
73
+ - `hostNetwork: true`, `hostPID: true`, or `hostIPC: true` → CRITICAL for each.
74
+ - `readOnlyRootFilesystem` absent or set to `false` → MEDIUM; the container filesystem is writable, enabling in-place modification of binaries.
75
+ - Secrets (passwords, tokens, keys) rendered as plain-text data in a ConfigMap instead of a Secret resource → CRITICAL; any workload that can read ConfigMaps in the namespace can read the value.
76
+
77
+ ---
78
+
79
+ ### Step 5 — Resource governance audit
80
+
81
+ Check resource requests, limits, and workload scaling policy.
82
+
83
+ - `resources.requests` or `resources.limits` absent from any container spec → HIGH; without limits, a misbehaving pod triggers node over-subscription and may cause OOM kills on neighbouring workloads.
84
+ - No `PodDisruptionBudget` for a StatefulSet or singleton Deployment → MEDIUM; node drains can take the workload to zero replicas.
85
+ - No `HorizontalPodAutoscaler` where the workload is expected to handle variable load → LOW.
86
+
87
+ ---
88
+
89
+ ### Step 6 — Health and observability audit
90
+
91
+ Check probe configuration.
92
+
93
+ - `livenessProbe` absent from any container → HIGH; the kubelet cannot detect a hung container, and a failed pod can receive live traffic indefinitely.
94
+ - `readinessProbe` absent → HIGH; rolling updates proceed without confirming the new pod is ready to serve traffic.
95
+ - `startupProbe` absent for containers with slow or variable startup times → MEDIUM; the liveness probe fires before the container is ready, causing crash loops.
96
+ - Probe `timeoutSeconds`, `failureThreshold`, or `periodSeconds` at Kubernetes defaults with no documented rationale → LOW; defaults may be too aggressive or too lenient for the workload.
97
+
98
+ ---
99
+
100
+ ### Step 7 — Testability audit
101
+
102
+ Check helm test coverage and chart-testing CI integration.
103
+
104
+ - No `tests/` directory → MEDIUM; helm test integration is absent. The chart has no post-install verification that can be run by `helm test`.
105
+ - `tests/` present but test manifests only assert pod existence (`kubectl get pod`) and do not verify service reachability or a functional endpoint → LOW; existence confirms the pod started, not that the service responds correctly.
106
+ - No CI integration for chart-testing — no `ct lint-and-install`, no `helm lint` + `helm template` step in CI configuration → MEDIUM; the chart is not regression-tested on install across a range of values.
107
+
108
+ ---
109
+
110
+ ### Step 8 — RBAC and service account audit
111
+
112
+ Check role scope and service account token exposure.
113
+
114
+ ```yaml
115
+ # CRITICAL — ClusterRoleBinding to default SA gives cluster-wide access
116
+ # to every workload in the namespace
117
+ subjects:
118
+ - kind: ServiceAccount
119
+ name: default
120
+ namespace: my-app
121
+ roleRef:
122
+ kind: ClusterRole
123
+ name: admin
124
+ ```
125
+
126
+ - `ClusterRoleBinding` to the `default` service account → CRITICAL.
127
+ - `ClusterRole` used where a `Role` scoped to a single namespace would suffice → HIGH; blast radius of a compromised workload is the entire cluster.
128
+ - `serviceAccount.automountServiceAccountToken` not set to `false` when the workload makes no Kubernetes API calls → HIGH; the service account token is mounted into the pod and exploitable by any process that can read the filesystem.
129
+
130
+ ---
131
+
132
+ ## Output
133
+
134
+ Return findings in this structure:
135
+
136
+ ```
137
+ ## Verdict
138
+ <one sentence: chart passes review with no critical issues / chart has critical defects that must be fixed before deployment / chart has high-severity defects requiring attention>
139
+
140
+ ## Evidence level
141
+ <chart source provided | values only | partial (no templates) | inference>
142
+
143
+ ## Findings
144
+
145
+ ### CRITICAL
146
+ - [C1] <finding title>: <description> — <remediation>
147
+
148
+ ### HIGH
149
+ - [H1] <finding title>: <description> — <remediation>
150
+
151
+ ### MEDIUM
152
+ - [M1] <finding title>: <description> — <remediation>
153
+
154
+ ### LOW
155
+ - [L1] <finding title>: <description> — <remediation>
156
+
157
+ ## Safe next actions
158
+ 1. <action>
159
+ 2. <action>
160
+
161
+ ## Open questions
162
+ - <question requiring user clarification>
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Security notes
168
+
169
+ - Never request kubeconfig, cluster credentials, cloud provider tokens, or live values files containing secrets. Ask for sanitized versions with placeholder values.
170
+ - Static review only — never install a chart, never run `helm upgrade` or `kubectl apply`, never contact a Kubernetes cluster.
171
+ - A container running as root, with `privileged: true`, or with `hostNetwork: true` is the highest-impact template security finding. Lead with it.
172
+ - A `ClusterRoleBinding` to the `default` service account grants cluster-wide access to every workload in the namespace. Treat it as CRITICAL and flag immediately.
173
+ - Secrets in ConfigMap instead of a Secret resource are exposed to all workloads in the namespace that have read access to ConfigMaps. Flag as CRITICAL.
174
+ - Do not recommend workarounds that maintain the defect (e.g. "add a comment explaining why privileged is needed" is not remediation for `privileged: true`).