diff --git a/skills/cuopt-numerical-optimization-api-cli/evals/evals.json b/skills/cuopt-numerical-optimization-api-cli/evals/evals.json
new file mode 100644
index 0000000000..b173d24c9a
--- /dev/null
+++ b/skills/cuopt-numerical-optimization-api-cli/evals/evals.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": "numopt-cli-eval-001-mps-sections-and-cli-command",
+ "question": "I have an LP problem I want to solve with cuopt_cli from an MPS file, with a 60-second time limit and 1% MIP gap (in case I add integers later). List the MPS sections in required order, and the cuopt_cli command line.",
+ "expected_skill": "cuopt-numerical-optimization-api-cli",
+ "expected_script": null,
+ "ground_truth": "The agent lists the MPS sections in the required order: NAME, ROWS (N row for the objective, L/G/E rows for constraints), COLUMNS (variable-name, row-name, coefficient triples), RHS (right-hand-side values), BOUNDS (optional — LO/UP/FX/BV/LI/UI), ENDATA. For integer variables, integer markers are 'MARKER' 'INTORG' before and 'MARKER' 'INTEND' after the integer columns. The cuopt_cli invocation is: cuopt_cli problem.mps --time-limit 60 --mip-relative-tolerance 0.01. The agent mentions cuopt_cli --help as the canonical source for all flags. Does not invent flags like --max-time or --gap that are not in the skill. Notes that cuopt_cli ships with the cuopt Python package (install via pip or conda first if not present).",
+ "expected_behavior": [
+ "Lists MPS sections in required order: NAME, ROWS, COLUMNS, RHS, [BOUNDS], ENDATA",
+ "Mentions N row for objective and L/G/E for constraint types",
+ "Mentions integer markers ('MARKER' 'INTORG' / 'INTEND') for integer columns",
+ "Gives the cuopt_cli command with --time-limit 60 and --mip-relative-tolerance 0.01",
+ "References cuopt_cli --help as the canonical flag source",
+ "Does not invent flag names that are not in the skill (e.g. --max-time, --gap)",
+ "Mentions that cuopt_cli ships with the cuopt Python package"
+ ]
+ }
+]
diff --git a/skills/cuopt-numerical-optimization-api-cli/skill-card.md b/skills/cuopt-numerical-optimization-api-cli/skill-card.md
index 05cad300a5..cf97a090ba 100644
--- a/skills/cuopt-numerical-optimization-api-cli/skill-card.md
+++ b/skills/cuopt-numerical-optimization-api-cli/skill-card.md
@@ -8,7 +8,7 @@ This skill is ready for commercial/non-commercial use.
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers solving linear programming, mixed-integer linear programming, or quadratic programming problems from MPS files via the cuopt_cli command-line interface.
+Developers and engineers solving linear programming (LP), mixed-integer linear programming (MILP), or quadratic programming (QP) optimization problems via the cuopt_cli command-line tool using MPS-format input files.
### Deployment Geography for Use:
Global
@@ -24,7 +24,7 @@ Mitigation: Review and scan skill before deployment.
## Skill Output:
-**Output Type(s):** [Shell commands, Configuration instructions]
+**Output Type(s):** [Shell commands, Configuration instructions, Code]
**Output Format:** [Markdown with inline bash code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
diff --git a/skills/cuopt-numerical-optimization-api-cli/skill.oms.sig b/skills/cuopt-numerical-optimization-api-cli/skill.oms.sig
index dbe73b68f8..0b399aac85 100644
--- a/skills/cuopt-numerical-optimization-api-cli/skill.oms.sig
+++ b/skills/cuopt-numerical-optimization-api-cli/skill.oms.sig
@@ -1 +1 @@
-{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktY2xpIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc4NmIxZGUxZjUyZGU3YjU1ZDFhZmE3OWFhZDkzYTZkMGJlM2NmYjRmZWEzMzU4YmFiNDE3NjJkNzBmYWE5MGEiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiLAogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRpZ25vcmUiCiAgICAgIF0sCiAgICAgICJoYXNoX3R5cGUiOiAic2hhMjU2IiwKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UKICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI4NjI5YTY0YTY2YzY2NWYwNjRkMWNiNTdhYzEzNDdhZGE5NmMxMmJmZDE4MzAyZDhiNGJlZmYzN2ZkZmVmOGZlIiwKICAgICAgICAibmFtZSI6ICJTS0lMTC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImUwYmExMDBlNzc2YWU3MDQ3YjQwMTRkYTQ4OWMzZTRmM2Q3MzA3NTIyNzE5OThkZWJjOWFmMDI5OTUzYWNjNDUiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJiMjVhZjUzMTk3YzVkMjBlYzI5NzZiYTc4NmU2ZTZhMjVmMGViNTY4ZDdjNTMyZWVmZWVjMDY3MzZkMTkyNWE4IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfcHJvZHVjdGlvbi9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJlNTZhZTJmZWY5OGRmYTZiMzQxNTY2OTQyYWFkNWI3NDY3OTU4ZmNkOTJiNzkzNDAyZjQ5ZDBjN2JmNzYyYzAxIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfcHJvZHVjdGlvbi9wcm9kdWN0aW9uLm1wcyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImJjMTNmZTY4ODRhMzJkOWRhNWIxMTQ3NWNjZjk4ZjY4ZjFmZGFiZTcwNmQ0YjNjMzhjN2JlMDg0MDE0MzViZjUiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9zaW1wbGUvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMzBiM2Y4NzE5MTgxNjBlOWMxYzVlNzYwZTM5ZTllNWE5NzNlNTFhYWFkMDk3OTg3NjVjOGNhNzQxNjQxYmIwNCIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3NpbXBsZS9zYW1wbGUubXBzIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiY2RhNWI3YWZlNjJiNzE2OWExNjA2MThhZDE2MzExOTI0ZDNhMDdmYWRlZGU1ZGI0MWVkYjdkZjMyNWM2M2IwNSIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfZmFjaWxpdHkvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMzY4NzA1Njk3ZGI0NWIzYjNlMTcwOGJkMTM5MWUxNjdkNWE5ZjUzNDg4MTY1MTRkMGE4MDFjMmNlNTc5ZjA4YyIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfZmFjaWxpdHkvZmFjaWxpdHkubXBzIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTJkMDAxNWQzZTI2MjNhYWQ5ZDU5OTM2N2YyZjE3NmQ4NTg0MjM5NTBmNGY0Nzg5YzdlYmEwYWRmZGYzNTBmYiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMEDE1yY1Vr2Nv8ue+prjm5wgvaXZQuANqpUJufSwOx0vTQwYV7S4LGD33q2QoayNqAIxANRJq6AHV8D1L18wnaI2B3q/AodNOLNMzg0Q8IgqYZRb7VZVWSKCubaUQmKlGZOLqA==","keyid":""}]}}
\ No newline at end of file
+{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktY2xpIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRlNjE1NmZkZDgyOThjMDBkMTYzYWU5OGNiYWQ5ZjcwZGM5MWVlMDk0OGYzNjYzZDMyOGEwZmQ5MDVhY2Q0ZmYiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJyZXNvdXJjZXMiOiBbCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJkaWdlc3QiOiAiODYyOWE2NGE2NmM2NjVmMDY0ZDFjYjU3YWMxMzQ3YWRhOTZjMTJiZmQxODMwMmQ4YjRiZWZmMzdmZGZlZjhmZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogImUwYmExMDBlNzc2YWU3MDQ3YjQwMTRkYTQ4OWMzZTRmM2Q3MzA3NTIyNzE5OThkZWJjOWFmMDI5OTUzYWNjNDUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3Byb2R1Y3Rpb24vUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogImIyNWFmNTMxOTdjNWQyMGVjMjk3NmJhNzg2ZTZlNmEyNWYwZWI1NjhkN2M1MzJlZWZlZWMwNjczNmQxOTI1YTgiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3Byb2R1Y3Rpb24vcHJvZHVjdGlvbi5tcHMiLAogICAgICAgICJkaWdlc3QiOiAiZTU2YWUyZmVmOThkZmE2YjM0MTU2Njk0MmFhZDViNzQ2Nzk1OGZjZDkyYjc5MzQwMmY0OWQwYzdiZjc2MmMwMSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfc2ltcGxlL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJiYzEzZmU2ODg0YTMyZDlkYTViMTE0NzVjY2Y5OGY2OGYxZmRhYmU3MDZkNGIzYzM4YzdiZTA4NDAxNDM1YmY1IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9zaW1wbGUvc2FtcGxlLm1wcyIsCiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2ZhY2lsaXR5L1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJjZGE1YjdhZmU2MmI3MTY5YTE2MDYxOGFkMTYzMTE5MjRkM2EwN2ZhZGVkZTVkYjQxZWRiN2RmMzI1YzYzYjA1IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2ZhY2lsaXR5L2ZhY2lsaXR5Lm1wcyIsCiAgICAgICAgImRpZ2VzdCI6ICIzNjg3MDU2OTdkYjQ1YjNiM2UxNzA4YmQxMzkxZTE2N2Q1YTlmNTM0ODgxNjUxNGQwYTgwMWMyY2U1NzlmMDhjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImV2YWxzL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiNGZlZTgwMzJhNDRhNjQ5MjVhYWY5NTc1OWJlMTk4MGMyZWE5MTZiZDQ1OGY2ZTY4ZDdmYTVhMGYyMjc5ODEwMiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJza2lsbC1jYXJkLm1kIiwKICAgICAgICAiZGlnZXN0IjogImQ3YmU2MmM5ODFmYzFiMWQxZDA5MjdhMWIzNmI0MzY1MjkwYWRkMzdiMWQxN2QzZDQwYzM3YTI5MGE2ZmQ2YjYiCiAgICAgIH0KICAgIF0sCiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRpZ25vcmUiCiAgICAgIF0sCiAgICAgICJtZXRob2QiOiAiZmlsZXMiCiAgICB9CiAgfQp9","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQDpCrSpNItqlo2uEmZHZiuGeMjeu1M0lWyfX27O9I76emoBD++heMrulglfzVpzvUsCMC1O139zjy4gHAO7hesIHvSf0UKX/etWuKdFPpQWCGFfEDVxsZ8Pw5/vVZ18J/9fpw==","keyid":""}]}}
\ No newline at end of file
diff --git a/skills/cuopt-numerical-optimization-api-python/evals/evals.json b/skills/cuopt-numerical-optimization-api-python/evals/evals.json
new file mode 100644
index 0000000000..e7611880d6
--- /dev/null
+++ b/skills/cuopt-numerical-optimization-api-python/evals/evals.json
@@ -0,0 +1,19 @@
+[
+ {
+ "id": "numopt-py-eval-001-lp-api-call-sequence",
+ "question": "I want to solve a small LP (continuous variables only, maximize a linear objective with linear constraints) using the cuOpt Python API. List the API calls in order — name each method, one line per method, no full runnable script.",
+ "expected_skill": "cuopt-numerical-optimization-api-python",
+ "expected_script": null,
+ "ground_truth": "The agent produces an ordered list of API calls without a runnable script. The list, in order: (1) Import Problem, CONTINUOUS, and MAXIMIZE from cuopt.linear_programming.problem, and SolverSettings from cuopt.linear_programming.solver_settings. (2) Construct Problem('name'). (3) For each decision variable, call problem.addVariable(lb=..., vtype=CONTINUOUS, name=...). (4) For each constraint, call problem.addConstraint( <= or >= or == , name=...). (5) Call problem.setObjective(, sense=MAXIMIZE). (6) Construct SolverSettings(); call set_parameter('time_limit', ...) for time budget. (7) Call problem.solve(settings). (8) Check problem.Status.name in ['Optimal', 'PrimalFeasible'] (PascalCase status names — case-sensitive). (9) Read problem.ObjValue for the objective, and each variable's .getValue() for its optimal value. The agent uses LP (not MILP / QP) because all variables are continuous and the objective is linear. Mentions that status names are PascalCase (Optimal, not OPTIMAL or optimal) — case sensitivity matters.",
+ "expected_behavior": [
+ "Selects LP (not MILP or QP) given continuous variables and a linear objective",
+ "Lists the API calls in order without producing a full runnable script",
+ "Names Problem, addVariable (with vtype=CONTINUOUS), addConstraint, setObjective (sense=MAXIMIZE)",
+ "Names SolverSettings, set_parameter('time_limit', ...), and problem.solve(settings)",
+ "Names problem.Status.name and the PascalCase status values (Optimal / PrimalFeasible / FeasibleFound)",
+ "Names problem.ObjValue and variable.getValue() for reading results",
+ "Mentions that status names are case-sensitive (PascalCase)",
+ "Does not invent method names that are not in the skill"
+ ]
+ }
+]
diff --git a/skills/cuopt-numerical-optimization-api-python/skill-card.md b/skills/cuopt-numerical-optimization-api-python/skill-card.md
index fc0e841b69..11bf7215fb 100644
--- a/skills/cuopt-numerical-optimization-api-python/skill-card.md
+++ b/skills/cuopt-numerical-optimization-api-python/skill-card.md
@@ -1,5 +1,5 @@
## Description:
-Solve Linear Programming (LP), Mixed-Integer Linear Programming (MILP), and Quadratic Programming (QP, beta) with the Python API.
+Solve Linear Programming (LP), Mixed-Integer Linear Programming (MILP), and Quadratic Programming (QP, beta) with the NVIDIA cuOpt Python API.
This skill is ready for commercial/non-commercial use.
@@ -8,7 +8,7 @@ This skill is ready for commercial/non-commercial use.
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers use this skill to model and solve linear, mixed-integer linear, and quadratic optimization problems using NVIDIA cuOpt's GPU-accelerated Python API for scheduling, resource allocation, production planning, portfolio optimization, and related tasks.
+Developers and engineers who need to formulate and solve linear, mixed-integer linear, and quadratic optimization problems using NVIDIA cuOpt's GPU-accelerated Python API for applications such as scheduling, resource allocation, facility location, production planning, and portfolio optimization.
### Deployment Geography for Use:
Global
@@ -18,9 +18,9 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi
Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [QP Examples (Python API)](references/qp_examples.md)
+- [QP Python API Examples](references/qp_examples.md)
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
-- [cuOpt Examples Repository](https://github.com/NVIDIA/cuopt-examples)
+- [cuOpt API Reference](https://docs.nvidia.com/cuopt/user-guide/latest/api.html)
## Skill Output:
diff --git a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig
index 222323f93c..c5d93196bd 100644
--- a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig
+++ b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig
@@ -1 +1 @@
-{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjhhMzUyMTY4YTljYmRiODhkMDE2NTkxYjhlMmYyNjdjOGIzNjNlM2NhOGY4NGJlM2RjOGUyY2EwYzNlNmFmYTIiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaWdub3JlX3BhdGhzIjogWwogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGlnbm9yZSIsCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIKICAgICAgXSwKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UsCiAgICAgICJoYXNoX3R5cGUiOiAic2hhMjU2IiwKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIKICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjEwZjEzYzIyZjliOTlmYmVkNGM2OGZiYjYxZDgwMzcxYTMzMDQ2NGYwYzEyZDAxNTA3ZGQ4NWUxYzY0MzI2NmEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlNjIxZGRhMmU1ZDdhNTJjYTk3Y2QzMTkwYjRiNDZjNTZhNGQ5MzM4MmE3YzViMWI2M2I3MThmNDcxMjYzNDFmIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9sZWFzdF9zcXVhcmVzL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI2NjhiNzJiMGQ4MTlhYzM2YWYyMzgxNjE0ZWJiNzhkYjUzNzdkMDkxNzQ1ZjI5ZTQ5ODAxZjI4Y2NlN2Y2YWNkIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9sZWFzdF9zcXVhcmVzL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjJjYWE4MTQzNWE0MTM2ZTg3MWEzZmJiNGJiZTEwOGNjMWI1NmZhMzkyYTQ2NjI1Nzg4NGZjMmY1YzM5ZTRkODciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI0YWNjMTdjNzdkM2RlMjlkN2FmZTRkNDE3NjAwMWY5NDVmNThmNGYxZjIxOTg1NGU1N2M3YjI4NTE5Mjg0ZDI1IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9iYXNpYy9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICJmOTQxZjc5NTZjZTY4OWFmYmU5ZTgwMTg4OTlkNjUxYWU4ODIzZjEzNTdmY2FhZDE0YWI5ZTQ3NWUxNWYzN2JjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiMjRkMTY0OWI0MjAwNjIxYTZkNWY2YmU3NDkyM2M3OTdjN2M4ZTU1MWY0Mzg0ZGE1MWEyODIyNjJkZmY1YmVmMCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfZHVhbHMvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiNTA4ODhkODhjMmRmOTE1OTdjNWRmYTRiMjIzZTc1ODA2ZWVkYTgxODIzMmFiNWM3NjYzMDFiN2Q1ZjI0ODQ2MyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfd2FybXN0YXJ0L1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI4ZGMzNDU0MjFhMzAwMjU5YzYyNTM3ZTNlYjZmMDQwYmEyNWRlM2NjYWJlZjA3MzU1NDIzZjM0NDhhY2U1Zjg4IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiNTkxYmE1ZjM3NmQ2NjZmNzc2NGY5MWQwMTYzNWUwNTI0OTkyOWY0YzBhYmQxZDkwYzE2ZGVlNjQ3YzA0NTM2ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWF4aW1pemF0aW9uX3dvcmthcm91bmQvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogImY5MzZhNmI4YTcxNmE5MmFhOTA5ZGUzZTkyMTVjNjdhMzA5YjIxMjJhOGE4MDljZGQ5ZGQ2NTRjNWNjNjI3YjkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21heGltaXphdGlvbl93b3JrYXJvdW5kL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjQxNTdjYmZhODE1ZmU4NzgzMTZiOTVmMWQ0ZjY2ODhjNzdjZDBhYTNiYjhjYWEwODM1ZDk4YTRhMTA4ZjBiZjciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjBkNmM0YmE3ZGJhMDE4NzY0Yzg5Njk5Yjk3MjNiZjU5YmExYWM0ZmMxNTVjNzU1MTkwMDY2NWNmZTkyOWRiNGIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvaW5jdW1iZW50X2NhbGxiYWNrLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjEyMjA1OTFmYmJjZDUxODA3ZjFkMTI2Zjg5NjBmYmQ0MTcxNzdmNTZiYWIyZTIxNGNiYzc2MDE2OWZhYWNkMTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiZDQ4ZjE3OWUyYThjMDk3YTgwZjUzMmExYmMyMGMxMjk0NDA1OWFmZmQ0MmQyZTUwZTIyNmY2Njc2NzkxOGFhNCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9wcm9kdWN0aW9uX3BsYW5uaW5nL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI0ZDdiMjQ4MWQ3ZTdjZWNiN2FlNzM2NDA3OGQzNjYwZGM1MTFmZTE2YjY3ZjcyODhhNTIxYzdhOGY2YWYzNTU3IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiMDEwOWQzMTZiZmRjMDM3ZjI3MDdmOTA5ZTQxMzRjNDE2OWQzNzAzYjM0MjBjMTIzOWYxNDBmZWQ0NDM5Y2NiZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiNzhhOTA3ODAzM2Q0OWE5Njc3NDI1MWFhN2VkZjEzMjJjZjk2NGIyOTNhNGY2Mzc2ZWQ1Yjk3YWExOTljZmZhYSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9kYXRhL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIxOGQzYjYwNDcxNDkxNjczOTJlMzllY2Q0NzMyNmNjM2ZmZTEyNGM2ZWY5NDY4ZDU0MTcyYWM2OTYwM2QyNTQ5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvc2FtcGxlLm1wcyIsCiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogImFlNTJjMjczY2QzODIzZThhMjE2MjA3NDg5ZWFjOTE5YWFjMWI3Y2U1OWJkZTY5NjBlZmVmOTQzNDU3ZTRmNGYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvcmVzdWx0cy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlYjBjYzkzZTNmYjE1Yzk4MmExODdjZGNhNTEwNjg2ODkzODBmMjE5OGNkNDQyNmE2NGY3M2IyMjdjZThiZjBlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9wb3J0Zm9saW8vUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjhlMDk3OTFmNTBkM2VkY2M4ZDIyMGYyNzVhN2Q2MjdiYTQwMDcwMGExMjZlYjAzOWQ0YmU4ODEyZDc2NTliOWYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BvcnRmb2xpby9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICI5ZGNmMTE1ZDU4ODdlNGQ5MDNhODk3ZGJiYmI0OWZlMTRmZDhhZDVmN2FiNDIwZmQ2MmRmNTYwMWVlYmZjM2IyIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImJlbmNobWFyay9TT1VSQ0VTLm1kIiwKICAgICAgICAiZGlnZXN0IjogImQ1Zjg2MGM3NjgwMGFlM2EzODZmMTY4ZjNmYTRiZDkzMDIyMzZlNTc0NWU2YjlhMjdmNmQ3YWZmYmMxMTdhMmUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiNzMzMWE0ZjBjZjAxM2ZkNzE4Y2Y0MDdlYTIyMTIxZDMwNzI2YzM3MzZjYzIyMjM3ZjgyNmIxNzM0NjYzYTM2YyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3FwX2V4YW1wbGVzLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjZlNWFlY2YzNmQxZDg0NDQwNjI0MmE0YTA0ODQ0YjQzZjZhNmZkNWI2YmJiY2Q4NzNjNTNmMjc5MTJlZWNlOWEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI3OGNjMjRmMjVmYjZmYjgwNWZmMjJlZDUyZjYzYWZjYmZhOGU3ODEzYzQwMmEzY2RlZmQxYTc5YTJjNzQ5YTU5IgogICAgICB9CiAgICBdCiAgfQp9","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGYCMQDY3nyRKevfdkW5UNjsMH/YkemB6yPq3FCRwvVdKL4lQH3Qo6khhFfPzVm/zvLjsgYCMQD7wVRH460cmIVEZmAO+iMHCrq4KdRic9oQMh09iCczejZ0Vf/RwrxHAX5gnfXnD44=","keyid":""}]}}
\ No newline at end of file
+{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRlZTEzMmU0ZjExNTU2MmM2NTUxODMzZWIxODljNWFiNWMyOGU0YWJhZjFjNzQ1YjY1OTFlOWFjZDQ0ZmI5MGUiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJyZXNvdXJjZXMiOiBbCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJkaWdlc3QiOiAiMTBmMTNjMjJmOWI5OWZiZWQ0YzY4ZmJiNjFkODAzNzFhMzMwNDY0ZjBjMTJkMDE1MDdkZDg1ZTFjNjQzMjY2YSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogImU2MjFkZGEyZTVkN2E1MmNhOTdjZDMxOTBiNGI0NmM1NmE0ZDkzMzgyYTdjNWIxYjYzYjcxOGY0NzEyNjM0MWYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjY2OGI3MmIwZDgxOWFjMzZhZjIzODE2MTRlYmI3OGRiNTM3N2QwOTE3NDVmMjllNDk4MDFmMjhjY2U3ZjZhY2QiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiMmNhYTgxNDM1YTQxMzZlODcxYTNmYmI0YmJlMTA4Y2MxYjU2ZmEzOTJhNDY2MjU3ODg0ZmMyZjVjMzllNGQ4NyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfYmFzaWMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjRhY2MxN2M3N2QzZGUyOWQ3YWZlNGQ0MTc2MDAxZjk0NWY1OGY0ZjFmMjE5ODU0ZTU3YzdiMjg1MTkyODRkMjUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogImY5NDFmNzk1NmNlNjg5YWZiZTllODAxODg5OWQ2NTFhZTg4MjNmMTM1N2ZjYWFkMTRhYjllNDc1ZTE1ZjM3YmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2R1YWxzL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyNGQxNjQ5YjQyMDA2MjFhNmQ1ZjZiZTc0OTIzYzc5N2M3YzhlNTUxZjQzODRkYTUxYTI4MjI2MmRmZjViZWYwIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICI1MDg4OGQ4OGMyZGY5MTU5N2M1ZGZhNGIyMjNlNzU4MDZlZWRhODE4MjMyYWI1Yzc2NjMwMWI3ZDVmMjQ4NDYzIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjhkYzM0NTQyMWEzMDAyNTljNjI1MzdlM2ViNmYwNDBiYTI1ZGUzY2NhYmVmMDczNTU0MjNmMzQ0OGFjZTVmODgiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3dhcm1zdGFydC9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICI1OTFiYTVmMzc2ZDY2NmY3NzY0ZjkxZDAxNjM1ZTA1MjQ5OTI5ZjRjMGFiZDFkOTBjMTZkZWU2NDdjMDQ1MzZmIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tYXhpbWl6YXRpb25fd29ya2Fyb3VuZC9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiZjkzNmE2YjhhNzE2YTkyYWE5MDlkZTNlOTIxNWM2N2EzMDliMjEyMmE4YTgwOWNkZDlkZDY1NGM1Y2M2MjdiOSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWF4aW1pemF0aW9uX3dvcmthcm91bmQvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiNDE1N2NiZmE4MTVmZTg3ODMxNmI5NWYxZDRmNjY4OGM3N2NkMGFhM2JiOGNhYTA4MzVkOThhNGExMDhmMGJmNyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiMGQ2YzRiYTdkYmEwMTg3NjRjODk2OTliOTcyM2JmNTliYTFhYzRmYzE1NWM3NTUxOTAwNjY1Y2ZlOTI5ZGI0YiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9pbmN1bWJlbnRfY2FsbGJhY2sucHkiLAogICAgICAgICJkaWdlc3QiOiAiMTIyMDU5MWZiYmNkNTE4MDdmMWQxMjZmODk2MGZiZDQxNzE3N2Y1NmJhYjJlMjE0Y2JjNzYwMTY5ZmFhY2QxNiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICJkNDhmMTc5ZTJhOGMwOTdhODBmNTMyYTFiYzIwYzEyOTQ0MDU5YWZmZDQyZDJlNTBlMjI2ZjY2NzY3OTE4YWE0IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjRkN2IyNDgxZDdlN2NlY2I3YWU3MzY0MDc4ZDM2NjBkYzUxMWZlMTZiNjdmNzI4OGE1MjFjN2E4ZjZhZjM1NTciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfcHJvZHVjdGlvbl9wbGFubmluZy9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICIwMTA5ZDMxNmJmZGMwMzdmMjcwN2Y5MDllNDEzNGM0MTY5ZDM3MDNiMzQyMGMxMjM5ZjE0MGZlZDQ0MzljY2JmIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI3OGE5MDc4MDMzZDQ5YTk2Nzc0MjUxYWE3ZWRmMTMyMmNmOTY0YjI5M2E0ZjYzNzZlZDViOTdhYTE5OWNmZmFhIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjE4ZDNiNjA0NzE0OTE2NzM5MmUzOWVjZDQ3MzI2Y2MzZmZlMTI0YzZlZjk0NjhkNTQxNzJhYzY5NjAzZDI1NDkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvZGF0YS9zYW1wbGUubXBzIiwKICAgICAgICAiZGlnZXN0IjogIjMwYjNmODcxOTE4MTYwZTljMWM1ZTc2MGUzOWU5ZTVhOTczZTUxYWFhZDA5Nzk4NzY1YzhjYTc0MTY0MWJiMDQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiYWU1MmMyNzNjZDM4MjNlOGEyMTYyMDc0ODllYWM5MTlhYWMxYjdjZTU5YmRlNjk2MGVmZWY5NDM0NTdlNGY0ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9yZXN1bHRzLm1kIiwKICAgICAgICAiZGlnZXN0IjogImViMGNjOTNlM2ZiMTVjOTgyYTE4N2NkY2E1MTA2ODY4OTM4MGYyMTk4Y2Q0NDI2YTY0ZjczYjIyN2NlOGJmMGUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BvcnRmb2xpby9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiOGUwOTc5MWY1MGQzZWRjYzhkMjIwZjI3NWE3ZDYyN2JhNDAwNzAwYTEyNmViMDM5ZDRiZTg4MTJkNzY1OWI5ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvcG9ydGZvbGlvL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjlkY2YxMTVkNTg4N2U0ZDkwM2E4OTdkYmJiYjQ5ZmUxNGZkOGFkNWY3YWI0MjBmZDYyZGY1NjAxZWViZmMzYjIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL1NPVVJDRVMubWQiLAogICAgICAgICJkaWdlc3QiOiAiZDVmODYwYzc2ODAwYWUzYTM4NmYxNjhmM2ZhNGJkOTMwMjIzNmU1NzQ1ZTZiOWEyN2Y2ZDdhZmZiYzExN2EyZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJiZW5jaG1hcmsvZXZhbHMuanNvbiIsCiAgICAgICAgImRpZ2VzdCI6ICI3MzMxYTRmMGNmMDEzZmQ3MThjZjQwN2VhMjIxMjFkMzA3MjZjMzczNmNjMjIyMzdmODI2YjE3MzQ2NjNhMzZjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImV2YWxzL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiODE4Yzc5YjAxZTM2M2M3MmU4NWIxMTc4NmQ4MDNlMGE1ZTIzYmFhYWE2M2RkMGUyODQ0YWUwZjM1NDNkM2M4ZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3FwX2V4YW1wbGVzLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjZlNWFlY2YzNmQxZDg0NDQwNjI0MmE0YTA0ODQ0YjQzZjZhNmZkNWI2YmJiY2Q4NzNjNTNmMjc5MTJlZWNlOWEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI1ZTI1MTQ1ZGY5MTcyNzQwMjU1NmU5ZTgyZDZjNDBmMjlhMTY2NjYwMGFhNjYwYjBjNmRkMDA4NWMwNzc1N2UzIgogICAgICB9CiAgICBdLAogICAgInNlcmlhbGl6YXRpb24iOiB7CiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXQiLAogICAgICAgICIuZ2l0aWdub3JlIgogICAgICBdLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAibWV0aG9kIjogImZpbGVzIgogICAgfQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGYCMQDTp8voGll2f4uYt/QHCZJVpESQB+QU2zFfZ7JuR9LR9lTrNgOo6FmD43Oi7oY2fa4CMQDAW2XIRDn4uV0maN6NlKGlzagOwm8lfr3K9BuIw3T0svTIUkPVAlbUUV+zh9CazSc=","keyid":""}]}}
\ No newline at end of file
diff --git a/skills/cuopt-routing-api-python/evals/evals.json b/skills/cuopt-routing-api-python/evals/evals.json
new file mode 100644
index 0000000000..ee89609c82
--- /dev/null
+++ b/skills/cuopt-routing-api-python/evals/evals.json
@@ -0,0 +1,19 @@
+[
+ {
+ "id": "rt-py-eval-001-vrptw-api-call-sequence",
+ "question": "For a VRP with time windows in cuopt (Python), list the API calls I need in order — name each method on routing.DataModel and routing.Solve, and one-line what each does. Don't write a full runnable script.",
+ "expected_skill": "cuopt-routing-api-python",
+ "expected_script": null,
+ "ground_truth": "The agent produces an ordered list of API calls without writing executable code. The list, in order: (1) Construct routing.DataModel(n_locations, n_fleet, n_orders). (2) add_cost_matrix(cost_matrix) — pass as a cudf.DataFrame with float32 dtype. (3) add_transit_time_matrix(transit_time_matrix) — required when time windows are used; omitting it causes Solve to return a non-zero status. (4) set_order_locations(series) — cudf.Series of int32 node indices. (5) set_order_time_windows(earliest, latest) — two int32 cudf.Series. (6) Construct routing.SolverSettings(); call set_time_limit() and optionally set_verbose_mode(). (7) Call routing.Solve(dm, ss) to get a solution object. (8) Check solution.get_status() == 0 before reading the route; on a non-zero status, inspect solution.get_error_message() and solution.get_infeasible_orders().to_list(). (9) On success, retrieve the route via solution.get_route() or display it via solution.display_routes(). The agent mentions explicit dtypes (float32 for the matrices, int32 for index series) as a class-level note. Does not embed full executable code, does not invent method names that aren't in the skill (e.g. no fictitious set_time_windows or add_vehicle), and flags that the user must supply real numeric data.",
+ "expected_behavior": [
+ "Lists the API methods in order without producing a full executable script",
+ "Names routing.DataModel with n_locations / n_fleet / n_orders",
+ "Names add_cost_matrix and add_transit_time_matrix, and flags that transit_time_matrix is required for time windows",
+ "Names set_order_locations and set_order_time_windows",
+ "Names routing.SolverSettings (and set_time_limit) and routing.Solve",
+ "Mentions checking solution.get_status() == 0, and get_error_message / get_infeasible_orders for the failure path",
+ "Mentions explicit dtypes (float32 for matrices, int32 for index series)",
+ "Does not invent method names that are not in the skill"
+ ]
+ }
+]
diff --git a/skills/cuopt-routing-api-python/skill-card.md b/skills/cuopt-routing-api-python/skill-card.md
index 6452d606ff..7f958cf60f 100644
--- a/skills/cuopt-routing-api-python/skill-card.md
+++ b/skills/cuopt-routing-api-python/skill-card.md
@@ -8,7 +8,7 @@ This skill is ready for commercial/non-commercial use.
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers building or solving vehicle routing problems (VRP, TSP, PDP) using the NVIDIA cuOpt Python API for logistics and fleet optimization.
+Developers and engineers building or solving vehicle routing problems (VRP, TSP, PDP) using the NVIDIA cuOpt Python API for fleet logistics and delivery optimization.
### Deployment Geography for Use:
Global
@@ -24,7 +24,7 @@ Mitigation: Review and scan skill before deployment.
## Skill Output:
-**Output Type(s):** [Code, API Calls, Configuration instructions]
+**Output Type(s):** [Code, API Calls]
**Output Format:** [Markdown with inline Python code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
diff --git a/skills/cuopt-routing-api-python/skill.oms.sig b/skills/cuopt-routing-api-python/skill.oms.sig
index 9d88bd65e3..6c602ce844 100644
--- a/skills/cuopt-routing-api-python/skill.oms.sig
+++ b/skills/cuopt-routing-api-python/skill.oms.sig
@@ -1 +1 @@
-{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtcm91dGluZy1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjRmMzI0NGEwMTNmOGI1MDZlNmM0NzQ4ZGQwZDAyMzA3MjVkMmQ3MmJhMjAwNzc4ZmZkNzA2YWZlMTI4N2NjYzciCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UsCiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0aHViIgogICAgICBdLAogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIKICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJkOTQwNWQyODIwOGNkMGEzMjA4YWY5YTEzNTg1NTJlOTQ3OTJiNTYzMGU3ZTIyYmU0NGY0MzBjZjlkNDBmZTIxIiwKICAgICAgICAibmFtZSI6ICJTS0lMTC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImM3MDAyYTMxMjE5ODNmMzI5NGVmYmU4Yzk1NDE5NDNiZjI0Yzg5YTA3YmVhNmEzMjAwN2M3NzRhMmM4MDgwMjEiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJlMGQxYTFmZDdkMGFkNGU0NTRkMDhmNTVkZTkxYmJlZGU3OGZmMTIyMmQ2YTU0MmQ1NWFhYWNmNzFjNWE3ZTYyIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvcGRwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjE0NGRhMWRmNWRlMjhkNzg1YTliNDY3YjNkMTQ0MTdlNzE2ZjUzMmFjOWI5ODkwNDZlYWY3ZTRmNTI5OWE1ZmQiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9wZHBfYmFzaWMvbW9kZWwucHkiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwYTg1YWVmMWMxYmU1OTk4OWRlNDBhYTZjZTlmZTU0ZTcyMGU3MDk1ZjA4NmJjNmY2ODRmMmIzYzlkYTMzODk0IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvdnJwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjUyNDViNzc0NjVhMjZiNjhhZWZiYWEzMjQ5YjUxZWYwZGE0NTA1ZjRlMTk3NGNmNmQwZjQ0YjFjNzhmYzgwNzAiLAogICAgICAgICJuYW1lIjogImFzc2V0cy92cnBfYmFzaWMvbW9kZWwucHkiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI1ZWIzNTczNTU1OWQ5MzVjMjFlMjBhNDk1OTFkNTRjOWI2ZmE5MjQ3MjE3YWE0Nzc2YTVmODk4M2NiZDI3ZjgxIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL2V4YW1wbGVzLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTA4YmY0YWU4Y2I1YmM3ZTI0OWIzNzcyNjBmMTQyMWI3MGQ5ZDM0NWJiNWE2ZDE2YzZmYTBiNTZlMjU2ODI1YiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9zZXJ2ZXJfZXhhbXBsZXMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJlNmNlNzY5OTU2YmFjYmIxN2NmYmZhOWFmODViZmQ2OWRjODdjOWIwN2NjYmZiYWY5N2M5MzYxYjAwZTBlYWZjIiwKICAgICAgICAibmFtZSI6ICJza2lsbC1jYXJkLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMGS/UfEtDz3ySXMplVS1JLcU7KhYR4z2SE9+ruQYM41o6SX29auTXoogB5Rhw4fVVAIwSMt0AiliBAnP1KRhOBpxyeEtZsLQkCYejnFdpenD0rFnIwNnTpAMnt4BrXEkTeF0","keyid":""}]}}
\ No newline at end of file
+{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtcm91dGluZy1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ1Yjk5ZWY2ZDhlMmZhZGY3MDE3YTg5MTE5OWRlNDIzNWZkMjZmZjQxYTM2ZDA5Mjc3YTQwMzdhZTIyZTk2OGUiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiaWdub3JlX3BhdGhzIjogWwogICAgICAgICIuZ2l0aWdub3JlIiwKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiLAogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGh1YiIKICAgICAgXSwKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIKICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZDk0MDVkMjgyMDhjZDBhMzIwOGFmOWExMzU4NTUyZTk0NzkyYjU2MzBlN2UyMmJlNDRmNDMwY2Y5ZDQwZmUyMSIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICJjNzAwMmEzMTIxOTgzZjMyOTRlZmJlOGM5NTQxOTQzYmYyNGM4OWEwN2JlYTZhMzIwMDdjNzc0YTJjODA4MDIxIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZTBkMWExZmQ3ZDBhZDRlNDU0ZDA4ZjU1ZGU5MWJiZWRlNzhmZjEyMjJkNmE1NDJkNTVhYWFjZjcxYzVhN2U2MiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BkcF9iYXNpYy9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICIxNDRkYTFkZjVkZTI4ZDc4NWE5YjQ2N2IzZDE0NDE3ZTcxNmY1MzJhYzliOTg5MDQ2ZWFmN2U0ZjUyOTlhNWZkIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvcGRwX2Jhc2ljL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMGE4NWFlZjFjMWJlNTk5ODlkZTQwYWE2Y2U5ZmU1NGU3MjBlNzA5NWYwODZiYzZmNjg0ZjJiM2M5ZGEzMzg5NCIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3ZycF9iYXNpYy9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI1MjQ1Yjc3NDY1YTI2YjY4YWVmYmFhMzI0OWI1MWVmMGRhNDUwNWY0ZTE5NzRjZjZkMGY0NGIxYzc4ZmM4MDcwIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvdnJwX2Jhc2ljL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZGJhMjAxMTE5ZTRmMGM1YjdkN2IxN2RmOWM3MTFkNDQ4M2UwMTg5MzM1MDhlMzYxZWU5MjllNmM0NGU1NmE0YiIsCiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZXZhbHMuanNvbiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjVlYjM1NzM1NTU5ZDkzNWMyMWUyMGE0OTU5MWQ1NGM5YjZmYTkyNDcyMTdhYTQ3NzZhNWY4OTgzY2JkMjdmODEiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvZXhhbXBsZXMubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI1MDhiZjRhZThjYjViYzdlMjQ5YjM3NzI2MGYxNDIxYjcwZDlkMzQ1YmI1YTZkMTZjNmZhMGI1NmUyNTY4MjViIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3NlcnZlcl9leGFtcGxlcy5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImRlM2I4MTQxNjU4MTBmYmI3ZDE4NzM3YWVkOTNjZTM0NDRiZWJiYzA3MGM5NzEzNzA4MGRmZGI1ZmFiNWQzODciLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMBBJe4Hso6bzkaOkc/KQFSQ63hhfLLVFZW49KcJCJIQFCAZxI7sqpJo2Jiu0oxACMAIweSCs4Xb1qPmKSrMV/ygqL3/EgFKotG6B8z8Npqpc++MWbq5zd9t/sU2vBdfcmm8j","keyid":""}]}}
\ No newline at end of file
diff --git a/skills/cuopt-user-rules/evals/evals.json b/skills/cuopt-user-rules/evals/evals.json
new file mode 100644
index 0000000000..e20e0fe097
--- /dev/null
+++ b/skills/cuopt-user-rules/evals/evals.json
@@ -0,0 +1,19 @@
+[
+ {
+ "id": "user-rules-eval-001-clarify-before-code",
+ "question": "Help me optimize my routing.",
+ "expected_skill": "cuopt-user-rules",
+ "expected_script": null,
+ "ground_truth": "The prompt is incomplete on every dimension. Per the user-rules skill, the agent must ask before assuming. It asks: (a) Language / interface — Python, C, or REST server? (b) Problem type — TSP, VRP, or PDP? (c) Data — does the user have a cost / distance matrix, order locations, fleet definition, or should the agent generate a small sample dataset for demonstration? (d) Constraints — time windows, vehicle capacities, precedence, service times? (e) Problem size — number of locations, vehicles, orders? (f) Performance — time limit, solution-quality target? It does not produce code, does not silently choose Python+VRP and emit a starter script, and does not invent constraint values. If the user later says 'just create a sample dataset', the agent will state clearly what it synthesized (size, depot assumption, time windows used) before producing code.",
+ "expected_behavior": [
+ "Does not produce code on the underspecified prompt",
+ "Asks about language / interface (Python / C / REST)",
+ "Asks about problem type (TSP / VRP / PDP)",
+ "Asks whether the user has data or wants a synthesized sample",
+ "Asks about constraints (time windows, capacities, precedence, service times)",
+ "Asks about problem size and performance requirements",
+ "Does not silently assume Python+VRP defaults and produce a starter script",
+ "References the user-rules 'ask before assuming' rule"
+ ]
+ }
+]
diff --git a/skills/cuopt-user-rules/skill-card.md b/skills/cuopt-user-rules/skill-card.md
index c789b07ca7..c67ff13287 100644
--- a/skills/cuopt-user-rules/skill-card.md
+++ b/skills/cuopt-user-rules/skill-card.md
@@ -8,7 +8,7 @@ This skill is ready for commercial/non-commercial use.
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers using NVIDIA cuOpt for optimization tasks (routing, LP, MILP, QP) who need structured guidance on clarifying requirements, verifying environments, and following safe interaction patterns when calling cuOpt APIs.
+Developers and engineers who use NVIDIA cuOpt for optimization tasks (routing, LP, MILP, QP) and need guidance on proper interaction patterns, environment verification, and safe usage practices across Python, C, CLI, and server interfaces.
### Deployment Geography for Use:
Global
@@ -20,11 +20,11 @@ Mitigation: Review and scan skill before deployment.
## Reference(s):
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
- [cuOpt API Reference](https://docs.nvidia.com/cuopt/user-guide/latest/api.html)
-- [cuopt-examples repo](https://github.com/NVIDIA/cuopt-examples)
+- [cuOpt Examples Repository](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Guidance, Configuration instructions, Code]
+**Output Type(s):** [Guidance, Code]
**Output Format:** [Markdown with inline code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
diff --git a/skills/cuopt-user-rules/skill.oms.sig b/skills/cuopt-user-rules/skill.oms.sig
index e04e9a5b09..d11e65ce25 100644
--- a/skills/cuopt-user-rules/skill.oms.sig
+++ b/skills/cuopt-user-rules/skill.oms.sig
@@ -1 +1 @@
-{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtdXNlci1ydWxlcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNjc2M2JkZTQ3YjRjZjRjNjg5ZDQ0YTQwZDE5NjU2NjUwNjYwNGI5MjczYzc5ODQ4N2ViNDAyOGUwMDM2Y2Q1IgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UsCiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0IgogICAgICBdLAogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJtZXRob2QiOiAiZmlsZXMiCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjQ4ZDIxNjIwZGMyMGZiM2EwMzIwOGZiZDdmZDNlNjNkNmNlZDc4YWY3NzkzOWVkMmY3YjRkNTdmNjc3YTZjZWUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI4YmY3YjIxZTM3YzM5MTc0OGM5MjliOGM2NDU5YzVlYWZkMDhhZWRlM2I4ZTdmMTM5YWYzZDMzM2UyYTAxNjhmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMGcdwnxp3c3AwmTmV9ccn7pQjFkxg23ZJdS/DTb0O8i3cQqck8unotkQhlJdngGxuQIxANZ2j3aX6AnhwZK5p9PNeE45kAQV1yIlb7/tXDIop/t/7f388MubMNSR1d2a6BYowQ==","keyid":""}]}}
\ No newline at end of file
+{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtdXNlci1ydWxlcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmZGEwMGYxZDY5ZjQ2ZGJkNWExNTRmNTg2OWQ3OGRlNzVjODQ4NTg1NWE0MTZjYjc0Y2NkNDZlYjUxZTk3ZDlmIgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJkaWdlc3QiOiAiNDhkMjE2MjBkYzIwZmIzYTAzMjA4ZmJkN2ZkM2U2M2Q2Y2VkNzhhZjc3OTM5ZWQyZjdiNGQ1N2Y2NzdhNmNlZSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiZGlnZXN0IjogImYyODFlZjYxMDdiODdjNTJlZTJhZTRjM2Y2ZGFlMGEyMWIyNzFhMTE0YzY5NWY3N2U2NjdjNWI1MjEyZTljMTEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmZmQwMmUxMjEyNWUxY2ExYzQyMjljYzA1MmViNTA5N2Y3YzdlYmQyMDY3ZTIyOTUxNTc5OGEyMWRiNDA5NDQ0IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfQogICAgXSwKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJtZXRob2QiOiAiZmlsZXMiLAogICAgICAiaWdub3JlX3BhdGhzIjogWwogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIKICAgICAgXSwKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UKICAgIH0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMCsxQodtFcUIIaihCL2hNwEqXrfpS16IV300jqDBzNCxhFJAQWO969aksPUXoEIZFgIwJE47BKhTRhqif2aHQtX+H88xW1MEug59FAurXb9NgADMcE5aZgMd4tAVN20ubsQQ","keyid":""}]}}
\ No newline at end of file