github Python re-analysis due deep scan · partial (340/7,343 files)

r3dz4r/datapulse-my

github

Open-source trust & interoperability layer for Malaysian public data: freshness monitoring, schema validation, and health reports for official datasets.

maintainer
r3dz4r
licence
MIT
first seen
2026-08-03
last seen
2026-09-19
releases · 30d
42
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  2. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  3. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  4. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  5. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  6. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  7. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  8. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  9. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  10. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  11. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  12. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  13. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  14. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  15. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  16. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  17. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  18. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  19. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
  20. HIGH code analysis flagged dynamic code execution in r3dz4r/datapulse-my
capabilities 18 tools
transport streamable-http · http verified reported listed in the official MCP registry counts 18 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • _check_reconciliation_tool
  • _find_anomalies_tool
  • _find_deteriorating_tool
  • _find_recovering_tool
  • _find_schema_drift_tool
  • _find_stale_tool
  • _find_unreliable_tool
  • _get_evidence_tool
  • _get_freshness_summary_tool
  • _trust_verdict_tool
  • _verify_attestation_tool
  • _verify_dataset_tool
  • _verify_evidence_tool
  • find_by_licence
  • get_data_passport
  • get_dataset
  • get_provenance
  • search_datasets
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 8f132ad · analyzer v33 · 15m ago

skills & prompt files 6

danger signals2

code evidence vv3.28.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 306

