{"evidence":{"bomFormat":"CycloneDX","components":[{"bom-ref":"pkg:pypi/blinker@1.9.0","name":"blinker","purl":"pkg:pypi/blinker@1.9.0","scope":"required","type":"library","version":"1.9.0"},{"bom-ref":"pkg:pypi/boto3@1.43.83","name":"boto3","purl":"pkg:pypi/boto3@1.43.83","scope":"required","type":"library","version":"1.43.83"},{"bom-ref":"pkg:pypi/botocore@1.43.83","name":"botocore","purl":"pkg:pypi/botocore@1.43.83","scope":"required","type":"library","version":"1.43.83"},{"bom-ref":"pkg:pypi/certifi@2026.7.22","name":"certifi","purl":"pkg:pypi/certifi@2026.7.22","scope":"required","type":"library","version":"2026.7.22"},{"bom-ref":"pkg:pypi/cffi@2.1.1","name":"cffi","purl":"pkg:pypi/cffi@2.1.1","scope":"required","type":"library","version":"2.1.1"},{"bom-ref":"pkg:pypi/charset-normalizer@3.5.1","name":"charset-normalizer","purl":"pkg:pypi/charset-normalizer@3.5.1","scope":"required","type":"library","version":"3.5.1"},{"bom-ref":"pkg:pypi/click@8.5.0","name":"click","purl":"pkg:pypi/click@8.5.0","scope":"required","type":"library","version":"8.5.0"},{"bom-ref":"pkg:pypi/colorama@0.4.6","name":"colorama","purl":"pkg:pypi/colorama@0.4.6","scope":"required","type":"library","version":"0.4.6"},{"bom-ref":"pkg:pypi/cryptography@50.0.1","name":"cryptography","purl":"pkg:pypi/cryptography@50.0.1","scope":"required","type":"library","version":"50.0.1"},{"bom-ref":"pkg:pypi/deprecated@1.3.1","name":"deprecated","purl":"pkg:pypi/deprecated@1.3.1","scope":"required","type":"library","version":"1.3.1"},{"bom-ref":"pkg:pypi/flask@3.1.3","name":"flask","purl":"pkg:pypi/flask@3.1.3","scope":"required","type":"library","version":"3.1.3"},{"bom-ref":"pkg:pypi/flask-limiter@4.1.1","name":"flask-limiter","purl":"pkg:pypi/flask-limiter@4.1.1","scope":"required","type":"library","version":"4.1.1"},{"bom-ref":"pkg:pypi/flask-wtf@1.3.0","name":"flask-wtf","purl":"pkg:pypi/flask-wtf@1.3.0","scope":"required","type":"library","version":"1.3.0"},{"bom-ref":"pkg:pypi/gunicorn@26.2.0","name":"gunicorn","purl":"pkg:pypi/gunicorn@26.2.0","scope":"required","type":"library","version":"26.2.0"},{"bom-ref":"pkg:pypi/idna@3.19","name":"idna","purl":"pkg:pypi/idna@3.19","scope":"required","type":"library","version":"3.19"},{"bom-ref":"pkg:pypi/iniconfig@2.3.0","name":"iniconfig","purl":"pkg:pypi/iniconfig@2.3.0","scope":"required","type":"library","version":"2.3.0"},{"bom-ref":"pkg:pypi/itsdangerous@2.2.0","name":"itsdangerous","purl":"pkg:pypi/itsdangerous@2.2.0","scope":"required","type":"library","version":"2.2.0"},{"bom-ref":"pkg:pypi/jinja2@3.1.6","name":"jinja2","purl":"pkg:pypi/jinja2@3.1.6","scope":"required","type":"library","version":"3.1.6"},{"bom-ref":"pkg:pypi/jmespath@1.1.0","name":"jmespath","purl":"pkg:pypi/jmespath@1.1.0","scope":"required","type":"library","version":"1.1.0"},{"bom-ref":"pkg:pypi/limits@5.8.0","name":"limits","purl":"pkg:pypi/limits@5.8.0","scope":"required","type":"library","version":"5.8.0"},{"bom-ref":"pkg:pypi/markdown@3.10.3","name":"markdown","purl":"pkg:pypi/markdown@3.10.3","scope":"required","type":"library","version":"3.10.3"},{"bom-ref":"pkg:pypi/markupsafe@3.0.3","name":"markupsafe","purl":"pkg:pypi/markupsafe@3.0.3","scope":"required","type":"library","version":"3.0.3"},{"bom-ref":"pkg:pypi/ordered-set@4.1.0","name":"ordered-set","purl":"pkg:pypi/ordered-set@4.1.0","scope":"required","type":"library","version":"4.1.0"},{"bom-ref":"pkg:pypi/packaging@26.3","name":"packaging","purl":"pkg:pypi/packaging@26.3","scope":"required","type":"library","version":"26.3"},{"bom-ref":"pkg:pypi/pillow@12.3.0","name":"pillow","purl":"pkg:pypi/pillow@12.3.0","scope":"required","type":"library","version":"12.3.0"},{"bom-ref":"pkg:pypi/pluggy@1.6.0","name":"pluggy","purl":"pkg:pypi/pluggy@1.6.0","scope":"required","type":"library","version":"1.6.0"},{"bom-ref":"pkg:pypi/psycopg2-binary@2.9.12","name":"psycopg2-binary","purl":"pkg:pypi/psycopg2-binary@2.9.12","scope":"required","type":"library","version":"2.9.12"},{"bom-ref":"pkg:pypi/pycparser@3.0","name":"pycparser","purl":"pkg:pypi/pycparser@3.0","scope":"required","type":"library","version":"3.0"},{"bom-ref":"pkg:pypi/pygments@2.21.0","name":"pygments","purl":"pkg:pypi/pygments@2.21.0","scope":"required","type":"library","version":"2.21.0"},{"bom-ref":"pkg:pypi/pytest@9.1.1","name":"pytest","purl":"pkg:pypi/pytest@9.1.1","scope":"required","type":"library","version":"9.1.1"},{"bom-ref":"pkg:pypi/python-dateutil@2.9.0.post0","name":"python-dateutil","purl":"pkg:pypi/python-dateutil@2.9.0.post0","scope":"required","type":"library","version":"2.9.0.post0"},{"bom-ref":"pkg:pypi/python-dotenv@1.2.3","name":"python-dotenv","purl":"pkg:pypi/python-dotenv@1.2.3","scope":"required","type":"library","version":"1.2.3"},{"bom-ref":"pkg:pypi/pyyaml@6.0.3","name":"pyyaml","purl":"pkg:pypi/pyyaml@6.0.3","scope":"required","type":"library","version":"6.0.3"},{"bom-ref":"pkg:pypi/requests@2.34.2","name":"requests","purl":"pkg:pypi/requests@2.34.2","scope":"required","type":"library","version":"2.34.2"},{"bom-ref":"pkg:pypi/s3transfer@0.19.2","name":"s3transfer","purl":"pkg:pypi/s3transfer@0.19.2","scope":"required","type":"library","version":"0.19.2"},{"bom-ref":"pkg:pypi/sentry-sdk@2.68.1","name":"sentry-sdk","purl":"pkg:pypi/sentry-sdk@2.68.1","scope":"required","type":"library","version":"2.68.1"},{"bom-ref":"pkg:pypi/six@1.17.0","name":"six","purl":"pkg:pypi/six@1.17.0","scope":"required","type":"library","version":"1.17.0"},{"bom-ref":"pkg:pypi/stripe@15.6.0","name":"stripe","purl":"pkg:pypi/stripe@15.6.0","scope":"required","type":"library","version":"15.6.0"},{"bom-ref":"pkg:pypi/typing-extensions@4.16.0","name":"typing-extensions","purl":"pkg:pypi/typing-extensions@4.16.0","scope":"required","type":"library","version":"4.16.0"},{"bom-ref":"pkg:pypi/urllib3@2.7.0","name":"urllib3","purl":"pkg:pypi/urllib3@2.7.0","scope":"required","type":"library","version":"2.7.0"},{"bom-ref":"pkg:pypi/werkzeug@3.1.8","name":"werkzeug","purl":"pkg:pypi/werkzeug@3.1.8","scope":"required","type":"library","version":"3.1.8"},{"bom-ref":"pkg:pypi/wrapt@2.3.0","name":"wrapt","purl":"pkg:pypi/wrapt@2.3.0","scope":"required","type":"library","version":"2.3.0"},{"bom-ref":"pkg:pypi/wtforms@3.2.2","name":"wtforms","purl":"pkg:pypi/wtforms@3.2.2","scope":"required","type":"library","version":"3.2.2"}],"ecokureEvidence":{"claim_boundary":["Inventory generated from the exact requirements.lock consumed by Docker.","No vulnerability scan, license approval, artifact hash or OCI image digest is claimed.","Production acceptance still requires security review and an approved image digest."],"component_count":43,"evidence_id":"RUNTIME_SBOM_INVENTORY_20260829","lock_sha256":"74352a806768af7a9a07c43aad6e77cf21e588bec79bc51a3373154f0bf898fa","status":"PASS"},"metadata":{"properties":[{"name":"ecokure:lock-sha256","value":"74352a806768af7a9a07c43aad6e77cf21e588bec79bc51a3373154f0bf898fa"},{"name":"ecokure:verification-state","value":"RELEASE_MANIFEST_INVENTORY"}],"timestamp":"2026-08-29T07:25:02.480809+00:00","tools":[{"name":"generate_runtime_sbom.py","vendor":"EcoKure","version":"1"}]},"specVersion":"1.5","version":1},"limitations":["Inventory generated from the exact requirements.lock consumed by Docker.","No vulnerability scan, license approval, artifact hash or OCI image digest is claimed.","Production acceptance still requires security review and an approved image digest."],"pack_type":"EcoKure runtime SBOM inventory EvidencePack","verification_state":"PASS"}
