CtrlK
BlogDocsLog inGet started
Tessl Logo

golikovichev/secure-log2test

Turn a Kibana JSON log export into a runnable pytest suite using the secure-log2test CLI. Use when the user has a Kibana or Elasticsearch JSON export of API traffic and wants a regression suite from production logs, when extracting test cases from staging traffic, when scrubbing auth headers or secret-looking body fields before logs leave the laptop, when bridging Kibana-captured requests into a pytest-based suite for CI, when the user mentions Kibana logs, Elasticsearch JSON export, log-to-test conversion, log replay tests, auth header redaction, PII in logs, or regression tests from production traffic.

92

1.00x
Quality

100%

Does it follow best practices?

Impact

93%

1.00x

Average score across 2 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-2/

{
  "context": "Tests whether the agent uses the --redact-marker flag to produce [SCRUBBED] placeholders, verifies the generated file is self-contained with only the expected imports, checks that test names follow the slug+index naming convention, confirms requests.request() is used with timeout=10 and correct body arguments (json= vs data=), and verifies repr() escaping is used for log-derived values.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Custom redact marker used",
      "description": "The generated file contains the string '[SCRUBBED]' (the custom marker passed via --redact-marker)",
      "max_score": 12
    },
    {
      "name": "Default marker absent",
      "description": "The generated file does NOT contain the string '***REDACTED***' (the default marker)",
      "max_score": 8
    },
    {
      "name": "Self-contained imports",
      "description": "The generated file imports only os, pytest, and requests — no other third-party or internal imports appear",
      "max_score": 10
    },
    {
      "name": "No conftest required",
      "description": "The generated file does not reference or require conftest.py (no fixture imports, no conftest-dependent fixtures in the test functions)",
      "max_score": 8
    },
    {
      "name": "requests.request() call form",
      "description": "Each generated test uses requests.request(method=..., url=BASE_URL + ...) — not requests.get/post/put/etc.",
      "max_score": 10
    },
    {
      "name": "timeout=10 present",
      "description": "Each requests.request() call includes timeout=10",
      "max_score": 8
    },
    {
      "name": "Status code assertion",
      "description": "Each test asserts response.status_code == <status from the log entry>",
      "max_score": 8
    },
    {
      "name": "json= for dict body",
      "description": "At least one test passes the dict/JSON body via the json= keyword argument (not data=)",
      "max_score": 8
    },
    {
      "name": "data= for string body",
      "description": "At least one test passes the plain-text body via the data= keyword argument (not json=)",
      "max_score": 8
    },
    {
      "name": "Slug+index function names",
      "description": "Test function names follow the pattern test_<method_slug>_<url_slug>_<index> with a numeric suffix disambiguator (e.g. test_post_api_v1_users_1)",
      "max_score": 10
    },
    {
      "name": "repr() escaping",
      "description": "Log-derived string values (URLs, method names, header values, body strings) appear inside repr() calls or as quoted Python literals in the generated source — not as raw unescaped strings",
      "max_score": 10
    }
  ]
}

CHANGELOG.md

CONTRIBUTING.md

README.md

REFERENCE.md

RELEASING.md

requirements.txt

SECURITY.md

SKILL.md

tessl.json

tile.json