filesystem 209

  • fs r3dz4r-datapulse-my-8f132ad/api/config.py :6 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/api/keys.py :5 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/api/server.py :13 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/mcp/agent_task_suite.py :17 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/mcp/answerability_benchmark.py :14 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/mcp/score_agent_trace.py :9 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/mcp/server.py :14 import shutil
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_agent_task_suite.py :7 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_answerability_benchmark.py :7 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_citation_resource.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_data_passport.py :6 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_freshness_summary.py :7 from pathlib import Path
show 28 more
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_source_stamp.py :7 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_three_call_path.py :6 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_mcp_verify_dataset.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_score_agent_trace.py :8 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_server.py :17 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_verification_benchmark.py :6 from pathlib import Path
  • fs r3dz4r-datapulse-my-8f132ad/mcp/verification_benchmark.py :12 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/_detect_unknown_freshness.py :8 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/api_keys.py :6 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/audit_freshness_semantics.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/audit_mcpgrade_parse.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/bump_mcp_source_version.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/check.py :9 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/check_heartbeat.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/check_url_drift.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/compare_health.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/embed_dashboard_data.py :14 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/evidence_graph.py :10 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/fact_lint.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_ai_catalog.py :13 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_anomaly.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_api_reference.py :8 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_as_of.py :11 import shutil
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_attestations.py :6 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_catalog_graph.py :15 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_catalog_snapshot.py :11 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_dashboard_filters.py :7 from pathlib import Path
  • fs (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_dashboard_sections.py :14 from pathlib import Path

169 more not shown — this panel samples each group; the count above is the real total.

shell / exec 101

  • shell r3dz4r-datapulse-my-8f132ad/mcp/server.py :15 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_server.py :13 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/_detect_unknown_freshness.py :6 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/bump_mcp_source_version.py :8 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/check.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_ai_catalog.py :12 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_as_of.py :12 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_attestations.py :85 anchors = {}; result = subprocess.run(["git", "tag", "--list", "v[0-9]*"], cwd=root, text=True, capture_output=True)
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_health_methodology.py :8 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_health_methodology_html.py :10 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_trust_snapshot.py :11 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/probe_gtfs.py :11 import subprocess
show 28 more
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/reconcile_registry_status.py :22 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/release_identity.py :14 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/run_health_canary.py :9 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/sign_per_dataset_receipts.py :10 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/sigstore_rekor_publisher.py :20 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/generator_harness.py :8 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_attestation_rekor_wiring.py :8 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_audit_freshness_semantics.py :6 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_audit_mcpgrade.py :6 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_badge_generation.py :4 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_cadence_classification.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_cadence_lint.py :3 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_classify_change.py :5 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_dashboard.py :3 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_datacontract_validation.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_dataset_deltas.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_deploy_cloudflare_pages_contract.py :9 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_discontinued_status.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_drift.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_embed_dashboard_data_shell.py :7 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_evidence_coverage.py :6 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_extract_content_freshness.py :2 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_extract_parquet_freshness.py :2 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_extract_pdf_freshness.py :2 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_fact_lint_claims.py :9 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_gen_ai_catalog.py :6 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_gen_as_of.py :5 import subprocess
  • shell (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_gen_data_reports.py :8 import subprocess

61 more not shown — this panel samples each group; the count above is the real total.

network 35

  • net r3dz4r-datapulse-my-8f132ad/api/server.py :15 from urllib.parse import parse_qs, urlparse
  • net r3dz4r-datapulse-my-8f132ad/mcp/server.py :24 from urllib.parse import urljoin, urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/mcp/tests/test_server.py :12 import httpx
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/_detect_unknown_freshness.py :9 from urllib.parse import parse_qs, urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/fact_lint.py :13 from urllib.parse import urlparse
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_dashboard_sections.py :12 import urllib.error
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_json_envelope.py :15 import urllib.request
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_landing_page.py :13 from urllib.parse import urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_reconciliation.py :17 from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_record_evidence.py :21 import httpx
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/gen_register_page.py :14 from urllib.parse import urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/observation_pilot.py :83 from urllib.error import HTTPError, URLError
show 23 more
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/observation_receipt.py :44 import socket
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/probe_arcgis.py :10 import socket
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/public_surface_generation.py :13 from urllib.parse import urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/publish_health_index.py :26 from urllib.parse import quote, urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/reconcile_registry_status.py :26 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/rekor_consistency_proxy.py :14 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/sigstore_rekor_publisher.py :25 from urllib.parse import urlsplit
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/st_energy_adapter.py :15 from urllib.parse import urlencode, urljoin, urlparse
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/fixtures/generator/python_release/mcp/server.py :13 import httpx
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_gen_json_envelope.py :199 monkeypatch.setattr(envelope.urllib.request, "urlopen", urlopen)
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_mcp_source_sync.py :9 import socket
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_notebook_examples.py :6 import requests
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_observation_receipt.py :15 import socket
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_rekor_consistency_proxy.py :9 from urllib.error import HTTPError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/tests/test_verify_local_public_parity.py :8 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_ai_catalog.py :12 from urllib.parse import urlparse
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_external.py :17 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_local_public_parity.py :16 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_mcp_deployment.py :12 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_registry_distribution.py :21 from urllib.error import HTTPError, URLError
  • net (weak) r3dz4r-datapulse-my-8f132ad/scripts/verify_svg_namespace.py :10 from urllib.parse import urlparse
  • net r3dz4r-datapulse-my-8f132ad/sg/probe_sg_datagov.py :16 import httpx
  • net (weak) r3dz4r-datapulse-my-8f132ad/sg/tests/test_probe_sg_datagov.py :8 import httpx

secrets 1

  • secrets r3dz4r-datapulse-my-8f132ad/sg/probe_sg_datagov.py :58 if api_key := os.getenv("SG_DATAGOV_API_KEY"):

database 2

  • db (weak) r3dz4r-datapulse-my-8f132ad/scripts/observation_pilot.py :76 import sqlite3
  • db (weak) r3dz4r-datapulse-my-8f132ad/scripts/observation_store.py :26 import sqlite3

tool registrations 18

  • search_datasets r3dz4r-datapulse-my-8f132ad/mcp/server.py :897
  • get_dataset r3dz4r-datapulse-my-8f132ad/mcp/server.py :986
  • get_data_passport r3dz4r-datapulse-my-8f132ad/mcp/server.py :1064
  • _find_stale_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1182
  • _find_anomalies_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1325
  • _find_deteriorating_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1424
  • _find_recovering_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1452
  • _find_unreliable_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1547
  • _find_schema_drift_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1591
  • _check_reconciliation_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1638
  • get_provenance r3dz4r-datapulse-my-8f132ad/mcp/server.py :1641
  • _get_evidence_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1740
show 6 more
  • _verify_dataset_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1879
  • _get_freshness_summary_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :1909
  • _verify_evidence_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :2023
  • _trust_verdict_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :2073
  • _verify_attestation_tool r3dz4r-datapulse-my-8f132ad/mcp/server.py :2149
  • find_by_licence r3dz4r-datapulse-my-8f132ad/mcp/server.py :2152

declared dependencies 4

  • gtfs-realtime-bindings@==2.2.0
  • httpx@==0.28.1
  • pyarrow@>=15.0.0,<20.0.0
  • pdfplumber@>=0.10,<1.0