agentic-scorecard 0.3.1 → 0.4.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/AGENT_PROMPT.md +11 -11
- package/README.md +35 -29
- package/benchmark/v0.4/adapter-contract.md +129 -0
- package/benchmark/v0.4/adapters/known-agent-harnesses.yaml +266 -0
- package/benchmark/v0.4/adapters/known-ci-providers.yaml +57 -0
- package/benchmark/v0.4/adapters/known-command-wrappers.yaml +37 -0
- package/benchmark/v0.4/adapters/known-environment-tooling.yaml +17 -0
- package/benchmark/v0.4/adapters/known-github-conventions.yaml +27 -0
- package/benchmark/v0.4/adapters/known-python-tooling.yaml +15 -0
- package/benchmark/v0.4/adapters/known-security-tools.yaml +45 -0
- package/benchmark/v0.4/adapters/known-verification-tools.yaml +65 -0
- package/benchmark/v0.4/agent-evidence-schema.json +74 -0
- package/benchmark/v0.4/attestation-schema.json +35 -0
- package/benchmark/v0.4/benchmark.yaml +127 -0
- package/benchmark/v0.4/calibration-matrix.md +60 -0
- package/benchmark/v0.4/controls/context.yaml +75 -0
- package/benchmark/v0.4/controls/environment.yaml +93 -0
- package/benchmark/v0.4/controls/governance.yaml +132 -0
- package/benchmark/v0.4/controls/learning.yaml +78 -0
- package/benchmark/v0.4/controls/observability.yaml +91 -0
- package/benchmark/v0.4/controls/resilience.yaml +170 -0
- package/benchmark/v0.4/controls/security.yaml +143 -0
- package/benchmark/v0.4/controls/specification.yaml +65 -0
- package/benchmark/v0.4/controls/testing.yaml +82 -0
- package/benchmark/v0.4/controls/tooling.yaml +69 -0
- package/benchmark/v0.4/report-schema.json +89 -0
- package/benchmark/v0.4/scoring-policy.md +175 -0
- package/dist/cli.js +2287 -162
- package/package.json +3 -2
- package/templates/agent-evidence.yaml +2 -2
- package/templates/attestations.yaml +3 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
id: known-ci-providers
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-ENV-003
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
ci_providers:
|
|
7
|
+
- id: github-actions
|
|
8
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
9
|
+
- id: gitlab-ci
|
|
10
|
+
files: [.gitlab-ci.yml]
|
|
11
|
+
- id: azure-pipelines
|
|
12
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
13
|
+
- control_id: ADRB-LRN-003
|
|
14
|
+
evidence_index: 0
|
|
15
|
+
ci_providers:
|
|
16
|
+
- id: github-actions
|
|
17
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
18
|
+
- id: gitlab-ci
|
|
19
|
+
files: [.gitlab-ci.yml]
|
|
20
|
+
- id: azure-pipelines
|
|
21
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
22
|
+
- control_id: ADRB-SPC-003
|
|
23
|
+
evidence_index: 0
|
|
24
|
+
ci_providers:
|
|
25
|
+
- id: github-actions
|
|
26
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
27
|
+
- id: gitlab-ci
|
|
28
|
+
files: [.gitlab-ci.yml]
|
|
29
|
+
- id: azure-pipelines
|
|
30
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
31
|
+
- control_id: ADRB-CTX-003
|
|
32
|
+
evidence_index: 0
|
|
33
|
+
ci_providers:
|
|
34
|
+
- id: github-actions
|
|
35
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
36
|
+
- id: gitlab-ci
|
|
37
|
+
files: [.gitlab-ci.yml]
|
|
38
|
+
- id: azure-pipelines
|
|
39
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
40
|
+
- control_id: ADRB-SEC-003
|
|
41
|
+
evidence_index: 0
|
|
42
|
+
ci_providers:
|
|
43
|
+
- id: github-actions
|
|
44
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
45
|
+
- id: gitlab-ci
|
|
46
|
+
files: [.gitlab-ci.yml]
|
|
47
|
+
- id: azure-pipelines
|
|
48
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
49
|
+
- control_id: ADRB-TST-003
|
|
50
|
+
evidence_index: 0
|
|
51
|
+
ci_providers:
|
|
52
|
+
- id: github-actions
|
|
53
|
+
files: [.github/workflows/*.yml, .github/workflows/*.yaml]
|
|
54
|
+
- id: gitlab-ci
|
|
55
|
+
files: [.gitlab-ci.yml]
|
|
56
|
+
- id: azure-pipelines
|
|
57
|
+
files: [azure-pipelines.yml, azure-pipelines.yaml]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: known-command-wrappers
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
ci_invocation_grammar:
|
|
4
|
+
wrapper_options_with_values:
|
|
5
|
+
- --cache
|
|
6
|
+
- --call
|
|
7
|
+
- --chdir
|
|
8
|
+
- --chroot
|
|
9
|
+
- --close-from
|
|
10
|
+
- --command-timeout
|
|
11
|
+
- --from
|
|
12
|
+
- --group
|
|
13
|
+
- --host
|
|
14
|
+
- --node-options
|
|
15
|
+
- --package
|
|
16
|
+
- --prompt
|
|
17
|
+
- --python
|
|
18
|
+
- --user
|
|
19
|
+
- --with
|
|
20
|
+
- -c
|
|
21
|
+
- -d
|
|
22
|
+
- -g
|
|
23
|
+
- -h
|
|
24
|
+
- -p
|
|
25
|
+
- -r
|
|
26
|
+
- -t
|
|
27
|
+
- -u
|
|
28
|
+
wrappers:
|
|
29
|
+
- executable_patterns: ['^(?:bunx|npx|sudo|uvx)$']
|
|
30
|
+
command_prefixes: [[]]
|
|
31
|
+
- executable_patterns: ['^(?:uv|pipx)$']
|
|
32
|
+
command_prefixes: [[run]]
|
|
33
|
+
- executable_patterns: ['^(?:bun|npm|pnpm|yarn)$']
|
|
34
|
+
command_prefixes: [[dlx], [exec], [x]]
|
|
35
|
+
- executable_patterns: ['^python(?:3(?:\.\d+)?)?$']
|
|
36
|
+
command_prefixes: [[-m]]
|
|
37
|
+
extensions: []
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: known-environment-tooling
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-ENV-003
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
ci_tools:
|
|
7
|
+
- id: locked-install
|
|
8
|
+
prohibited_arguments: [--dry-run]
|
|
9
|
+
commands:
|
|
10
|
+
- executables: [npm]
|
|
11
|
+
argument_groups: [[ci]]
|
|
12
|
+
- executables: [pnpm, yarn, bun]
|
|
13
|
+
argument_groups: [[install], [--frozen-lockfile, --immutable]]
|
|
14
|
+
- executables: [uv]
|
|
15
|
+
argument_groups: [[sync], [--frozen, --locked]]
|
|
16
|
+
- executables: [cargo]
|
|
17
|
+
argument_groups: [[fetch], [--locked]]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: known-github-conventions
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-GOV-001
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
files: [.github/pull_request_template.md, .github/PULL_REQUEST_TEMPLATE/**]
|
|
7
|
+
- control_id: ADRB-GOV-002
|
|
8
|
+
evidence_index: 0
|
|
9
|
+
patterns: [.github/CODEOWNERS, .github/OWNERS, docs/CODEOWNERS]
|
|
10
|
+
- control_id: ADRB-GOV-002
|
|
11
|
+
evidence_index: 1
|
|
12
|
+
files: [.github/pull_request_template.md]
|
|
13
|
+
- control_id: ADRB-RES-001
|
|
14
|
+
evidence_index: 0
|
|
15
|
+
files: [.github/SECURITY.md]
|
|
16
|
+
- control_id: ADRB-SEC-001
|
|
17
|
+
evidence_index: 0
|
|
18
|
+
files: [.github/SECURITY.md]
|
|
19
|
+
- control_id: ADRB-SEC-006
|
|
20
|
+
evidence_index: 0
|
|
21
|
+
files: [.github/SECURITY.md]
|
|
22
|
+
- control_id: ADRB-SPC-001
|
|
23
|
+
evidence_index: 0
|
|
24
|
+
patterns: [.github/ISSUE_TEMPLATE/**]
|
|
25
|
+
- control_id: ADRB-SPC-002
|
|
26
|
+
evidence_index: 0
|
|
27
|
+
files: [.github/ISSUE_TEMPLATE/**]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
id: known-python-tooling
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-ENV-001
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
files: [pyproject.toml]
|
|
7
|
+
- control_id: ADRB-ENV-001
|
|
8
|
+
evidence_index: 0
|
|
9
|
+
terms: [requires-python, uv sync, python]
|
|
10
|
+
- control_id: ADRB-TST-002
|
|
11
|
+
evidence_index: 0
|
|
12
|
+
files: [run_quality_checks.sh, scripts/**/quality*.sh, tox.ini, noxfile.py]
|
|
13
|
+
- control_id: ADRB-TST-002
|
|
14
|
+
evidence_index: 0
|
|
15
|
+
terms: [pytest, mypy, flake8, ruff, pyright, tox, nox]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
id: known-security-tools
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-SEC-003
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
ci_tools:
|
|
7
|
+
- id: gitleaks
|
|
8
|
+
requires_final_exit_status: true
|
|
9
|
+
commands:
|
|
10
|
+
- executables: [gitleaks]
|
|
11
|
+
argument_groups: [[detect]]
|
|
12
|
+
prohibited_arguments: [--exit-code, --log-opts, --source]
|
|
13
|
+
actions: [gitleaks/gitleaks-action]
|
|
14
|
+
- id: trufflehog
|
|
15
|
+
requires_final_exit_status: true
|
|
16
|
+
commands:
|
|
17
|
+
- executables: [trufflehog]
|
|
18
|
+
argument_groups:
|
|
19
|
+
- [git, filesystem]
|
|
20
|
+
- [--fail]
|
|
21
|
+
required_argument_prefixes:
|
|
22
|
+
- [git, '.']
|
|
23
|
+
- [git, ./]
|
|
24
|
+
- [git, 'file://.']
|
|
25
|
+
- [git, 'file://./']
|
|
26
|
+
- [git, '$GITHUB_WORKSPACE']
|
|
27
|
+
- [git, '${GITHUB_WORKSPACE}']
|
|
28
|
+
- [git, '$CI_PROJECT_DIR']
|
|
29
|
+
- [git, '${CI_PROJECT_DIR}']
|
|
30
|
+
- [git, '$(Build.SourcesDirectory)']
|
|
31
|
+
- [filesystem, '.']
|
|
32
|
+
- [filesystem, ./]
|
|
33
|
+
- [filesystem, '$GITHUB_WORKSPACE']
|
|
34
|
+
- [filesystem, '${GITHUB_WORKSPACE}']
|
|
35
|
+
- [filesystem, '$CI_PROJECT_DIR']
|
|
36
|
+
- [filesystem, '${CI_PROJECT_DIR}']
|
|
37
|
+
- [filesystem, '$(Build.SourcesDirectory)']
|
|
38
|
+
prohibited_arguments: [--fail=false]
|
|
39
|
+
prohibited_argument_sequences: [[--fail, 'false']]
|
|
40
|
+
- id: git-secrets
|
|
41
|
+
requires_final_exit_status: true
|
|
42
|
+
commands:
|
|
43
|
+
- executables: [git-secrets]
|
|
44
|
+
argument_groups: [[--scan, --scan-history]]
|
|
45
|
+
max_arguments: 1
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
id: known-verification-tools
|
|
2
|
+
benchmark_version: 0.4.0
|
|
3
|
+
extensions:
|
|
4
|
+
- control_id: ADRB-ENV-003
|
|
5
|
+
evidence_index: 0
|
|
6
|
+
ci_tools:
|
|
7
|
+
- id: tests
|
|
8
|
+
prohibited_arguments:
|
|
9
|
+
[--dry-run, --fixtures, --fixtures-per-test, --list-sessions, --markers, --no-run]
|
|
10
|
+
commands:
|
|
11
|
+
- executables: [npm, pnpm, yarn, bun, turbo, nx]
|
|
12
|
+
argument_groups:
|
|
13
|
+
- [test, test:unit, test:integration, test:e2e, unit-test, integration-test, e2e]
|
|
14
|
+
- executables: [cargo, go, dotnet, mvn, gradle, bazel]
|
|
15
|
+
repository_executables: [mvnw, gradlew]
|
|
16
|
+
argument_groups: [[test]]
|
|
17
|
+
standalone_executables: [pytest, pytest-cov, jest, vitest]
|
|
18
|
+
- id: static-analysis
|
|
19
|
+
commands:
|
|
20
|
+
- executables: [npm, pnpm, yarn, bun, turbo, nx]
|
|
21
|
+
argument_groups: [[lint, typecheck, type-check, check:types, check-types, check]]
|
|
22
|
+
- executables: [cargo]
|
|
23
|
+
argument_groups: [[clippy, check]]
|
|
24
|
+
- executables: [go]
|
|
25
|
+
argument_groups: [[vet]]
|
|
26
|
+
- executables: [mvn]
|
|
27
|
+
repository_executables: [mvnw]
|
|
28
|
+
argument_groups: [[checkstyle:check, spotbugs:check, pmd:check]]
|
|
29
|
+
- executables: [gradle]
|
|
30
|
+
repository_executables: [gradlew]
|
|
31
|
+
argument_groups: [[check]]
|
|
32
|
+
- executables: [ruff]
|
|
33
|
+
argument_groups: [[check]]
|
|
34
|
+
standalone_executables: [eslint, tsc, mypy, flake8, pyright, golangci-lint]
|
|
35
|
+
- control_id: ADRB-TST-003
|
|
36
|
+
evidence_index: 0
|
|
37
|
+
ci_tools:
|
|
38
|
+
- id: tests
|
|
39
|
+
prohibited_arguments:
|
|
40
|
+
[--dry-run, --fixtures, --fixtures-per-test, --list-sessions, --markers, --no-run]
|
|
41
|
+
commands:
|
|
42
|
+
- executables: [npm, pnpm, yarn, bun, turbo, nx]
|
|
43
|
+
argument_groups:
|
|
44
|
+
- [test, test:unit, test:integration, test:e2e, unit-test, integration-test, e2e]
|
|
45
|
+
- executables: [cargo, go, dotnet, mvn, gradle, bazel]
|
|
46
|
+
repository_executables: [mvnw, gradlew]
|
|
47
|
+
argument_groups: [[test]]
|
|
48
|
+
standalone_executables: [pytest, pytest-cov, jest, vitest]
|
|
49
|
+
- id: static-analysis
|
|
50
|
+
commands:
|
|
51
|
+
- executables: [npm, pnpm, yarn, bun, turbo, nx]
|
|
52
|
+
argument_groups: [[lint, typecheck, type-check, check:types, check-types, check]]
|
|
53
|
+
- executables: [cargo]
|
|
54
|
+
argument_groups: [[clippy, check]]
|
|
55
|
+
- executables: [go]
|
|
56
|
+
argument_groups: [[vet]]
|
|
57
|
+
- executables: [mvn]
|
|
58
|
+
repository_executables: [mvnw]
|
|
59
|
+
argument_groups: [[checkstyle:check, spotbugs:check, pmd:check]]
|
|
60
|
+
- executables: [gradle]
|
|
61
|
+
repository_executables: [gradlew]
|
|
62
|
+
argument_groups: [[check]]
|
|
63
|
+
- executables: [ruff]
|
|
64
|
+
argument_groups: [[check]]
|
|
65
|
+
standalone_executables: [eslint, tsc, mypy, flake8, pyright, golangci-lint]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://agentic-readiness.dev/schema/v0.4/agent-evidence.json",
|
|
4
|
+
"title": "ADRB v0.4 agent-collected evidence bundle",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version", "benchmark_version", "target", "collector", "claims"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": { "const": "0.4.0" },
|
|
10
|
+
"benchmark_version": { "const": "0.4.0" },
|
|
11
|
+
"target": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"required": ["repository", "git_head"],
|
|
15
|
+
"properties": {
|
|
16
|
+
"repository": { "type": "string", "minLength": 1 },
|
|
17
|
+
"git_head": { "type": "string", "minLength": 1 }
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"collector": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"required": ["name", "version"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"name": { "type": "string", "minLength": 1 },
|
|
26
|
+
"version": { "type": "string", "minLength": 1 }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"claims": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"propertyNames": { "pattern": "^ADRB-[A-Z]{3}-[0-9]{3}$" },
|
|
32
|
+
"additionalProperties": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": false,
|
|
35
|
+
"required": ["status", "scope", "summary", "references", "collected_at", "expires_at"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"status": { "enum": ["met", "not_met", "unknown"] },
|
|
38
|
+
"scope": { "enum": ["repository", "platform", "organization", "outcome"] },
|
|
39
|
+
"summary": { "type": "string", "minLength": 1 },
|
|
40
|
+
"references": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"minItems": 1,
|
|
43
|
+
"items": { "type": "string", "minLength": 1 }
|
|
44
|
+
},
|
|
45
|
+
"collected_at": { "type": "string", "format": "date-time" },
|
|
46
|
+
"expires_at": { "type": "string", "format": "date-time" },
|
|
47
|
+
"error": { "type": ["string", "null"], "minLength": 1 }
|
|
48
|
+
},
|
|
49
|
+
"allOf": [
|
|
50
|
+
{
|
|
51
|
+
"if": {
|
|
52
|
+
"required": ["error"],
|
|
53
|
+
"properties": { "error": { "type": "string" } }
|
|
54
|
+
},
|
|
55
|
+
"then": { "properties": { "status": { "const": "unknown" } } }
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"if": { "properties": { "scope": { "const": "repository" } } },
|
|
59
|
+
"then": {
|
|
60
|
+
"properties": {
|
|
61
|
+
"references": {
|
|
62
|
+
"items": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"pattern": "^repo:(?!/)(?!\\.{1,2}(?:/|#|$))(?!.*\\/\\.{1,2}(?:/|#|$))(?!.*\\\\)[^#]+(?:#L[1-9][0-9]*(?:-L?[1-9][0-9]*)?)?$"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://agentic-readiness.dev/schema/v0.4/attestations.json",
|
|
4
|
+
"title": "ADRB v0.4 human attestation file",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["benchmark_version", "target", "attestations"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"benchmark_version": { "const": "0.4.0" },
|
|
10
|
+
"target": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"required": ["repository"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"repository": { "type": "string", "minLength": 1 }
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"attestations": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"propertyNames": { "pattern": "^ADRB-[A-Z]{3}-[0-9]{3}$" },
|
|
21
|
+
"additionalProperties": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"required": ["status", "evidence", "owner", "reviewed_at", "expires_at"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"status": { "enum": ["met", "not_met", "not_applicable", "unknown"] },
|
|
27
|
+
"evidence": { "type": "string", "minLength": 1 },
|
|
28
|
+
"owner": { "type": "string", "minLength": 1 },
|
|
29
|
+
"reviewed_at": { "type": "string", "format": "date" },
|
|
30
|
+
"expires_at": { "type": "string", "format": "date" }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
id: agentic-development-readiness
|
|
2
|
+
version: 0.4.0
|
|
3
|
+
title: Agentic Development Readiness Benchmark
|
|
4
|
+
description: >-
|
|
5
|
+
A vendor-neutral, evidence-backed assessment of the engineering harness that surrounds AI agents.
|
|
6
|
+
It measures whether a repository and its operating controls can safely support increasing levels
|
|
7
|
+
of delegated software work.
|
|
8
|
+
|
|
9
|
+
maturity_levels:
|
|
10
|
+
0: Absent
|
|
11
|
+
1: Ad hoc
|
|
12
|
+
2: Documented
|
|
13
|
+
3: Enforced
|
|
14
|
+
4: Measured and improving
|
|
15
|
+
|
|
16
|
+
dimensions:
|
|
17
|
+
- id: context
|
|
18
|
+
title: Context and knowledge
|
|
19
|
+
description: Agents can discover authoritative, scoped, current instructions without guesswork.
|
|
20
|
+
- id: environment
|
|
21
|
+
title: Reproducible environment
|
|
22
|
+
description: Agents can establish and verify a faithful development environment.
|
|
23
|
+
- id: specification
|
|
24
|
+
title: Specification and planning
|
|
25
|
+
description: Work starts from testable outcomes, constraints, and explicit acceptance criteria.
|
|
26
|
+
- id: tooling
|
|
27
|
+
title: Tooling and interfaces
|
|
28
|
+
description: Agent tools are discoverable, least-privileged, observable, and fail safely.
|
|
29
|
+
- id: security
|
|
30
|
+
title: Security and data governance
|
|
31
|
+
description: Credentials, data, autonomy, and untrusted content have explicit boundaries.
|
|
32
|
+
- id: testing
|
|
33
|
+
title: Verification and testing
|
|
34
|
+
description: Changes are checked at the right layers with trustworthy, reproducible signals.
|
|
35
|
+
- id: governance
|
|
36
|
+
title: Review and change governance
|
|
37
|
+
description: Human accountability, change scope, and merge authority remain explicit.
|
|
38
|
+
- id: learning
|
|
39
|
+
title: Learning and knowledge maintenance
|
|
40
|
+
description: Corrections compound into maintained instructions instead of being rediscovered.
|
|
41
|
+
- id: observability
|
|
42
|
+
title: Outcome observability
|
|
43
|
+
description: Runs and outcomes can be evaluated by task class, risk, cost, and quality.
|
|
44
|
+
- id: resilience
|
|
45
|
+
title: Failure containment and recovery
|
|
46
|
+
description: Agent failures are bounded, reversible, diagnosed, and rehearsed.
|
|
47
|
+
|
|
48
|
+
readiness_profiles:
|
|
49
|
+
- id: read-only-analysis
|
|
50
|
+
title: Read-only analysis
|
|
51
|
+
description: Agent may inspect approved repository content and return advice, without mutations.
|
|
52
|
+
floors:
|
|
53
|
+
context: 1
|
|
54
|
+
environment: 0
|
|
55
|
+
specification: 0
|
|
56
|
+
tooling: 0
|
|
57
|
+
security: 1
|
|
58
|
+
testing: 0
|
|
59
|
+
governance: 0
|
|
60
|
+
learning: 0
|
|
61
|
+
observability: 0
|
|
62
|
+
resilience: 0
|
|
63
|
+
- id: planning
|
|
64
|
+
title: Planning and specification
|
|
65
|
+
description: Agent may draft plans, specifications, and proposed changes for human review.
|
|
66
|
+
floors:
|
|
67
|
+
context: 2
|
|
68
|
+
environment: 0
|
|
69
|
+
specification: 1
|
|
70
|
+
tooling: 1
|
|
71
|
+
security: 1
|
|
72
|
+
testing: 0
|
|
73
|
+
governance: 1
|
|
74
|
+
learning: 0
|
|
75
|
+
observability: 0
|
|
76
|
+
resilience: 0
|
|
77
|
+
- id: local-implementation
|
|
78
|
+
title: Local implementation
|
|
79
|
+
description: Agent may edit an isolated checkout and run approved local verification.
|
|
80
|
+
floors:
|
|
81
|
+
context: 2
|
|
82
|
+
environment: 2
|
|
83
|
+
specification: 2
|
|
84
|
+
tooling: 2
|
|
85
|
+
security: 2
|
|
86
|
+
testing: 2
|
|
87
|
+
governance: 1
|
|
88
|
+
learning: 1
|
|
89
|
+
observability: 1
|
|
90
|
+
resilience: 1
|
|
91
|
+
- id: pr-creation
|
|
92
|
+
title: Pull request creation
|
|
93
|
+
description: Agent may create a branch and propose a pull request; a human retains merge authority.
|
|
94
|
+
floors:
|
|
95
|
+
context: 2
|
|
96
|
+
environment: 2
|
|
97
|
+
specification: 2
|
|
98
|
+
tooling: 2
|
|
99
|
+
security: 2
|
|
100
|
+
testing: 2
|
|
101
|
+
governance: 2
|
|
102
|
+
learning: 1
|
|
103
|
+
observability: 1
|
|
104
|
+
resilience: 2
|
|
105
|
+
- id: limited-autonomous-maintenance
|
|
106
|
+
title: Limited autonomous maintenance
|
|
107
|
+
description: >-
|
|
108
|
+
Agent may complete pre-approved, low-risk maintenance within strict scope, budget, and stop
|
|
109
|
+
conditions. This profile never grants production deployment authority.
|
|
110
|
+
floors:
|
|
111
|
+
context: 3
|
|
112
|
+
environment: 3
|
|
113
|
+
specification: 3
|
|
114
|
+
tooling: 3
|
|
115
|
+
security: 3
|
|
116
|
+
testing: 3
|
|
117
|
+
governance: 3
|
|
118
|
+
learning: 3
|
|
119
|
+
observability: 3
|
|
120
|
+
resilience: 3
|
|
121
|
+
|
|
122
|
+
scoring:
|
|
123
|
+
dimension_method: consecutive-levels
|
|
124
|
+
overall_method: sum
|
|
125
|
+
maximum_score: 40
|
|
126
|
+
readiness_method: non-compensating-floors
|
|
127
|
+
attestation_counts_as_verified: false
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# v0.4 calibration matrix
|
|
2
|
+
|
|
3
|
+
This matrix records the versioned expected outcomes exercised by the v0.4 conformance fixtures.
|
|
4
|
+
PR #11 review is the independent acceptance gate for these expectations. The executable assertions
|
|
5
|
+
live in `tests/v04-calibration.test.ts`; this document is the public, human-readable index.
|
|
6
|
+
|
|
7
|
+
| Case | Surface | Expected outcome |
|
|
8
|
+
| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------------------------- |
|
|
9
|
+
| Mature harness | Node, GitHub Actions | 30/40, repository 23/23, limited-autonomous-maintenance passes |
|
|
10
|
+
| Guidance and verification comments only | GitHub Actions plus Jenkins comments | CTX-003 and TST-003 do not pass |
|
|
11
|
+
| Missing or display-only package tasks | Node package scripts | CTX-003 and TST-003 do not pass |
|
|
12
|
+
| Missing package tasks behind supported wrappers | Node, GitHub Actions | TST-003 does not pass |
|
|
13
|
+
| Package/workspace context switch; nested package-exec tools | Node, GitHub Actions | Context switch fails closed; nested tools may pass |
|
|
14
|
+
| Executed no-op guidance-validation script | Node, GitHub Actions | CTX-003 does not pass |
|
|
15
|
+
| Executed guidance validation, tests, and typecheck | Node, GitHub Actions | CTX-003 and TST-003 pass |
|
|
16
|
+
| Locked install, tests, static analysis, traceability, and curation | Node, GitHub Actions | ENV-003, SPC-003, and LRN-003 pass |
|
|
17
|
+
| Frozen install with pnpm, Yarn, or Bun | Node, GitHub Actions | ENV-003 passes |
|
|
18
|
+
| Keyword-bearing no-op environment, traceability, or curation files | Node, GitHub Actions | ENV-003, SPC-003, and LRN-003 do not pass |
|
|
19
|
+
| Specification heading check without implementation/test bindings | Node, GitHub Actions | SPC-003 does not pass |
|
|
20
|
+
| Python tests and static analysis | `uv run pytest` and `uv run mypy`, GitLab CI | TST-003 passes |
|
|
21
|
+
| Rust tests and static analysis | `cargo test` and `cargo clippy`, Azure Pipelines | TST-003 passes |
|
|
22
|
+
| Tests and static analysis split across CI files | Separate GitHub workflows | TST-003 passes |
|
|
23
|
+
| Tests and static analysis in one fail-fast multiline step | GitHub Actions | TST-003 passes |
|
|
24
|
+
| Multiline verification without a provider fail-fast guarantee | Azure Pipelines | TST-003 does not pass |
|
|
25
|
+
| Test discovery or session-listing commands plus static analysis | Python, GitHub Actions | TST-003 does not pass |
|
|
26
|
+
| Go or .NET test-listing modes plus static analysis | Multiple runtimes, GitHub Actions | TST-003 does not pass |
|
|
27
|
+
| Pytest local-variable display plus static analysis | Python, GitHub Actions | TST-003 passes |
|
|
28
|
+
| Tracked Maven/Gradle root wrappers versus missing wrapper | Java, GitHub Actions | Tracked wrappers pass; missing wrapper does not |
|
|
29
|
+
| Monorepo tests and static analysis | Root package tasks bound to Turbo commands | TST-003 passes |
|
|
30
|
+
| Invalid cross-tool command aliases | GitHub Actions | TST-003 command classes remain unmatched |
|
|
31
|
+
| Path-qualified package-manager impersonator or command after unconditional exit | Node, GitHub Actions | Mechanical CI controls do not pass |
|
|
32
|
+
| Executed secret scanner | GitHub Actions, GitLab CI, Azure Pipelines | SEC-003 repository alternative passes |
|
|
33
|
+
| git-secrets default scan versus unrelated explicit target | GitHub Actions | Default passes; unrelated target does not |
|
|
34
|
+
| Scanner comments, display modes, disabled/non-blocking jobs, neutralized scanner exits, invalid actions, or non-integration triggers | Multiple providers | SEC-003 repository alternative does not pass |
|
|
35
|
+
| Explicit unsupported command shell | GitHub Actions | SEC-003 repository alternative does not pass |
|
|
36
|
+
| Disjunction of supported integration events | GitHub Actions | SEC-003 repository alternative passes |
|
|
37
|
+
| Unresolved GitLab inheritance, exclusions, or non-blocking defaults | GitLab CI | SEC-003 repository alternative does not pass |
|
|
38
|
+
| Malformed GitLab workflow or job rules | GitLab CI | SEC-003 repository alternative does not pass |
|
|
39
|
+
| Job-level merge-request rule under a workflow-level denial | GitLab CI | SEC-003 repository alternative does not pass |
|
|
40
|
+
| Nested CI fragments or Azure root command fields | Multiple providers | SEC-003 repository alternative does not pass |
|
|
41
|
+
| Conditional checkout with unsupported target effect; non-root setup hook or working directory | Multiple providers | Repository-bound CI evidence fails closed |
|
|
42
|
+
| Azure stage with direct steps | Azure Pipelines | SEC-003 repository alternative does not pass |
|
|
43
|
+
| Host-native secret scanning claim | Target-bound platform evidence | SEC-003 may pass; SEC-007 remains unresolved |
|
|
44
|
+
| Keyword-stuffed or distant guidance | Repository documents and generated run output | Mechanical Level 3 controls do not pass |
|
|
45
|
+
| Comment-only validation-script structure | Executed tracked validator | CTX-003 does not pass |
|
|
46
|
+
| Required validator patterns split across unreachable functions | Executed tracked validator | CTX-003 does not pass |
|
|
47
|
+
| Explicit ownership map plus human approval and merge authority | Conventional ownership formats | GOV-002 passes |
|
|
48
|
+
| Placeholder/inactive owner, vague prose, negated authority, or missing authority | Conventional ownership formats | GOV-002 does not pass |
|
|
49
|
+
| AI/bot-qualified maintainer approval or merge authority | Agent guidance | GOV-002 does not pass |
|
|
50
|
+
| Component table in `OWNERS.md`; contact under a former-maintainers heading | Conventional ownership formats | Active mapping passes; former-only contact does not |
|
|
51
|
+
| Bare component name in a typed ownership table | Conventional ownership formats | Accountable assignment passes |
|
|
52
|
+
| Complete co-located containment components | Agent guidance | RES-002 passes |
|
|
53
|
+
| Compound “do not continue outside allowed paths” containment rule | Agent guidance | Mutation scope and stop trigger both match |
|
|
54
|
+
| Resource budget without retry bounds, or retry bounds without a resource budget | Agent guidance | RES-002 does not pass |
|
|
55
|
+
| Partial, negated, or absent containment components | Agent guidance | RES-002 does not pass and reports matched/missing groups |
|
|
56
|
+
|
|
57
|
+
Jenkins is intentionally a negative calibration in v0.4: the offline collector does not claim that
|
|
58
|
+
a Jenkinsfile is integration-triggered without a supported structural provider parser. Such evidence
|
|
59
|
+
remains unresolved or may be supplied as eligible, source-backed agent evidence. Scores from v0.3
|
|
60
|
+
and v0.4 are not directly comparable.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
dimension: context
|
|
2
|
+
controls:
|
|
3
|
+
- id: ADRB-CTX-001
|
|
4
|
+
level: 1
|
|
5
|
+
title: Agent guidance is discoverable
|
|
6
|
+
outcome: A contributor or agent can locate the repository's authoritative operating guidance.
|
|
7
|
+
risk: Agents infer repository rules from generic practice or stale neighboring files.
|
|
8
|
+
evidence:
|
|
9
|
+
- type: path_any
|
|
10
|
+
scope: repository
|
|
11
|
+
patterns:
|
|
12
|
+
[
|
|
13
|
+
AGENTS.md,
|
|
14
|
+
Agents.md,
|
|
15
|
+
agents.md,
|
|
16
|
+
.ai/AGENTS.md,
|
|
17
|
+
.ai/Agents.md,
|
|
18
|
+
.ai/constitution.md,
|
|
19
|
+
.ai/instructions/**,
|
|
20
|
+
.ai/rules/**,
|
|
21
|
+
.agents/**,
|
|
22
|
+
]
|
|
23
|
+
remediation: Add a tracked, non-empty agent entry point that names the authoritative guidance.
|
|
24
|
+
- id: ADRB-CTX-002
|
|
25
|
+
level: 2
|
|
26
|
+
title: Guidance scope and precedence are explicit
|
|
27
|
+
outcome: Instructions state their scope, precedence, important constraints, and architecture boundaries.
|
|
28
|
+
risk: Conflicting or nested guidance produces plausible changes that violate local invariants.
|
|
29
|
+
allow_agent_evidence: true
|
|
30
|
+
agent_evidence_scopes: [repository]
|
|
31
|
+
evidence:
|
|
32
|
+
- type: content_terms
|
|
33
|
+
scope: repository
|
|
34
|
+
files:
|
|
35
|
+
[
|
|
36
|
+
AGENTS.md,
|
|
37
|
+
Agents.md,
|
|
38
|
+
agents.md,
|
|
39
|
+
.ai/AGENTS.md,
|
|
40
|
+
.ai/Agents.md,
|
|
41
|
+
.ai/constitution.md,
|
|
42
|
+
.ai/instructions/**/*.md,
|
|
43
|
+
.ai/rules/**/*.md,
|
|
44
|
+
.ai/skills/**/*.md,
|
|
45
|
+
.agents/**/*.md,
|
|
46
|
+
]
|
|
47
|
+
terms: [scope, precedence, architecture, must, constraint]
|
|
48
|
+
min_terms: 2
|
|
49
|
+
max_span_lines: 120
|
|
50
|
+
max_files_per_pattern: 50
|
|
51
|
+
remediation: Document instruction scope, precedence, non-negotiable constraints, and where deeper guidance lives.
|
|
52
|
+
- id: ADRB-CTX-003
|
|
53
|
+
level: 3
|
|
54
|
+
title: Agent guidance integrity is mechanically checked
|
|
55
|
+
outcome: Automated validation detects missing, broken, stale, or structurally invalid agent guidance.
|
|
56
|
+
risk: Critical instructions silently drift while agents continue treating them as authoritative.
|
|
57
|
+
allow_agent_evidence: true
|
|
58
|
+
agent_evidence_scopes: [repository]
|
|
59
|
+
evidence:
|
|
60
|
+
- type: ci_command
|
|
61
|
+
scope: repository
|
|
62
|
+
min_tools: 1
|
|
63
|
+
remediation: Add a CI check for required agent files, links, ownership, and structural invariants.
|
|
64
|
+
- id: ADRB-CTX-004
|
|
65
|
+
level: 4
|
|
66
|
+
title: Guidance effectiveness drives improvement
|
|
67
|
+
outcome: Retrieval failures, repeated instruction errors, and correction latency are trended and improve guidance.
|
|
68
|
+
risk: Documentation volume grows without evidence that agents find and apply the right context.
|
|
69
|
+
allow_attestation: true
|
|
70
|
+
allow_agent_evidence: true
|
|
71
|
+
evidence:
|
|
72
|
+
- type: manual
|
|
73
|
+
scope: outcome
|
|
74
|
+
prompt: Provide time-series guidance-quality outcomes and a recent instruction change driven by them.
|
|
75
|
+
remediation: Measure context retrieval and recurring instruction failures, then update guidance from the results.
|