@marinjursic/prc-darwin-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,62 @@
1
+ <!-- Generated by scripts/catalog.py. Do not edit directly. -->
2
+
3
+ # Core repository readiness
4
+
5
+ Profile: `prc/core-repository@1.0`
6
+
7
+ Deterministic repository governance, documentation, workflow, dependency, security, API-contract, and test foundations.
8
+
9
+ This pilot demonstrates the structured control-to-assertion model. A listed
10
+ assertion is not a claim that the scanner implementation exists unless its
11
+ implementation is present and verified by the scanner test suite.
12
+
13
+ ## Assertions
14
+
15
+ | Assertion | Objective | Severity | Gate | Evidence | Remediation |
16
+ | --- | --- | --- | --- | --- | --- |
17
+ | `PRC-A-CORE-001` — README is present | [USEQ-FDCA6C71](../engineering/05-code-quality-and-implementation.md) | medium | required | repository-file | R2 |
18
+ | `PRC-A-CORE-002` — License is present | [USEQ-6497B434](../engineering/16-specialized-domains-and-release-assurance.md) | medium | required | repository-file | R0 |
19
+ | `PRC-A-CORE-003` — Contribution guidance is present | [USEQ-89F5E97A](../engineering/16-specialized-domains-and-release-assurance.md) | low | advisory | repository-file | R0 |
20
+ | `PRC-A-CORE-004` — Security policy is present | [USEQ-AC6AC548](../engineering/16-specialized-domains-and-release-assurance.md) | medium | required | repository-file | R0 |
21
+ | `PRC-A-CORE-005` — Code of conduct is present | [USEQ-D73106BF](../engineering/16-specialized-domains-and-release-assurance.md) | low | advisory | repository-file | R0 |
22
+ | `PRC-A-CORE-006` — Code ownership is declared | [USEQ-CA602113](../engineering/05-code-quality-and-implementation.md) | medium | required | repository-file | R0 |
23
+ | `PRC-A-CORE-007` — Dependency resolution is reproducible | [USEQ-D1076D92](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | repository-file | R2 |
24
+ | `PRC-A-CORE-008` — GitHub Actions use immutable references | [USEQ-F4D6E3B3](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | workflow-parse | R2 |
25
+ | `PRC-A-CORE-009` — Continuous integration is configured | [USEQ-12655775](../engineering/05-code-quality-and-implementation.md) | medium | required | repository-file | R2 |
26
+ | `PRC-A-CORE-010` — Automated tests are discoverable | [USEQ-12655775](../engineering/05-code-quality-and-implementation.md) | high | required | repository-structure | R2 |
27
+ | `PRC-A-CORE-011` — Workflow permissions are explicit | [USEQ-73488048](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | workflow-parse | R2 |
28
+ | `PRC-A-CORE-012` — Generated code follows normal review controls | [USEQ-F0F5ACE7](../engineering/05-code-quality-and-implementation.md) | high | required | reviewer-attestation | R0 |
29
+ | `PRC-A-CORE-013` — Configured secret detection has executed | [USEQ-70E9D5AA](../engineering/10-verification-and-testing.md) | high | required | analysis-result | R2 |
30
+ | `PRC-A-CORE-014` — Source files end with a newline | [USEQ-DAF77C8F](../engineering/05-code-quality-and-implementation.md) | low | advisory | source-format | R1 |
31
+ | `PRC-A-CORE-015` — Source revision is identifiable | [USEQ-72088469](../engineering/01-governance-and-foundations.md) | medium | required | repository-identity | R0 |
32
+ | `PRC-A-CORE-016` — Dependency updates are configured | [PRC-36-011](../checklists/08-maintenance-vendors-compliance.md) | medium | advisory | repository-file | R2 |
33
+ | `PRC-A-CORE-017` — Workflow definitions parse | [USEQ-F4D6E3B3](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | workflow-parse | R2 |
34
+ | `PRC-A-CORE-018` — Workflows define executable jobs | [USEQ-12655775](../engineering/05-code-quality-and-implementation.md) | high | required | workflow-parse | R2 |
35
+ | `PRC-A-CORE-019` — Workflow jobs have bounded runtimes | [USEQ-B66A3064](../engineering/11-developer-experience-platform-and-delivery.md) | medium | required | workflow-parse | R2 |
36
+ | `PRC-A-CORE-020` — pull_request_target workflows receive security review | [USEQ-73488048](../engineering/11-developer-experience-platform-and-delivery.md) | critical | required | workflow-parse | R0 |
37
+ | `PRC-A-CORE-021` — Unresolved merge conflicts are absent | [USEQ-12655775](../engineering/05-code-quality-and-implementation.md) | high | no-go | source-integrity | R2 |
38
+ | `PRC-A-CORE-022` — Repository files are not broadly writable | [USEQ-D60E6950](../engineering/11-developer-experience-platform-and-delivery.md) | medium | advisory | repository-metadata | R1 |
39
+ | `PRC-A-CORE-023` — Dependency manifests are nonempty | [USEQ-D1076D92](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | repository-file | R2 |
40
+ | `PRC-A-CORE-024` — Dependency locks are nonempty | [USEQ-D1076D92](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | repository-file | R2 |
41
+ | `PRC-A-CORE-025` — Runtime versions are declared | [USEQ-0B7FDB5F](../engineering/05-code-quality-and-implementation.md) | medium | required | runtime-declaration | R2 |
42
+ | `PRC-A-CORE-026` — Container base images are immutable | [USEQ-7D4DA192](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | containerfile-parse | R2 |
43
+ | `PRC-A-CORE-027` — Final container stages declare a non-root user | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | containerfile-parse | R2 |
44
+ | `PRC-A-CORE-028` — Terraform provider selections are locked | [USEQ-D1076D92](../engineering/11-developer-experience-platform-and-delivery.md) | medium | advisory | repository-file | R2 |
45
+ | `PRC-A-CORE-029` — Kubernetes workloads require non-root containers | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | kubernetes-parse | R2 |
46
+ | `PRC-A-CORE-030` — Kubernetes containers declare resource policy | [USEQ-13CBD6C6](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | kubernetes-parse | R2 |
47
+ | `PRC-A-K8S-001` — Kubernetes workloads avoid privileged host access | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | kubernetes-parse | R2 |
48
+ | `PRC-A-K8S-002` — Kubernetes Linux containers disable privilege escalation | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | kubernetes-parse | R2 |
49
+ | `PRC-A-K8S-003` — Kubernetes Linux containers restrict capabilities | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | high | required | kubernetes-parse | R2 |
50
+ | `PRC-A-K8S-004` — Kubernetes Linux containers use bounded seccomp profiles | [USEQ-A3559C64](../engineering/16-specialized-domains-and-release-assurance.md) | medium | required | kubernetes-parse | R2 |
51
+ | `PRC-A-CORE-031` — Private-key armor is absent from repository files | [USEQ-E85957E3](../engineering/08-security-and-cryptography.md) | critical | no-go | sensitive-material-scan | R2 |
52
+ | `PRC-A-GO-001` — Go net/http package helpers do not use the default client | [USEQ-F6ACEF15](../engineering/06-application-services-and-apis.md) | high | required | go-ast-analysis | R2 |
53
+ | `PRC-A-GO-002` — Go HTTP servers use configurable Server instances | [USEQ-B66A3064](../engineering/11-developer-experience-platform-and-delivery.md) | high | required | go-ast-analysis | R2 |
54
+ | `PRC-A-API-001` — OpenAPI documents expose required root metadata | [USEQ-13208C54](../engineering/06-application-services-and-apis.md) | medium | required | openapi-parse | R2 |
55
+ | `PRC-A-API-002` — OpenAPI operations define valid responses | [USEQ-13208C54](../engineering/06-application-services-and-apis.md) | high | required | openapi-parse | R2 |
56
+ | `PRC-A-API-003` — Declared OpenAPI operation IDs are unique | [USEQ-13208C54](../engineering/06-application-services-and-apis.md) | medium | required | openapi-parse | R2 |
57
+
58
+ ## Result interpretation
59
+
60
+ The profile is satisfied only when every applicable required assertion has
61
+ current passing evidence and no configured gate blocks the result. Manual or
62
+ external evidence remains visible and cannot be inferred from repository files.
@@ -0,0 +1,79 @@
1
+ # Diff-aware evidence invalidation
2
+
3
+ `prc diff` compares a canonical prior run with a freshly inventoried target and
4
+ answers a narrower question than `scan`: which prior conclusions had relevant
5
+ inputs changed?
6
+
7
+ ```bash
8
+ ./prc diff \
9
+ --state-dir /safe/local/path/prc-state \
10
+ --base-run <run-id> \
11
+ --target /path/to/project \
12
+ --catalog-root /path/to/production-readiness-checklist
13
+ ```
14
+
15
+ Use `--format json` for `prc.invalidation/v0.1`. The report includes changed
16
+ files and inventory dimensions, one decision for each prior or current
17
+ assertion, stable reason codes, and aggregate counts.
18
+
19
+ ## What the decisions mean
20
+
21
+ | Conclusion | Meaning | Can the old result be returned as current? |
22
+ | --- | --- | --- |
23
+ | `invalidated` | A rule, applicability outcome, relevant repository input, declared scope, or evidence-freshness condition changed. | No. |
24
+ | `unchanged_inputs` | The implementation-specific inputs did not change. | Only when `reuse_allowed` is also true. |
25
+ | `new` | The current profile newly includes the assertion. | No. |
26
+ | `removed` | The current profile no longer includes the assertion. | No current evaluation is requested. |
27
+
28
+ The scanner deliberately distinguishes input equivalence from evidence reuse.
29
+ Repository evidence is bound to the complete inventory digest. If an unrelated
30
+ file changes, an assertion may be `unchanged_inputs` while `reuse_allowed` is
31
+ false and `fresh_evaluation_required` is true: its old evidence still names the
32
+ old target. `prc diff` does not manufacture a new evidence envelope or relabel a
33
+ prior Pass.
34
+
35
+ Reuse is permitted only when the current inventory and plan identities exactly
36
+ match the base run and no rule requires fresh non-repository evidence. Manual,
37
+ executed, artifact, and environment evidence is not carried forward without a
38
+ separate validity-window policy.
39
+
40
+ ## Bound rule identity
41
+
42
+ Plans produced as `prc.plan/v0.6` bind:
43
+
44
+ - the scanner engine contract;
45
+ - the exact governing catalog, including every parsed objective, assertion, and profile;
46
+ - the exact profile definition;
47
+ - every assertion revision and complete definition, including parameters;
48
+ - the implementation identifier and applicability evaluator;
49
+ - project configuration, artifacts, and target environments;
50
+ - the selected execution mode, capability policy, implementation registry, and
51
+ dependency DAG; and
52
+ - the complete inventory identity.
53
+
54
+ Each definition is represented by a SHA-256 digest over its canonical JSON
55
+ representation. A changed objective statement or assertion parameter therefore
56
+ invalidates the old conclusion even if its implementation name is unchanged.
57
+
58
+ Runs recorded with an older plan schema remain readable, but they lack one or
59
+ more rule bindings. Their assertions receive
60
+ `base_plan_lacks_rule_binding` and require a fresh evaluation. This is a
61
+ conservative migration rule, not a claim that the earlier result was wrong.
62
+
63
+ ## Native dependency map
64
+
65
+ The versioned invalidation rules map each native implementation to the inputs it
66
+ actually reads. Examples include candidate document paths for `file-present`,
67
+ all workflow definitions for workflow parsers, source files for final-newline,
68
+ manifest and lock sets for dependency checks, container definitions for
69
+ container checks, and Terraform/Kubernetes resources for infrastructure checks.
70
+
71
+ Unknown implementations default to all repository files. That may perform more
72
+ fresh work than necessary, but it cannot preserve a stale Pass due to an
73
+ unrecognized dependency. Adapter and manual-evidence assertions also require
74
+ freshness proof instead of being inferred from a filename diff.
75
+
76
+ `prc diff` is an analysis and planning command. `prc scan` still evaluates the
77
+ current target afresh; automatic cache reuse is intentionally deferred until a
78
+ future evidence-rebinding protocol can preserve subject identity and validity
79
+ without weakening the trust model.
@@ -0,0 +1,71 @@
1
+ # Diagnose scanner capabilities
2
+
3
+ `prc doctor` checks whether the local host can perform the scanner operations
4
+ you intend to use. It does not execute project code, containers, Codex, or Claude
5
+ Code. Requested executable capabilities are resolved, identity-checked, and
6
+ hashed without being launched.
7
+
8
+ ## Check read-only scanning
9
+
10
+ ```bash
11
+ ./prc doctor \
12
+ --target /path/to/project \
13
+ --catalog-root /path/to/production-readiness-checklist
14
+ ```
15
+
16
+ Target inventory and catalog validation are required. State storage, candidate
17
+ workspaces, an OCI runtime, and agent providers are reported as optional warnings
18
+ unless their corresponding flags are supplied.
19
+
20
+ ## Probe state and remediation filesystems
21
+
22
+ Create the state directory with private permissions before probing it:
23
+
24
+ ```bash
25
+ mkdir -m 0700 /safe/path/prc-state
26
+
27
+ ./prc doctor \
28
+ --target /path/to/project \
29
+ --catalog-root /path/to/production-readiness-checklist \
30
+ --state-dir /safe/path/prc-state \
31
+ --candidate-parent /safe/path/candidates
32
+ ```
33
+
34
+ The state probe verifies private-directory enforcement and the hard-link
35
+ publication primitive used for immutable evidence records. The candidate probe
36
+ creates a private temporary sibling directory, verifies that it is disjoint from
37
+ the target, and tests file creation and mode enforcement. Probe directories are
38
+ removed before the command returns.
39
+
40
+ Do not place `--candidate-parent` inside the target. An ancestor such as a shared
41
+ temporary root is allowed only when the actual private probe directory is a
42
+ disjoint sibling of the target.
43
+
44
+ ## Inspect optional executables
45
+
46
+ ```bash
47
+ ./prc doctor \
48
+ --target /path/to/project \
49
+ --catalog-root /path/to/production-readiness-checklist \
50
+ --oci-runtime docker \
51
+ --provider codex \
52
+ --provider claude
53
+ ```
54
+
55
+ The OCI executable must resolve to `docker` or `podman`. Provider executables
56
+ must resolve to `codex` or `claude`. A matching filename is not treated as trust:
57
+ the report records the resolved path and SHA-256 digest so execution planning can
58
+ bind the exact binary later. Doctor does not test authentication, make network
59
+ requests, pull images, or prove that a daemon is running.
60
+
61
+ ## Automation output
62
+
63
+ ```bash
64
+ ./prc doctor --target . --catalog-root . --format json > doctor.json
65
+ python scripts/validate_instance.py doctor.schema.json doctor.json
66
+ ```
67
+
68
+ JSON conforms to `prc.doctor/v0.1`. Each check is `pass`, `warn`, or `fail` and
69
+ states whether it is required. The command exits `0` when all requested required
70
+ capabilities pass and `2` when at least one required capability fails. Warnings
71
+ never silently claim that an untested optional capability is available.
@@ -0,0 +1,355 @@
1
+ # Scanner quick start
2
+
3
+ The scanner CLI inventories a repository, creates an immutable plan, evaluates
4
+ native assertions, records evidence, and reports explicit unresolved states.
5
+ It also binds all 10,042 registered controls into every complete scan report.
6
+ The narrow assertions do not overclaim that they proved a whole broad control.
7
+
8
+ Choose one clear level:
9
+
10
+ ```bash
11
+ ./prc quick /path/to/project # 18 high-signal local checks
12
+ ./prc scan /path/to/project # 40 core local checks
13
+ ./prc full codex /path/to/project # core scan plus advisory AI review of all controls
14
+ ```
15
+
16
+ Use any command without a path to scan the current directory. `prc full claude`
17
+ selects Claude Code instead. The commands do not fix files or execute project
18
+ code. They print a summary and create a private, standalone HTML report outside
19
+ the target. Open the exact path printed as `Detailed report:` to review verified
20
+ findings and every incomplete or manual result. `quick` still includes every
21
+ control in that report; it only runs fewer local assertions.
22
+
23
+ The profile evaluator can consume a live, sandboxed adapter execution only when
24
+ the selected profile binds its exact ID, manifest digest, and observation kind.
25
+ The generated-code review remains manual. The default analysis-evidence
26
+ assertion pins the reviewed Gitleaks 8.30.0 current-tree adapter, but remains
27
+ blocked in ordinary inspect mode; an operator must explicitly select
28
+ `--mode verify-local`, supply the checked-in manifest, and pre-pull its immutable
29
+ image. The [adapter contract](../architecture/adapters.md) documents the exact
30
+ command and important coverage limitations.
31
+ One deterministic R1 remediation is available for recognized source files that
32
+ lack a final line-feed byte, and another restricts broadly writable file modes.
33
+ The bounded `fix` loop can compose those repairs in isolated sibling candidates
34
+ without editing the target.
35
+
36
+ ## One-time setup
37
+
38
+ ### npm release package
39
+
40
+ After a scanner release is published to npm, the normal short path is:
41
+
42
+ ```bash
43
+ npm install -D @marinjursic/prc
44
+ npx prc quick
45
+ ```
46
+
47
+ Use `npx prc scan` for the core local scan.
48
+
49
+ The npm launcher has no install hooks or third-party JavaScript dependencies.
50
+ It uses one exact native platform package and never downloads a fallback. The
51
+ public package names were not yet published when this guide was updated, so
52
+ check the scanner release notes before using the registry command.
53
+
54
+ For a pinned install with dependency hooks disabled, use
55
+ `npm install -D -E --ignore-scripts --no-audit --no-fund @marinjursic/prc@X.Y.Z`,
56
+ then `npm exec --offline --no -- prc scan`. To give a Node project one short
57
+ repeatable command, add `"scan": "prc scan"` to `package.json`, then run
58
+ `npm run scan`. Use `npm run --ignore-scripts scan` to skip local `prescan` and
59
+ `postscan` hooks. npm does not let a project add a custom top-level `npm scan`
60
+ command.
61
+
62
+ ### Build from source
63
+
64
+ Go 1.27 or a compatible later supported toolchain is required.
65
+
66
+ ```bash
67
+ go mod verify
68
+ go build -trimpath -o prc ./cmd/prc
69
+ ./prc version
70
+ ```
71
+
72
+ Run these commands from the Production Readiness Checklist repository. The
73
+ binary automatically discovers the compatible `catalog/` in the current
74
+ directory or beside the executable. Keep release-archive files together when
75
+ moving the binary. If `go` is not found, install the supported Go toolchain and
76
+ open a new shell so its binary directory is on `PATH`.
77
+
78
+ Add the entire extracted or cloned scanner directory to `PATH` when you want to
79
+ run `prc` without `./`; moving only the executable separates it from its
80
+ compatible catalog. For a current macOS or Linux shell:
81
+
82
+ ```bash
83
+ export PATH="/absolute/path/to/production-readiness-checklist:$PATH"
84
+ ```
85
+
86
+ `prc version --format json` reports the scanner version, exact source revision,
87
+ reproducible source timestamp, and Go toolchain embedded in a release build.
88
+ Downloadable scanner releases use a separate `scanner-vX.Y.Z` tag namespace and
89
+ bundle the compatible catalog, adapter manifests, packs, schemas, and scanner
90
+ guides with every binary. See
91
+ [releases and verification](releases.md) before trusting a downloaded artifact.
92
+
93
+ The native CLI stays language-neutral and remains available without Node.
94
+
95
+ ## Inventory without executing target code
96
+
97
+ ```bash
98
+ ./prc inventory --target /path/to/project
99
+ ```
100
+
101
+ The inventory walks regular files without following symlinks or executing project
102
+ commands. Inventory v0.3 records content digests plus a deterministic component
103
+ graph and sourced, confidence-bearing facts for package manifests, CI workflows,
104
+ container build definitions, Terraform, Kubernetes, OpenAPI descriptions, and
105
+ symlinks. Detection is
106
+ not proof that a component is built or deployed; each fact states that limitation.
107
+ When a validated project configuration is supplied, its digest, declared scope,
108
+ and explicitly limited facts are bound into the inventory identity. Versioned
109
+ v0.1, v0.2, and v0.3 schema files remain available for consumers of pinned
110
+ output contracts; only the unversioned alias advances with a later contract.
111
+
112
+ Before enabling persistent evidence, OCI adapters, or isolated remediation, run
113
+ [`prc doctor`](doctor.md) with the corresponding paths and executables. It probes
114
+ only explicitly requested host capabilities and never launches target code,
115
+ containers, or agent providers.
116
+
117
+ ## Create a deterministic plan
118
+
119
+ Optionally validate or export the exact catalog first:
120
+
121
+ ```bash
122
+ ./prc catalog validate --catalog-root /path/to/production-readiness-checklist
123
+ ./prc catalog bundle --catalog-root /path/to/production-readiness-checklist > catalog-bundle.json
124
+ ```
125
+
126
+ The manifest and bundle are deterministic and contain no local path or timestamp.
127
+ They identify validated definitions; release signing is a separate trust step.
128
+
129
+ The scanner normally discovers its bundled catalog. Pass `--catalog-root` only
130
+ when intentionally testing a different local catalog:
131
+
132
+ ```bash
133
+ ./prc plan \
134
+ --catalog-root /path/to/production-readiness-checklist \
135
+ --target /path/to/project \
136
+ --config /path/to/project/production-readiness.yaml \
137
+ --profile prc/core-repository
138
+ ```
139
+
140
+ The same target inventory, profile, catalog, and execution mode produce the same
141
+ plan digest. Plan v0.6 binds the full governing catalog, exact profile and
142
+ assertion definitions, bounded CEL evaluator, an applicability reason for every
143
+ assertion, configuration digest, declared project ID, artifact digests, target
144
+ environments, implementation registry, capability envelope, and dependency
145
+ DAG. `inspect` is the default and denies external processes, writable scratch,
146
+ network, and secrets. Use `--mode verify-local` only when reviewing a plan that
147
+ contains an authorized no-network OCI adapter. Invalid, unavailable,
148
+ non-Boolean, or resource-exhausting expressions become `undetermined`; they
149
+ never silently become Not Applicable. See
150
+ [bounded applicability evaluation](../architecture/applicability.md) for the
151
+ available inventory fields and limits.
152
+
153
+ ## Scan and read the report
154
+
155
+ ```bash
156
+ ./prc scan /path/to/project
157
+ ```
158
+
159
+ Options may appear before or after the project path. The default report is
160
+ created with mode `0600` under the operating system's user cache directory and
161
+ is never written inside the target. Its name includes the target and run ID.
162
+ It contains:
163
+
164
+ - all 10,042 registered controls and an honest disposition for each one;
165
+ - a plain-language split between verified problems, narrow passes, unresolved
166
+ local checks, manual decisions, controls needing evidence, and AI advice;
167
+ - every verified finding with severity, gate, controls, locations, evidence,
168
+ remediation class, finding ID, and stable fingerprint; and
169
+ - every assertion result with applicability, execution state, required
170
+ evidence, observed evidence, and locations.
171
+
172
+ The scanner creates report files with exclusive creation and will not overwrite
173
+ an existing path. Use `--report /safe/path/readiness.html` to choose a new path,
174
+ or `--no-report` to explicitly suppress the default HTML report.
175
+
176
+ `prc scan` has no code path to the remediation commands. A missing final newline
177
+ or broad file mode may appear as a finding, but the target bytes and modes remain
178
+ unchanged. `prc fix` is a separate, explicitly invoked candidate workflow.
179
+
180
+ ## Optional Codex or Claude review
181
+
182
+ A normal scan does not contact an AI provider. Use the provider's official CLI
183
+ sign-in flow once, then start the review with one short option:
184
+
185
+ ```bash
186
+ prc login codex
187
+ prc full codex
188
+ ```
189
+
190
+ Replace `codex` with `claude` for Claude Code. `prc auth` shows whether each
191
+ private scanner login is ready, and `prc logout codex` or `prc logout claude`
192
+ removes it. A supported API-key environment variable remains an alternative.
193
+
194
+ Remove `--review-control` to review every active control. The coordinator is
195
+ required to assign each control to a separate subagent inside a sealed batch.
196
+ Completed batches resume from private state outside the target. This full run can take a long time and use many
197
+ tokens. The provider receives bounded, secret-screened excerpts but no target
198
+ workspace path or source-reading, shell, write, install, web, browser, or MCP
199
+ tools. Its result stays advisory and never turns a control into a verified
200
+ Pass. A cited path and line are checked against the exact screened snapshot,
201
+ but the claim remains `advisory_unverified` because a real line does not prove
202
+ the AI understood it. `prc full` and `--ai` are also explicit permission to send
203
+ those screened excerpts to the remote provider. Read [safe AI control review](ai-control-review.md) for
204
+ one-control testing, cost warnings, result meanings, and stop conditions.
205
+
206
+ ## Preserve evidence and history
207
+
208
+ ```bash
209
+ mkdir -m 0700 /safe/path/prc-state
210
+
211
+ ./prc scan \
212
+ --target /path/to/project \
213
+ --profile prc/core-repository \
214
+ --state-dir /safe/path/prc-state
215
+ ```
216
+
217
+ `--state-dir` is optional. When supplied, evidence envelopes and complete runs
218
+ are stored by digest, then indexed transactionally in an embedded SQLite
219
+ database. The state root must be private and local; do not put it inside the
220
+ target unless target-local scanner state is intentional. See
221
+ [durable state and history](state-and-history.md) for the storage contract and
222
+ `history` commands.
223
+
224
+ After a later change, use [`prc diff`](diff-and-invalidation.md) with a canonical
225
+ base run to see exactly which rule inputs were invalidated before rescanning.
226
+
227
+ JSON is available for automation:
228
+
229
+ ```bash
230
+ ./prc scan . --format json --exit-policy never
231
+ ```
232
+
233
+ Explicit machine formats write to stdout and do not also create the default HTML
234
+ file. Add `--report /safe/path/readiness.html` when both forms are wanted.
235
+
236
+ To let Codex, Claude Code, or another local agent request the same read-only
237
+ plans, scans, and assertion explanations, use the
238
+ [path-locked MCP server](mcp-agent-integration.md). It deliberately exposes no
239
+ write, remediation, provider, adapter, process, network, or state tool.
240
+
241
+ The same scan can emit a scoped Markdown report, self-contained accessible HTML,
242
+ SARIF 2.1.0 failed findings, or JUnit XML with failures, execution errors, and
243
+ manual/not-applicable skips kept distinct:
244
+
245
+ ```bash
246
+ ./prc scan . --format markdown --exit-policy never
247
+ ./prc scan . --format html --exit-policy never
248
+ ./prc scan . --format sarif --exit-policy never
249
+ ./prc scan . --format junit --exit-policy never
250
+ ```
251
+
252
+ SARIF intentionally contains only failed assertions that can be represented as
253
+ canonical, fingerprinted findings. Unknown, blocked, manual, and not-applicable
254
+ results remain in the canonical JSON, Markdown, HTML, and JUnit reports instead
255
+ of being mislabeled as source findings. Run v0.9 adds bounded source locations
256
+ to assertion results so native analyses can feed exact file, line, and column
257
+ data into canonical findings. It keeps a stable finding fingerprint separate
258
+ from the content-addressed finding ID and embeds the reviewable v0.6 execution
259
+ plan. Adapter executions bind their local or registry authorization provenance.
260
+ Versioned run v0.1 through v0.8, plan v0.1 through v0.6, inventory v0.1
261
+ through v0.3, adapter-execution v0.1 through v0.2, evidence v0.1, and finding
262
+ v0.1 schemas remain available for archived consumers. Adapter-manifest v0.1
263
+ through v0.3 are likewise frozen while v0.4 is the current executable contract.
264
+ Their local dependency graphs use versioned filenames, so later unversioned
265
+ aliases cannot change an archived contract.
266
+
267
+ `--exit-policy profile` is the default and uses the [stable CLI exit-code
268
+ contract](cli-contract.md): a failed active gate is `1`, while incomplete,
269
+ blocked, or manual evidence is `2`. `no-go` never hides incomplete execution.
270
+ `never` is an explicit report-generation override that returns `0` after a
271
+ completed scan but does not change the terminal state in the report; do not use
272
+ it as a release gate.
273
+
274
+ ## Fix eligible deterministic findings
275
+
276
+ ```bash
277
+ ./prc fix \
278
+ --target /path/to/project \
279
+ --catalog-root /path/to/production-readiness-checklist \
280
+ --candidate-root /safe/path/prc-remediation-run \
281
+ --format json
282
+ ```
283
+
284
+ The command creates a new candidate per accepted R1 fix and rescans from fresh
285
+ evidence after every attempt. It returns success only when the selected profile
286
+ is satisfied. Read [bounded isolated remediation](remediation.md) for budgets,
287
+ configuration policy, terminal states, and the machine-work-complete report.
288
+
289
+ ## Explain an assertion
290
+
291
+ ```bash
292
+ ./prc explain --catalog-root . PRC-A-CORE-008
293
+ ```
294
+
295
+ ## Current native checks
296
+
297
+ - repository governance files and an immutable Git source identity;
298
+ - detected dependency manifests, nonempty lock inputs, update configuration,
299
+ and runtime-version declarations;
300
+ - GitHub Actions syntax, jobs, bounded runtimes, permissions, immutable action
301
+ references, and unsafe untrusted triggers;
302
+ - discoverable tests, final line-feed bytes, merge-conflict markers, broad
303
+ file-write permissions, and committed private-key armor;
304
+ - direct Go `net/http` package helpers backed by mutable global
305
+ `http.DefaultClient` state;
306
+ - immutable container base identities and final-stage non-root users;
307
+ - Terraform provider locks; and
308
+ - Kubernetes non-root and container resource policies.
309
+
310
+ The profile has 40 atomic assertions. Go, container, Terraform, Kubernetes, and
311
+ OpenAPI assertions are planned as not applicable when their corresponding
312
+ sourced inventory facts are absent.
313
+
314
+ The engine rejects repository path and symlink escapes and detects a target file
315
+ that changes between inventory and evidence collection. Missing evidence,
316
+ invalid or unevaluable applicability expressions, unavailable adapters, and
317
+ manual review are never converted into Pass.
318
+
319
+ Read the [sandboxed adapter protocol](../architecture/adapters.md) to validate an
320
+ adapter transcript, inspect an OCI execution plan, run an already-present
321
+ digest-pinned adapter image, or understand live profile-authorized evidence
322
+ consumption.
323
+
324
+ ## Optional offline infrastructure policy scan
325
+
326
+ The focused `prc/iac@0.1` profile authorizes the exact checked-in Checkov 3.3.8
327
+ manifest when Terraform, Kubernetes, or container definitions are inventoried.
328
+ This is not part of the simple native scan because it launches a pinned OCI
329
+ analyzer. Read the [infrastructure policy profile](infrastructure-policy.md),
330
+ review the manifest, pre-pull its exact digest, and grant local verification
331
+ explicitly:
332
+
333
+ ```bash
334
+ docker pull docker.io/bridgecrew/checkov@sha256:c64ffb6d6fc8087c896341a2c697770a04a1cf558db04fa7b8129d8ca6bce336
335
+
336
+ ./prc scan /path/to/project \
337
+ --profile prc/iac \
338
+ --mode verify-local \
339
+ --adapter-manifest adapters/checkov-v3.3.8.yaml
340
+ ```
341
+
342
+ The scanner mounts a sealed inventory read-only, denies network access, uses
343
+ scanner-owned offline policy, and prevents target `.checkov.yml` settings from
344
+ hiding results. A policy violation becomes a detailed finding. Parsing errors,
345
+ inline suppressions, unsupported output, or unsafe metadata fail closed. The
346
+ command still produces a report only and never applies an infrastructure
347
+ change.
348
+
349
+ Read [bounded isolated remediation](remediation.md) to run the deterministic R1
350
+ loop, create and verify one R1 candidate, or apply one validated R2 provider
351
+ proposal outside the source workspace.
352
+
353
+ Read [read-only agent providers](../architecture/agent-providers.md) to inspect
354
+ or explicitly run the experimental Codex and Claude Code `suggest` adapters.
355
+ Provider proposals are never applied or treated as evidence of a passing check.
@@ -0,0 +1,96 @@
1
+ # Go HTTP timeout analysis
2
+
3
+ The core profile contains two deliberately narrow, deterministic Go checks for
4
+ HTTP timeout hazards in non-test `.go` files. Both inspect syntax without
5
+ running, building, importing, or type-checking target code. Files ending in
6
+ `_test.go` are excluded because production timeout gates should not classify
7
+ test-only helpers as deployed network behavior.
8
+
9
+ ## Client package helpers
10
+
11
+ `PRC-A-GO-001` checks direct calls to the Go `net/http` package functions
12
+ `Get`, `Head`, `Post`, and `PostForm`. The Go documentation defines these
13
+ functions as wrappers around `http.DefaultClient`; the default is a usable
14
+ zero-value `http.Client`, and a zero `Client.Timeout` means no end-to-end
15
+ timeout. See the official
16
+ [`net/http` package documentation](https://pkg.go.dev/net/http) and
17
+ [`DefaultClient` source](https://go.dev/src/net/http/client.go).
18
+
19
+ The timeout decision must be visible at a bounded request or client boundary
20
+ instead of depending on mutable process-global client state. A typical
21
+ compliant call uses a reused `http.Client` with a positive `Timeout`:
22
+
23
+ ```go
24
+ client := &http.Client{Timeout: 10 * time.Second}
25
+ response, err := client.Get(endpoint)
26
+ ```
27
+
28
+ For APIs that need a different deadline per operation, construct a request with
29
+ `http.NewRequestWithContext` and use `Client.Do`. The scanner does not determine
30
+ whether a particular numeric duration is suitable for the service; that remains
31
+ a project-specific reliability decision.
32
+
33
+ ## Server package helpers
34
+
35
+ `PRC-A-GO-002` checks direct calls to the `net/http` package functions
36
+ `ListenAndServe`, `ListenAndServeTLS`, `Serve`, and `ServeTLS`. The official Go
37
+ [`server.go` source](https://go.dev/src/net/http/server.go) shows that each
38
+ helper constructs a new `http.Server` with only an address and/or handler before
39
+ serving. The [`Server` documentation](https://pkg.go.dev/net/http#Server) states
40
+ that zero or negative read, header, write, and idle timeout values can mean
41
+ there is no timeout. The package's own
42
+ [`doc.go` guidance](https://go.dev/src/net/http/doc.go) recommends constructing
43
+ a custom `Server` when more control is required.
44
+
45
+ A typical compliant server makes its request timeout policy explicit on a
46
+ reused `http.Server` and calls a method on that value:
47
+
48
+ ```go
49
+ server := &http.Server{
50
+ Addr: ":8080",
51
+ Handler: handler,
52
+ ReadHeaderTimeout: 5 * time.Second,
53
+ ReadTimeout: 30 * time.Second,
54
+ WriteTimeout: 30 * time.Second,
55
+ IdleTimeout: 60 * time.Second,
56
+ }
57
+ err := server.ListenAndServe()
58
+ ```
59
+
60
+ This rule proves only the absence of the four package-level shortcuts. It does
61
+ not claim that every field is populated, positive, or operationally suitable.
62
+
63
+ ## Syntax and evidence contract
64
+
65
+ The implementations parse inventoried non-test `.go` files with Go's syntax
66
+ tree parser. They recognize normal, aliased, and dot imports of `net/http`,
67
+ while excluding locally shadowed identifiers. They never type-check, build,
68
+ test, import, or execute the target. Scope evidence binds the content-addressed
69
+ inventory; a failure also records hashes for affected files, never source text. The result
70
+ summary reports a bounded file, line, column, and helper name; the structured
71
+ assertion result and canonical finding identify the exact affected callsite.
72
+
73
+ Each check returns Blocked/Unknown when more than 4,096 Go files or 256 MiB of
74
+ Go source would need inspection, or when one file exceeds the native 4 MiB
75
+ parser limit. A changed or unreadable inventoried file and invalid Go syntax
76
+ return an execution error. None of those states can become Pass.
77
+
78
+ ## Deliberate limitations
79
+
80
+ These rules are not a whole-program proof that every network operation has an
81
+ appropriate timeout. In particular, they do not currently evaluate:
82
+
83
+ - direct calls through `http.DefaultClient` or another client variable;
84
+ - custom transports, generated clients, RPC libraries, databases, queues, or
85
+ other network stacks;
86
+ - request contexts, data flow, build tags, generated code provenance, or whether
87
+ a configured duration is operationally appropriate;
88
+ - whether a custom `http.Server` initializes every relevant timeout field,
89
+ whether later assignments change those fields, or how proxies affect request
90
+ bounds; or
91
+ - dependency source, binaries, deployed configuration, and runtime behavior.
92
+
93
+ Those broader claims require language-aware data flow and runtime evidence from
94
+ separately benchmarked, digest-pinned adapters. These native rules cover two
95
+ high-confidence hazards and must not be described as complete network-timeout
96
+ validation.