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