@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.
- package/.claude-plugin/plugin.json +11 -1
- package/.cursor-plugin/plugin.json +11 -1
- package/.github/plugin/marketplace.json +1 -1
- package/README.md +21 -7
- package/agents/qa/README.md +51 -0
- package/agents/qa/ci-test-pipeline-review-agent/AGENT.md +51 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/codex.toml +34 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/metadata.json +33 -0
- package/agents/qa/helm-chart-quality-review-agent/AGENT.md +56 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/codex.toml +39 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/copilot.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/cursor.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/gemini.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/metadata.json +35 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/AGENT.md +55 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/claude-code.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/codex.toml +38 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/copilot.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/cursor.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/gemini.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-ide.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/metadata.json +35 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/AGENT.md +52 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/codex.toml +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/metadata.json +35 -0
- package/agents/qa/playwright-e2e-execution-run-agent/AGENT.md +50 -0
- package/agents/qa/playwright-e2e-execution-run-agent/harnesses/claude-code.agent.md +39 -0
- package/agents/qa/playwright-e2e-execution-run-agent/harnesses/cursor.agent.md +39 -0
- package/agents/qa/playwright-e2e-execution-run-agent/metadata.json +28 -0
- package/agents/qa/playwright-e2e-suite-review-agent/AGENT.md +51 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/codex.toml +34 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/metadata.json +35 -0
- package/agents/qa/plc-control-logic-safety-review-agent/AGENT.md +53 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/codex.toml +36 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/metadata.json +33 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/AGENT.md +52 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/codex.toml +35 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/metadata.json +34 -0
- package/agents/qa/test-coverage-quality-review-agent/AGENT.md +50 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/codex.toml +33 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/metadata.json +33 -0
- package/agents/qa/test-flakiness-triage-agent/AGENT.md +52 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/codex.toml +33 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/metadata.json +33 -0
- package/catalog/agents.json +1163 -881
- package/catalog/asset-integrity.json +473 -28
- package/catalog/install-roles.json +29 -1
- package/catalog/skill-manifest.json +220 -0
- package/catalog/skills.json +907 -619
- package/package.json +5 -2
- package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
- package/scripts/generate-readme-counts.mjs +162 -0
- package/skills/qa/ci-test-pipeline-review/SKILL.md +45 -0
- package/skills/qa/ci-test-pipeline-review/metadata.json +21 -0
- package/skills/qa/ci-test-pipeline-review/references/workflow-and-output.md +124 -0
- package/skills/qa/helm-chart-quality-review/SKILL.md +61 -0
- package/skills/qa/helm-chart-quality-review/metadata.json +23 -0
- package/skills/qa/helm-chart-quality-review/references/workflow-and-output.md +174 -0
- package/skills/qa/kubernetes-manifest-quality-review/SKILL.md +92 -0
- package/skills/qa/kubernetes-manifest-quality-review/metadata.json +23 -0
- package/skills/qa/kubernetes-manifest-quality-review/references/workflow-and-output.md +246 -0
- package/skills/qa/llm-ai-pipeline-test-review/SKILL.md +52 -0
- package/skills/qa/llm-ai-pipeline-test-review/metadata.json +23 -0
- package/skills/qa/llm-ai-pipeline-test-review/references/workflow-and-output.md +221 -0
- package/skills/qa/playwright-e2e-execution-run/SKILL.md +54 -0
- package/skills/qa/playwright-e2e-execution-run/metadata.json +24 -0
- package/skills/qa/playwright-e2e-execution-run/references/workflow-and-output.md +133 -0
- package/skills/qa/playwright-e2e-suite-review/SKILL.md +44 -0
- package/skills/qa/playwright-e2e-suite-review/metadata.json +23 -0
- package/skills/qa/playwright-e2e-suite-review/references/workflow-and-output.md +176 -0
- package/skills/qa/plc-control-logic-safety-review/SKILL.md +47 -0
- package/skills/qa/plc-control-logic-safety-review/metadata.json +21 -0
- package/skills/qa/plc-control-logic-safety-review/references/workflow-and-output.md +231 -0
- package/skills/qa/rpa-workflow-resilience-review/SKILL.md +47 -0
- package/skills/qa/rpa-workflow-resilience-review/metadata.json +22 -0
- package/skills/qa/rpa-workflow-resilience-review/references/workflow-and-output.md +210 -0
- package/skills/qa/test-coverage-quality-review/SKILL.md +44 -0
- package/skills/qa/test-coverage-quality-review/metadata.json +21 -0
- package/skills/qa/test-coverage-quality-review/references/workflow-and-output.md +139 -0
- package/skills/qa/test-flakiness-triage/SKILL.md +43 -0
- package/skills/qa/test-flakiness-triage/metadata.json +21 -0
- package/skills/qa/test-flakiness-triage/references/workflow-and-output.md +114 -0
- package/tests/eval-qa-cluster.mjs +111 -0
- package/tests/validate-readme-counts.mjs +179 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-e2e-execution-run
|
|
3
|
+
description: Use this skill when an operator wants to actually execute an existing Playwright end-to-end suite against a confirmed non-production target and receive a structured, attested run report — pass/fail counts, flaky tests, durations, and trace artifacts. Trigger when the user asks to "run the e2e suite", "execute the Playwright tests against staging", or hands the agent a Playwright project plus a target base URL. This is the live-execution counterpart to the static-review skill `playwright-e2e-suite-review`. Default mode is static and runs nothing; runtime execution is a per-session opt-in that requires explicit target confirmation.
|
|
4
|
+
allowed-tools: Read Grep Glob Bash(npx playwright test*) Bash(npx playwright install*) Bash(npx playwright show-report*)
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-17"
|
|
9
|
+
category: delivery
|
|
10
|
+
lifecycle: experimental
|
|
11
|
+
execution_tier: read-only-runtime
|
|
12
|
+
required_egress:
|
|
13
|
+
- operator-confirmed-target-host
|
|
14
|
+
- cdn.playwright.dev
|
|
15
|
+
- playwright.download.prss.microsoft.com
|
|
16
|
+
requires_credentials: []
|
|
17
|
+
output_attestation:
|
|
18
|
+
schema: schemas/attestation.schema.json
|
|
19
|
+
signed_with: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Playwright E2E Execution Run
|
|
23
|
+
|
|
24
|
+
## Purpose
|
|
25
|
+
This skill executes an existing Playwright end-to-end suite against an operator-confirmed non-production target and emits a structured run attestation: total/passed/failed/flaky counts, slowest tests, retry-only passes, and the location of trace and screenshot artifacts. It is the live-execution counterpart to `playwright-e2e-suite-review` (which is static-review only and never runs anything). The skill runs the suite as authored — it does not write the tests, deploy the application, or mutate infrastructure — and it refuses to run against a production target.
|
|
26
|
+
|
|
27
|
+
## Execution modes
|
|
28
|
+
- **Static (default).** The skill runs nothing. It inspects `playwright.config`, enumerates the project and target, states exactly which command it would execute, and asks the operator for explicit runtime opt-in plus target confirmation.
|
|
29
|
+
- **Runtime (per-session opt-in).** Only after the operator explicitly opts in and confirms a non-production base URL does the skill invoke `npx playwright test`. Runtime mode is never assumed from the request alone.
|
|
30
|
+
|
|
31
|
+
## Lean operating rules
|
|
32
|
+
- Never execute the suite without an explicit, in-session runtime opt-in AND an operator-confirmed base URL — absent either, stay in static mode and ask.
|
|
33
|
+
- Refuse to run if the target base URL resolves to, or is named like, a production environment (`prod`, `www.`, a customer-facing apex domain). Require a staging, preview, or ephemeral target; state the refusal reason.
|
|
34
|
+
- Never accept credentials, bearer tokens, or a `storageState` file inline. Test credentials must come from the environment or a config the operator already controls; the skill never collects, echoes, or logs their values.
|
|
35
|
+
- Run only the allowlisted commands: `npx playwright test` (with operator-supplied flags), `npx playwright install` (browser binaries), `npx playwright show-report`. Never run deploy, migration, seed, or registry commands.
|
|
36
|
+
- Treat the suite's own side effects as the operator's responsibility — state plainly that E2E tests may create or modify data in the target, which is why a non-production target is mandatory.
|
|
37
|
+
- Do not retry a failed run with raised timeouts or added retries to manufacture a green result — report the failure as observed.
|
|
38
|
+
- Emit the run attestation as JSON conforming to `schemas/attestation.schema.json`; the verdict is one of `pass`, `fail`, or `manual-review`.
|
|
39
|
+
- If browser binaries are missing, run `npx playwright install` only with operator awareness; if egress to the browser CDN is blocked, degrade to `manual-review` rather than reporting a false `fail`.
|
|
40
|
+
- Label the run: command executed, target host (host only, never the full credentialed URL), Playwright version, and wall-clock duration.
|
|
41
|
+
|
|
42
|
+
## References
|
|
43
|
+
Load these only when needed:
|
|
44
|
+
- [Workflow and output contract](references/workflow-and-output.md) — use when executing the run or formatting the attestation.
|
|
45
|
+
|
|
46
|
+
## Response minimum
|
|
47
|
+
Return, at minimum:
|
|
48
|
+
- The execution mode used (static or runtime) and why
|
|
49
|
+
- The exact command executed (runtime) or that would be executed (static)
|
|
50
|
+
- The confirmed target host and Playwright version
|
|
51
|
+
- Run results: total / passed / failed / flaky (retry-only pass) counts
|
|
52
|
+
- Trace and screenshot artifact locations for any failure
|
|
53
|
+
- A `pass` / `fail` / `manual-review` verdict with reasons
|
|
54
|
+
- Safe next actions
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "playwright-e2e-execution-run",
|
|
3
|
+
"name": "Playwright E2E Execution Run",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "generic",
|
|
6
|
+
"harnesses": ["claude-code", "cursor"],
|
|
7
|
+
"summary": "Execute an existing Playwright E2E suite against an operator-confirmed non-production target and emit a structured run attestation — pass/fail/flaky counts, slowest tests, and trace artifact locations. Live-execution counterpart to playwright-e2e-suite-review.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://playwright.dev/docs/test-cli",
|
|
11
|
+
"https://playwright.dev/docs/running-tests",
|
|
12
|
+
"https://playwright.dev/docs/test-reporters",
|
|
13
|
+
"https://playwright.dev/docs/trace-viewer",
|
|
14
|
+
"https://playwright.dev/docs/ci"
|
|
15
|
+
],
|
|
16
|
+
"security_notes": "Live-execution skill, read-only-runtime tier. Default mode is static and runs nothing; runtime execution is a per-session opt-in requiring explicit operator confirmation of a non-production target. The Bash allowlist locks invocations to `npx playwright test`, `npx playwright install`, and `npx playwright show-report` — no deploy, migration, seed, or registry commands. Refuses production targets. Never accepts or echoes credentials, tokens, or storageState; test credentials come from the operator-controlled environment. Egress limited to the operator-confirmed target host and the Playwright browser CDN; blocked CDN egress degrades to manual-review rather than a false fail.",
|
|
17
|
+
"last_verified": "2026-05-17",
|
|
18
|
+
"path": "skills/qa/playwright-e2e-execution-run",
|
|
19
|
+
"category": "delivery",
|
|
20
|
+
"lifecycle": "experimental",
|
|
21
|
+
"execution_tier": "read-only-runtime",
|
|
22
|
+
"author": "github: Raishin",
|
|
23
|
+
"version": "0.1.0"
|
|
24
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Workflow and Output Contract
|
|
2
|
+
|
|
3
|
+
## Workflow
|
|
4
|
+
|
|
5
|
+
### Step 1 — Collect inputs (static mode)
|
|
6
|
+
|
|
7
|
+
Without running anything, gather:
|
|
8
|
+
- The Playwright project root (location of `playwright.config.ts/js` and the `tests/` directory).
|
|
9
|
+
- The target base URL the operator wants to test against.
|
|
10
|
+
- Whether browser binaries are already installed.
|
|
11
|
+
- Confirmation of whether the operator is opting into runtime execution this session.
|
|
12
|
+
|
|
13
|
+
If the operator has not explicitly opted into runtime execution, stay in static mode: report what would run and stop.
|
|
14
|
+
|
|
15
|
+
### Step 2 — Target safety gate
|
|
16
|
+
|
|
17
|
+
Before any execution, validate the target:
|
|
18
|
+
- Reject a base URL that names or resolves to production — `prod`, `production`, a bare customer apex domain, or `www.` on the public site. Require a staging, preview, QA, or ephemeral environment.
|
|
19
|
+
- Reject a base URL with embedded credentials (`https://user:pass@host`). Credentials belong in the environment, never the URL.
|
|
20
|
+
- Echo back only the **host** for confirmation (`staging.example.internal`), never the full URL with query string or token.
|
|
21
|
+
|
|
22
|
+
If the target cannot be confirmed as non-production, stay in static mode and state the refusal reason.
|
|
23
|
+
|
|
24
|
+
### Step 3 — Resolve the command
|
|
25
|
+
|
|
26
|
+
Construct the exact command from operator-supplied flags. Examples:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Whole suite against a confirmed target
|
|
30
|
+
PLAYWRIGHT_BASE_URL=https://staging.example.internal npx playwright test
|
|
31
|
+
|
|
32
|
+
# A single project / shard
|
|
33
|
+
npx playwright test --project=chromium --shard=1/4
|
|
34
|
+
|
|
35
|
+
# A specific spec
|
|
36
|
+
npx playwright test tests/checkout.spec.ts
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
State the resolved command verbatim and get a final go-ahead.
|
|
40
|
+
|
|
41
|
+
### Step 4 — Ensure browsers (only if needed)
|
|
42
|
+
|
|
43
|
+
If browser binaries are missing:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx playwright install --with-deps
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If egress to the Playwright browser CDN (`cdn.playwright.dev`, `playwright.download.prss.microsoft.com`) is blocked, do not report a test failure — the run never started. Degrade to `manual-review` with reason `browser-install-blocked`.
|
|
50
|
+
|
|
51
|
+
### Step 5 — Execute (runtime mode only)
|
|
52
|
+
|
|
53
|
+
Run the resolved `npx playwright test` command. Use a machine-readable reporter so results can be parsed deterministically:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx playwright test --reporter=json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Capture: exit code, total/passed/failed/skipped counts, tests that passed only on retry (flaky), the slowest tests, and the paths to `playwright-report/` and any `test-results/**/trace.zip`.
|
|
60
|
+
|
|
61
|
+
Do not re-run with raised timeouts or extra retries to force a green result. One run, reported as observed. A deliberate re-run for flakiness confirmation is allowed only if the operator asks, and both runs are reported.
|
|
62
|
+
|
|
63
|
+
### Step 6 — Emit the attestation
|
|
64
|
+
|
|
65
|
+
Produce a JSON attestation conforming to `schemas/attestation.schema.json`. Verdict rules:
|
|
66
|
+
- `pass` — exit code 0, zero failed tests.
|
|
67
|
+
- `fail` — one or more tests failed.
|
|
68
|
+
- `manual-review` — the run could not complete (browser install blocked, config error, target unreachable, egress denied). Never auto-`pass` an incomplete run.
|
|
69
|
+
|
|
70
|
+
### Step 7 — Produce the output
|
|
71
|
+
|
|
72
|
+
Format the response using the Output section below, with the attestation JSON included.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Output
|
|
77
|
+
|
|
78
|
+
Return results in this structure:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
## Mode
|
|
82
|
+
<static | runtime> — <one-line reason>
|
|
83
|
+
|
|
84
|
+
## Command
|
|
85
|
+
<the exact command executed, or that would be executed in static mode>
|
|
86
|
+
|
|
87
|
+
## Target
|
|
88
|
+
host: <host only> playwright: <version> duration: <wall-clock>
|
|
89
|
+
|
|
90
|
+
## Results
|
|
91
|
+
total: <n> passed: <n> failed: <n> flaky: <n> skipped: <n>
|
|
92
|
+
|
|
93
|
+
## Failures
|
|
94
|
+
- <test title> — <file:line> — trace: <path/to/trace.zip>
|
|
95
|
+
|
|
96
|
+
## Verdict
|
|
97
|
+
<pass | fail | manual-review> — <reasons>
|
|
98
|
+
|
|
99
|
+
## Attestation
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"schema": "schemas/attestation.schema.json",
|
|
103
|
+
"skill": "playwright-e2e-execution-run",
|
|
104
|
+
"target_host": "<host>",
|
|
105
|
+
"playwright_version": "<version>",
|
|
106
|
+
"command": "<command>",
|
|
107
|
+
"results": { "total": 0, "passed": 0, "failed": 0, "flaky": 0, "skipped": 0 },
|
|
108
|
+
"verdict": "<pass|fail|manual-review>",
|
|
109
|
+
"verdict_reasons": [],
|
|
110
|
+
"artifacts": { "report": "playwright-report/", "traces": [] },
|
|
111
|
+
"generated_at": "<ISO-8601>"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Safe next actions
|
|
116
|
+
1. <action>
|
|
117
|
+
2. <action>
|
|
118
|
+
|
|
119
|
+
## Open questions
|
|
120
|
+
- <question requiring operator clarification>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Security notes
|
|
126
|
+
|
|
127
|
+
- Default mode is static — the skill runs nothing until the operator explicitly opts into runtime execution in the current session.
|
|
128
|
+
- Runtime execution is gated on an operator-confirmed non-production target. A production target is an immediate refusal, not a warning.
|
|
129
|
+
- The Bash allowlist permits only `npx playwright test`, `npx playwright install`, and `npx playwright show-report`. Never run deploy, database migration, seed, registry, or `kubectl` commands under this skill.
|
|
130
|
+
- Never accept credentials, bearer tokens, or a `storageState` file inline or in the base URL. Test credentials are supplied through the operator-controlled environment and are never collected, echoed, or written into the attestation.
|
|
131
|
+
- E2E suites frequently create or modify data in the target application. That side effect is the operator's responsibility and is the reason a non-production target is mandatory — state this explicitly.
|
|
132
|
+
- An incomplete run degrades to `manual-review`, never to `pass`. A blocked browser CDN, an unreachable target, or a config error must not be reported as a test `fail`, which would misattribute the cause.
|
|
133
|
+
- Report failures as observed. Do not raise timeouts, add retries, or re-run selectively to manufacture a green verdict.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-e2e-suite-review
|
|
3
|
+
description: Use this skill when reviewing a Playwright end-to-end test suite for flakiness, selector brittleness, isolation defects, and CI reliability. Trigger when a user provides Playwright spec files, a playwright.config.ts/js, a CI workflow that runs Playwright, or asks why their E2E suite is flaky, slow, or fails intermittently in CI but passes locally. This skill reviews test artifacts statically; it does not execute the suite or launch browsers.
|
|
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
|
+
# Playwright E2E Suite Review
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
This skill reviews a Playwright end-to-end test suite for the defects that destroy CI trust at scale: flakiness, brittle selectors, broken test isolation, and unreliable CI configuration. A flaky E2E suite is worse than no suite — engineers learn to re-run failures instead of reading them, real regressions ship behind a green-after-retry checkmark, and the suite stops gating anything. The review catches hard waits, manual non-retrying assertions, implementation-coupled selectors, shared mutable state across tests, and retry/sharding misconfiguration before they erode confidence in the deploy pipeline.
|
|
17
|
+
|
|
18
|
+
## Lean operating rules
|
|
19
|
+
- Treat any use of `page.waitForTimeout()` / `waitForTimeout` in a spec (not a debugging branch) as HIGH — fixed sleeps are the single largest source of Playwright flakiness; they either race the app or pad every run.
|
|
20
|
+
- Treat manual non-retrying assertions (`expect(await locator.isVisible()).toBe(true)`, `expect(await locator.textContent()).toBe(...)`) as HIGH — they snapshot a single instant and lose Playwright's auto-retry; use web-first assertions (`await expect(locator).toBeVisible()`).
|
|
21
|
+
- Treat selectors bound to implementation detail — deep CSS chains, nth-child indexes, generated/hashed class names, raw XPath — as HIGH for brittleness; prefer role-, label-, text-, or `data-testid`-based locators.
|
|
22
|
+
- Treat tests that depend on ordering or share mutable state (module-level variables mutated across `test()` blocks, a record created in test A read in test B) as HIGH — they break under parallelism, sharding, and `--shuffle`, and produce non-reproducible failures.
|
|
23
|
+
- Treat `retries` set greater than 0 in CI with no flaky-test surfacing (no trace-on-retry, no flaky reporter, no quarantine) as HIGH — retries then silently mask real flakiness instead of buying time to fix it.
|
|
24
|
+
- Treat `trace`/`screenshot`/`video` all disabled in the CI project as HIGH — a CI-only failure with no trace is undebuggable and forces blind re-runs.
|
|
25
|
+
- Treat absolute waits on network (`waitForLoadState('networkidle')`) used as a general synchronization crutch as MEDIUM — it is fragile under analytics/polling; wait on the specific element or response instead.
|
|
26
|
+
- Treat shared `storageState` / auth fixtures mutated by tests, or login performed inside every test instead of via a setup project, as MEDIUM — slow and a cross-test contamination risk.
|
|
27
|
+
- Treat a single un-sharded CI job for a large suite, or `fullyParallel: false` without a stated reason, as MEDIUM — wall-clock time blocks every deploy.
|
|
28
|
+
- Treat `expect` timeouts or global `timeout` raised well above default to make a suite "pass" as MEDIUM — masks a real slow path or race.
|
|
29
|
+
- Do not recommend deleting or `.skip()`-ing a flaky test as the fix without a root-cause category and a quarantine/tracking path.
|
|
30
|
+
- Label every finding with evidence basis: spec/config text provided, documentation-based, or inference from absent configuration.
|
|
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
|
+
- Flakiness findings (hard waits, manual assertions, network-idle crutches)
|
|
39
|
+
- Selector brittleness assessment (locator strategy per spec)
|
|
40
|
+
- Test isolation findings (shared state, ordering dependence, auth contamination)
|
|
41
|
+
- Retry and observability assessment (retries vs. trace/flaky surfacing)
|
|
42
|
+
- CI configuration findings (sharding, parallelism, artifact capture, timeouts)
|
|
43
|
+
- Severity-labelled finding list (critical / high / medium / low)
|
|
44
|
+
- Safe next actions
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "playwright-e2e-suite-review",
|
|
3
|
+
"name": "Playwright E2E Suite Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "generic",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Review a Playwright end-to-end test suite for flakiness, selector brittleness, test isolation defects, retry masking, and CI reliability — statically, without executing the suite.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://playwright.dev/docs/best-practices",
|
|
11
|
+
"https://playwright.dev/docs/locators",
|
|
12
|
+
"https://playwright.dev/docs/test-assertions",
|
|
13
|
+
"https://playwright.dev/docs/test-retries",
|
|
14
|
+
"https://playwright.dev/docs/test-parallel",
|
|
15
|
+
"https://playwright.dev/docs/test-sharding",
|
|
16
|
+
"https://playwright.dev/docs/trace-viewer"
|
|
17
|
+
],
|
|
18
|
+
"security_notes": "Static review only — reads test specs and config, never executes the suite, launches browsers, or contacts a target application. Never request or accept live application URLs with embedded credentials, auth tokens, real storageState files, or .env secrets; ask for sanitized snippets.",
|
|
19
|
+
"last_verified": "2026-05-17",
|
|
20
|
+
"path": "skills/qa/playwright-e2e-suite-review",
|
|
21
|
+
"author": "github: Raishin",
|
|
22
|
+
"version": "0.1.0"
|
|
23
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
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 snippets (no live URLs with embedded credentials, no auth tokens, no real `storageState` JSON, no `.env` contents):
|
|
8
|
+
- Playwright spec files (`*.spec.ts`, `*.spec.js`, `tests/**`)
|
|
9
|
+
- `playwright.config.ts` / `playwright.config.js`
|
|
10
|
+
- Page object / fixture files (`fixtures.ts`, `pages/**`)
|
|
11
|
+
- The CI workflow step that runs Playwright (GitHub Actions, GitLab CI, etc.)
|
|
12
|
+
- Optional: a recent CI failure log or flaky-test report
|
|
13
|
+
|
|
14
|
+
If only a partial set is provided, note which inputs are absent and scope findings accordingly. A config without specs, or specs without a config, each leaves a blind spot — say so.
|
|
15
|
+
|
|
16
|
+
### Step 2 — Flakiness audit
|
|
17
|
+
|
|
18
|
+
Scan every spec for time-based and non-retrying synchronization.
|
|
19
|
+
|
|
20
|
+
**2a. Hard waits**
|
|
21
|
+
```ts
|
|
22
|
+
// HIGH — fixed sleep races the application
|
|
23
|
+
await page.waitForTimeout(2000);
|
|
24
|
+
await page.click('#submit');
|
|
25
|
+
```
|
|
26
|
+
`waitForTimeout` is for debugging only. It either fires before the app is ready (flake) or pads every run (slow). Replace with an action or web-first assertion that auto-waits:
|
|
27
|
+
```ts
|
|
28
|
+
// CORRECT — auto-waits for the element to be actionable
|
|
29
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**2b. Manual non-retrying assertions**
|
|
33
|
+
```ts
|
|
34
|
+
// HIGH — snapshots one instant, no auto-retry
|
|
35
|
+
expect(await page.getByText('welcome').isVisible()).toBe(true);
|
|
36
|
+
```
|
|
37
|
+
Web-first assertions retry until the condition holds or the timeout expires:
|
|
38
|
+
```ts
|
|
39
|
+
// CORRECT
|
|
40
|
+
await expect(page.getByText('welcome')).toBeVisible();
|
|
41
|
+
```
|
|
42
|
+
Flag any `expect(await ...)` wrapping `isVisible()`, `textContent()`, `innerText()`, `count()`, `getAttribute()` as HIGH.
|
|
43
|
+
|
|
44
|
+
**2c. Network-idle as a synchronization crutch**
|
|
45
|
+
```ts
|
|
46
|
+
// MEDIUM — fragile under analytics, polling, websockets
|
|
47
|
+
await page.waitForLoadState('networkidle');
|
|
48
|
+
```
|
|
49
|
+
`networkidle` is discouraged for general synchronization. Wait on the specific signal instead:
|
|
50
|
+
```ts
|
|
51
|
+
await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
|
|
52
|
+
// or
|
|
53
|
+
await page.waitForResponse(r => r.url().includes('/api/orders') && r.ok());
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Step 3 — Selector brittleness audit
|
|
57
|
+
|
|
58
|
+
Review the locator strategy in every spec and page object.
|
|
59
|
+
|
|
60
|
+
| Locator pattern | Verdict | Why |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `getByRole`, `getByLabel`, `getByText`, `getByTestId` | preferred | resilient to refactor; user- or contract-facing |
|
|
63
|
+
| `data-testid` CSS (`[data-testid="x"]`) | acceptable | stable contract, but `getByTestId` is clearer |
|
|
64
|
+
| deep CSS chain (`div > div:nth-child(3) .btn`) | HIGH | breaks on any layout change |
|
|
65
|
+
| hashed/generated class (`.css-1a2b3c`, `.MuiBox-root`) | HIGH | regenerated on every build |
|
|
66
|
+
| raw XPath (`//div[2]/span`) | HIGH | brittle, hard to read |
|
|
67
|
+
| `nth()` / index-based selection on dynamic lists | MEDIUM | breaks when list order or length changes |
|
|
68
|
+
|
|
69
|
+
Flag each HIGH locator with the spec file and the recommended role/label/test-id replacement.
|
|
70
|
+
|
|
71
|
+
### Step 4 — Test isolation audit
|
|
72
|
+
|
|
73
|
+
Verify each test is independent and order-free.
|
|
74
|
+
|
|
75
|
+
Check for:
|
|
76
|
+
- Module-level mutable variables written by one `test()` and read by another → HIGH
|
|
77
|
+
- A test that creates a record (user, order) consumed by a later test → HIGH (breaks under sharding and `--shuffle`)
|
|
78
|
+
- `test.describe.serial()` used to paper over a shared-state dependency rather than for a genuine sequential flow → HIGH
|
|
79
|
+
- `beforeAll` performing mutable setup that tests then modify without reset → MEDIUM
|
|
80
|
+
- Shared `storageState` file written to by tests → MEDIUM (cross-test auth contamination)
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
// HIGH — test B depends on test A's side effect
|
|
84
|
+
let createdOrderId;
|
|
85
|
+
test('creates order', async () => { createdOrderId = await createOrder(); });
|
|
86
|
+
test('views order', async () => { await page.goto(`/orders/${createdOrderId}`); });
|
|
87
|
+
|
|
88
|
+
// CORRECT — each test owns its data via a fixture
|
|
89
|
+
test('views order', async ({ orderFixture }) => {
|
|
90
|
+
await page.goto(`/orders/${orderFixture.id}`);
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Step 5 — Retry and observability audit
|
|
95
|
+
|
|
96
|
+
Review `retries`, `trace`, `screenshot`, `video` in `playwright.config`.
|
|
97
|
+
|
|
98
|
+
- `retries > 0` in CI with no flaky surfacing (no `trace: 'on-first-retry'`, no flaky reporter, no quarantine list) → HIGH. Retries are a buffer to *fix* flakes, not to *hide* them. A test that only passes on retry must be visible and tracked.
|
|
99
|
+
- `trace`, `screenshot`, and `video` all `'off'` for the CI project → HIGH. A CI-only failure with zero artifacts is undebuggable; engineers re-run blindly.
|
|
100
|
+
- Recommended CI baseline:
|
|
101
|
+
```ts
|
|
102
|
+
export default defineConfig({
|
|
103
|
+
retries: process.env.CI ? 2 : 0,
|
|
104
|
+
use: {
|
|
105
|
+
trace: 'on-first-retry',
|
|
106
|
+
screenshot: 'only-on-failure',
|
|
107
|
+
video: 'retain-on-failure',
|
|
108
|
+
},
|
|
109
|
+
reporter: [['html'], ['github']],
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Step 6 — CI configuration audit
|
|
114
|
+
|
|
115
|
+
Review parallelism, sharding, and timeouts.
|
|
116
|
+
|
|
117
|
+
- `fullyParallel: false` without a stated reason → MEDIUM (serial execution blocks deploys).
|
|
118
|
+
- A large suite running in a single CI job with no `--shard` matrix → MEDIUM. Recommend a shard matrix:
|
|
119
|
+
```yaml
|
|
120
|
+
strategy:
|
|
121
|
+
matrix:
|
|
122
|
+
shard: [1/4, 2/4, 3/4, 4/4]
|
|
123
|
+
steps:
|
|
124
|
+
- run: npx playwright test --shard=${{ matrix.shard }}
|
|
125
|
+
```
|
|
126
|
+
- Global `timeout` or `expect.timeout` raised far above default to force a pass → MEDIUM. The raised timeout masks a real slow path or race; flag the underlying cause.
|
|
127
|
+
- `workers` pinned to 1 in CI without justification → MEDIUM.
|
|
128
|
+
- No `--forbid-only` (or equivalent) in CI → MEDIUM: a stray `test.only` silently skips the rest of the suite.
|
|
129
|
+
|
|
130
|
+
### Step 7 — Produce the output
|
|
131
|
+
|
|
132
|
+
Format findings using the Output section below.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Output
|
|
137
|
+
|
|
138
|
+
Return findings in this structure:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
## Verdict
|
|
142
|
+
<one sentence: pass / needs work / critical issues found>
|
|
143
|
+
|
|
144
|
+
## Evidence level
|
|
145
|
+
<spec and config provided | partial artifacts | documentation-based | inference>
|
|
146
|
+
|
|
147
|
+
## Findings
|
|
148
|
+
|
|
149
|
+
### CRITICAL
|
|
150
|
+
- [C1] <finding title>: <description> — <remediation>
|
|
151
|
+
|
|
152
|
+
### HIGH
|
|
153
|
+
- [H1] <finding title>: <description> — <remediation>
|
|
154
|
+
|
|
155
|
+
### MEDIUM
|
|
156
|
+
- [M1] <finding title>: <description> — <remediation>
|
|
157
|
+
|
|
158
|
+
### LOW
|
|
159
|
+
- [L1] <finding title>: <description> — <remediation>
|
|
160
|
+
|
|
161
|
+
## Safe next actions
|
|
162
|
+
1. <action>
|
|
163
|
+
2. <action>
|
|
164
|
+
|
|
165
|
+
## Open questions
|
|
166
|
+
- <question requiring user clarification>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Security notes
|
|
172
|
+
|
|
173
|
+
- Never request or accept live application URLs with embedded credentials, bearer tokens, real `storageState.json`, or `.env` contents. Ask for sanitized snippets.
|
|
174
|
+
- This is a static review: do not run `npx playwright test`, launch browsers, or contact the application under test.
|
|
175
|
+
- Do not recommend `.skip()` or deleting a flaky test as the fix — every flaky test needs a root-cause category (race, hard wait, shared state, brittle selector) and a quarantine/tracking path so it is fixed, not buried.
|
|
176
|
+
- Do not recommend raising timeouts or adding retries to make a suite "go green" — both mask defects the review exists to surface.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plc-control-logic-safety-review
|
|
3
|
+
description: Use this skill when reviewing exported PLC program logic (Ladder Diagram, Structured Text, Function Block Diagram, or Sequential Function Chart) for safety and reliability defects. Trigger when a user provides exported IEC 61131-3 program source, an I/O list, a safety requirements spec, a SIL assessment, or asks whether their PLC logic has a safe state, a correct E-stop implementation, unresolved latches, forced I/O, or interlock bypass risks. This is OT/ICS — defects injure people or destroy equipment. The skill performs static review only; it never connects to a live PLC, never writes to a controller, and never advises modifying running logic or bypassing a safety function.
|
|
4
|
+
allowed-tools: Read Grep Glob
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-17"
|
|
9
|
+
category: resilience
|
|
10
|
+
lifecycle: experimental
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PLC Control Logic Safety Review
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
This skill statically reviews exported IEC 61131-3 PLC program logic for safety and reliability defects before that logic reaches a live controller. In operational technology (OT) and industrial control systems (ICS), a logic defect that would be a bug in enterprise software can injure people, destroy equipment, or trigger a process shutdown with downstream consequences measured in hours of downtime or lives at risk. The review covers E-stop and safety function implementation, output fail-safe behavior, latch integrity, memory-write races, forced I/O left in production exports, interlock bypass governance, timer determinism, watchdog coverage, and input-validation gaps. It never touches a live controller, never modifies logic, and never advises weakening a safety function.
|
|
17
|
+
|
|
18
|
+
## Lean operating rules
|
|
19
|
+
- E-stop or safety function implemented in standard-PLC software logic instead of a hardwired, fail-safe safety relay or a safety-rated PLC/SIL-rated controller — CRITICAL (violates IEC 60204-1 / IEC 61508; a scan fault, firmware bug, or communications loss can defeat a software-only E-stop).
|
|
20
|
+
- An output coil that can be energized but has no reachable path to de-energize on fault, communications loss, or PLC STOP/mode change — CRITICAL (remote I/O modules may hold last state on network dropout; a stuck energized output can sustain hazardous motion or heat).
|
|
21
|
+
- A latch (SET coil, SR block, retentive coil) with no reachable RESET anywhere in the program, or a RESET gated behind a condition that can never evaluate TRUE — HIGH (output permanently energized; no operator recovery path without forcing).
|
|
22
|
+
- The same output bit, memory flag, or output coil address written by more than one rung, task, or Program Organization Unit (POU) within a single scan cycle — HIGH (last-write-wins race; behavior is non-deterministic and scan-order dependent).
|
|
23
|
+
- Forced I/O values or commissioning force-tables present in the exported program file — HIGH (commissioning state or debug override shipped to production; control loop sees forced value, not the live field sensor).
|
|
24
|
+
- An interlock bypass or maintenance-override bit with no time limit enforced in logic and no supervisor key-switch, credential gate, or logged acknowledgment — HIGH (silent, indefinite defeat of a safety interlock; not compliant with IEC 62443-3-3 SR 2.12 and typical SIF management procedures).
|
|
25
|
+
- Timer or counter logic whose numerical correctness depends on scan-cycle duration rather than an explicit, hardware-referenced real-time base (e.g., incrementing a counter in every scan and comparing to a literal count instead of using a TON/TOF with a PT in milliseconds) — HIGH (breaks when scan time changes under load, program additions, or firmware upgrade).
|
|
26
|
+
- No watchdog output and no defined fail-safe default output state documented or implemented for communications loss with remote I/O or a supervisory system (SCADA/DCS) — HIGH (silent loss of supervision; outputs may hold indefinitely in an unsafe energized state).
|
|
27
|
+
- Division, array indexing, or type conversion applied to a process value or network-received value that has not been validated for range — MEDIUM (integer divide-by-zero or out-of-bounds array access causes a scan fault and PLC halt in most runtimes, transitioning to a potentially undefined output state).
|
|
28
|
+
- Rung, network, or task execution priority that creates a correctness dependency undocumented in comments or a technical note — MEDIUM (maintainers and future modifications may break the assumed order silently).
|
|
29
|
+
- Do not recommend disabling, bypassing, or weakening any safety interlock, E-stop circuit, or SIF — refuse the request and explain the IEC 61508 and IEC 60204-1 basis for the refusal.
|
|
30
|
+
- Label every finding with its evidence basis: exported logic provided, I/O list provided, documentation-based, or inference from absent configuration.
|
|
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
|
+
- Safety function and E-stop implementation findings (hardwired vs. software; SIL-rated controller vs. standard PLC)
|
|
39
|
+
- Output fail-safe and de-energization path analysis
|
|
40
|
+
- Latch/SET-RESET integrity findings
|
|
41
|
+
- Memory-write race findings (multiple writers to same address)
|
|
42
|
+
- Forced I/O and commissioning override findings
|
|
43
|
+
- Interlock bypass governance findings
|
|
44
|
+
- Timer and watchdog determinism findings
|
|
45
|
+
- Input validation findings (division, array, type conversion on unvalidated values)
|
|
46
|
+
- Severity-labelled finding list (critical / high / medium / low)
|
|
47
|
+
- Safe next actions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "plc-control-logic-safety-review",
|
|
3
|
+
"name": "PLC Control Logic Safety Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "generic",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Statically review exported IEC 61131-3 PLC program logic (LD, ST, FBD, SFC) for safety and reliability defects — E-stop implementation, output fail-safe paths, latch integrity, memory-write races, forced I/O, interlock bypass governance, timer determinism, and watchdog coverage — without connecting to a live controller.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://plcopen.org/iec-61131-3",
|
|
11
|
+
"https://webstore.iec.ch/publication/4552",
|
|
12
|
+
"https://webstore.iec.ch/publication/22273",
|
|
13
|
+
"https://webstore.iec.ch/publication/26037",
|
|
14
|
+
"https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_structure_application_objects.html"
|
|
15
|
+
],
|
|
16
|
+
"security_notes": "Static review only — reads exported program logic, never connects to a live PLC, never writes to a controller, and never advises modifying running logic or bypassing a safety function. Never request or accept live controller IP addresses, plant network credentials, historian credentials, or any identifier that maps to a production asset. Ask for sanitized, anonymized exports only.",
|
|
17
|
+
"last_verified": "2026-05-17",
|
|
18
|
+
"path": "skills/qa/plc-control-logic-safety-review",
|
|
19
|
+
"author": "github: Raishin",
|
|
20
|
+
"version": "0.1.0"
|
|
21
|
+
}
|