

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456# DevSecOps — Copilot Instructions78> Applied automatically when working with CI/CD workflows, Dockerfiles, docker-compose files, and security configuration. Loaded alongside copilot-instructions.md.910---1112## Security Gate Sequence1314Every CI/CD pipeline must enforce security gates in this order. A failure at any gate **blocks the pipeline** — gates are not advisory.1516```17[ Build ] → [ SAST ] → [ Dependency Check ] → [ Container Scan ] → [ Secrets Scan ] → [ DAST ] → [ SBOM ] → [ OPA Policy ] → [ Deploy ]18```1920| Gate | Tool | Failure Threshold | Stage |21|------|------|------------------|-------|22| SAST | Semgrep (rules: p/java, p/python, p/secrets) | Any CRITICAL or HIGH finding | Pre-merge |23| Dependency check | OWASP Dependency-Check 9.x, `mvn dependency-check:check` | CVSS ≥ 7.0 (HIGH) | Pre-merge |24| Container image scan | Trivy 0.50+ | CRITICAL = fail, HIGH = warning | Pre-merge |25| Secrets scan | Gitleaks 8.x | Any secret detected | Pre-commit + pre-merge |26| DAST | OWASP ZAP 2.14 (baseline scan) | Any CRITICAL or HIGH alert | Post-deploy to staging |27| SBOM generation | CycloneDX (Maven) / Syft (containers) | Missing SBOM = fail deploy | Pre-deploy |28| OPA policy | OPA 0.60 + Rego policies in `security/opa/policies/` | Any deny rule fires | Pre-deploy |2930---3132## SAST — Semgrep Configuration3334`.semgrep.yml` at repo root:3536```yaml37rules:38 - id: no-sql-injection39 pattern: $STMT.execute($INPUT + ...)40 message: "SQL injection risk — use parameterized queries"41 severity: ERROR42 languages: [java]4344# Run in CI:45# semgrep --config=p/java --config=p/python --config=p/secrets \46# --error --json --output=semgrep-results.json .47# Fail on exit code 1 (findings present)48```4950GitHub Actions step:5152```yaml53- name: SAST — Semgrep54 uses: returntocorp/semgrep-action@v155 with:56 config: >-57 p/java58 p/python59 p/secrets60 p/owasp-top-ten61 env:62 SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}63```6465---6667## Dependency Vulnerability Check6869### Maven (Java)7071```xml72<!-- pom.xml — add to build/plugins -->73<plugin>74 <groupId>org.owasp</groupId>75 <artifactId>dependency-check-maven</artifactId>76 <version>9.0.9</version>77 <configuration>78 <failBuildOnCVSS>7</failBuildOnCVSS>79 <suppressionFiles>80 <suppressionFile>security/dependency-check-suppression.xml</suppressionFile>81 </suppressionFiles>82 <format>JSON</format>83 <outputDirectory>${project.build.directory}/security</outputDirectory>84 </configuration>85 <executions>86 <execution>87 <goals><goal>check</goal></goals>88 </execution>89 </executions>90</plugin>91```9293### Python9495```bash96# pip-audit: audits against PyPA Advisory Database97pip-audit --requirement requirements.txt --format json --output audit-results.json98# Fail on CVSS >= 7.099pip-audit --requirement requirements.txt --vulnerability-service pypa --fail-on MEDIUM100```101102### Suppression Process103104CVE suppressions in `security/dependency-check-suppression.xml` must include:105- The CVE ID106- Justification: why the vulnerability is not exploitable in this context107- Expiry date (max 90 days)108- Approver name109110---111112## Container Scanning — Trivy113114```bash115# Scan image — fail on CRITICAL, warn on HIGH116trivy image \117 --severity CRITICAL,HIGH \118 --exit-code 1 \119 --format sarif \120 --output trivy-results.sarif \121 --ignore-unfixed \122 myregistry.azurecr.io/myservice:${GIT_SHA}123124# Scan Dockerfile for misconfigurations125trivy config \126 --severity HIGH,CRITICAL \127 --exit-code 1 \128 Dockerfile129```130131### Severity Thresholds132133| Severity | Pipeline Action |134|----------|----------------|135| CRITICAL | Build fails — must be patched before merge |136| HIGH | Build warning — must be resolved within 7 days; tracked in security backlog |137| MEDIUM | Logged only — review quarterly |138| LOW/NEGLIGIBLE | Suppressed |139140### Dockerfile Security Standards141142```dockerfile143# REQUIRED: Use a specific digest, not a floating tag144FROM eclipse-temurin:21.0.4_7-jre-jammy@sha256:abc123def456...145146# REQUIRED: Run as non-root user147RUN groupadd -r appuser && useradd -r -g appuser appuser148USER appuser149150# REQUIRED: No secrets in ENV or ARG151# WRONG: ENV DATABASE_PASSWORD=secret123152# RIGHT: Read from AWS Secrets Manager at runtime153154# REQUIRED: Read-only root filesystem where possible155# docker run --read-only ...156157# REQUIRED: Drop all capabilities158# docker run --cap-drop ALL --cap-add NET_BIND_SERVICE ...159160# Minimise layers — combine RUN commands161RUN apt-get update && apt-get install -y --no-install-recommends \162 curl=7.88.1-* \163 && rm -rf /var/lib/apt/lists/*164```165166---167168## Secrets Detection — Gitleaks169170`gitleaks.toml` at repo root:171172```toml173[extend]174useDefault = true175176[[rules]]177id = "aws-access-key"178description = "AWS Access Key ID"179regex = '''(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}'''180tags = ["key", "AWS"]181182[[rules]]183id = "internal-api-token"184description = "Internal API token pattern"185regex = '''ent_[a-zA-Z0-9]{32,}'''186tags = ["token", "internal"]187188[allowlist]189description = "Test fixtures and known safe values"190paths = [191 '''src/test/resources/.*''',192 '''\.github/workflows/.*''' # GitHub Actions uses ${{ secrets.X }} — not real values193]194```195196Pre-commit hook (add to `.git/hooks/pre-commit`):197198```bash199#!/bin/bash200gitleaks protect --staged --config=gitleaks.toml --redact201if [ $? -ne 0 ]; then202 echo "ERROR: Secrets detected. Remove secrets before committing."203 exit 1204fi205```206207---208209## SBOM — Software Bill of Materials210211### CycloneDX for Maven212213```xml214<!-- pom.xml -->215<plugin>216 <groupId>org.cyclonedx</groupId>217 <artifactId>cyclonedx-maven-plugin</artifactId>218 <version>2.7.11</version>219 <executions>220 <execution>221 <phase>package</phase>222 <goals><goal>makeAggregateBom</goal></goals>223 </execution>224 </executions>225 <configuration>226 <projectType>library</projectType>227 <schemaVersion>1.5</schemaVersion>228 <includeBomSerialNumber>true</includeBomSerialNumber>229 <includeCompileScope>true</includeCompileScope>230 <includeTestScope>false</includeTestScope>231 <outputFormat>json</outputFormat>232 <outputName>bom</outputName>233 </configuration>234</plugin>235```236237### SPDX for Containers (Syft)238239```bash240# Generate SPDX SBOM from container image241syft myregistry.azurecr.io/myservice:${GIT_SHA} \242 --output spdx-json \243 --file sbom-container.spdx.json244245# Attach SBOM to OCI image (cosign)246cosign attach sbom \247 --sbom sbom-container.spdx.json \248 --type spdx \249 myregistry.azurecr.io/myservice:${GIT_SHA}250```251252SBOMs must be stored in S3: `s3://enterprise-sbom-store/{service-name}/{git-sha}/bom.json`.253254---255256## SLSA Level 2 Requirements257258All production container images must meet SLSA Level 2:259260| Requirement | Implementation |261|------------|---------------|262| Hosted build platform | GitHub Actions (not self-hosted runners for production builds) |263| Scripted build | No manual steps; all in `build.yml` |264| Build provenance generated | `actions/attest-build-provenance@v1` |265| Provenance signed | Sigstore/Cosign via GitHub OIDC |266267```yaml268# .github/workflows/build.yml269- name: Generate SLSA provenance270 uses: actions/attest-build-provenance@v1271 with:272 subject-name: myregistry.azurecr.io/myservice273 subject-digest: ${{ steps.build.outputs.digest }}274 push-to-registry: true275```276277Verify provenance before deploy:278279```bash280cosign verify-attestation \281 --type slsaprovenance \282 --certificate-identity-regexp "https://github.com/enterprise-org/.*" \283 --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \284 myregistry.azurecr.io/myservice:${GIT_SHA}285```286287---288289## DAST — OWASP ZAP290291```yaml292# .github/workflows/dast.yml — runs against staging only293- name: OWASP ZAP Baseline Scan294 uses: zaproxy/action-baseline@v0.12.0295 with:296 target: 'https://staging.internal.enterprise.com'297 rules_file_name: 'security/zap-rules.tsv'298 cmd_options: '-a -j' # -a: include alpha rules; -j: use Ajax spider299 fail_action: true # Fail on CRITICAL/HIGH300 env:301 ZAP_AUTH_HEADER: ${{ secrets.ZAP_AUTH_HEADER }}302```303304ZAP rules file `security/zap-rules.tsv`:305306```307# ID Action Parameters Name30810202 FAIL CWEID 1275 - Sensitive Cookie without SameSite Attribute30910021 FAIL X-Content-Type-Options Header Missing31010038 FAIL Content Security Policy (CSP) Header Not Set31190022 WARN Application Error Disclosure312```313314---315316## OPA/Rego Policy Files317318Policy files in `security/opa/policies/`:319320```rego321# security/opa/policies/container-policy.rego322package enterprise.container323324deny[msg] {325 not input.spec.securityContext.runAsNonRoot326 msg := "Containers must not run as root (runAsNonRoot: true)"327}328329deny[msg] {330 not input.spec.containers[_].resources.limits.cpu331 msg := "All containers must specify CPU limits"332}333334deny[msg] {335 input.spec.containers[_].image == _336 not regex.match(`^myregistry\.azurecr\.io/`, input.spec.containers[_].image)337 msg := sprintf("Image must be from approved registry: %v", [input.spec.containers[_].image])338}339```340341Evaluate in CI:342343```bash344opa eval \345 --input k8s-deployment.json \346 --data security/opa/policies/ \347 --format pretty \348 "data.enterprise.container.deny" | \349 python3 -c "import sys,json; findings=json.load(sys.stdin); sys.exit(1) if findings['result'][0]['expressions'][0]['value'] else sys.exit(0)"350```351352---353354## CVE Remediation Workflow355356When a CRITICAL or HIGH CVE is identified by Trivy or OWASP Dependency-Check:3573581. **Assess exploitability**: Is the vulnerable code path reachable from the application's attack surface?3592. **Patch or suppress**:360 - If exploitable: update the dependency; target fix within 24h (CRITICAL) or 7 days (HIGH)361 - If not exploitable: add a suppression entry with justification and 90-day expiry3623. **Open a Jira ticket** with label `security-vuln`, CVE ID, and CVSS score3634. **Link to pipeline failure** in the Jira ticket for traceability3645. **Exception process**: If patching is not possible within SLA, a formal risk acceptance must be approved by the CISO with a documented compensating control365366---367368## AWS Config Rules for Compliance369370Ensure these AWS Config Rules are enabled in all accounts:371372```bash373# Check that all Config rules pass — fail if any non-compliant374aws configservice describe-compliance-by-config-rule \375 --compliance-types NON_COMPLIANT \376 --query 'ComplianceByConfigRules[].ConfigRuleName' \377 --output text378379# Required rules:380# - s3-bucket-ssl-requests-only381# - encrypted-volumes382# - rds-storage-encrypted383# - guardduty-enabled-centralized384# - iam-no-inline-policy-check385# - root-mfa-enabled386# - vpc-flow-logs-enabled387```388
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| doubts-suplab/eeik-bootstrap.clinerules/golden-rules.md · 1 | Cline rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.clinerules/project.md · 1 | Cline rules | teststylegit | 63/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/architecture.mdc · 1 | Cursor rules | do-not | 52/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/capabilities.mdc · 1 | Cursor rules | teststylegit | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/golden-rules.mdc · 1 | Cursor rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/python.mdc · 1 | Cursor rules | lint-formatstyletypesapi+1 | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/security.mdc · 1 | Cursor rules | security | 39/100 | today | |
| doubts-suplab/eeik-bootstrap.github/copilot-instructions.md · 1 | Copilot instructions | lint-formatstyletesting-strategygit+2 | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/a2a-protocol.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/ai-governance.instructions.md · 1 | Copilot instructions | stylearchdo-notagent-behaviour | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/angular.instructions.md · 1 | Copilot instructions | teststyletypestesting-strategy+4 | 69/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/architecture-governance.instructions.md · 1 | Copilot instructions | testlint-formatstylegit+4 | 65/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/autogen.instructions.md · 1 | Copilot instructions | typessecurityagent-behaviour | 50/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-architecture.instructions.md · 1 | Copilot instructions | styletypessecurityperformance | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-data-ml-ai.instructions.md · 1 | Copilot instructions | deployment | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cdk-terraform.instructions.md · 1 | Copilot instructions | teststylearchtypes+2 | 96/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cicd.instructions.md · 1 | Copilot instructions | stylesecuritydeploymentdo-not+1 | 65/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/containerisation.instructions.md · 1 | Copilot instructions | buildstylesecuritydo-not | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/crewai.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/data-engineering.instructions.md · 1 | Copilot instructions | teststyletypesgit+5 | 69/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| HerringtonDarkholme/megarepo.github/copilot-instructions.md · 17 | Copilot instructions | setupbuildtestlint-format+7 | 100/100 | 14 days ago | |
| louislam/uptime-kuma.github/copilot-instructions.md · 90k | Copilot instructions | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| chihebnabil/lovable-boilerplate.github/instructions/global.instructions.md · 65 | Copilot instructions | buildlint-formatstylearch+4 | 100/100 | 14 days ago | |
| pytorch/pytorch.github/copilot-instructions.md · 102k | Copilot instructions | setupbuildteststyle+5 | 100/100 | 14 days ago | |
| JCodesMore/ai-website-cloner-template.github/copilot-instructions.md · 32k | Copilot instructions | buildlint-formatstylearch+3 | 97/100 | 7 days ago | |
| bagisto/bagisto.github/copilot-instructions.md · 28k | Copilot instructions | setupbuildteststyle+5 | 97/100 | 14 days ago | |
| hiyouga/LlamaFactory.github/copilot-instructions.md · 74k | Copilot instructions | setupbuildtestlint-format+5 | 97/100 | 13 days ago | |
| darkmatter/nixmac.github/copilot-instructions.md · 25 | Copilot instructions | setupbuildtestlint-format+8 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/doubts-suplab-eeik-bootstrap-github-instructions-devsecops-instructions)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.