certfix 0.2.0__tar.gz → 0.3.0__tar.gz
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.
- {certfix-0.2.0 → certfix-0.3.0}/.certfix.yaml.example +69 -69
- certfix-0.3.0/.gitattributes +6 -0
- {certfix-0.2.0 → certfix-0.3.0}/.github/workflows/ci.yml +2 -0
- {certfix-0.2.0 → certfix-0.3.0}/.github/workflows/docker.yml +2 -1
- {certfix-0.2.0 → certfix-0.3.0}/.gitignore +82 -82
- certfix-0.3.0/AGENTS.md +111 -0
- {certfix-0.2.0 → certfix-0.3.0}/Dockerfile +4 -2
- {certfix-0.2.0 → certfix-0.3.0}/LICENSE +21 -21
- certfix-0.3.0/PKG-INFO +381 -0
- certfix-0.3.0/README.md +344 -0
- {certfix-0.2.0 → certfix-0.3.0}/RELEASE_NOTES.md +44 -1
- {certfix-0.2.0 → certfix-0.3.0}/THIRD_PARTY_NOTICES.md +32 -32
- {certfix-0.2.0 → certfix-0.3.0}/configs/deepseek-v4-flash-api.yaml +79 -79
- {certfix-0.2.0/src/certfix → certfix-0.3.0}/configs/deepseek-v4-flash-openrouter.yaml +82 -82
- {certfix-0.2.0/src/certfix → certfix-0.3.0}/configs/examples/deepseek-gemini-step-overrides.yaml +97 -97
- certfix-0.3.0/configs/examples/local-detection-deepseek-fix-docker.yaml +78 -0
- {certfix-0.2.0/src/certfix → certfix-0.3.0}/configs/examples/local-detection-deepseek-fix.yaml +80 -79
- {certfix-0.2.0/src/certfix → certfix-0.3.0}/configs/gemini-3-flash-preview-openrouter.yaml +76 -76
- {certfix-0.2.0 → certfix-0.3.0}/configs/qwen36-mtp-check.yaml +37 -29
- certfix-0.3.0/docker/certfix-entrypoint.sh +14 -0
- certfix-0.3.0/docker/llama-server/Dockerfile +36 -0
- certfix-0.3.0/docker/llama-server/entrypoint.sh +25 -0
- certfix-0.3.0/docker-compose.api.yml +11 -0
- certfix-0.3.0/docker-compose.local-qwen36.yml +62 -0
- {certfix-0.2.0 → certfix-0.3.0}/docs/ARCHITECTURE.md +6 -6
- {certfix-0.2.0 → certfix-0.3.0}/docs/BENCHMARK_SUMMARY.md +136 -133
- {certfix-0.2.0 → certfix-0.3.0}/docs/CONFIGURATION.md +7 -0
- {certfix-0.2.0 → certfix-0.3.0}/docs/CONTRIBUTING.md +98 -98
- certfix-0.3.0/docs/DOCKER.md +406 -0
- {certfix-0.2.0 → certfix-0.3.0}/docs/EXAMPLE_OUTPUT.md +4 -0
- {certfix-0.2.0 → certfix-0.3.0}/docs/INDEX.md +12 -9
- certfix-0.3.0/docs/INSTALLATION.md +192 -0
- certfix-0.3.0/docs/LIMITATIONS.md +48 -0
- {certfix-0.2.0 → certfix-0.3.0}/docs/MODEL_SMOKE_SUITE.md +113 -113
- {certfix-0.2.0 → certfix-0.3.0}/docs/QWEN36_MTP_RUNTIME.md +3 -4
- {certfix-0.2.0 → certfix-0.3.0}/docs/RELEASE_CHECKLIST.md +12 -4
- {certfix-0.2.0 → certfix-0.3.0}/docs/RESEARCH_NOTES.md +49 -49
- {certfix-0.2.0 → certfix-0.3.0}/docs/SUPPORTED_RULES.md +74 -74
- {certfix-0.2.0 → certfix-0.3.0}/examples/input/mem30_use_after_free.c +27 -27
- {certfix-0.2.0 → certfix-0.3.0}/examples/input/multi_rule_vulnerabilities.c +32 -32
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/clean_print.c +5 -5
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/exp33_uninitialized_read.c +7 -7
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/exp34_null_deref.c +5 -5
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/mem30_use_after_free.c +12 -12
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/mem35_short_alloc.c +11 -11
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/multi_file_mem30/helpers.c +5 -5
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/multi_file_mem30/helpers.h +8 -8
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/multi_file_mem30/main.c +14 -14
- {certfix-0.2.0 → certfix-0.3.0}/model-smoke-cases/multi_function_mem30.c +24 -24
- {certfix-0.2.0 → certfix-0.3.0}/pyproject.toml +2 -1
- {certfix-0.2.0 → certfix-0.3.0}/scripts/check_release_readiness.py +14 -0
- {certfix-0.2.0 → certfix-0.3.0}/scripts/run_model_smoke_suite.py +396 -396
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/__init__.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/__main__.py +6 -6
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/cli.py +19 -12
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/config.py +375 -375
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/deepseek-v4-flash-api.yaml +79 -79
- {certfix-0.2.0 → certfix-0.3.0/src/certfix}/configs/deepseek-v4-flash-openrouter.yaml +82 -82
- {certfix-0.2.0 → certfix-0.3.0/src/certfix}/configs/examples/deepseek-gemini-step-overrides.yaml +97 -97
- certfix-0.3.0/src/certfix/configs/examples/local-detection-deepseek-fix-docker.yaml +78 -0
- {certfix-0.2.0 → certfix-0.3.0/src/certfix}/configs/examples/local-detection-deepseek-fix.yaml +80 -79
- {certfix-0.2.0 → certfix-0.3.0/src/certfix}/configs/gemini-3-flash-preview-openrouter.yaml +76 -76
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/qwen36-mtp-check.yaml +37 -29
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/qwen36-mtp-local.yaml +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/__init__.py +26 -26
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/detector.py +209 -209
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/fix_validator.py +335 -335
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/fixer.py +92 -92
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/include_resolver.py +113 -113
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/preprocessor.py +133 -133
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/rule_selection_cards.py +546 -546
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/simple_repair.py +244 -244
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/splitter.py +245 -245
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/validate_guided_retry.py +278 -278
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/validation.py +677 -677
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/data/__init__.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/data/cert_c_rules_with_examples.json +211 -211
- certfix-0.3.0/src/certfix/docker_wrapper.py +229 -0
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/env.py +47 -47
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/exceptions.py +43 -43
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/inference/__init__.py +10 -10
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/inference/api.py +855 -855
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/inference/base.py +55 -55
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/inference/factory.py +160 -160
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/inference/parsing.py +371 -371
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/models.py +322 -322
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/output.py +490 -490
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/prompt_profiles.py +426 -426
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/prompts.py +734 -734
- {certfix-0.2.0 → certfix-0.3.0}/tests/__init__.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/tests/conftest.py +50 -50
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/clean_no_violation.c +13 -13
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/exp33_uninitialized.c +7 -7
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/exp33_uninitialized.violations.json +11 -11
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/mem30_use_after_free.c +11 -11
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/mem30_use_after_free.violations.json +11 -11
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/multi_file.violations.json +29 -29
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/sarif-schema-2.1.0.json +3389 -3389
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/str31_buffer_overflow.c +9 -9
- {certfix-0.2.0 → certfix-0.3.0}/tests/fixtures/str31_buffer_overflow.violations.json +11 -11
- {certfix-0.2.0 → certfix-0.3.0}/tests/integration/__init__.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/tests/integration/test_cli.py +42 -3
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/__init__.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_api_backend.py +713 -713
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_build_prompt.py +188 -188
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_config.py +258 -258
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_detector.py +388 -388
- certfix-0.3.0/tests/unit/test_docker_wrapper.py +188 -0
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_env.py +51 -51
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_factory.py +331 -331
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_fix_validator.py +259 -259
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_include_resolver.py +128 -128
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_models.py +160 -160
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_output.py +85 -85
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_parsing.py +191 -191
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_preprocessor.py +79 -79
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_prompt_profiles.py +195 -195
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_rule_selection_cards.py +110 -110
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_sarif.py +1 -1
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_simple_repair.py +170 -170
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_splitter.py +156 -156
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_validate_guided_retry.py +191 -191
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_validation.py +786 -786
- certfix-0.2.0/AGENTS.md +0 -43
- certfix-0.2.0/PKG-INFO +0 -555
- certfix-0.2.0/README.md +0 -518
- certfix-0.2.0/docker-compose.api.yml +0 -12
- certfix-0.2.0/docker-compose.local-qwen36.yml +0 -50
- certfix-0.2.0/docs/DOCKER.md +0 -152
- {certfix-0.2.0 → certfix-0.3.0}/.dockerignore +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/SECURITY.md +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/configs/qwen36-mtp-docker.yaml +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/configs/qwen36-mtp-local.yaml +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/__init__.py +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/examples/__init__.py +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/configs/qwen36-mtp-docker.yaml +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/src/certfix/core/programmatic_checks.py +0 -0
- {certfix-0.2.0 → certfix-0.3.0}/tests/unit/test_programmatic_checks.py +0 -0
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# certfix configuration example
|
|
2
|
-
#
|
|
3
|
-
# Recommended setup:
|
|
4
|
-
#
|
|
5
|
-
# certfix config qwen36-mtp-local --output .certfix.yaml
|
|
6
|
-
#
|
|
7
|
-
# This checked-in example mirrors the v0.1.0 local Qwen3.6 MTP profile. Start an
|
|
8
|
-
# MTP-capable llama.cpp server before running `certfix check` or `certfix fix`.
|
|
9
|
-
# The server must support `--spec-type draft-mtp`.
|
|
10
|
-
|
|
11
|
-
detection:
|
|
12
|
-
backend: local_llama_server
|
|
13
|
-
prompt_profile: qwen36_certfix_check_v1
|
|
14
|
-
batch_size: 1
|
|
15
|
-
qwen36_rule_id_strategy: sequential_top2_p3
|
|
16
|
-
qwen36_selector_candidate_k: 2
|
|
17
|
-
qwen36_selector_permutations: 3
|
|
18
|
-
api:
|
|
19
|
-
base_url: http://127.0.0.1:8952/v1
|
|
20
|
-
model: unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL
|
|
21
|
-
api_key_env: ""
|
|
22
|
-
timeout: 300
|
|
23
|
-
max_tokens: 1024
|
|
24
|
-
temperature: 0.0
|
|
25
|
-
|
|
26
|
-
models:
|
|
27
|
-
qwen36_local:
|
|
28
|
-
backend: local_llama_server
|
|
29
|
-
profile: qwen36_27b_local
|
|
30
|
-
max_tokens: 4096
|
|
31
|
-
temperature: 0.0
|
|
32
|
-
api:
|
|
33
|
-
base_url: http://127.0.0.1:8952/v1
|
|
34
|
-
model: unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL
|
|
35
|
-
api_key_env: ""
|
|
36
|
-
timeout: 300
|
|
37
|
-
max_tokens: 4096
|
|
38
|
-
temperature: 0.0
|
|
39
|
-
|
|
40
|
-
validation:
|
|
41
|
-
compile:
|
|
42
|
-
enabled: true
|
|
43
|
-
command: gcc
|
|
44
|
-
args: ["-fsyntax-only"]
|
|
45
|
-
include_paths: []
|
|
46
|
-
timeout: 30
|
|
47
|
-
violation_removal:
|
|
48
|
-
enabled: true
|
|
49
|
-
detector_role: qwen36_local
|
|
50
|
-
method: non_target_advisory
|
|
51
|
-
max_tokens: 512
|
|
52
|
-
override_denylist: ["SIG34-C", "STR31-C"]
|
|
53
|
-
semantic:
|
|
54
|
-
enabled: true
|
|
55
|
-
reviewer_role: qwen36_local
|
|
56
|
-
block_on_uncertain: true
|
|
57
|
-
|
|
58
|
-
fix:
|
|
59
|
-
simple_repairer_role: qwen36_local
|
|
60
|
-
simple_repair_profile: qwen36_27b_complete_repair_rule_guided_v1
|
|
61
|
-
simple_max_tokens: 4096
|
|
62
|
-
validate_guided_retry: true
|
|
63
|
-
retry_max_attempts: 1
|
|
64
|
-
retry_max_tokens: 4096
|
|
65
|
-
retry_rule_addenda_v1: true
|
|
66
|
-
retry_rule_addenda_rule_ids: ["ARR37-C", "CON31-C", "POS48-C", "SIG30-C", "ENV33-C"]
|
|
67
|
-
|
|
68
|
-
check:
|
|
69
|
-
exclude: []
|
|
1
|
+
# certfix configuration example
|
|
2
|
+
#
|
|
3
|
+
# Recommended setup:
|
|
4
|
+
#
|
|
5
|
+
# certfix config qwen36-mtp-local --output .certfix.yaml
|
|
6
|
+
#
|
|
7
|
+
# This checked-in example mirrors the v0.1.0 local Qwen3.6 MTP profile. Start an
|
|
8
|
+
# MTP-capable llama.cpp server before running `certfix check` or `certfix fix`.
|
|
9
|
+
# The server must support `--spec-type draft-mtp`.
|
|
10
|
+
|
|
11
|
+
detection:
|
|
12
|
+
backend: local_llama_server
|
|
13
|
+
prompt_profile: qwen36_certfix_check_v1
|
|
14
|
+
batch_size: 1
|
|
15
|
+
qwen36_rule_id_strategy: sequential_top2_p3
|
|
16
|
+
qwen36_selector_candidate_k: 2
|
|
17
|
+
qwen36_selector_permutations: 3
|
|
18
|
+
api:
|
|
19
|
+
base_url: http://127.0.0.1:8952/v1
|
|
20
|
+
model: unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL
|
|
21
|
+
api_key_env: ""
|
|
22
|
+
timeout: 300
|
|
23
|
+
max_tokens: 1024
|
|
24
|
+
temperature: 0.0
|
|
25
|
+
|
|
26
|
+
models:
|
|
27
|
+
qwen36_local:
|
|
28
|
+
backend: local_llama_server
|
|
29
|
+
profile: qwen36_27b_local
|
|
30
|
+
max_tokens: 4096
|
|
31
|
+
temperature: 0.0
|
|
32
|
+
api:
|
|
33
|
+
base_url: http://127.0.0.1:8952/v1
|
|
34
|
+
model: unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL
|
|
35
|
+
api_key_env: ""
|
|
36
|
+
timeout: 300
|
|
37
|
+
max_tokens: 4096
|
|
38
|
+
temperature: 0.0
|
|
39
|
+
|
|
40
|
+
validation:
|
|
41
|
+
compile:
|
|
42
|
+
enabled: true
|
|
43
|
+
command: gcc
|
|
44
|
+
args: ["-fsyntax-only"]
|
|
45
|
+
include_paths: []
|
|
46
|
+
timeout: 30
|
|
47
|
+
violation_removal:
|
|
48
|
+
enabled: true
|
|
49
|
+
detector_role: qwen36_local
|
|
50
|
+
method: non_target_advisory
|
|
51
|
+
max_tokens: 512
|
|
52
|
+
override_denylist: ["SIG34-C", "STR31-C"]
|
|
53
|
+
semantic:
|
|
54
|
+
enabled: true
|
|
55
|
+
reviewer_role: qwen36_local
|
|
56
|
+
block_on_uncertain: true
|
|
57
|
+
|
|
58
|
+
fix:
|
|
59
|
+
simple_repairer_role: qwen36_local
|
|
60
|
+
simple_repair_profile: qwen36_27b_complete_repair_rule_guided_v1
|
|
61
|
+
simple_max_tokens: 4096
|
|
62
|
+
validate_guided_retry: true
|
|
63
|
+
retry_max_attempts: 1
|
|
64
|
+
retry_max_tokens: 4096
|
|
65
|
+
retry_rule_addenda_v1: true
|
|
66
|
+
retry_rule_addenda_rule_ids: ["ARR37-C", "CON31-C", "POS48-C", "SIG30-C", "ENV33-C"]
|
|
67
|
+
|
|
68
|
+
check:
|
|
69
|
+
exclude: []
|
|
@@ -58,6 +58,7 @@ jobs:
|
|
|
58
58
|
/tmp/certfix-wheel-smoke/bin/python -m pip install --upgrade pip
|
|
59
59
|
/tmp/certfix-wheel-smoke/bin/python -m pip install dist/*.whl
|
|
60
60
|
/tmp/certfix-wheel-smoke/bin/certfix --help
|
|
61
|
+
/tmp/certfix-wheel-smoke/bin/certfix-docker --help
|
|
61
62
|
/tmp/certfix-wheel-smoke/bin/certfix config --list
|
|
62
63
|
/tmp/certfix-wheel-smoke/bin/certfix config qwen36-mtp-local --output /tmp/certfix-smoke.yaml
|
|
63
64
|
test -s /tmp/certfix-smoke.yaml
|
|
@@ -67,4 +68,5 @@ jobs:
|
|
|
67
68
|
run: |
|
|
68
69
|
docker build -t certfix-ci .
|
|
69
70
|
docker run --rm certfix-ci --help
|
|
71
|
+
docker run --rm certfix-ci certfix-docker --help
|
|
70
72
|
docker run --rm certfix-ci config --list
|
|
@@ -67,11 +67,12 @@ jobs:
|
|
|
67
67
|
tags: ${{ steps.image.outputs.tags }}
|
|
68
68
|
labels: |
|
|
69
69
|
org.opencontainers.image.source=https://github.com/${{ github.repository }}
|
|
70
|
-
org.opencontainers.image.description=certfix API
|
|
70
|
+
org.opencontainers.image.description=certfix CLI image for API, local, and hybrid routes
|
|
71
71
|
org.opencontainers.image.licenses=MIT
|
|
72
72
|
|
|
73
73
|
- name: Smoke test published image
|
|
74
74
|
run: |
|
|
75
75
|
first_tag="$(printf '%s\n' "${{ steps.image.outputs.tags }}" | head -n 1)"
|
|
76
76
|
docker run --rm "${first_tag}" --help
|
|
77
|
+
docker run --rm "${first_tag}" certfix-docker --help
|
|
77
78
|
docker run --rm "${first_tag}" config --list
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
# Python
|
|
2
|
-
__pycache__/
|
|
3
|
-
*.py[cod]
|
|
4
|
-
*$py.class
|
|
5
|
-
*.so
|
|
6
|
-
.Python
|
|
7
|
-
build/
|
|
8
|
-
develop-eggs/
|
|
9
|
-
dist/
|
|
10
|
-
downloads/
|
|
11
|
-
eggs/
|
|
12
|
-
.eggs/
|
|
13
|
-
lib/
|
|
14
|
-
lib64/
|
|
15
|
-
parts/
|
|
16
|
-
sdist/
|
|
17
|
-
var/
|
|
18
|
-
wheels/
|
|
19
|
-
*.egg-info/
|
|
20
|
-
.installed.cfg
|
|
21
|
-
*.egg
|
|
22
|
-
|
|
23
|
-
# Virtual environments
|
|
24
|
-
.env
|
|
25
|
-
.venv
|
|
26
|
-
env/
|
|
27
|
-
venv/
|
|
28
|
-
ENV/
|
|
29
|
-
|
|
30
|
-
# IDE
|
|
31
|
-
.idea/
|
|
32
|
-
.vscode/
|
|
33
|
-
*.swp
|
|
34
|
-
*.swo
|
|
35
|
-
*~
|
|
36
|
-
|
|
37
|
-
# Testing
|
|
38
|
-
.tox/
|
|
39
|
-
.nox/
|
|
40
|
-
.coverage
|
|
41
|
-
.coverage.*
|
|
42
|
-
htmlcov/
|
|
43
|
-
.pytest_cache/
|
|
44
|
-
model-smoke-results/
|
|
45
|
-
.mypy_cache/
|
|
46
|
-
|
|
47
|
-
# certfix-generated reports, fixed-code candidates, and patches
|
|
48
|
-
certfix-output/
|
|
49
|
-
|
|
50
|
-
# Local model smoke configs
|
|
51
|
-
configs/local-*.yaml
|
|
52
|
-
configs/local-*.yml
|
|
53
|
-
|
|
54
|
-
# Build
|
|
55
|
-
*.manifest
|
|
56
|
-
*.spec
|
|
57
|
-
|
|
58
|
-
# Installer logs
|
|
59
|
-
pip-log.txt
|
|
60
|
-
pip-delete-this-directory.txt
|
|
61
|
-
|
|
62
|
-
# Models (large files)
|
|
63
|
-
*.gguf
|
|
64
|
-
*.bin
|
|
65
|
-
models/
|
|
66
|
-
|
|
67
|
-
# MCP (local tool config)
|
|
68
|
-
.mcp.json
|
|
69
|
-
mcp-servers/
|
|
70
|
-
|
|
71
|
-
# OS
|
|
72
|
-
.DS_Store
|
|
73
|
-
Thumbs.db
|
|
74
|
-
|
|
75
|
-
# Local/private maintainer notes not included in the initial public repo
|
|
76
|
-
docs/research-archive/
|
|
77
|
-
CLAUDE.md
|
|
78
|
-
README.ja.local.md
|
|
79
|
-
|
|
80
|
-
# Locally generated maintainer evaluation datasets
|
|
81
|
-
src/certfix/data/*samples.jsonl.gz
|
|
82
|
-
eval-splits/
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.env
|
|
25
|
+
.venv
|
|
26
|
+
env/
|
|
27
|
+
venv/
|
|
28
|
+
ENV/
|
|
29
|
+
|
|
30
|
+
# IDE
|
|
31
|
+
.idea/
|
|
32
|
+
.vscode/
|
|
33
|
+
*.swp
|
|
34
|
+
*.swo
|
|
35
|
+
*~
|
|
36
|
+
|
|
37
|
+
# Testing
|
|
38
|
+
.tox/
|
|
39
|
+
.nox/
|
|
40
|
+
.coverage
|
|
41
|
+
.coverage.*
|
|
42
|
+
htmlcov/
|
|
43
|
+
.pytest_cache/
|
|
44
|
+
model-smoke-results/
|
|
45
|
+
.mypy_cache/
|
|
46
|
+
|
|
47
|
+
# certfix-generated reports, fixed-code candidates, and patches
|
|
48
|
+
certfix-output/
|
|
49
|
+
|
|
50
|
+
# Local model smoke configs
|
|
51
|
+
configs/local-*.yaml
|
|
52
|
+
configs/local-*.yml
|
|
53
|
+
|
|
54
|
+
# Build
|
|
55
|
+
*.manifest
|
|
56
|
+
*.spec
|
|
57
|
+
|
|
58
|
+
# Installer logs
|
|
59
|
+
pip-log.txt
|
|
60
|
+
pip-delete-this-directory.txt
|
|
61
|
+
|
|
62
|
+
# Models (large files)
|
|
63
|
+
*.gguf
|
|
64
|
+
*.bin
|
|
65
|
+
models/
|
|
66
|
+
|
|
67
|
+
# MCP (local tool config)
|
|
68
|
+
.mcp.json
|
|
69
|
+
mcp-servers/
|
|
70
|
+
|
|
71
|
+
# OS
|
|
72
|
+
.DS_Store
|
|
73
|
+
Thumbs.db
|
|
74
|
+
|
|
75
|
+
# Local/private maintainer notes not included in the initial public repo
|
|
76
|
+
docs/research-archive/
|
|
77
|
+
CLAUDE.md
|
|
78
|
+
README.ja.local.md
|
|
79
|
+
|
|
80
|
+
# Locally generated maintainer evaluation datasets
|
|
81
|
+
src/certfix/data/*samples.jsonl.gz
|
|
82
|
+
eval-splits/
|
certfix-0.3.0/AGENTS.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# certfix Public Release Notes For Agents
|
|
2
|
+
|
|
3
|
+
This repository is the release-side workspace for `certfix`, a CLI for detecting
|
|
4
|
+
and repairing CERT-C issues in C source code.
|
|
5
|
+
|
|
6
|
+
## Public Boundary
|
|
7
|
+
|
|
8
|
+
- Treat this repository as publishable. Do not add local absolute paths,
|
|
9
|
+
private keys, model checkpoints, evaluation datasets, cloud run details, or
|
|
10
|
+
internal experiment logs.
|
|
11
|
+
- The initial public repository intentionally excludes `docs/research-archive/`
|
|
12
|
+
and local scratchpad files such as `CLAUDE.md`.
|
|
13
|
+
- Research provenance belongs in internal project records or a separately
|
|
14
|
+
sanitized archive, not in the primary public docs.
|
|
15
|
+
- SFT artifacts and experiment-side datasets are not required for normal
|
|
16
|
+
v0.1.0 usage.
|
|
17
|
+
|
|
18
|
+
## Release Path
|
|
19
|
+
|
|
20
|
+
- The public v0.1.0 path is Qwen3.6-centered.
|
|
21
|
+
- The main local config is `configs/qwen36-mtp-local.yaml`.
|
|
22
|
+
- `certfix fix` uses the public Qwen3.6-centered repair path.
|
|
23
|
+
- API profiles are optional and send source code to the configured provider.
|
|
24
|
+
|
|
25
|
+
## Release Traceability
|
|
26
|
+
|
|
27
|
+
- Public release tags such as `v0.1.0` belong to the public repository
|
|
28
|
+
`safe-c-ai/certfix`.
|
|
29
|
+
- The development repository must use a separate source tag for each public
|
|
30
|
+
release, named `public/vX.Y.Z-source`.
|
|
31
|
+
- Record the public tag/SHA and development source tag/SHA mapping in
|
|
32
|
+
`docs/research-archive/RELEASE_TRACEABILITY.md`.
|
|
33
|
+
- Do not keep ambiguous `vX.Y.Z` release tags in `certfix-dev`.
|
|
34
|
+
- Before deciding whether current work belongs to an already-published release
|
|
35
|
+
or the next release, verify the live release state instead of relying on
|
|
36
|
+
memory or conversation context.
|
|
37
|
+
- Last live release check before the current next-release work on 2026-06-02:
|
|
38
|
+
- `safe-c-ai/certfix` latest GitHub Release: `v0.2.0`.
|
|
39
|
+
- `safe-c-ai/certfix-dev` latest public source tag: `public/v0.2.0-source`.
|
|
40
|
+
Treat later local changes as next-release work unless the user explicitly
|
|
41
|
+
says they are patching an already-published release.
|
|
42
|
+
- Use these checks before editing release notes, version docs, tags, or release
|
|
43
|
+
instructions:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python3 - <<'PY'
|
|
47
|
+
import json
|
|
48
|
+
import urllib.request
|
|
49
|
+
|
|
50
|
+
repo = "safe-c-ai/certfix"
|
|
51
|
+
url = f"https://api.github.com/repos/{repo}/releases/latest"
|
|
52
|
+
with urllib.request.urlopen(url, timeout=15) as response:
|
|
53
|
+
release = json.load(response)
|
|
54
|
+
print(f"{repo} latest GitHub Release: {release['tag_name']}")
|
|
55
|
+
PY
|
|
56
|
+
|
|
57
|
+
git ls-remote --tags dev 'refs/tags/public/v*' 'refs/tags/v*' | sort -V
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- `safe-c-ai/certfix-dev` may not expose GitHub Releases through the public API.
|
|
61
|
+
In that case, use the `public/vX.Y.Z-source` remote tags as the dev-side
|
|
62
|
+
release traceability state.
|
|
63
|
+
- Do not rewrite release notes for an already-published public version to
|
|
64
|
+
describe new unreleased work. Add a new top-level section for the next release
|
|
65
|
+
instead.
|
|
66
|
+
- Release order is review-gated. For substantial README, docs, Docker,
|
|
67
|
+
packaging, release-note, or public-boundary changes, do not treat the work as
|
|
68
|
+
ready to publish until the user has reviewed the changed files or a sanitized
|
|
69
|
+
review archive and explicitly approved proceeding.
|
|
70
|
+
- The normal order for substantial public-facing changes is:
|
|
71
|
+
1. Implement changes in `certfix-dev`.
|
|
72
|
+
2. Run local consistency checks that do not publish anything.
|
|
73
|
+
3. Create a sanitized review archive, excluding local scratchpads, private
|
|
74
|
+
research archives, evaluation splits, generated sample datasets, secrets,
|
|
75
|
+
and local-only files.
|
|
76
|
+
4. Wait for user review and approval.
|
|
77
|
+
5. Only after approval, prepare release notes, public sync, tags, GitHub
|
|
78
|
+
Release, PyPI, or GHCR publishing steps.
|
|
79
|
+
- If the user asks "what next?" after implementation but before review, the next
|
|
80
|
+
step is review preparation and review, not publication or release finalization.
|
|
81
|
+
|
|
82
|
+
## Git And GitHub Guidance
|
|
83
|
+
|
|
84
|
+
- When giving the user Git or GitHub operation commands, explain what each
|
|
85
|
+
command does, which repository/branch/tag it affects, and whether it is
|
|
86
|
+
destructive or hard to undo.
|
|
87
|
+
- For push, tag, release, visibility, deletion, force, reset, rebase, merge,
|
|
88
|
+
checkout/restore, clean, or branch deletion operations, include the expected
|
|
89
|
+
pre-check and post-check commands.
|
|
90
|
+
- Prefer explicit repository paths in instructions when both `certfix-dev` and
|
|
91
|
+
`certfix-public` are involved.
|
|
92
|
+
|
|
93
|
+
## Documentation Wording
|
|
94
|
+
|
|
95
|
+
- Prefer cautious claims: validation gates reduce risk; they do not guarantee
|
|
96
|
+
behavior equivalence or security correctness.
|
|
97
|
+
- Benchmark claims should point to `docs/BENCHMARK_SUMMARY.md` and keep its
|
|
98
|
+
caveats intact.
|
|
99
|
+
- Do not present historical model names, old benchmark values, or archived
|
|
100
|
+
decisions as current release defaults.
|
|
101
|
+
|
|
102
|
+
## Development Commands
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
pip install -e ".[dev]"
|
|
106
|
+
pytest
|
|
107
|
+
ruff check src/ tests/ scripts/
|
|
108
|
+
ruff format src/ tests/ scripts/
|
|
109
|
+
python3 -m build --sdist --wheel
|
|
110
|
+
python3 scripts/check_release_readiness.py
|
|
111
|
+
```
|
|
@@ -14,11 +14,13 @@ WORKDIR /opt/certfix
|
|
|
14
14
|
|
|
15
15
|
COPY pyproject.toml README.md LICENSE THIRD_PARTY_NOTICES.md ./
|
|
16
16
|
COPY src ./src
|
|
17
|
+
COPY docker/certfix-entrypoint.sh /usr/local/bin/certfix-entrypoint
|
|
17
18
|
|
|
18
19
|
RUN python -m pip install --no-cache-dir --upgrade pip \
|
|
19
|
-
&& python -m pip install --no-cache-dir .
|
|
20
|
+
&& python -m pip install --no-cache-dir . \
|
|
21
|
+
&& chmod +x /usr/local/bin/certfix-entrypoint
|
|
20
22
|
|
|
21
23
|
WORKDIR /workspace
|
|
22
24
|
|
|
23
|
-
ENTRYPOINT ["certfix"]
|
|
25
|
+
ENTRYPOINT ["certfix-entrypoint"]
|
|
24
26
|
CMD ["--help"]
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 certfix team
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 certfix team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|