@marinjursic/prc-linux-arm64 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/bin/LICENSE +21 -0
  4. package/bin/README.md +335 -0
  5. package/bin/THIRD_PARTY_NOTICES.md +74 -0
  6. package/bin/adapters/checkov-v3.3.8.yaml +50 -0
  7. package/bin/adapters/gitleaks-v8.30.0.yaml +63 -0
  8. package/bin/adapters/grype-v0.116.1.yaml +58 -0
  9. package/bin/adapters/syft-v1.51.0.yaml +54 -0
  10. package/bin/catalog/assertions/core-repository.yaml +625 -0
  11. package/bin/catalog/assertions/iac.yaml +24 -0
  12. package/bin/catalog/assertions/supply-chain.yaml +45 -0
  13. package/bin/catalog/control-contracts.json +1 -0
  14. package/bin/catalog/control-id-registry.json +110470 -0
  15. package/bin/catalog/objectives/core-repository.yaml +243 -0
  16. package/bin/catalog/objectives/iac.yaml +13 -0
  17. package/bin/catalog/objectives/supply-chain.yaml +13 -0
  18. package/bin/catalog/profiles/api.yaml +12 -0
  19. package/bin/catalog/profiles/core-repository.yaml +49 -0
  20. package/bin/catalog/profiles/iac.yaml +18 -0
  21. package/bin/catalog/profiles/kubernetes.yaml +15 -0
  22. package/bin/catalog/profiles/quick.yaml +27 -0
  23. package/bin/catalog/profiles/supply-chain.yaml +20 -0
  24. package/bin/docs/architecture/adapters.md +380 -0
  25. package/bin/docs/architecture/agent-providers.md +188 -0
  26. package/bin/docs/architecture/applicability.md +80 -0
  27. package/bin/docs/architecture/catalog-integrity.md +85 -0
  28. package/bin/docs/architecture/evidence-and-results.md +154 -0
  29. package/bin/docs/architecture/execution-plans.md +61 -0
  30. package/bin/docs/architecture/product-contract.md +76 -0
  31. package/bin/docs/architecture/publisher-trust.md +68 -0
  32. package/bin/docs/architecture/remediation-contract.md +113 -0
  33. package/bin/docs/architecture/trust-model.md +95 -0
  34. package/bin/docs/assets/hero.svg +37 -0
  35. package/bin/docs/assets/logo.svg +13 -0
  36. package/bin/docs/assets/production-readiness-scan-demo-poster.png +0 -0
  37. package/bin/docs/assets/production-readiness-scan-demo.gif +0 -0
  38. package/bin/docs/assets/production-readiness-scan-demo.mp4 +0 -0
  39. package/bin/docs/assets/social-card.png +0 -0
  40. package/bin/docs/assets/social-card.svg +40 -0
  41. package/bin/docs/checklists/00-readiness-principle.md +17 -0
  42. package/bin/docs/checklists/01-release-foundations.md +91 -0
  43. package/bin/docs/checklists/02-product-risk-architecture.md +136 -0
  44. package/bin/docs/checklists/03-source-build-supply-chain.md +97 -0
  45. package/bin/docs/checklists/04-environments-quality-experience.md +226 -0
  46. package/bin/docs/checklists/05-application-security.md +320 -0
  47. package/bin/docs/checklists/06-data-privacy-performance.md +166 -0
  48. package/bin/docs/checklists/07-reliability-operations.md +355 -0
  49. package/bin/docs/checklists/08-maintenance-vendors-compliance.md +112 -0
  50. package/bin/docs/checklists/09-conditional-modules.md +229 -0
  51. package/bin/docs/checklists/10-evidence-and-decision.md +111 -0
  52. package/bin/docs/engineering/00-overview.md +51 -0
  53. package/bin/docs/engineering/01-governance-and-foundations.md +919 -0
  54. package/bin/docs/engineering/02-product-and-requirements.md +186 -0
  55. package/bin/docs/engineering/03-user-experience-web-and-content.md +1352 -0
  56. package/bin/docs/engineering/04-architecture-and-design.md +387 -0
  57. package/bin/docs/engineering/05-code-quality-and-implementation.md +1103 -0
  58. package/bin/docs/engineering/06-application-services-and-apis.md +476 -0
  59. package/bin/docs/engineering/07-data-and-information-lifecycle.md +1009 -0
  60. package/bin/docs/engineering/08-security-and-cryptography.md +1215 -0
  61. package/bin/docs/engineering/09-privacy-and-data-protection.md +205 -0
  62. package/bin/docs/engineering/10-verification-and-testing.md +841 -0
  63. package/bin/docs/engineering/11-developer-experience-platform-and-delivery.md +1013 -0
  64. package/bin/docs/engineering/12-operations-sre-and-support.md +795 -0
  65. package/bin/docs/engineering/13-documentation-and-knowledge.md +349 -0
  66. package/bin/docs/engineering/14-trust-safety-and-ecosystems.md +330 -0
  67. package/bin/docs/engineering/15-ai-ml-and-ai-assisted-development.md +785 -0
  68. package/bin/docs/engineering/16-specialized-domains-and-release-assurance.md +775 -0
  69. package/bin/docs/engineering/source-manifest.md +479 -0
  70. package/bin/docs/guides/ai-assisted-review.md +61 -0
  71. package/bin/docs/guides/getting-started.md +78 -0
  72. package/bin/docs/index.md +66 -0
  73. package/bin/docs/prompts/evidence-challenge.md +26 -0
  74. package/bin/docs/prompts/full-readiness-review.md +34 -0
  75. package/bin/docs/prompts/release-diff-review.md +31 -0
  76. package/bin/docs/records/evidence-record.md +42 -0
  77. package/bin/docs/records/go-no-go-decision.md +63 -0
  78. package/bin/docs/records/release-assessment.md +124 -0
  79. package/bin/docs/records/risk-exception.md +64 -0
  80. package/bin/docs/references.md +52 -0
  81. package/bin/docs/scanner/ai-control-review.md +208 -0
  82. package/bin/docs/scanner/benchmarks.md +122 -0
  83. package/bin/docs/scanner/cli-contract.md +130 -0
  84. package/bin/docs/scanner/configuration.md +101 -0
  85. package/bin/docs/scanner/control-contracts.md +47 -0
  86. package/bin/docs/scanner/core-repository.md +62 -0
  87. package/bin/docs/scanner/diff-and-invalidation.md +79 -0
  88. package/bin/docs/scanner/doctor.md +71 -0
  89. package/bin/docs/scanner/getting-started.md +355 -0
  90. package/bin/docs/scanner/go-http-timeouts.md +96 -0
  91. package/bin/docs/scanner/infrastructure-policy.md +64 -0
  92. package/bin/docs/scanner/kubernetes-workloads.md +63 -0
  93. package/bin/docs/scanner/mcp-agent-integration.md +138 -0
  94. package/bin/docs/scanner/openapi-contracts.md +75 -0
  95. package/bin/docs/scanner/private-key-armor.md +44 -0
  96. package/bin/docs/scanner/releases.md +160 -0
  97. package/bin/docs/scanner/remediation.md +273 -0
  98. package/bin/docs/scanner/risk-exceptions.md +52 -0
  99. package/bin/docs/scanner/security-walkthrough.md +236 -0
  100. package/bin/docs/scanner/state-and-history.md +113 -0
  101. package/bin/docs/scanner/supply-chain.md +132 -0
  102. package/bin/docs/scanner/test-discovery.md +60 -0
  103. package/bin/docs/stylesheets/extra.css +183 -0
  104. package/bin/fixtures/benchmarks/core-native/suite-comprehensive.yaml +302 -0
  105. package/bin/fixtures/benchmarks/core-native/suite.yaml +59 -0
  106. package/bin/fixtures/benchmarks/core-native/targets/baseline/README.md +3 -0
  107. package/bin/fixtures/benchmarks/core-native/targets/baseline/app.go +1 -0
  108. package/bin/fixtures/benchmarks/core-native/targets/conflict-template/app.js +5 -0
  109. package/bin/fixtures/benchmarks/core-native/targets/container-risky-template/Dockerfile +2 -0
  110. package/bin/fixtures/benchmarks/core-native/targets/container-valid/Dockerfile +2 -0
  111. package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-missing/package.json +5 -0
  112. package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-present/package-lock.json +6 -0
  113. package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-present/package.json +5 -0
  114. package/bin/fixtures/benchmarks/core-native/targets/empty-manifest-template/package.json +1 -0
  115. package/bin/fixtures/benchmarks/core-native/targets/final-newline-template/app.py +1 -0
  116. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/CODEOWNERS +1 -0
  117. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/dependabot.yml +6 -0
  118. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/workflows/validate.yml +15 -0
  119. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/CODE_OF_CONDUCT.md +3 -0
  120. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/CONTRIBUTING.md +3 -0
  121. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/LICENSE +1 -0
  122. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/README.md +3 -0
  123. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/SECURITY.md +3 -0
  124. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/package-lock.json +6 -0
  125. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/package.json +7 -0
  126. package/bin/fixtures/benchmarks/core-native/targets/foundation-present/tests/example.test.js +3 -0
  127. package/bin/fixtures/benchmarks/core-native/targets/go-http-server-timeout-risky-template/go.mod +3 -0
  128. package/bin/fixtures/benchmarks/core-native/targets/go-http-server-timeout-risky-template/server.go +18 -0
  129. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-malformed-template/client.go +3 -0
  130. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-malformed-template/go.mod +3 -0
  131. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-risky-template/client.go +7 -0
  132. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-risky-template/go.mod +3 -0
  133. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/client.go +22 -0
  134. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/go.mod +3 -0
  135. package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/hazards_test.go +8 -0
  136. package/bin/fixtures/benchmarks/core-native/targets/kubernetes-risky-template/deployment.yaml +27 -0
  137. package/bin/fixtures/benchmarks/core-native/targets/kubernetes-valid/deployment.yaml +26 -0
  138. package/bin/fixtures/benchmarks/core-native/targets/openapi-operation-ids-risky-template/openapi.yaml +17 -0
  139. package/bin/fixtures/benchmarks/core-native/targets/openapi-operation-responses-risky-template/openapi.yaml +11 -0
  140. package/bin/fixtures/benchmarks/core-native/targets/openapi-root-malformed-template/openapi.yaml +5 -0
  141. package/bin/fixtures/benchmarks/core-native/targets/openapi-root-risky-template/openapi.yaml +5 -0
  142. package/bin/fixtures/benchmarks/core-native/targets/openapi-root-valid/openapi.yaml +17 -0
  143. package/bin/fixtures/benchmarks/core-native/targets/package-test-command/app.js +3 -0
  144. package/bin/fixtures/benchmarks/core-native/targets/package-test-command/package.json +7 -0
  145. package/bin/fixtures/benchmarks/core-native/targets/package-test-placeholder/app.js +3 -0
  146. package/bin/fixtures/benchmarks/core-native/targets/package-test-placeholder/package.json +7 -0
  147. package/bin/fixtures/benchmarks/core-native/targets/private-key-template/deploy.pem +3 -0
  148. package/bin/fixtures/benchmarks/core-native/targets/readme-missing/fixture.txt +1 -0
  149. package/bin/fixtures/benchmarks/core-native/targets/runtime-missing/package-lock.json +6 -0
  150. package/bin/fixtures/benchmarks/core-native/targets/runtime-missing/package.json +4 -0
  151. package/bin/fixtures/benchmarks/core-native/targets/terraform-locked/.terraform.lock.hcl +3 -0
  152. package/bin/fixtures/benchmarks/core-native/targets/terraform-locked/main.tf +7 -0
  153. package/bin/fixtures/benchmarks/core-native/targets/terraform-unlocked-template/.terraform.lock.hcl +3 -0
  154. package/bin/fixtures/benchmarks/core-native/targets/terraform-unlocked-template/main.tf +7 -0
  155. package/bin/fixtures/benchmarks/core-native/targets/test-declaration-valid/app.py +2 -0
  156. package/bin/fixtures/benchmarks/core-native/targets/test-declaration-valid/tests/test_app.py +5 -0
  157. package/bin/fixtures/benchmarks/core-native/targets/test-path-without-declaration/app.py +2 -0
  158. package/bin/fixtures/benchmarks/core-native/targets/test-path-without-declaration/tests/test_app.py +1 -0
  159. package/bin/fixtures/benchmarks/core-native/targets/workflow-malformed/.github/workflows/validate.yml +1 -0
  160. package/bin/fixtures/benchmarks/core-native/targets/workflow-no-jobs/.github/workflows/empty.yml +9 -0
  161. package/bin/fixtures/benchmarks/core-native/targets/workflow-risky/.github/workflows/risky.yml +10 -0
  162. package/bin/fixtures/benchmarks/core-native/targets/workflow-valid/.github/workflows/validate.yml +14 -0
  163. package/bin/packs/core-foundation.yaml +25 -0
  164. package/bin/packs/core-native.yaml +59 -0
  165. package/bin/prc +0 -0
  166. package/bin/schemas/adapter-execution-v0.1.schema.json +101 -0
  167. package/bin/schemas/adapter-execution-v0.2.schema.json +128 -0
  168. package/bin/schemas/adapter-execution.schema.json +145 -0
  169. package/bin/schemas/adapter-fixture-report.schema.json +59 -0
  170. package/bin/schemas/adapter-fixture-suite.schema.json +104 -0
  171. package/bin/schemas/adapter-manifest-v0.1.schema.json +55 -0
  172. package/bin/schemas/adapter-manifest-v0.2.schema.json +122 -0
  173. package/bin/schemas/adapter-manifest-v0.3.schema.json +172 -0
  174. package/bin/schemas/adapter-manifest.schema.json +299 -0
  175. package/bin/schemas/adapter-message.schema.json +136 -0
  176. package/bin/schemas/adapter-registry-report.schema.json +13 -0
  177. package/bin/schemas/adapter-registry.schema.json +47 -0
  178. package/bin/schemas/agent-execution-v0.1.schema.json +26 -0
  179. package/bin/schemas/agent-execution.schema.json +26 -0
  180. package/bin/schemas/agent-failure-v0.1.schema.json +102 -0
  181. package/bin/schemas/agent-failure.schema.json +102 -0
  182. package/bin/schemas/agent-output-v0.1.schema.json +36 -0
  183. package/bin/schemas/agent-output.schema.json +36 -0
  184. package/bin/schemas/agent-task-v0.1.schema.json +44 -0
  185. package/bin/schemas/agent-task.schema.json +46 -0
  186. package/bin/schemas/assertion-catalog.schema.json +69 -0
  187. package/bin/schemas/benchmark-report.schema.json +94 -0
  188. package/bin/schemas/benchmark-suite.schema.json +116 -0
  189. package/bin/schemas/catalog-bundle.schema.json +27 -0
  190. package/bin/schemas/catalog-manifest.schema.json +23 -0
  191. package/bin/schemas/checkov-iac-policy-report.schema.json +82 -0
  192. package/bin/schemas/control-contracts.schema.json +44 -0
  193. package/bin/schemas/control-review-output.schema.json +51 -0
  194. package/bin/schemas/doctor.schema.json +53 -0
  195. package/bin/schemas/evidence-v0.1.schema.json +21 -0
  196. package/bin/schemas/evidence.schema.json +21 -0
  197. package/bin/schemas/finding-v0.1.schema.json +70 -0
  198. package/bin/schemas/finding.schema.json +70 -0
  199. package/bin/schemas/fix-contract-v0.1.schema.json +35 -0
  200. package/bin/schemas/fix-contract-v0.2.schema.json +46 -0
  201. package/bin/schemas/fix-contract-v0.3.schema.json +49 -0
  202. package/bin/schemas/fix-contract.schema.json +49 -0
  203. package/bin/schemas/grype-vulnerability-report.schema.json +88 -0
  204. package/bin/schemas/history.schema.json +37 -0
  205. package/bin/schemas/invalidation.schema.json +86 -0
  206. package/bin/schemas/inventory-v0.1.schema.json +42 -0
  207. package/bin/schemas/inventory-v0.2.schema.json +95 -0
  208. package/bin/schemas/inventory-v0.3.schema.json +139 -0
  209. package/bin/schemas/inventory.schema.json +139 -0
  210. package/bin/schemas/objective-catalog.schema.json +62 -0
  211. package/bin/schemas/pack-report.schema.json +16 -0
  212. package/bin/schemas/pack.schema.json +53 -0
  213. package/bin/schemas/plan-v0.1.schema.json +31 -0
  214. package/bin/schemas/plan-v0.2.schema.json +32 -0
  215. package/bin/schemas/plan-v0.3.schema.json +44 -0
  216. package/bin/schemas/plan-v0.4.schema.json +48 -0
  217. package/bin/schemas/plan-v0.5.schema.json +49 -0
  218. package/bin/schemas/plan-v0.6.schema.json +137 -0
  219. package/bin/schemas/plan.schema.json +137 -0
  220. package/bin/schemas/profile.schema.json +42 -0
  221. package/bin/schemas/project-config.schema.json +128 -0
  222. package/bin/schemas/release-manifest-v0.1.schema.json +86 -0
  223. package/bin/schemas/release-manifest-v0.2.schema.json +146 -0
  224. package/bin/schemas/release-manifest-v0.3.schema.json +146 -0
  225. package/bin/schemas/release-manifest.schema.json +6 -0
  226. package/bin/schemas/remediation-candidate-v0.1.schema.json +51 -0
  227. package/bin/schemas/remediation-candidate-v0.2.schema.json +51 -0
  228. package/bin/schemas/remediation-candidate-v0.3.schema.json +51 -0
  229. package/bin/schemas/remediation-candidate-v0.4.schema.json +69 -0
  230. package/bin/schemas/remediation-candidate.schema.json +69 -0
  231. package/bin/schemas/remediation-run-v0.1.schema.json +69 -0
  232. package/bin/schemas/remediation-run-v0.2.schema.json +78 -0
  233. package/bin/schemas/remediation-run-v0.3.schema.json +86 -0
  234. package/bin/schemas/remediation-run-v0.4.schema.json +86 -0
  235. package/bin/schemas/remediation-run-v0.5.schema.json +131 -0
  236. package/bin/schemas/remediation-run-v0.6.schema.json +143 -0
  237. package/bin/schemas/remediation-run-v0.7.schema.json +160 -0
  238. package/bin/schemas/remediation-run-v0.8.schema.json +161 -0
  239. package/bin/schemas/remediation-run.schema.json +161 -0
  240. package/bin/schemas/risk-exception-verification.schema.json +17 -0
  241. package/bin/schemas/risk-exception.schema.json +137 -0
  242. package/bin/schemas/run-result-v0.1.schema.json +54 -0
  243. package/bin/schemas/run-result-v0.10.schema.json +64 -0
  244. package/bin/schemas/run-result-v0.11.schema.json +146 -0
  245. package/bin/schemas/run-result-v0.2.schema.json +60 -0
  246. package/bin/schemas/run-result-v0.3.schema.json +52 -0
  247. package/bin/schemas/run-result-v0.4.schema.json +52 -0
  248. package/bin/schemas/run-result-v0.5.schema.json +60 -0
  249. package/bin/schemas/run-result-v0.6.schema.json +61 -0
  250. package/bin/schemas/run-result-v0.7.schema.json +61 -0
  251. package/bin/schemas/run-result-v0.8.schema.json +61 -0
  252. package/bin/schemas/run-result-v0.9.schema.json +77 -0
  253. package/bin/schemas/run-result.schema.json +165 -0
  254. package/bin/schemas/signature-verification.schema.json +22 -0
  255. package/bin/schemas/signature.schema.json +18 -0
  256. package/bin/schemas/state-check-v0.1.schema.json +27 -0
  257. package/bin/schemas/state-check.schema.json +28 -0
  258. package/bin/schemas/trust-store.schema.json +50 -0
  259. package/bin/schemas/verification-execution-v0.1.schema.json +105 -0
  260. package/bin/schemas/verification-execution.schema.json +105 -0
  261. package/bin/schemas/version-v0.1.schema.json +27 -0
  262. package/bin/schemas/version.schema.json +27 -0
  263. package/manifest.json +9 -0
  264. package/package.json +28 -0
