@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,64 @@
1
+ # Infrastructure policy profile
2
+
3
+ `prc/iac@0.1` combines bounded native checks with a reviewed Checkov 3.3.8
4
+ analysis of inventoried Terraform, Kubernetes, and container definitions. It is
5
+ applicable only when the inventory contains at least one of those inputs.
6
+
7
+ ## Run it
8
+
9
+ Review `adapters/checkov-v3.3.8.yaml` in the release or repository root, then
10
+ pre-pull the exact reviewed image:
11
+
12
+ ```bash
13
+ docker pull docker.io/bridgecrew/checkov@sha256:c64ffb6d6fc8087c896341a2c697770a04a1cf558db04fa7b8129d8ca6bce336
14
+ ```
15
+
16
+ Run the profile with an explicit local-verification capability grant:
17
+
18
+ ```bash
19
+ ./prc scan /path/to/project \
20
+ --profile prc/iac \
21
+ --mode verify-local \
22
+ --adapter-manifest adapters/checkov-v3.3.8.yaml
23
+ ```
24
+
25
+ The ordinary `prc scan` command does not launch Checkov or any other external
26
+ analyzer. The `verify-local` mode and exact manifest are both required.
27
+
28
+ ## What is evaluated
29
+
30
+ The profile includes native checks for immutable container base identities,
31
+ non-root container users, Terraform dependency locks, Kubernetes non-root
32
+ workloads, privilege restrictions, Linux capabilities, seccomp, and container
33
+ resource requests and limits. `PRC-A-IAC-001` additionally consumes only the
34
+ `iac-policy` observations from the exact manifest digest bound into the catalog.
35
+
36
+ Checkov receives a scanner-owned list containing exactly the inventoried
37
+ Terraform, Kubernetes, and Dockerfile paths. A passing adapter result means that
38
+ the checks embedded in this pinned image reported no violation for supported
39
+ inputs. It does not prove deployed-state correctness, runtime behavior, cost,
40
+ drift, accessibility of external modules, or coverage by future policies.
41
+
42
+ ## Isolation and failure behavior
43
+
44
+ The adapter:
45
+
46
+ - mounts a content-verified snapshot read-only and rechecks its digest before
47
+ and after execution;
48
+ - runs as the invoking non-root identity with no network, dropped capabilities,
49
+ a read-only container filesystem, bounded resources, and scanner-owned
50
+ scratch;
51
+ - disables policy downloads, result upload, external modules, variable
52
+ evaluation, and external checks;
53
+ - runs outside the target working directory so `.checkov.yml` cannot change the
54
+ scanner-owned policy or hide passed results;
55
+ - rejects inline suppressions, parsing errors, output drift, unexpected online
56
+ metadata, code disclosure, unbound paths, and unbounded records; and
57
+ - accepts bounded graph entity objects only long enough to validate the native
58
+ report, then discards them so raw target configuration is not persisted in
59
+ normalized artifacts.
60
+
61
+ A verified policy violation becomes a canonical finding in the detailed HTML
62
+ report. Unsupported files, ambiguous outcomes, parser failures, and safety
63
+ violations never become a pass. `prc scan` still does not modify Terraform,
64
+ Kubernetes, Dockerfiles, cloud resources, clusters, or any other target.
@@ -0,0 +1,63 @@
1
+ # Kubernetes workload analysis
2
+
3
+ The focused `prc/kubernetes@0.1` profile performs bounded, no-execution
4
+ repository analysis of detected Kubernetes workload manifests. Its six
5
+ assertions cover non-root execution, resource requests and limits, privileged
6
+ host access, privilege escalation, Linux capabilities, and seccomp profiles.
7
+ The same assertions are included in `prc/core-repository@1.0`.
8
+
9
+ Run only the Kubernetes assertions with:
10
+
11
+ ```bash
12
+ prc scan \
13
+ --target PATH \
14
+ --catalog-root PATH_TO_RELEASE \
15
+ --profile prc/kubernetes
16
+ ```
17
+
18
+ ## Security properties
19
+
20
+ The native checks inspect `Pod`, `Deployment`, `StatefulSet`, `DaemonSet`,
21
+ `ReplicaSet`, `Job`, and `CronJob` pod specifications. For ordinary, init, and
22
+ ephemeral containers where the field is defined by Kubernetes, they verify:
23
+
24
+ - `runAsNonRoot` is affirmed at pod or container scope and `runAsUser: 0` is
25
+ absent;
26
+ - host networking, PID, and IPC namespaces remain unset or false, Windows
27
+ HostProcess remains unset or false, `hostPath` volumes are absent, and
28
+ containers are not privileged;
29
+ - Linux containers explicitly set `allowPrivilegeEscalation: false`;
30
+ - Linux containers drop `ALL` capabilities and add back at most
31
+ `NET_BIND_SERVICE`;
32
+ - Linux containers inherit or select a `RuntimeDefault` or `Localhost` seccomp
33
+ profile; and
34
+ - ordinary and init containers declare nonempty resource requests and limits.
35
+
36
+ The security behavior follows the relevant Baseline and Restricted fields in
37
+ the authoritative
38
+ [Kubernetes Pod Security Standards](https://kubernetes.io/docs/concepts/security/pod-security-standards/).
39
+ The Linux-only privilege-escalation, capability, and seccomp requirements are
40
+ not applied when `spec.os.name` is explicitly `windows`, matching the standard's
41
+ operating-system distinction. The
42
+ [Kubernetes security-context documentation](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
43
+ explains how those fields affect container isolation.
44
+
45
+ ## Evidence and failure behavior
46
+
47
+ Each result binds content-addressed evidence to the inventoried manifest. A
48
+ failure reports bounded file, line, and column locations without executing
49
+ `kubectl`, Helm, Kustomize, manifest hooks, or target code. A file over the
50
+ native parser limit, malformed YAML, a duplicate mapping key, an alias, a
51
+ mutation after inventory, or another unprovable parse condition returns an
52
+ execution error and `unknown`, never a pass.
53
+
54
+ ## Deliberate limitations
55
+
56
+ This profile is not a complete Pod Security Admission implementation. It does
57
+ not render templates or overlays, inspect custom workload resources, resolve
58
+ external values, validate every Kubernetes API field, prove that admission
59
+ policy is enabled, inspect an image, contact a cluster, or prove what is
60
+ deployed. It also does not infer a risk exception for workloads that
61
+ intentionally need host or elevated access. Those cases require explicit,
62
+ separately authorized evidence or a signed time-bounded exception; the native
63
+ repository result remains a failure.
@@ -0,0 +1,138 @@
1
+ # Read-only MCP agent integration
2
+
3
+ The scanner can expose its deterministic inspect surface to Codex, Claude Code,
4
+ or another local Model Context Protocol client. The MCP process is a read-only
5
+ observer for one target selected by the operator at startup. It does not give a
6
+ model a new write path, execute project commands, launch adapters or providers,
7
+ store state, apply remediation, accept risk, or make a release decision.
8
+
9
+ This separation is intentional: the agent may edit a workspace through its own
10
+ reviewed tools, while the scanner independently rebuilds evidence and decides
11
+ whether the exact target now satisfies the selected profile.
12
+
13
+ ## Start a path-locked server
14
+
15
+ Build the scanner, then give the server absolute paths for both the trusted
16
+ catalog and the repository being assessed:
17
+
18
+ ```bash
19
+ go build -trimpath -o /absolute/path/prc ./cmd/prc
20
+
21
+ /absolute/path/prc mcp serve \
22
+ --catalog-root /absolute/path/production-readiness-checklist \
23
+ --target /absolute/path/project \
24
+ --profile prc/core-repository
25
+ ```
26
+
27
+ An optional validated configuration can be locked into the assessment:
28
+
29
+ ```bash
30
+ /absolute/path/prc mcp serve \
31
+ --catalog-root /absolute/path/production-readiness-checklist \
32
+ --target /absolute/path/project \
33
+ --config /absolute/path/project/production-readiness.yaml
34
+ ```
35
+
36
+ The server resolves catalog, target, and configuration symlinks once. The
37
+ catalog is validated and loaded once, and the selected profile cannot change
38
+ during that process. The target and configuration contents are read again for
39
+ every plan or scan so edits made outside the server invalidate their prior
40
+ content identities.
41
+
42
+ The stdio process writes only newline-delimited JSON-RPC messages to stdout.
43
+ Diagnostics use stderr. It supports the MCP `2025-11-25` and `2025-06-18`
44
+ handshake revisions, advertises a fixed tool list, and emits both structured
45
+ content and the same serialized JSON as text for older clients. See the official
46
+ [MCP lifecycle](https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle),
47
+ [stdio transport](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports),
48
+ and [tool result](https://modelcontextprotocol.io/specification/2025-11-25/server/tools)
49
+ contracts.
50
+
51
+ ## Available tools
52
+
53
+ | Tool | Input | Result | Capability boundary |
54
+ | --- | --- | --- | --- |
55
+ | `prc_plan` | Empty object | Versioned inspect plan and execution DAG | Reads inventory; runs nothing |
56
+ | `prc_scan` | Empty object | Versioned run identity, gate, bounded inventory summary, assertion results, evidence, and findings | Native inspect implementations only |
57
+ | `prc_explain` | One `assertion_id` | Exact catalog assertion and sorted linked objectives | Catalog read only |
58
+
59
+ All three definitions set MCP `readOnlyHint: true`, `destructiveHint: false`,
60
+ and `openWorldHint: false`. Those annotations help a client present the tools,
61
+ but the implementation also enforces the boundary: tool arguments cannot supply
62
+ a target, catalog, configuration, command, adapter, provider, network host,
63
+ secret, output path, or remediation mode.
64
+
65
+ `prc_scan` omits the complete file inventory from the agent-facing payload to
66
+ bound context size. It retains the inventory digest, plan digest, canonical run
67
+ ID, evidence-linked result set, and canonical findings. Scanner errors are
68
+ returned as visible MCP tool errors; they are never rewritten as passing results.
69
+
70
+ ## Connect Codex
71
+
72
+ Codex local clients support command-launched stdio MCP servers. Register the
73
+ scanner with the same absolute, operator-reviewed arguments:
74
+
75
+ ```bash
76
+ codex mcp add production-readiness -- \
77
+ /absolute/path/prc mcp serve \
78
+ --catalog-root /absolute/path/production-readiness-checklist \
79
+ --target /absolute/path/project \
80
+ --profile prc/core-repository
81
+ ```
82
+
83
+ Codex stores server configuration in user or trusted-project configuration;
84
+ review that scope before enabling it. See the official
85
+ [Codex MCP documentation](https://developers.openai.com/codex/mcp/).
86
+
87
+ ## Connect Claude Code
88
+
89
+ Use a local scope unless the exact command should deliberately be shared with a
90
+ team:
91
+
92
+ ```bash
93
+ claude mcp add --transport stdio --scope local production-readiness -- \
94
+ /absolute/path/prc mcp serve \
95
+ --catalog-root /absolute/path/production-readiness-checklist \
96
+ --target /absolute/path/project \
97
+ --profile prc/core-repository
98
+ ```
99
+
100
+ Confirm the connection with `claude mcp get production-readiness` or `/mcp`.
101
+ Claude Code documents local stdio commands and the security implications of MCP
102
+ configuration in its official
103
+ [MCP guide](https://code.claude.com/docs/en/mcp).
104
+
105
+ ## Evidence-driven agent loop
106
+
107
+ An agent using this server should follow one narrow loop:
108
+
109
+ 1. Call `prc_plan` and preserve every blocked or undetermined node.
110
+ 2. Call `prc_scan` and use its `run_id`, `plan_digest`, finding IDs, and evidence
111
+ as the baseline.
112
+ 3. Use `prc_explain` before changing code for an unfamiliar assertion.
113
+ 4. Propose or make one bounded change through the agent host's normal reviewed
114
+ filesystem tools, not through this MCP server.
115
+ 5. Call `prc_scan` again. A changed workspace must produce a new inventory,
116
+ plan, and run identity.
117
+ 6. Continue only while changes remain within the user's authority and the
118
+ scanner reports independently verifiable findings. Stop on unknown, manual,
119
+ policy, production-only, or organizational evidence that code cannot prove.
120
+
121
+ The current `prc/core-repository@1.0` profile contains 40 repository assertions.
122
+ A satisfied profile means only that this versioned profile passed for that exact
123
+ inventory and evidence set. It does not mean that all 10,042 checklist controls,
124
+ runtime behavior, production infrastructure, organizational processes, or
125
+ unknown defects were autonomously verified.
126
+
127
+ ## Fail-closed limits
128
+
129
+ The server rejects duplicate JSON keys, unknown request and tool fields,
130
+ non-integer numeric request IDs, path-like tool arguments, messages larger than
131
+ 1 MiB, and successful tool payloads larger than 8 MiB. Calls are accepted only
132
+ after the MCP initialization lifecycle completes. A clean stdin close ends the
133
+ process normally; startup configuration failures use CLI exit `3`, and a broken
134
+ stdio transport uses exit `4`.
135
+
136
+ There is intentionally no MCP remediation tool. Use the scanner's
137
+ [bounded isolated remediation](remediation.md) commands separately when their
138
+ explicit candidate and policy controls fit the task.
@@ -0,0 +1,75 @@
1
+ # OpenAPI contract analysis
2
+
3
+ `PRC-A-API-001` through `PRC-A-API-003` are language-neutral, no-execution
4
+ checks for the bounded root and directly declared operation structure of
5
+ detected OpenAPI YAML and JSON documents. They are available as the focused
6
+ `prc/api@0.1` profile and as part of `prc/core-repository@1.0`. Inventory recognizes the
7
+ conventional `openapi.yaml`, `openapi.yml`, and `openapi.json` names, plus
8
+ bounded YAML files with a top-level OpenAPI 3.x marker. Each detection is
9
+ recorded as an `api-description` component and a sourced fact with an explicit
10
+ limitation: a description does not prove that its API is implemented, reachable,
11
+ or deployed.
12
+
13
+ Run only these contract checks with:
14
+
15
+ ```bash
16
+ prc scan --target PATH --catalog-root PATH_TO_RELEASE --profile prc/api
17
+ ```
18
+
19
+ ## What the rule proves
20
+
21
+ For published OpenAPI 3.0, 3.1, and 3.2 feature versions, the native checks
22
+ verifies that:
23
+
24
+ - the file contains exactly one parseable YAML or JSON document with an object
25
+ root;
26
+ - `openapi` is a nonempty supported semantic version string;
27
+ - `info` is an object with nonempty string `title` and `version` fields;
28
+ - OpenAPI 3.0 has a `paths` object; and
29
+ - OpenAPI 3.1 and 3.2 have at least one object-valued `paths`, `components`, or
30
+ `webhooks` field;
31
+ - every directly declared operation under `paths` or `webhooks` has a nonempty
32
+ Responses Object containing at least one valid response code or `default`;
33
+ - every inline Response Object has its required nonempty `description`, while a
34
+ structurally valid `$ref` remains a reference rather than an invented pass for
35
+ its remote target; and
36
+ - every declared `operationId` is a nonempty string and is unique within that
37
+ OpenAPI document. Because `operationId` is optional, the check does not require
38
+ one where the specification does not.
39
+
40
+ These are requirements from the authoritative
41
+ [OpenAPI 3.0.4 specification](https://spec.openapis.org/oas/v3.0.4.html),
42
+ [OpenAPI 3.1.2 specification](https://spec.openapis.org/oas/v3.1.2.html), and
43
+ [OpenAPI 3.2.0 specification](https://spec.openapis.org/oas/v3.2.0.html).
44
+ OpenAPI 3.1 and 3.2 descriptions may legitimately describe only reusable
45
+ components or webhooks, while 3.0 requires `paths`; an empty Paths Object is
46
+ allowed by the specifications.
47
+
48
+ Duplicate mapping keys, non-string mapping keys, missing required
49
+ metadata, and incorrect root-field types produce a finding with bounded source
50
+ locations. Invalid syntax produces Error/Unknown. A syntactically valid but
51
+ unsupported feature version, such as a future 3.3 document, also produces
52
+ Error/Unknown instead of a false Pass or Fail; a new benchmarked implementation
53
+ version is required before the scanner claims support.
54
+
55
+ ## Bounds and evidence
56
+
57
+ The implementation inspects at most 256 detected documents and 64 MiB in total.
58
+ The shared native reader caps each parsed file at 4 MiB and verifies its bytes
59
+ against the content-addressed inventory before parsing. YAML shape inspection is
60
+ bounded to 100,000 nodes and 128 levels. The scanner records file-hash evidence,
61
+ never document content, and reports at most 100 structural problems.
62
+
63
+ ## Deliberate limitations
64
+
65
+ This is not a complete OpenAPI conformance validator. Operation checks cover
66
+ operations declared directly under `paths` and `webhooks`, including the
67
+ OpenAPI 3.2 `query` and `additionalOperations` fields. They do not resolve Path
68
+ Item references, callbacks, multi-document descriptions, response references,
69
+ or remote documents. A reference is therefore not proof that its target is
70
+ valid. The checks also do not validate every nested object, compare the
71
+ description with application routes or deployed behavior, lint API design, test
72
+ requests, infer exposure, or decide compatibility. Full conformance, contract
73
+ testing, reference resolution, and runtime drift require separately versioned
74
+ adapters with explicit filesystem, process, network, authentication, target,
75
+ and destructive-request policies.
@@ -0,0 +1,44 @@
1
+ # Bounded private-key armor inspection
2
+
3
+ `PRC-A-CORE-031` is a deterministic, no-network guard against committing
4
+ recognized armored private-key blocks. It inspects content-addressed files from
5
+ the current inventory and never copies a matched marker or following key bytes
6
+ into evidence, findings, logs, or reports. A failure identifies only the file
7
+ path, inventory and content digests, and a redacted summary.
8
+
9
+ The native rules cover private and encrypted private-key labels standardized by
10
+ [RFC 7468](https://www.rfc-editor.org/info/rfc7468/), legacy RSA, EC, and DSA
11
+ private-key labels, the
12
+ [OpenSSH private-key format](https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key),
13
+ and armored PGP private-key blocks. Public-key and certificate armor is not a
14
+ failure.
15
+
16
+ ## Fail-closed bounds
17
+
18
+ The check scans recognized source, configuration, documentation,
19
+ infrastructure, environment, and key-file paths. Repository dotfiles are also
20
+ included, except platform metadata that is already excluded by inventory. It
21
+ stops as Blocked/Unknown instead of returning Pass when any of these bounds
22
+ would prevent complete inspection:
23
+
24
+ - 10,000 candidate files;
25
+ - 8 MiB per candidate file; or
26
+ - 256 MiB across all candidate files.
27
+
28
+ Every file is reopened without following a symlink and checked against its
29
+ inventoried size, mode, and SHA-256 before its bytes are inspected. A target
30
+ mutation is an execution error, never a passing result. Reports include at most
31
+ 100 violating locations while retaining the exact total count.
32
+
33
+ ## Deliberate limitations
34
+
35
+ This check does not inspect Git history, ignored dependency/cache directories,
36
+ binary or unrecognized file types, remote artifacts, container layers, secret
37
+ stores, deployed environments, or arbitrary vendor API-token formats. It does
38
+ not prove that a recognized key is live, but a detected private-key block is
39
+ still a critical no-go because verification must not expose or exercise it.
40
+
41
+ Broader secret detection belongs to a maintained, digest-pinned analysis
42
+ adapter with a tool-specific benchmark corpus. Until such an adapter is
43
+ published and authorized, `PRC-A-CORE-013` remains independently Blocked; this
44
+ narrow native check must not be presented as complete secret-scanning coverage.
@@ -0,0 +1,160 @@
1
+ # Scanner releases and verification
2
+
3
+ Scanner binaries use `scanner-vX.Y.Z` tags so their experimental product version
4
+ does not collide with versions of the checklist corpus. A release is built only
5
+ from the exact tagged commit. The workflow reruns the source, catalog, schema,
6
+ security, benchmark, and pack gates before publishing anything.
7
+
8
+ ## Release contents
9
+
10
+ Each scanner release contains:
11
+
12
+ - Linux, macOS, and Windows archives for AMD64 and ARM64;
13
+ - one dependency-free `@marinjursic/prc` npm launcher tarball and six exact
14
+ native npm platform tarballs for the same systems;
15
+ - a binary with the scanner version, source revision, source timestamp, and Go
16
+ toolchain embedded in `prc version --format json`;
17
+ - the exact compatible `catalog/`, `packs/`, and `schemas/` trees in every
18
+ archive, together with the catalog's human-readable objective sources and the
19
+ packs' benchmark fixtures;
20
+ - a versioned release manifest binding artifact digests to the catalog and pack
21
+ validation digests;
22
+ - a timestamp-free [CycloneDX 1.6](https://cyclonedx.org/specification/overview/)
23
+ module SBOM;
24
+ - a canonical self-scan of the exact tagged source, executed by the packaged
25
+ binary against its bundled catalog without hiding blocked or manual results;
26
+ - `SHA256SUMS`; and
27
+ - GitHub-hosted Sigstore attestations for SLSA build provenance and the
28
+ CycloneDX SBOM predicate.
29
+
30
+ The SBOM describes the scanner's Go module and resolved Go dependencies. It does
31
+ not claim that the bundled catalog data, schemas, host operating system, or
32
+ future adapter images are Go components; those files are integrity-bound by the
33
+ archive checksum and release manifest instead. GitHub documents what its
34
+ [artifact attestations](https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/use-artifact-attestations)
35
+ prove and how consumers should verify them.
36
+
37
+ The builder fixes archive order, ownership, modes, paths, timestamps, binary
38
+ metadata, and source identity. CI builds the complete release twice and requires
39
+ a byte-for-byte directory comparison. This is a reproducibility check under the
40
+ same declared CI toolchain; it is not a claim that provenance or reproducibility
41
+ proves the artifact is secure.
42
+
43
+ ## Verify before running
44
+
45
+ Download the archive, `SHA256SUMS`, release manifest, and SBOM from the same
46
+ GitHub release. Verify the checksum from the directory containing those files:
47
+
48
+ ```bash
49
+ sha256sum --check SHA256SUMS
50
+ ```
51
+
52
+ On macOS, verify one downloaded archive against the matching line instead:
53
+
54
+ ```bash
55
+ shasum -a 256 prc_0.1.0_darwin_arm64.tar.gz
56
+ grep 'prc_0.1.0_darwin_arm64.tar.gz' SHA256SUMS
57
+ ```
58
+
59
+ Then verify that GitHub's signed provenance binds the archive to this repository
60
+ and release workflow:
61
+
62
+ ```bash
63
+ gh attestation verify prc_0.1.0_linux_amd64.tar.gz \
64
+ --repo MarinJursic/production-readiness-checklist
65
+ ```
66
+
67
+ Verify the separate CycloneDX SBOM attestation using its recognized predicate:
68
+
69
+ ```bash
70
+ gh attestation verify prc_0.1.0_linux_amd64.tar.gz \
71
+ --repo MarinJursic/production-readiness-checklist \
72
+ --predicate-type https://cyclonedx.org/bom
73
+ ```
74
+
75
+ Finally, inspect `prc_X.Y.Z_release-manifest.json` and compare its
76
+ `source_commit`, catalog digest, pack digests, and artifact digest with the
77
+ assessment scope you intend to use. Inspect `prc_X.Y.Z_self-scan.json` as a
78
+ normal `prc.run/v0.12` report: a valid signed self-assessment may still be
79
+ `environment_blocked` because organizational, production, or adapter evidence
80
+ is deliberately unavailable in the release job. After extraction:
81
+
82
+ ```bash
83
+ ./prc_X.Y.Z_linux_amd64/prc version --format json
84
+ ```
85
+
86
+ The release manifest also binds every npm tarball. Before the packages are
87
+ published to npm, they can be tested directly from one release directory. On
88
+ Linux x64, for example:
89
+
90
+ ```bash
91
+ mkdir npm-smoke && cd npm-smoke
92
+ npm install --ignore-scripts --offline --no-audit --no-fund --package-lock=false \
93
+ ../marinjursic-prc-linux-x64-X.Y.Z.tgz \
94
+ ../marinjursic-prc-X.Y.Z.tgz
95
+ ./node_modules/.bin/prc version --format json
96
+ ./node_modules/.bin/prc scan /path/to/project
97
+ ```
98
+
99
+ The platform package contains the native binary and its exact catalog. The
100
+ launcher checks the platform manifest and binary SHA-256 and never downloads a
101
+ fallback or starts a binary found on `PATH`. Public npm publishing uses npm
102
+ trusted publishing from the pinned release workflow, so the workflow refuses
103
+ `NPM_TOKEN` and `NODE_AUTH_TOKEN`. It verifies all seven tarballs against the
104
+ release manifest, publishes the six native packages before the launcher,
105
+ verifies the registry SHA-512 for every package, and safely skips only an
106
+ already-published version with exactly matching bytes. Because npm versions are
107
+ immutable, any byte mismatch stops the release. The publisher also runs npm in
108
+ a new empty working directory with user, global, and environment npm
109
+ configuration removed, so a saved `.npmrc` token cannot silently replace OIDC.
110
+
111
+ The release job builds once, uploads those exact bytes, then runs the matching
112
+ native archive and npm launcher on Linux x64, Linux ARM64, macOS x64, macOS
113
+ ARM64, Windows x64, and Windows ARM64. Publication starts only after every host
114
+ has completed a real 10,042-control smoke scan.
115
+
116
+ ### One-time npm owner setup
117
+
118
+ npm requires a package to exist before a trusted publisher can be configured.
119
+ The owner must therefore bootstrap each of the seven package names once from
120
+ the exact verified release tarballs, with npm's required human authentication.
121
+ Then configure the same trusted-publisher identity on every package:
122
+
123
+ - repository owner: `MarinJursic`;
124
+ - repository: `production-readiness-checklist`;
125
+ - workflow filename: `release-scanner.yml`; and
126
+ - no GitHub environment unless the workflow is later changed to use one.
127
+
128
+ After that one-time setup, `scanner-vX.Y.Z` tags use OIDC and no long-lived npm
129
+ publishing secret. The release workflow requires Node.js 22.14 or newer and npm
130
+ 11.5.1 or newer for trusted publishing. npm provenance links a package to its
131
+ build source; it does not prove the package has no unsafe code.
132
+
133
+ Do not substitute a successful signature check for vulnerability review or a
134
+ production-readiness decision. An attestation proves the signed claim's origin
135
+ and integrity, not the absence of defects.
136
+
137
+ ## Release failure and revocation
138
+
139
+ Publishing is fail closed: an invalid tag, test failure, benchmark regression,
140
+ schema failure, vulnerability finding, non-reproducible output, checksum error,
141
+ or attestation failure prevents release publication. A failed workflow is not a
142
+ release and its temporary artifacts are not supported.
143
+
144
+ If a signing identity, workflow dependency, tool, release asset, catalog, pack,
145
+ or scanner version is compromised or materially incorrect, maintainers will:
146
+
147
+ 1. publish a private-to-public security advisory as coordination permits;
148
+ 2. mark the affected release and version as revoked, with the exact artifact
149
+ digests and reason;
150
+ 3. remove or revoke affected attestations where the platform supports it;
151
+ 4. never reuse the affected version or tag and never replace an asset under the
152
+ same name;
153
+ 5. publish a new patched version from a reviewed commit with new checksums,
154
+ SBOM, provenance, and compatibility manifest; and
155
+ 6. update bundled trust stores or registry revocations when a pack, adapter, or
156
+ publisher identity is affected.
157
+
158
+ Consumers should stop using a revoked artifact even if its historical signature
159
+ still verifies: verification establishes who produced it, not whether it remains
160
+ approved.