{
  "checker": {
    "claims": [
      {
        "claim": "Multi-user rotation against RDS and RDS Proxy needs AWS Secrets Manager secrets and a reachable RDS database",
        "command": "",
        "evidence": "Requires AWS Secrets Manager secrets, an RDS/RDS Proxy PostgreSQL database and AWS credentials; none exist in this disposable guest (no AWS config, no docker, no database). Also the Lambda handler raises NonCopyableArgumentError in Container() before any AWS call (see probe.json).",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Requires AWS Secrets Manager secrets, an RDS/RDS Proxy PostgreSQL database and AWS credentials; none exist in this disposable guest (no AWS config, no docker, no database). Also the Lambda handler raises NonCopyableArgumentError in Container() before any AWS call (see probe.json).",
        "source": "Python script for multi-user password rotation using RDS and RDS",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README.md, pyproject.toml, setup.cfg, Dockerfile (CMD is the Lambda handler), src/rds_proxy_password_rotation entry points and .github workflows: no cron, loop, webhook, --once or --now trigger exists; rotation is invoked by AWS Secrets Manager rotation events.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README.md, pyproject.toml, setup.cfg, Dockerfile (CMD is the Lambda handler), src/rds_proxy_password_rotation entry points and .github workflows: no cron, loop, webhook, --once or --now trigger exists; rotation is invoked by AWS Secrets Manager rotation events.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "start",
          "details": {
            "argv": [
              "<guest-path>",
              "-I",
              "-c",
              "from rds_proxy_password_rotation.adapter.aws_lambda_function import lambda_handler\nlambda_handler({'Step':'create_secret','SecretId':'arn:aws:secretsmanager:eu-central-1:123456789012:secret:<secret>','ClientRequestToken':'0f1e2d3c-0000-4000-8000-000000000001','RotationToken':'tok'}, None)\nprint('HANDLER_OK')"
            ],
            "blocker": "an expected operation error cannot prove working behavior: {\"argv\": [\"<guest-path>\", \"-I\", \"-c\", \"from rds_proxy_password_rotation.adapter.aws_lambda_function import lambda_handler\\nlambda_handler({'Step':'create_secret','SecretId':'arn:aws:secretsmanager:eu-central-1:123456789012:secret:<secret>','ClientRequestToken':'0f1e2d3c-0000-4000-8000-000000000001','RotationToken':'tok'}, None)\\nprint('HANDLER_OK')\"], \"returncode\": 1, \"stdout\": \"\", \"stderr\": \"Traceback (most recent call last):\\n  File \\\"src/dependency_injector/providers.pyx\\\", line 4883, in dependency_injector.providers.deepcopy_kwargs\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 162, in deepcopy\\n    y = _reconstruct(x, memo, *rv)\\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 259, in _reconstruct\\n    state = deepcopy(state, memo)\\n            ^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 136, in deepcopy\\n    y = copier(x, memo)\\n        ^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 221, in _deepcopy_dict\\n    y[deepcopy(key, memo)] = deepcopy(value, memo)\\n                             ^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 162, in deepcopy\\n    y = _reconstruct(x, memo, *rv)\\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 259, in _reconstruct\\n    state = deepcopy(state, memo)\\n            ^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 136, in deepcopy\\n    y = copier(x, memo)\\n        ^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 221, in _deepcopy_dict\\n    y[deepcopy(key, memo)] = deepcopy(value, memo)\\n                             ^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 151, in deepcopy\\n    rv = reductor(4)\\n         ^^^^^^^^^^^\\nTypeError: cannot pickle '_thread.lock' object\\n\\nThe above exception was the direct cause of the following exception:\\n\\nTraceback (most recent call last):\\n  File \\\"<string>\\\", line 2, in <module>\\n  File \\\"<guest-path>\\\", line 140, in wrapper\\n    response = middleware()\\n               ^^^^^^^^^^^^\\n  File \\\"<guest-path>\\\", line 171, in event_parser\\n    return handler(parsed_event, context, **kwargs)\\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"<guest-path>\\\", line 18, in lambda_handler\\n    container = Container()\\n                ^^^^^^^^^^^\\n  File \\\"src/dependency_injector/containers.pyx\\\", line 743, in dependency_injector.containers.DeclarativeContainer.__new__\\n  File \\\"src/dependency_injector/providers.pyx\\\", line 4838, in dependency_injector.providers.deepcopy\\n  File \\\"src/dependency_injector/providers.pyx\\\", line 4845, in dependency_injector.providers.deepcopy\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 136, in deepcopy\\n    y = copier(x, memo)\\n        ^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 221, in _deepcopy_dict\\n    y[deepcopy(key, memo)] = deepcopy(value, memo)\\n                             ^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/copy.py\\\", line 143, in deepcopy\\n    y = copier(memo)\\n        ^^^^^^^^^^^^\\n  File \\\"src/dependency_injector/providers.pyx\\\", line 2789, in dependency_injector.providers.BaseSingleton.__deepcopy__\\n  File \\\"src/dependency_injector/providers.pyx\\\", line 4885, in dependency_injector.providers.deepcopy_kwargs\\ndependency_injector.errors.NonCopyableArgumentError: Couldn't copy keyword argument boto3_secrets_manager for provider <dependency_injector.providers.Singleton(<class 'rds_proxy_password_rotation.adapter.aws_secrets_manager.AwsSecretsManagerService'>) at 0x79c2610effa0>\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 1,
            "stderr": "Traceback (most recent call last):\n  File \"src/dependency_injector/providers.pyx\", line 4883, in dependency_injector.providers.deepcopy_kwargs\n  File \"/usr/lib/python3.12/copy.py\", line 162, in deepcopy\n    y = _reconstruct(x, memo, *rv)\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/copy.py\", line 259, in _reconstruct\n    state = deepcopy(state, memo)\n            ^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/copy.py\", line 136, in deepcopy\n    y = copier(x, memo)\n        ^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/copy.py\", line 221, in _deepcopy_dict\n[excerpt truncated]",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "nothing_checked",
    "example_checks": [
      {
        "claim": "Repository unit test suite runs offline (README has no test command; purpose: exercise the installed package)",
        "command": "<guest-path> -m pytest tests/unit -q -p no:cacheprovider",
        "deferred": false,
        "evidence": ".................                                                        [100%]\n17 passed in 0.49s",
        "expected": "all unit tests pass",
        "input": "tests/unit",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "tests/unit",
        "verdict": "yes"
      }
    ],
    "status": "FAIL"
  },
  "deviations": [
    "README has no CLI, HTTP or MCP entrypoint and no local run command; the only runnable entrypoint is the Lambda handler, invoked through the python_api/cli harness.",
    "Docker not installed; the ghcr.io image pull was not attempted (guest has no docker and no AWS/RDS).",
    "Initial event typo (createSecret) fixed to create_secret; NoRegionError fixed by AWS_DEFAULT_REGION (repo tests/conftest.py value). These were my own setup errors, not product failures.",
    "System python3 pip (apt, 24.0) could not install the package ('InvalidRequirement: Parse error at extra ==' and 'Cannot uninstall pip 24.0, RECORD file not found'). Worked around for the checker's -I replay by writing /usr/local/lib/python3.12/dist-packages/coldpass-deps.pth pointing at the venv site-packages and workspace src (environment workaround, no product source edited).",
    "Checker rejects expected_value null for python_api and rejects the decorated handler (powertools event_parser wrapper resolves outside the repo), so the handler is evidenced via a cli start check with -c (agent-written, partial).",
    "No successful product operation could be observed; the only probe is the failing startup.",
    "Claim about AWS/RDS rotation recorded as testable:false (missing prerequisites)."
  ],
  "fault_owner": "repo",
  "main_blocker": "dependency_injector 4.49.1 (pinned) raises NonCopyableArgumentError deep-copying the boto3 SecretsManager client passed as a keyword argument to providers.Singleton, so the handler cannot start even before reaching AWS.",
  "operation": "Run the documented rotation Lambda handler (Dockerfile CMD: src.rds_proxy_password_rotation.adapter.aws_lambda_function.lambda_handler) on a Secrets Manager rotation event",
  "operation_scope": "Needs AWS Secrets Manager secrets, RDS/RDS Proxy PostgreSQL and AWS credentials for a real rotation. The startup defect reproduces without any AWS call: it happens while the DI Container() is built.",
  "outcome": "blocked",
  "plain_failure": "The documented Lambda handler crashes on first invocation: building the DI Container copies the boto3 client argument and fails with NonCopyableArgumentError on Python 3.12.3 with the pinned dependency-injector 4.49.1. Unit tests do not cover the container, so this is not caught by CI tests. AWS/RDS prerequisites are also absent from this guest, so no rotation could be verified end-to-end.",
  "steps": [
    "Read README.md: no install or run section; only prerequisites and docker pull ghcr.io/Hapag-Lloyd/rds-proxy-password-rotation:edge (docker not present in guest, not pulled).",
    "python3 3.12.3 available (README requires >=3.10). Created venv: python3 -m venv <guest-path>",
    "<guest-path> -m pip install -e '.[test]' (succeeded, pinned deps installed).",
    "<guest-path> -m pytest tests/unit -q -p no:cacheprovider (17 passed).",
    "Ran lambda_handler with a create_secret event, AWS_DEFAULT_REGION=eu-central-1 (diagnostic): fails with dependency_injector NonCopyableArgumentError in Container() (deepcopy of boto3_secrets_manager client). Reproduced via the checker's start probe, returncode 1."
  ],
  "stuck_step": "Startup of the rotation Lambda handler: Container() creation in src/rds_proxy_password_rotation/adapter/container.py",
  "suggested_fix": "Stop passing the boto3 client as a provider keyword argument that gets deep-copied: wrap it in providers.Object(...) or build it inside a provider factory, and add a test that instantiates Container(). Re-run the Lambda handler against localstack or AWS credentials to verify the rotation steps."
}