@@ -0,0 +1,132 @@
1
+ # Software supply-chain profile
2
+
3
+ The focused `prc/supply-chain@0.2` profile combines repository-native checks
4
+ with two executed analysis gates:
5
+
6
+ - `PRC-A-SUPPLY-001` generates a normalized CycloneDX 1.7 software bill of
7
+ materials from the sealed repository inventory with Syft 1.51.0; and
8
+ - `PRC-A-SUPPLY-002` checks packages discoverable in that same inventory for
9
+ known vulnerabilities with Grype 0.116.1 and a fresh, identity-bound offline
10
+ database.
11
+
12
+ Both run only in the explicit `verify-local` capability mode. The scanner never
13
+ pulls images or downloads vulnerability data during a scan.
14
+
15
+ ## Prepare the immutable tools and database
16
+
17
+ Pull the two reviewed images by immutable digest:
18
+
19
+ ```bash
20
+ docker pull \
21
+ ghcr.io/anchore/syft@sha256:d2dc3ec86cb2b4e7ddb226ba0305c4523b7c0694c45d9f576b42b4c2f5ce7aa8
22
+ docker pull \
23
+ ghcr.io/anchore/grype@sha256:1e71065c0a4cff3e6bd3b8add525ffac4343eb4971694eb90a31cf6d4d3e85db
24
+ ```
25
+
26
+ Database acquisition is a separate, explicitly networked operator action. The
27
+ following command asks the exact reviewed Grype image to download and validate
28
+ the current database into an operator-controlled directory:
29
+
30
+ ```bash
31
+ mkdir -m 0700 /safe/path/grype-db
32
+
33
+ docker run --rm --pull=never \
34
+ --user "$(id -u):$(id -g)" \
35
+ --mount type=bind,src=/safe/path/grype-db,dst=/grype-db \
36
+ --env GRYPE_CHECK_FOR_APP_UPDATE=false \
37
+ --env GRYPE_DB_CACHE_DIR=/grype-db \
38
+ ghcr.io/anchore/grype@sha256:1e71065c0a4cff3e6bd3b8add525ffac4343eb4971694eb90a31cf6d4d3e85db \
39
+ db update
40
+ ```
41
+
42
+ Review this acquisition in environments with egress or software-source policy.
43
+ The scan itself mounts the resulting directory read-only, runs with
44
+ `--network=none`, verifies the database's official archive checksum, and rejects
45
+ a database built more than 120 hours earlier. Refresh it before that boundary.
46
+
47
+ ## Run both gates
48
+
49
+ ```bash
50
+ mkdir -m 0700 /safe/path/prc-state
51
+
52
+ prc scan \
53
+ --target PATH \
54
+ --catalog-root PATH_TO_RELEASE \
55
+ --profile prc/supply-chain \
56
+ --mode verify-local \
57
+ --adapter-manifest PATH_TO_RELEASE/adapters/syft-v1.51.0.yaml \
58
+ --adapter-manifest PATH_TO_RELEASE/adapters/grype-v0.116.1.yaml \
59
+ --adapter-data 'prc.adapter.grype@0.116/grype-db=/safe/path/grype-db' \
60
+ --state-dir /safe/path/prc-state \
61
+ --format json
62
+ ```
63
+
64
+ The complete adapter set is authorized before either container starts. It runs
65
+ in deterministic adapter-ID and manifest-digest order under one configured
66
+ deadline. The database directory is hashed before planning and before and after
67
+ execution; its digest, file count, byte count, and reserved container
68
+ destination are recorded without persisting the host path.
69
+
70
+ Each transcript contains a `sha256:` artifact descriptor. With `--state-dir`,
71
+ the corresponding immutable payload is stored at:
72
+
73
+ ```text
74
+ /safe/path/prc-state/artifacts/sha256/<first-two-hex>/<sha256-hex>
75
+ ```
76
+
77
+ The SBOM uses
78
+ `application/vnd.cyclonedx+json;version=1.7`. The vulnerability report uses
79
+ `application/vnd.prc.grype.vulnerability-report+json;version=1` and the public
80
+ `schemas/grype-vulnerability-report.schema.json` contract.
81
+
82
+ ## What the gates prove
83
+
84
+ The generated-SBOM assertion passes only when the exact catalog-pinned Syft
85
+ manifest produces a completed `sbom-generation` observation with the configured
86
+ `value` outcome. For identical sealed input, the normalizer removes Syft's
87
+ generation timestamp, document serial number, and source component `bom-ref`,
88
+ then canonically orders the retained component, file, license, hash, package
89
+ URL, and dependency content.
90
+
91
+ The known-vulnerability assertion passes only when the exact catalog-pinned
92
+ Grype manifest reports `not_found`. Any `found` observation fails the critical
93
+ gate. The normalized result retains vulnerability and alias identity, affected
94
+ package and locations, severity, best available CVSS and EPSS values, CISA KEV
95
+ and known-ransomware flags, Grype risk, fix state and versions, and database
96
+ build and provider provenance. Target `.grype.yaml`, VEX, and ignore policy
97
+ cannot suppress the scanner-owned analysis; any ignored match or unsupported
98
+ package alert makes the adapter fail closed.
99
+
100
+ The engine, not either tool, maps these factual outcomes to Pass or Fail. Both
101
+ executions remain bound to the inventory, snapshot, manifest, image, command,
102
+ artifact, and external-data digests.
103
+
104
+ ## Profile coverage
105
+
106
+ In addition to the two executed analysis gates, the profile checks:
107
+
108
+ - repository license presence;
109
+ - dependency lock or checksum coverage and nonempty dependency inputs;
110
+ - configured dependency-update automation;
111
+ - immutable GitHub Actions references;
112
+ - declared runtime versions;
113
+ - immutable container base references; and
114
+ - locked Terraform provider selections.
115
+
116
+ ## Deliberate limitations
117
+
118
+ This is source-repository analysis, not analysis of a compiled binary, container
119
+ image, installer, deployment bundle, or exact production release. Discovery is
120
+ limited by Syft and Grype cataloger coverage and the scanner's regular-file
121
+ inventory. A clean result is time-bound to the recorded database and does not
122
+ prove that no vulnerability exists, that every dependency is reachable, that
123
+ the built artifact matches the source tree, or that severity and exploitability
124
+ metadata are complete. Vulnerability feeds, package matching, aliases, fixes,
125
+ CVSS, EPSS, KEV, and risk can contain delays, false positives, false negatives,
126
+ or incomplete data. License compatibility, provenance, signatures, runtime
127
+ configuration, and deployed equivalence remain separate assertions.
128
+
129
+ See the [CycloneDX specification](https://github.com/CycloneDX/specification),
130
+ [Syft v1.51.0 release](https://github.com/anchore/syft/releases/tag/v1.51.0),
131
+ [Grype v0.116.1 release](https://github.com/anchore/grype/releases/tag/v0.116.1),
132
+ and [Grype database documentation](https://oss.anchore.com/docs/guides/vulnerability/database/).
@@ -0,0 +1,60 @@
1
+ # Test discovery evidence
2
+
3
+ `PRC-A-CORE-010` uses `prc.native.test-suite@0.2` to distinguish a
4
+ collectable test declaration from a file that merely has a test-looking name.
5
+ The check reads only inventory-bound repository bytes and never imports code or
6
+ runs a test command.
7
+
8
+ ## What passes
9
+
10
+ The assertion passes when the scanner verifies either:
11
+
12
+ - a conventional test path containing a supported language or framework test
13
+ declaration; or
14
+ - a `package.json` `scripts.test` value that is a nonempty, non-placeholder
15
+ command.
16
+
17
+ The native recognizer covers conventional Go `TestXxx(*testing.T)` functions,
18
+ pytest-style `test_` functions, JavaScript and TypeScript `test(...)` or
19
+ `it(...)` declarations, and bounded declaration patterns for common Rust,
20
+ Ruby, JVM, .NET, PHP, Swift, C, C++, and Scala frameworks. A malformed file,
21
+ empty file, comment-only file, skipped JavaScript declaration, or the default
22
+ `no test specified` npm placeholder does not pass.
23
+
24
+ The conventions follow the [Go testing contract](https://go.dev/doc/code#Testing)
25
+ and [pytest collection rules](https://docs.pytest.org/en/stable/explanation/goodpractices.html#conventions-for-python-test-discovery).
26
+ Package scripts are treated only as declarations; their contents are not run.
27
+
28
+ ## R2 proposal boundary
29
+
30
+ The scanner-owned missing-test task is narrower than general recognition. It
31
+ currently plans new tests only for Go, Python, JavaScript, and TypeScript source
32
+ files. Before creating a candidate workspace, the anti-gaming audit reconstructs
33
+ the proposed test from the validated patch and requires:
34
+
35
+ 1. a conventional path;
36
+ 2. a collectable test declaration;
37
+ 3. a recognized behavioral assertion or failure check;
38
+ 4. no suppression, skip, constant assertion, or modification to an existing
39
+ test or specification file.
40
+
41
+ This prevents an agent from closing the discovery finding with an empty,
42
+ comment-only, invocation-only, skipped, or constant-assertion test. The
43
+ candidate is then rescanned from fresh bytes and must close the exact finding
44
+ without regressing a baseline pass.
45
+
46
+ ## Deliberate limitation
47
+
48
+ Static discovery does not establish that the test compiles, executes, is
49
+ deterministic, covers important behavior, or would fail for the defect it is
50
+ intended to catch. The current R2 path therefore remains experimental and does
51
+ not edit production code. It independently runs scanner-owned Go, Python, or
52
+ plain-JavaScript test commands in a digest-pinned, network-denied OCI sandbox
53
+ before acceptance.
54
+ Test-first mutation evidence, stronger coverage oracles, and ecosystem-specific
55
+ verifiers are still required before broader autonomous remediation can rely on
56
+ this assertion.
57
+
58
+ The comprehensive core benchmark includes positive and negative cases for a
59
+ real declaration, a test-looking file without a declaration, a meaningful
60
+ package test command, and the default placeholder command.
@@ -0,0 +1,183 @@
1
+ :root {
2
+ --md-primary-fg-color: #3730a3;
3
+ --md-primary-fg-color--light: #4f46e5;
4
+ --md-primary-fg-color--dark: #312e81;
5
+ --md-accent-fg-color: #0f766e;
6
+ }
7
+
8
+ [data-md-color-scheme="slate"] {
9
+ --md-accent-fg-color: #5eead4;
10
+ }
11
+
12
+ .md-typeset h1 {
13
+ font-weight: 700;
14
+ letter-spacing: -0.02em;
15
+ }
16
+
17
+ .md-typeset h2 {
18
+ font-weight: 650;
19
+ letter-spacing: -0.012em;
20
+ }
21
+
22
+ .md-typeset blockquote {
23
+ border-left-color: var(--md-accent-fg-color);
24
+ }
25
+
26
+ .task-list-control input[type="checkbox"] {
27
+ accent-color: var(--md-accent-fg-color);
28
+ }
29
+
30
+ .md-typeset table:not([class]) {
31
+ border-radius: 0.2rem;
32
+ box-shadow: 0 0 0 1px var(--md-typeset-table-color);
33
+ display: table;
34
+ width: 100%;
35
+ }
36
+
37
+ .md-typeset table:not([class]) th {
38
+ background: color-mix(in srgb, var(--md-primary-fg-color) 9%, transparent);
39
+ font-weight: 650;
40
+ }
41
+
42
+ .md-typeset table:not([class]) td,
43
+ .md-typeset table:not([class]) th {
44
+ padding: 0.7em 0.9em;
45
+ vertical-align: top;
46
+ }
47
+
48
+ .md-header__source {
49
+ height: 1.8rem;
50
+ margin-left: 0.5rem;
51
+ width: auto;
52
+ }
53
+
54
+ .prc-header-star {
55
+ align-items: center;
56
+ border: 1px solid currentColor;
57
+ border-radius: 0.25rem;
58
+ box-sizing: border-box;
59
+ color: inherit;
60
+ display: inline-flex;
61
+ font-weight: 650;
62
+ gap: 0.3rem;
63
+ height: 1.8rem;
64
+ justify-content: center;
65
+ line-height: 1;
66
+ opacity: 0.94;
67
+ padding: 0 0.55rem;
68
+ text-decoration: none;
69
+ vertical-align: top;
70
+ }
71
+
72
+ .prc-header-star:hover,
73
+ .prc-header-star:focus-visible {
74
+ background: rgb(255 255 255 / 12%);
75
+ opacity: 1;
76
+ }
77
+
78
+ .prc-header-star__icon {
79
+ display: block;
80
+ flex: 0 0 1rem;
81
+ height: 1rem;
82
+ width: 1rem;
83
+ }
84
+
85
+ .prc-header-star__icon svg {
86
+ display: block;
87
+ height: 100%;
88
+ margin: 0;
89
+ width: 100%;
90
+ }
91
+
92
+ .prc-header-star__label {
93
+ display: block;
94
+ font-size: 0.7rem;
95
+ }
96
+
97
+ .prc-footer-meta {
98
+ align-items: center;
99
+ gap: 0.6rem;
100
+ }
101
+
102
+ .prc-footer-actions {
103
+ align-items: center;
104
+ display: flex;
105
+ gap: 0.15rem;
106
+ margin-left: auto;
107
+ }
108
+
109
+ .prc-footer-star {
110
+ align-items: center;
111
+ border-radius: 0.2rem;
112
+ color: var(--md-footer-fg-color--light);
113
+ display: inline-flex;
114
+ font-size: 0.64rem;
115
+ font-weight: 600;
116
+ gap: 0.3rem;
117
+ line-height: 1;
118
+ padding: 0.45rem 0.5rem;
119
+ text-decoration: none;
120
+ }
121
+
122
+ .prc-footer-star:hover,
123
+ .prc-footer-star:focus-visible {
124
+ background: rgb(255 255 255 / 8%);
125
+ color: var(--md-footer-fg-color);
126
+ }
127
+
128
+ .prc-footer-star__icon {
129
+ display: block;
130
+ height: 0.8rem;
131
+ width: 0.8rem;
132
+ }
133
+
134
+ .prc-footer-star__icon svg {
135
+ display: block;
136
+ height: 100%;
137
+ width: 100%;
138
+ }
139
+
140
+ .prc-footer-actions .md-social {
141
+ margin: 0;
142
+ padding: 0;
143
+ }
144
+
145
+ :focus-visible {
146
+ outline: 3px solid var(--md-accent-fg-color);
147
+ outline-offset: 3px;
148
+ }
149
+
150
+ @media screen and (max-width: 44.984375em) {
151
+ .md-typeset table:not([class]) {
152
+ display: block;
153
+ }
154
+
155
+ .md-header__source,
156
+ .prc-header-star {
157
+ height: 1.7rem;
158
+ }
159
+
160
+ .prc-header-star {
161
+ padding: 0 0.4rem;
162
+ }
163
+
164
+ .prc-header-star__label {
165
+ display: none;
166
+ }
167
+
168
+ .prc-footer-meta {
169
+ align-items: flex-start;
170
+ flex-direction: column;
171
+ gap: 0.1rem;
172
+ padding: 0.6rem 0.8rem;
173
+ }
174
+
175
+ .prc-footer-meta .md-copyright,
176
+ .prc-footer-actions {
177
+ margin: 0;
178
+ }
179
+
180
+ .prc-footer-actions {
181
+ margin-left: 0;
182
+ }
183
+ }
@@ -0,0 +1,302 @@
1
+ schema_version: prc.benchmark-suite/v0.2
2
+ id: prc.benchmark.core-native@1.0
3
+ title: Comprehensive core native assertion benchmark
4
+ profile_id: prc/core-repository
5
+ cases:
6
+ - id: baseline-state-space
7
+ target: targets/baseline
8
+ expectations:
9
+ - {assertion_id: PRC-A-CORE-001, assessment: pass, execution: completed}
10
+ - {assertion_id: PRC-A-CORE-002, assessment: fail, execution: completed}
11
+ - {assertion_id: PRC-A-CORE-003, assessment: fail, execution: completed}
12
+ - {assertion_id: PRC-A-CORE-004, assessment: fail, execution: completed}
13
+ - {assertion_id: PRC-A-CORE-005, assessment: fail, execution: completed}
14
+ - {assertion_id: PRC-A-CORE-006, assessment: fail, execution: completed}
15
+ - {assertion_id: PRC-A-CORE-007, assessment: not_applicable, execution: not_run}
16
+ - {assertion_id: PRC-A-CORE-008, assessment: not_applicable, execution: not_run}
17
+ - {assertion_id: PRC-A-CORE-009, assessment: fail, execution: completed}
18
+ - {assertion_id: PRC-A-CORE-010, assessment: fail, execution: completed}
19
+ - {assertion_id: PRC-A-CORE-011, assessment: not_applicable, execution: not_run}
20
+ - {assertion_id: PRC-A-CORE-012, assessment: manual_review, execution: completed}
21
+ - {assertion_id: PRC-A-CORE-013, assessment: unknown, execution: blocked}
22
+ - {assertion_id: PRC-A-CORE-014, assessment: pass, execution: completed}
23
+ - {assertion_id: PRC-A-CORE-015, assessment: fail, execution: completed}
24
+ - {assertion_id: PRC-A-CORE-016, assessment: not_applicable, execution: not_run}
25
+ - {assertion_id: PRC-A-CORE-017, assessment: not_applicable, execution: not_run}
26
+ - {assertion_id: PRC-A-CORE-018, assessment: not_applicable, execution: not_run}
27
+ - {assertion_id: PRC-A-CORE-019, assessment: not_applicable, execution: not_run}
28
+ - {assertion_id: PRC-A-CORE-020, assessment: not_applicable, execution: not_run}
29
+ - {assertion_id: PRC-A-CORE-021, assessment: pass, execution: completed}
30
+ - {assertion_id: PRC-A-CORE-022, assessment: pass, execution: completed}
31
+ - {assertion_id: PRC-A-CORE-023, assessment: not_applicable, execution: not_run}
32
+ - {assertion_id: PRC-A-CORE-024, assessment: not_applicable, execution: not_run}
33
+ - {assertion_id: PRC-A-CORE-025, assessment: not_applicable, execution: not_run}
34
+ - {assertion_id: PRC-A-CORE-026, assessment: not_applicable, execution: not_run}
35
+ - {assertion_id: PRC-A-CORE-027, assessment: not_applicable, execution: not_run}
36
+ - {assertion_id: PRC-A-CORE-028, assessment: not_applicable, execution: not_run}
37
+ - {assertion_id: PRC-A-CORE-029, assessment: not_applicable, execution: not_run}
38
+ - {assertion_id: PRC-A-CORE-030, assessment: not_applicable, execution: not_run}
39
+ - {assertion_id: PRC-A-K8S-001, assessment: not_applicable, execution: not_run}
40
+ - {assertion_id: PRC-A-K8S-002, assessment: not_applicable, execution: not_run}
41
+ - {assertion_id: PRC-A-K8S-003, assessment: not_applicable, execution: not_run}
42
+ - {assertion_id: PRC-A-K8S-004, assessment: not_applicable, execution: not_run}
43
+ - {assertion_id: PRC-A-CORE-031, assessment: pass, execution: completed}
44
+ - {assertion_id: PRC-A-GO-001, assessment: not_applicable, execution: not_run}
45
+ - {assertion_id: PRC-A-GO-002, assessment: not_applicable, execution: not_run}
46
+ - {assertion_id: PRC-A-API-001, assessment: not_applicable, execution: not_run}
47
+ - {assertion_id: PRC-A-API-002, assessment: not_applicable, execution: not_run}
48
+ - {assertion_id: PRC-A-API-003, assessment: not_applicable, execution: not_run}
49
+ - id: foundation-present
50
+ target: targets/foundation-present
51
+ expectations:
52
+ - {assertion_id: PRC-A-CORE-001, assessment: pass, execution: completed}
53
+ - {assertion_id: PRC-A-CORE-002, assessment: pass, execution: completed}
54
+ - {assertion_id: PRC-A-CORE-003, assessment: pass, execution: completed}
55
+ - {assertion_id: PRC-A-CORE-004, assessment: pass, execution: completed}
56
+ - {assertion_id: PRC-A-CORE-005, assessment: pass, execution: completed}
57
+ - {assertion_id: PRC-A-CORE-006, assessment: pass, execution: completed}
58
+ - {assertion_id: PRC-A-CORE-007, assessment: pass, execution: completed}
59
+ - {assertion_id: PRC-A-CORE-008, assessment: pass, execution: completed}
60
+ - {assertion_id: PRC-A-CORE-009, assessment: pass, execution: completed}
61
+ - {assertion_id: PRC-A-CORE-010, assessment: pass, execution: completed}
62
+ - {assertion_id: PRC-A-CORE-011, assessment: pass, execution: completed}
63
+ - {assertion_id: PRC-A-CORE-012, assessment: manual_review, execution: completed}
64
+ - {assertion_id: PRC-A-CORE-013, assessment: unknown, execution: blocked}
65
+ - {assertion_id: PRC-A-CORE-014, assessment: pass, execution: completed}
66
+ - {assertion_id: PRC-A-CORE-015, assessment: fail, execution: completed}
67
+ - {assertion_id: PRC-A-CORE-016, assessment: pass, execution: completed}
68
+ - {assertion_id: PRC-A-CORE-017, assessment: pass, execution: completed}
69
+ - {assertion_id: PRC-A-CORE-018, assessment: pass, execution: completed}
70
+ - {assertion_id: PRC-A-CORE-019, assessment: pass, execution: completed}
71
+ - {assertion_id: PRC-A-CORE-020, assessment: pass, execution: completed}
72
+ - {assertion_id: PRC-A-CORE-021, assessment: pass, execution: completed}
73
+ - {assertion_id: PRC-A-CORE-022, assessment: pass, execution: completed}
74
+ - {assertion_id: PRC-A-CORE-023, assessment: pass, execution: completed}
75
+ - {assertion_id: PRC-A-CORE-024, assessment: pass, execution: completed}
76
+ - {assertion_id: PRC-A-CORE-025, assessment: pass, execution: completed}
77
+ - id: readme-missing
78
+ target: targets/readme-missing
79
+ expectations:
80
+ - {assertion_id: PRC-A-CORE-001, assessment: fail, execution: completed}
81
+ - id: test-declaration-valid
82
+ target: targets/test-declaration-valid
83
+ expectations:
84
+ - {assertion_id: PRC-A-CORE-010, assessment: pass, execution: completed}
85
+ - id: test-path-without-declaration
86
+ target: targets/test-path-without-declaration
87
+ expectations:
88
+ - {assertion_id: PRC-A-CORE-010, assessment: fail, execution: completed}
89
+ - id: package-test-command
90
+ target: targets/package-test-command
91
+ expectations:
92
+ - {assertion_id: PRC-A-CORE-010, assessment: pass, execution: completed}
93
+ - id: package-test-placeholder
94
+ target: targets/package-test-placeholder
95
+ expectations:
96
+ - {assertion_id: PRC-A-CORE-010, assessment: fail, execution: completed}
97
+ - id: dependency-lock-present
98
+ target: targets/dependency-lock-present
99
+ expectations:
100
+ - {assertion_id: PRC-A-CORE-007, assessment: pass, execution: completed}
101
+ - {assertion_id: PRC-A-CORE-023, assessment: pass, execution: completed}
102
+ - {assertion_id: PRC-A-CORE-024, assessment: pass, execution: completed}
103
+ - {assertion_id: PRC-A-CORE-025, assessment: pass, execution: completed}
104
+ - id: dependency-lock-missing
105
+ target: targets/dependency-lock-missing
106
+ expectations:
107
+ - {assertion_id: PRC-A-CORE-007, assessment: fail, execution: completed}
108
+ - {assertion_id: PRC-A-CORE-016, assessment: fail, execution: completed}
109
+ - {assertion_id: PRC-A-CORE-023, assessment: pass, execution: completed}
110
+ - {assertion_id: PRC-A-CORE-024, assessment: fail, execution: completed}
111
+ - {assertion_id: PRC-A-CORE-025, assessment: pass, execution: completed}
112
+ - id: runtime-missing
113
+ target: targets/runtime-missing
114
+ expectations:
115
+ - {assertion_id: PRC-A-CORE-025, assessment: fail, execution: completed}
116
+ - id: workflow-valid
117
+ target: targets/workflow-valid
118
+ expectations:
119
+ - {assertion_id: PRC-A-CORE-008, assessment: pass, execution: completed}
120
+ - {assertion_id: PRC-A-CORE-009, assessment: pass, execution: completed}
121
+ - {assertion_id: PRC-A-CORE-011, assessment: pass, execution: completed}
122
+ - {assertion_id: PRC-A-CORE-017, assessment: pass, execution: completed}
123
+ - {assertion_id: PRC-A-CORE-018, assessment: pass, execution: completed}
124
+ - {assertion_id: PRC-A-CORE-019, assessment: pass, execution: completed}
125
+ - {assertion_id: PRC-A-CORE-020, assessment: pass, execution: completed}
126
+ - id: workflow-risky
127
+ target: targets/workflow-risky
128
+ expectations:
129
+ - {assertion_id: PRC-A-CORE-008, assessment: fail, execution: completed}
130
+ - {assertion_id: PRC-A-CORE-011, assessment: fail, execution: completed}
131
+ - {assertion_id: PRC-A-CORE-017, assessment: pass, execution: completed}
132
+ - {assertion_id: PRC-A-CORE-018, assessment: pass, execution: completed}
133
+ - {assertion_id: PRC-A-CORE-019, assessment: fail, execution: completed}
134
+ - {assertion_id: PRC-A-CORE-020, assessment: manual_review, execution: completed}
135
+ - id: workflow-no-jobs
136
+ target: targets/workflow-no-jobs
137
+ expectations:
138
+ - {assertion_id: PRC-A-CORE-017, assessment: pass, execution: completed}
139
+ - {assertion_id: PRC-A-CORE-018, assessment: fail, execution: completed}
140
+ - {assertion_id: PRC-A-CORE-019, assessment: pass, execution: completed}
141
+ - {assertion_id: PRC-A-CORE-020, assessment: pass, execution: completed}
142
+ - id: workflow-malformed
143
+ target: targets/workflow-malformed
144
+ expectations:
145
+ - {assertion_id: PRC-A-CORE-011, assessment: unknown, execution: error}
146
+ - {assertion_id: PRC-A-CORE-017, assessment: unknown, execution: error}
147
+ - {assertion_id: PRC-A-CORE-018, assessment: unknown, execution: error}
148
+ - {assertion_id: PRC-A-CORE-019, assessment: unknown, execution: error}
149
+ - {assertion_id: PRC-A-CORE-020, assessment: unknown, execution: error}
150
+ - id: container-valid
151
+ target: targets/container-valid
152
+ expectations:
153
+ - {assertion_id: PRC-A-CORE-026, assessment: pass, execution: completed}
154
+ - {assertion_id: PRC-A-CORE-027, assessment: pass, execution: completed}
155
+ - id: container-risky
156
+ target: targets/container-risky-template
157
+ setup:
158
+ - {operation: replace_text, path: Dockerfile, find: scratch, replace: "alpine:latest"}
159
+ - {operation: replace_text, path: Dockerfile, find: "65532", replace: root}
160
+ expectations:
161
+ - {assertion_id: PRC-A-CORE-026, assessment: fail, execution: completed}
162
+ - {assertion_id: PRC-A-CORE-027, assessment: fail, execution: completed}
163
+ - id: terraform-locked
164
+ target: targets/terraform-locked
165
+ expectations:
166
+ - {assertion_id: PRC-A-CORE-028, assessment: pass, execution: completed}
167
+ - id: terraform-unlocked
168
+ target: targets/terraform-unlocked-template
169
+ setup:
170
+ - {operation: truncate, path: .terraform.lock.hcl}
171
+ expectations:
172
+ - {assertion_id: PRC-A-CORE-028, assessment: fail, execution: completed}
173
+ - id: kubernetes-valid
174
+ target: targets/kubernetes-valid
175
+ expectations:
176
+ - {assertion_id: PRC-A-CORE-029, assessment: pass, execution: completed}
177
+ - {assertion_id: PRC-A-CORE-030, assessment: pass, execution: completed}
178
+ - {assertion_id: PRC-A-K8S-001, assessment: pass, execution: completed}
179
+ - {assertion_id: PRC-A-K8S-002, assessment: pass, execution: completed}
180
+ - {assertion_id: PRC-A-K8S-003, assessment: pass, execution: completed}
181
+ - {assertion_id: PRC-A-K8S-004, assessment: pass, execution: completed}
182
+ - id: kubernetes-risky
183
+ target: targets/kubernetes-risky-template
184
+ setup:
185
+ - {operation: replace_text, path: deployment.yaml, find: "runAsNonRoot: true", replace: "runAsUser: 0"}
186
+ - {operation: replace_text, path: deployment.yaml, find: "requests:", replace: "fixtureRequests:"}
187
+ - {operation: replace_text, path: deployment.yaml, find: "limits:", replace: "fixtureLimits:"}
188
+ - {operation: replace_text, path: deployment.yaml, find: "hostNetwork: false", replace: "hostNetwork: true"}
189
+ - {operation: replace_text, path: deployment.yaml, find: "privileged: false", replace: "privileged: true"}
190
+ - {operation: replace_text, path: deployment.yaml, find: "allowPrivilegeEscalation: false", replace: "allowPrivilegeEscalation: true"}
191
+ - {operation: replace_text, path: deployment.yaml, find: "drop: [ALL]", replace: "drop: [CHOWN]"}
192
+ - {operation: replace_text, path: deployment.yaml, find: "type: RuntimeDefault", replace: "type: Unconfined"}
193
+ expectations:
194
+ - {assertion_id: PRC-A-CORE-029, assessment: fail, execution: completed}
195
+ - {assertion_id: PRC-A-CORE-030, assessment: fail, execution: completed}
196
+ - {assertion_id: PRC-A-K8S-001, assessment: fail, execution: completed}
197
+ - {assertion_id: PRC-A-K8S-002, assessment: fail, execution: completed}
198
+ - {assertion_id: PRC-A-K8S-003, assessment: fail, execution: completed}
199
+ - {assertion_id: PRC-A-K8S-004, assessment: fail, execution: completed}
200
+ - id: private-key-materialized
201
+ target: targets/private-key-template
202
+ setup:
203
+ - {operation: replace_text, path: deploy.pem, find: BEGIN FIXTURE, replace: BEGIN PRIVATE}
204
+ - {operation: replace_text, path: deploy.pem, find: END FIXTURE, replace: END PRIVATE}
205
+ expectations:
206
+ - {assertion_id: PRC-A-CORE-031, assessment: fail, execution: completed}
207
+ - id: conflict-markers-materialized
208
+ target: targets/conflict-template
209
+ setup:
210
+ - {operation: replace_text, path: app.js, find: PRC_CONFLICT_START, replace: "<<<<<<< HEAD"}
211
+ - {operation: replace_text, path: app.js, find: PRC_CONFLICT_MIDDLE, replace: "======="}
212
+ - {operation: replace_text, path: app.js, find: PRC_CONFLICT_END, replace: ">>>>>>> feature"}
213
+ expectations:
214
+ - {assertion_id: PRC-A-CORE-021, assessment: fail, execution: completed}
215
+ - id: empty-manifest-materialized
216
+ target: targets/empty-manifest-template
217
+ setup:
218
+ - {operation: truncate, path: package.json}
219
+ expectations:
220
+ - {assertion_id: PRC-A-CORE-023, assessment: fail, execution: completed}
221
+ - id: final-newline-materialized
222
+ target: targets/final-newline-template
223
+ setup:
224
+ - {operation: remove_final_newline, path: app.py}
225
+ expectations:
226
+ - {assertion_id: PRC-A-CORE-014, assessment: fail, execution: completed}
227
+ - id: git-head-materialized
228
+ target: targets/baseline
229
+ setup:
230
+ - {operation: git_head, value: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}
231
+ expectations:
232
+ - {assertion_id: PRC-A-CORE-015, assessment: pass, execution: completed}
233
+ - id: writable-mode-materialized
234
+ target: targets/baseline
235
+ setup:
236
+ - {operation: chmod, path: app.go, mode: 438}
237
+ expectations:
238
+ - {assertion_id: PRC-A-CORE-022, assessment: fail, execution: completed}
239
+ - id: go-http-timeout-safe
240
+ target: targets/go-http-timeout-safe
241
+ expectations:
242
+ - {assertion_id: PRC-A-GO-001, assessment: pass, execution: completed}
243
+ - {assertion_id: PRC-A-GO-002, assessment: pass, execution: completed}
244
+ - id: go-http-timeout-risky
245
+ target: targets/go-http-timeout-risky-template
246
+ setup:
247
+ - {operation: replace_text, path: client.go, find: client.Get, replace: web.Get}
248
+ expectations:
249
+ - {assertion_id: PRC-A-GO-001, assessment: fail, execution: completed}
250
+ - id: go-http-timeout-malformed
251
+ target: targets/go-http-timeout-malformed-template
252
+ setup:
253
+ - {operation: replace_text, path: client.go, find: "// PRC_INVALID_GO_TOKEN", replace: "func broken( {"}
254
+ expectations:
255
+ - {assertion_id: PRC-A-GO-001, assessment: unknown, execution: error}
256
+ - {assertion_id: PRC-A-GO-002, assessment: unknown, execution: error}
257
+ - id: go-http-server-timeout-risky
258
+ target: targets/go-http-server-timeout-risky-template
259
+ setup:
260
+ - {operation: replace_text, path: server.go, find: server.ListenAndServe(), replace: 'http.ListenAndServe(":8080", nil)'}
261
+ expectations:
262
+ - {assertion_id: PRC-A-GO-002, assessment: fail, execution: completed}
263
+ - id: openapi-root-valid
264
+ target: targets/openapi-root-valid
265
+ expectations:
266
+ - {assertion_id: PRC-A-API-001, assessment: pass, execution: completed}
267
+ - {assertion_id: PRC-A-API-002, assessment: pass, execution: completed}
268
+ - {assertion_id: PRC-A-API-003, assessment: pass, execution: completed}
269
+ - id: openapi-root-risky
270
+ target: targets/openapi-root-risky-template
271
+ setup:
272
+ - {operation: replace_text, path: openapi.yaml, find: 'title: Example API', replace: 'title: ""'}
273
+ expectations:
274
+ - {assertion_id: PRC-A-API-001, assessment: fail, execution: completed}
275
+ - id: openapi-root-malformed
276
+ target: targets/openapi-root-malformed-template
277
+ setup:
278
+ - {operation: replace_text, path: openapi.yaml, find: 'openapi: 3.2.0', replace: 'openapi: ['}
279
+ expectations:
280
+ - {assertion_id: PRC-A-API-001, assessment: unknown, execution: error}
281
+ - {assertion_id: PRC-A-API-002, assessment: unknown, execution: error}
282
+ - {assertion_id: PRC-A-API-003, assessment: unknown, execution: error}
283
+ - id: openapi-operation-responses-risky
284
+ target: targets/openapi-operation-responses-risky-template
285
+ setup:
286
+ - {operation: replace_text, path: openapi.yaml, find: '"200":', replace: 'x-internal-note:'}
287
+ expectations:
288
+ - {assertion_id: PRC-A-API-002, assessment: fail, execution: completed}
289
+ - {assertion_id: PRC-A-API-003, assessment: pass, execution: completed}
290
+ - id: openapi-operation-ids-risky
291
+ target: targets/openapi-operation-ids-risky-template
292
+ setup:
293
+ - {operation: replace_text, path: openapi.yaml, find: getStatus, replace: duplicateOperation}
294
+ expectations:
295
+ - {assertion_id: PRC-A-API-002, assessment: pass, execution: completed}
296
+ - {assertion_id: PRC-A-API-003, assessment: fail, execution: completed}
297
+ quality_budget:
298
+ minimum_precision: 1
299
+ minimum_recall: 1
300
+ maximum_false_positive_rate: 0
301
+ maximum_mismatches: 0
302
+ require_determinism: true