@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.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/bin/LICENSE +21 -0
- package/bin/README.md +335 -0
- package/bin/THIRD_PARTY_NOTICES.md +74 -0
- package/bin/adapters/checkov-v3.3.8.yaml +50 -0
- package/bin/adapters/gitleaks-v8.30.0.yaml +63 -0
- package/bin/adapters/grype-v0.116.1.yaml +58 -0
- package/bin/adapters/syft-v1.51.0.yaml +54 -0
- package/bin/catalog/assertions/core-repository.yaml +625 -0
- package/bin/catalog/assertions/iac.yaml +24 -0
- package/bin/catalog/assertions/supply-chain.yaml +45 -0
- package/bin/catalog/control-contracts.json +1 -0
- package/bin/catalog/control-id-registry.json +110470 -0
- package/bin/catalog/objectives/core-repository.yaml +243 -0
- package/bin/catalog/objectives/iac.yaml +13 -0
- package/bin/catalog/objectives/supply-chain.yaml +13 -0
- package/bin/catalog/profiles/api.yaml +12 -0
- package/bin/catalog/profiles/core-repository.yaml +49 -0
- package/bin/catalog/profiles/iac.yaml +18 -0
- package/bin/catalog/profiles/kubernetes.yaml +15 -0
- package/bin/catalog/profiles/quick.yaml +27 -0
- package/bin/catalog/profiles/supply-chain.yaml +20 -0
- package/bin/docs/architecture/adapters.md +380 -0
- package/bin/docs/architecture/agent-providers.md +188 -0
- package/bin/docs/architecture/applicability.md +80 -0
- package/bin/docs/architecture/catalog-integrity.md +85 -0
- package/bin/docs/architecture/evidence-and-results.md +154 -0
- package/bin/docs/architecture/execution-plans.md +61 -0
- package/bin/docs/architecture/product-contract.md +76 -0
- package/bin/docs/architecture/publisher-trust.md +68 -0
- package/bin/docs/architecture/remediation-contract.md +113 -0
- package/bin/docs/architecture/trust-model.md +95 -0
- package/bin/docs/assets/hero.svg +37 -0
- package/bin/docs/assets/logo.svg +13 -0
- package/bin/docs/assets/production-readiness-scan-demo-poster.png +0 -0
- package/bin/docs/assets/production-readiness-scan-demo.gif +0 -0
- package/bin/docs/assets/production-readiness-scan-demo.mp4 +0 -0
- package/bin/docs/assets/social-card.png +0 -0
- package/bin/docs/assets/social-card.svg +40 -0
- package/bin/docs/checklists/00-readiness-principle.md +17 -0
- package/bin/docs/checklists/01-release-foundations.md +91 -0
- package/bin/docs/checklists/02-product-risk-architecture.md +136 -0
- package/bin/docs/checklists/03-source-build-supply-chain.md +97 -0
- package/bin/docs/checklists/04-environments-quality-experience.md +226 -0
- package/bin/docs/checklists/05-application-security.md +320 -0
- package/bin/docs/checklists/06-data-privacy-performance.md +166 -0
- package/bin/docs/checklists/07-reliability-operations.md +355 -0
- package/bin/docs/checklists/08-maintenance-vendors-compliance.md +112 -0
- package/bin/docs/checklists/09-conditional-modules.md +229 -0
- package/bin/docs/checklists/10-evidence-and-decision.md +111 -0
- package/bin/docs/engineering/00-overview.md +51 -0
- package/bin/docs/engineering/01-governance-and-foundations.md +919 -0
- package/bin/docs/engineering/02-product-and-requirements.md +186 -0
- package/bin/docs/engineering/03-user-experience-web-and-content.md +1352 -0
- package/bin/docs/engineering/04-architecture-and-design.md +387 -0
- package/bin/docs/engineering/05-code-quality-and-implementation.md +1103 -0
- package/bin/docs/engineering/06-application-services-and-apis.md +476 -0
- package/bin/docs/engineering/07-data-and-information-lifecycle.md +1009 -0
- package/bin/docs/engineering/08-security-and-cryptography.md +1215 -0
- package/bin/docs/engineering/09-privacy-and-data-protection.md +205 -0
- package/bin/docs/engineering/10-verification-and-testing.md +841 -0
- package/bin/docs/engineering/11-developer-experience-platform-and-delivery.md +1013 -0
- package/bin/docs/engineering/12-operations-sre-and-support.md +795 -0
- package/bin/docs/engineering/13-documentation-and-knowledge.md +349 -0
- package/bin/docs/engineering/14-trust-safety-and-ecosystems.md +330 -0
- package/bin/docs/engineering/15-ai-ml-and-ai-assisted-development.md +785 -0
- package/bin/docs/engineering/16-specialized-domains-and-release-assurance.md +775 -0
- package/bin/docs/engineering/source-manifest.md +479 -0
- package/bin/docs/guides/ai-assisted-review.md +61 -0
- package/bin/docs/guides/getting-started.md +78 -0
- package/bin/docs/index.md +66 -0
- package/bin/docs/prompts/evidence-challenge.md +26 -0
- package/bin/docs/prompts/full-readiness-review.md +34 -0
- package/bin/docs/prompts/release-diff-review.md +31 -0
- package/bin/docs/records/evidence-record.md +42 -0
- package/bin/docs/records/go-no-go-decision.md +63 -0
- package/bin/docs/records/release-assessment.md +124 -0
- package/bin/docs/records/risk-exception.md +64 -0
- package/bin/docs/references.md +52 -0
- package/bin/docs/scanner/ai-control-review.md +208 -0
- package/bin/docs/scanner/benchmarks.md +122 -0
- package/bin/docs/scanner/cli-contract.md +130 -0
- package/bin/docs/scanner/configuration.md +101 -0
- package/bin/docs/scanner/control-contracts.md +47 -0
- package/bin/docs/scanner/core-repository.md +62 -0
- package/bin/docs/scanner/diff-and-invalidation.md +79 -0
- package/bin/docs/scanner/doctor.md +71 -0
- package/bin/docs/scanner/getting-started.md +355 -0
- package/bin/docs/scanner/go-http-timeouts.md +96 -0
- package/bin/docs/scanner/infrastructure-policy.md +64 -0
- package/bin/docs/scanner/kubernetes-workloads.md +63 -0
- package/bin/docs/scanner/mcp-agent-integration.md +138 -0
- package/bin/docs/scanner/openapi-contracts.md +75 -0
- package/bin/docs/scanner/private-key-armor.md +44 -0
- package/bin/docs/scanner/releases.md +160 -0
- package/bin/docs/scanner/remediation.md +273 -0
- package/bin/docs/scanner/risk-exceptions.md +52 -0
- package/bin/docs/scanner/security-walkthrough.md +236 -0
- package/bin/docs/scanner/state-and-history.md +113 -0
- package/bin/docs/scanner/supply-chain.md +132 -0
- package/bin/docs/scanner/test-discovery.md +60 -0
- package/bin/docs/stylesheets/extra.css +183 -0
- package/bin/fixtures/benchmarks/core-native/suite-comprehensive.yaml +302 -0
- package/bin/fixtures/benchmarks/core-native/suite.yaml +59 -0
- package/bin/fixtures/benchmarks/core-native/targets/baseline/README.md +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/baseline/app.go +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/conflict-template/app.js +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/container-risky-template/Dockerfile +2 -0
- package/bin/fixtures/benchmarks/core-native/targets/container-valid/Dockerfile +2 -0
- package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-missing/package.json +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-present/package-lock.json +6 -0
- package/bin/fixtures/benchmarks/core-native/targets/dependency-lock-present/package.json +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/empty-manifest-template/package.json +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/final-newline-template/app.py +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/CODEOWNERS +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/dependabot.yml +6 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/.github/workflows/validate.yml +15 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/CODE_OF_CONDUCT.md +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/CONTRIBUTING.md +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/LICENSE +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/README.md +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/SECURITY.md +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/package-lock.json +6 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/package.json +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/foundation-present/tests/example.test.js +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-server-timeout-risky-template/go.mod +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-server-timeout-risky-template/server.go +18 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-malformed-template/client.go +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-malformed-template/go.mod +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-risky-template/client.go +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-risky-template/go.mod +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/client.go +22 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/go.mod +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/go-http-timeout-safe/hazards_test.go +8 -0
- package/bin/fixtures/benchmarks/core-native/targets/kubernetes-risky-template/deployment.yaml +27 -0
- package/bin/fixtures/benchmarks/core-native/targets/kubernetes-valid/deployment.yaml +26 -0
- package/bin/fixtures/benchmarks/core-native/targets/openapi-operation-ids-risky-template/openapi.yaml +17 -0
- package/bin/fixtures/benchmarks/core-native/targets/openapi-operation-responses-risky-template/openapi.yaml +11 -0
- package/bin/fixtures/benchmarks/core-native/targets/openapi-root-malformed-template/openapi.yaml +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/openapi-root-risky-template/openapi.yaml +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/openapi-root-valid/openapi.yaml +17 -0
- package/bin/fixtures/benchmarks/core-native/targets/package-test-command/app.js +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/package-test-command/package.json +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/package-test-placeholder/app.js +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/package-test-placeholder/package.json +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/private-key-template/deploy.pem +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/readme-missing/fixture.txt +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/runtime-missing/package-lock.json +6 -0
- package/bin/fixtures/benchmarks/core-native/targets/runtime-missing/package.json +4 -0
- package/bin/fixtures/benchmarks/core-native/targets/terraform-locked/.terraform.lock.hcl +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/terraform-locked/main.tf +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/terraform-unlocked-template/.terraform.lock.hcl +3 -0
- package/bin/fixtures/benchmarks/core-native/targets/terraform-unlocked-template/main.tf +7 -0
- package/bin/fixtures/benchmarks/core-native/targets/test-declaration-valid/app.py +2 -0
- package/bin/fixtures/benchmarks/core-native/targets/test-declaration-valid/tests/test_app.py +5 -0
- package/bin/fixtures/benchmarks/core-native/targets/test-path-without-declaration/app.py +2 -0
- package/bin/fixtures/benchmarks/core-native/targets/test-path-without-declaration/tests/test_app.py +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/workflow-malformed/.github/workflows/validate.yml +1 -0
- package/bin/fixtures/benchmarks/core-native/targets/workflow-no-jobs/.github/workflows/empty.yml +9 -0
- package/bin/fixtures/benchmarks/core-native/targets/workflow-risky/.github/workflows/risky.yml +10 -0
- package/bin/fixtures/benchmarks/core-native/targets/workflow-valid/.github/workflows/validate.yml +14 -0
- package/bin/packs/core-foundation.yaml +25 -0
- package/bin/packs/core-native.yaml +59 -0
- package/bin/prc +0 -0
- package/bin/schemas/adapter-execution-v0.1.schema.json +101 -0
- package/bin/schemas/adapter-execution-v0.2.schema.json +128 -0
- package/bin/schemas/adapter-execution.schema.json +145 -0
- package/bin/schemas/adapter-fixture-report.schema.json +59 -0
- package/bin/schemas/adapter-fixture-suite.schema.json +104 -0
- package/bin/schemas/adapter-manifest-v0.1.schema.json +55 -0
- package/bin/schemas/adapter-manifest-v0.2.schema.json +122 -0
- package/bin/schemas/adapter-manifest-v0.3.schema.json +172 -0
- package/bin/schemas/adapter-manifest.schema.json +299 -0
- package/bin/schemas/adapter-message.schema.json +136 -0
- package/bin/schemas/adapter-registry-report.schema.json +13 -0
- package/bin/schemas/adapter-registry.schema.json +47 -0
- package/bin/schemas/agent-execution-v0.1.schema.json +26 -0
- package/bin/schemas/agent-execution.schema.json +26 -0
- package/bin/schemas/agent-failure-v0.1.schema.json +102 -0
- package/bin/schemas/agent-failure.schema.json +102 -0
- package/bin/schemas/agent-output-v0.1.schema.json +36 -0
- package/bin/schemas/agent-output.schema.json +36 -0
- package/bin/schemas/agent-task-v0.1.schema.json +44 -0
- package/bin/schemas/agent-task.schema.json +46 -0
- package/bin/schemas/assertion-catalog.schema.json +69 -0
- package/bin/schemas/benchmark-report.schema.json +94 -0
- package/bin/schemas/benchmark-suite.schema.json +116 -0
- package/bin/schemas/catalog-bundle.schema.json +27 -0
- package/bin/schemas/catalog-manifest.schema.json +23 -0
- package/bin/schemas/checkov-iac-policy-report.schema.json +82 -0
- package/bin/schemas/control-contracts.schema.json +44 -0
- package/bin/schemas/control-review-output.schema.json +51 -0
- package/bin/schemas/doctor.schema.json +53 -0
- package/bin/schemas/evidence-v0.1.schema.json +21 -0
- package/bin/schemas/evidence.schema.json +21 -0
- package/bin/schemas/finding-v0.1.schema.json +70 -0
- package/bin/schemas/finding.schema.json +70 -0
- package/bin/schemas/fix-contract-v0.1.schema.json +35 -0
- package/bin/schemas/fix-contract-v0.2.schema.json +46 -0
- package/bin/schemas/fix-contract-v0.3.schema.json +49 -0
- package/bin/schemas/fix-contract.schema.json +49 -0
- package/bin/schemas/grype-vulnerability-report.schema.json +88 -0
- package/bin/schemas/history.schema.json +37 -0
- package/bin/schemas/invalidation.schema.json +86 -0
- package/bin/schemas/inventory-v0.1.schema.json +42 -0
- package/bin/schemas/inventory-v0.2.schema.json +95 -0
- package/bin/schemas/inventory-v0.3.schema.json +139 -0
- package/bin/schemas/inventory.schema.json +139 -0
- package/bin/schemas/objective-catalog.schema.json +62 -0
- package/bin/schemas/pack-report.schema.json +16 -0
- package/bin/schemas/pack.schema.json +53 -0
- package/bin/schemas/plan-v0.1.schema.json +31 -0
- package/bin/schemas/plan-v0.2.schema.json +32 -0
- package/bin/schemas/plan-v0.3.schema.json +44 -0
- package/bin/schemas/plan-v0.4.schema.json +48 -0
- package/bin/schemas/plan-v0.5.schema.json +49 -0
- package/bin/schemas/plan-v0.6.schema.json +137 -0
- package/bin/schemas/plan.schema.json +137 -0
- package/bin/schemas/profile.schema.json +42 -0
- package/bin/schemas/project-config.schema.json +128 -0
- package/bin/schemas/release-manifest-v0.1.schema.json +86 -0
- package/bin/schemas/release-manifest-v0.2.schema.json +146 -0
- package/bin/schemas/release-manifest-v0.3.schema.json +146 -0
- package/bin/schemas/release-manifest.schema.json +6 -0
- package/bin/schemas/remediation-candidate-v0.1.schema.json +51 -0
- package/bin/schemas/remediation-candidate-v0.2.schema.json +51 -0
- package/bin/schemas/remediation-candidate-v0.3.schema.json +51 -0
- package/bin/schemas/remediation-candidate-v0.4.schema.json +69 -0
- package/bin/schemas/remediation-candidate.schema.json +69 -0
- package/bin/schemas/remediation-run-v0.1.schema.json +69 -0
- package/bin/schemas/remediation-run-v0.2.schema.json +78 -0
- package/bin/schemas/remediation-run-v0.3.schema.json +86 -0
- package/bin/schemas/remediation-run-v0.4.schema.json +86 -0
- package/bin/schemas/remediation-run-v0.5.schema.json +131 -0
- package/bin/schemas/remediation-run-v0.6.schema.json +143 -0
- package/bin/schemas/remediation-run-v0.7.schema.json +160 -0
- package/bin/schemas/remediation-run-v0.8.schema.json +161 -0
- package/bin/schemas/remediation-run.schema.json +161 -0
- package/bin/schemas/risk-exception-verification.schema.json +17 -0
- package/bin/schemas/risk-exception.schema.json +137 -0
- package/bin/schemas/run-result-v0.1.schema.json +54 -0
- package/bin/schemas/run-result-v0.10.schema.json +64 -0
- package/bin/schemas/run-result-v0.11.schema.json +146 -0
- package/bin/schemas/run-result-v0.2.schema.json +60 -0
- package/bin/schemas/run-result-v0.3.schema.json +52 -0
- package/bin/schemas/run-result-v0.4.schema.json +52 -0
- package/bin/schemas/run-result-v0.5.schema.json +60 -0
- package/bin/schemas/run-result-v0.6.schema.json +61 -0
- package/bin/schemas/run-result-v0.7.schema.json +61 -0
- package/bin/schemas/run-result-v0.8.schema.json +61 -0
- package/bin/schemas/run-result-v0.9.schema.json +77 -0
- package/bin/schemas/run-result.schema.json +165 -0
- package/bin/schemas/signature-verification.schema.json +22 -0
- package/bin/schemas/signature.schema.json +18 -0
- package/bin/schemas/state-check-v0.1.schema.json +27 -0
- package/bin/schemas/state-check.schema.json +28 -0
- package/bin/schemas/trust-store.schema.json +50 -0
- package/bin/schemas/verification-execution-v0.1.schema.json +105 -0
- package/bin/schemas/verification-execution.schema.json +105 -0
- package/bin/schemas/version-v0.1.schema.json +27 -0
- package/bin/schemas/version.schema.json +27 -0
- package/manifest.json +9 -0
- 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.
|