Files
breakpilot-compliance/scripts/qa/delete_gpsr_prod.py
T
Benjamin Admin 5f8009e844
CI / detect-changes (pull_request) Successful in 8s
CI / branch-name (pull_request) Successful in 1s
CI / guardrail-integrity (pull_request) Successful in 5s
CI / secret-scan (pull_request) Successful in 6s
CI / dep-audit (pull_request) Failing after 54s
CI / sbom-scan (pull_request) Failing after 1m3s
CI / build-sha-integrity (pull_request) Successful in 5s
CI / validate-canonical-controls (pull_request) Successful in 4s
CI / loc-budget (pull_request) Successful in 17s
CI / go-lint (pull_request) Failing after 13s
CI / python-lint (pull_request) Failing after 13s
CI / nodejs-lint (pull_request) Failing after 1m8s
CI / nodejs-build (pull_request) Successful in 3m0s
CI / test-go (pull_request) Successful in 1m0s
CI / iace-gt-coverage (pull_request) Successful in 22s
CI / test-python-backend (pull_request) Successful in 30s
CI / test-python-document-crawler (pull_request) Successful in 13s
CI / test-python-dsms-gateway (pull_request) Successful in 16s
fix(security): remove hardcoded Qdrant key + allowlist doc false-positives
secret-scan (gitleaks) had never run on a PR (broken checkout). A real Qdrant dev API key was hardcoded in 4 pre-existing files; removed in favour of env / gitea-secret references (scripts read QDRANT_API_KEY from os.environ; rag-ingest workflow references a gitea Actions secret). The remaining ~52 findings are doc curl examples + .env.example placeholders + a rule_key identifier, allowlisted in .gitleaks.toml (default ruleset kept). gitleaks now reports 0 findings.

ACTION REQUIRED: rotate the Qdrant dev API key — the leaked value is in git history.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-21 14:37:54 +02:00

29 lines
985 B
Python

"""Delete eu_2023_988 duplicate from production Qdrant."""
import httpx
import os
PROD_URL = "https://qdrant-dev.breakpilot.ai"
HEADERS = {"api-key": os.environ.get("QDRANT_API_KEY", "")}
# Delete
resp = httpx.post(
f"{PROD_URL}/collections/bp_compliance_ce/points/delete",
json={"filter": {"must": [{"key": "regulation_id", "match": {"value": "eu_2023_988"}}]}},
headers=HEADERS, timeout=60,
)
print(f"Delete status: {resp.json().get('status')}")
# Verify
resp2 = httpx.post(
f"{PROD_URL}/collections/bp_compliance_ce/points/count",
json={"filter": {"must": [{"key": "regulation_id", "match": {"value": "eu_2023_988"}}]}, "exact": True},
headers=HEADERS, timeout=15,
)
remaining = resp2.json().get("result", {}).get("count", 0)
print(f"Remaining: {remaining}")
# Total
resp3 = httpx.get(f"{PROD_URL}/collections/bp_compliance_ce", headers=HEADERS, timeout=10)
total = resp3.json().get("result", {}).get("points_count", "?")
print(f"Total points: {total}")