dorian-vwp 1.0.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.
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/benchmark_submission.yml +63 -0
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/bug_report.yml +58 -0
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/checker_request.yml +34 -0
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/config.yml +10 -0
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/false_alarm.yml +34 -0
- dorian_vwp-1.0.0/.github/ISSUE_TEMPLATE/false_pass.yml +44 -0
- dorian_vwp-1.0.0/.github/workflows/ci.yml +22 -0
- dorian_vwp-1.0.0/.github/workflows/public-microbench.yml +62 -0
- dorian_vwp-1.0.0/.github/workflows/publish-testpypi.yml +61 -0
- dorian_vwp-1.0.0/.github/workflows/publish.yml +70 -0
- dorian_vwp-1.0.0/.github/workflows/release-gate.yml +87 -0
- dorian_vwp-1.0.0/.gitignore +31 -0
- dorian_vwp-1.0.0/.python-version +1 -0
- dorian_vwp-1.0.0/.warrant/.gitignore +2 -0
- dorian_vwp-1.0.0/LICENSE +201 -0
- dorian_vwp-1.0.0/Makefile +47 -0
- dorian_vwp-1.0.0/PKG-INFO +527 -0
- dorian_vwp-1.0.0/README.md +509 -0
- dorian_vwp-1.0.0/SECURITY.md +85 -0
- dorian_vwp-1.0.0/action/README.md +160 -0
- dorian_vwp-1.0.0/action/action.yml +161 -0
- dorian_vwp-1.0.0/archive/CHURN_BENCHMARK_v0.3.0.md +71 -0
- dorian_vwp-1.0.0/archive/CHURN_BENCHMARK_v0.4.0.md +71 -0
- dorian_vwp-1.0.0/archive/CHURN_BENCHMARK_v0.5.0.md +79 -0
- dorian_vwp-1.0.0/archive/EXTRACT_GATE_RESULTS.md +96 -0
- dorian_vwp-1.0.0/archive/KILL_REPORT_TEMPLATE.md +39 -0
- dorian_vwp-1.0.0/archive/KILL_REPORT_v0.0.md +159 -0
- dorian_vwp-1.0.0/archive/README.md +23 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.1.0.md +83 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.2.0.md +104 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.3.0.md +62 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.4.0.md +71 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.5.0.md +60 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.6.0.md +69 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.7.0.md +59 -0
- dorian_vwp-1.0.0/archive/RELEASE_NOTES_v0.7.1.md +75 -0
- dorian_vwp-1.0.0/archive/RELEASE_VALIDATION_REPORT_v0.2.0.md +135 -0
- dorian_vwp-1.0.0/bench/__init__.py +7 -0
- dorian_vwp-1.0.0/bench/binding_lifecycle.py +830 -0
- dorian_vwp-1.0.0/bench/binding_lifecycle_domains.py +666 -0
- dorian_vwp-1.0.0/bench/churn.py +191 -0
- dorian_vwp-1.0.0/bench/controlled_mutation.py +1036 -0
- dorian_vwp-1.0.0/bench/extract_gate.py +318 -0
- dorian_vwp-1.0.0/bench/extract_real_gate.py +925 -0
- dorian_vwp-1.0.0/bench/ground_truth.py +127 -0
- dorian_vwp-1.0.0/bench/large_mutation.py +910 -0
- dorian_vwp-1.0.0/bench/large_mutation_domains.py +1684 -0
- dorian_vwp-1.0.0/bench/metamorph.py +70 -0
- dorian_vwp-1.0.0/bench/metrics.py +220 -0
- dorian_vwp-1.0.0/bench/plant.py +236 -0
- dorian_vwp-1.0.0/bench/public/README.md +24 -0
- dorian_vwp-1.0.0/bench/public/manifest.example.json +37 -0
- dorian_vwp-1.0.0/bench/public/manifest.v1.yaml +107 -0
- dorian_vwp-1.0.0/bench/public/reports/.gitkeep +0 -0
- dorian_vwp-1.0.0/bench/public/repos/bandit/claims.json +7 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/claims.draft.json +65 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/claims.generated.json +117 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/claims.json +117 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/mutations.yaml +37 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/rejected.json +1 -0
- dorian_vwp-1.0.0/bench/public/repos/humanize/targets.json +58 -0
- dorian_vwp-1.0.0/bench/public/repos/jaffle_shop_duckdb/claims.json +7 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/claims.draft.json +65 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/claims.generated.json +117 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/claims.json +117 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/mutations.yaml +37 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/rejected.json +1 -0
- dorian_vwp-1.0.0/bench/public/repos/python-dotenv/targets.json +58 -0
- dorian_vwp-1.0.0/bench/public/repos/tomli/claims.json +7 -0
- dorian_vwp-1.0.0/bench/public/repos.public.json +26 -0
- dorian_vwp-1.0.0/bench/public/results/.gitignore +3 -0
- dorian_vwp-1.0.0/bench/public/results/.gitkeep +0 -0
- dorian_vwp-1.0.0/bench/public/results/REPORT.md +13 -0
- dorian_vwp-1.0.0/bench/public_claims.py +440 -0
- dorian_vwp-1.0.0/bench/public_repos.py +753 -0
- dorian_vwp-1.0.0/bench/real_metamorph.py +227 -0
- dorian_vwp-1.0.0/bench/realworld_usecases.py +567 -0
- dorian_vwp-1.0.0/bench/release_state.py +752 -0
- dorian_vwp-1.0.0/bench/replay.py +349 -0
- dorian_vwp-1.0.0/bench/repos.json +16 -0
- dorian_vwp-1.0.0/bench/selftest_claims.json +60 -0
- dorian_vwp-1.0.0/bench/warrant_quality.py +241 -0
- dorian_vwp-1.0.0/docs/AGENT_CLAIMS.md +234 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_BINDING_LIFECYCLE.md +92 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_BINDING_LIFECYCLE_PROTOCOL.md +142 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_CURRENT.md +86 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_PROTOCOL_v0.7.0.md +156 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_PUBLIC_REAL_REPOS.md +106 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_REPRODUCIBILITY.md +57 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_v0.6.0.md +73 -0
- dorian_vwp-1.0.0/docs/BENCHMARK_v0.7.0.md +131 -0
- dorian_vwp-1.0.0/docs/DEPENDENCIES.md +68 -0
- dorian_vwp-1.0.0/docs/EXTRACT_GATE.md +139 -0
- dorian_vwp-1.0.0/docs/NAMING_AND_PRIOR_ART.md +62 -0
- dorian_vwp-1.0.0/docs/NEXT_ALGORITHMIC_BETS.md +100 -0
- dorian_vwp-1.0.0/docs/PUBLIC_BENCHMARK_PROTOCOL.md +93 -0
- dorian_vwp-1.0.0/docs/REALWORLD_USECASES.md +88 -0
- dorian_vwp-1.0.0/docs/REALWORLD_USECASES_PROTOCOL.md +93 -0
- dorian_vwp-1.0.0/docs/REAL_CATCH_LOG.md +50 -0
- dorian_vwp-1.0.0/docs/REAL_DOC_METAMORPHIC_GATE.md +337 -0
- dorian_vwp-1.0.0/docs/RELEASE_CHECKLIST.md +79 -0
- dorian_vwp-1.0.0/docs/RELEASE_DECISION_1_0.md +28 -0
- dorian_vwp-1.0.0/docs/RELEASE_GATE_1_0.md +95 -0
- dorian_vwp-1.0.0/docs/ROADMAP_BACKLOG.md +169 -0
- dorian_vwp-1.0.0/docs/SECURITY_BOUNDARY.md +99 -0
- dorian_vwp-1.0.0/docs/SHADOW_PILOT_TEMPLATE.md +66 -0
- dorian_vwp-1.0.0/docs/SOLO_VALIDATION_LADDER.md +60 -0
- dorian_vwp-1.0.0/docs/START_HERE.md +50 -0
- dorian_vwp-1.0.0/docs/TESTING.md +78 -0
- dorian_vwp-1.0.0/docs/TRUSTED_BASE_ACTION_DESIGN.md +91 -0
- dorian_vwp-1.0.0/docs/USE_WITH_CLAUDE_CODE.md +157 -0
- dorian_vwp-1.0.0/docs/V1_SCOPE.md +64 -0
- dorian_vwp-1.0.0/docs/VALIDATION_HONESTY.md +67 -0
- dorian_vwp-1.0.0/docs/assets/dorian-hero-light.png +0 -0
- dorian_vwp-1.0.0/docs/assets/dorian-hero.png +0 -0
- dorian_vwp-1.0.0/docs/assets/social-preview.png +0 -0
- dorian_vwp-1.0.0/docs/changes/launch-train-claude-code-onboarding.claims.json +39 -0
- dorian_vwp-1.0.0/docs/changes/launch-train-claude-code-onboarding.md +23 -0
- dorian_vwp-1.0.0/docs/changes/launch-train-claude-code-onboarding.md.warrant +164 -0
- dorian_vwp-1.0.0/docs/changes/weak-binding-gate.claims.json +44 -0
- dorian_vwp-1.0.0/docs/changes/weak-binding-gate.md +10 -0
- dorian_vwp-1.0.0/docs/changes/weak-binding-gate.md.warrant +173 -0
- dorian_vwp-1.0.0/examples/claude-code/README.md +52 -0
- dorian_vwp-1.0.0/examples/claude-code/app.py +17 -0
- dorian_vwp-1.0.0/examples/claude-code/change-note.md +7 -0
- dorian_vwp-1.0.0/examples/claude-code/claims.json +18 -0
- dorian_vwp-1.0.0/examples/claude-code/settings.example.json +9 -0
- dorian_vwp-1.0.0/examples/claude-code/settings.trusted-local.example.json +11 -0
- dorian_vwp-1.0.0/examples/demo-repo/docs/design.md +34 -0
- dorian_vwp-1.0.0/pyproject.toml +49 -0
- dorian_vwp-1.0.0/spec/checkers.md +169 -0
- dorian_vwp-1.0.0/spec/warrant.schema.json +99 -0
- dorian_vwp-1.0.0/src/dorian/__init__.py +6 -0
- dorian_vwp-1.0.0/src/dorian/__main__.py +10 -0
- dorian_vwp-1.0.0/src/dorian/_regex_worker.py +30 -0
- dorian_vwp-1.0.0/src/dorian/bindings.py +366 -0
- dorian_vwp-1.0.0/src/dorian/blast.py +119 -0
- dorian_vwp-1.0.0/src/dorian/capture/__init__.py +0 -0
- dorian_vwp-1.0.0/src/dorian/capture/manual.py +53 -0
- dorian_vwp-1.0.0/src/dorian/capture/transcript.py +179 -0
- dorian_vwp-1.0.0/src/dorian/checkers/__init__.py +42 -0
- dorian_vwp-1.0.0/src/dorian/checkers/base.py +96 -0
- dorian_vwp-1.0.0/src/dorian/checkers/c1_span.py +85 -0
- dorian_vwp-1.0.0/src/dorian/checkers/c3_ref.py +376 -0
- dorian_vwp-1.0.0/src/dorian/checkers/c4_test.py +89 -0
- dorian_vwp-1.0.0/src/dorian/checkers/c5_data.py +320 -0
- dorian_vwp-1.0.0/src/dorian/claims_io.py +70 -0
- dorian_vwp-1.0.0/src/dorian/cli.py +241 -0
- dorian_vwp-1.0.0/src/dorian/commands.py +807 -0
- dorian_vwp-1.0.0/src/dorian/datachecks.py +275 -0
- dorian_vwp-1.0.0/src/dorian/extract.py +583 -0
- dorian_vwp-1.0.0/src/dorian/fold.py +96 -0
- dorian_vwp-1.0.0/src/dorian/gitio.py +105 -0
- dorian_vwp-1.0.0/src/dorian/model.py +344 -0
- dorian_vwp-1.0.0/src/dorian/policy.py +94 -0
- dorian_vwp-1.0.0/src/dorian/pyast.py +308 -0
- dorian_vwp-1.0.0/src/dorian/report.py +125 -0
- dorian_vwp-1.0.0/src/dorian/revalidate.py +450 -0
- dorian_vwp-1.0.0/src/dorian/seal.py +469 -0
- dorian_vwp-1.0.0/src/dorian/store.py +443 -0
- dorian_vwp-1.0.0/src/dorian/strength.py +226 -0
- dorian_vwp-1.0.0/src/dorian/symbol_index.py +345 -0
- dorian_vwp-1.0.0/tests/conftest.py +152 -0
- dorian_vwp-1.0.0/tests/test_action_security.py +109 -0
- dorian_vwp-1.0.0/tests/test_action_security_defaults.py +103 -0
- dorian_vwp-1.0.0/tests/test_audit.py +182 -0
- dorian_vwp-1.0.0/tests/test_bench_public_claim_synthesis.py +237 -0
- dorian_vwp-1.0.0/tests/test_bench_public_harness.py +400 -0
- dorian_vwp-1.0.0/tests/test_bench_public_manifest.py +166 -0
- dorian_vwp-1.0.0/tests/test_bench_public_report.py +95 -0
- dorian_vwp-1.0.0/tests/test_bench_smoke.py +232 -0
- dorian_vwp-1.0.0/tests/test_benchmark_evidence.py +74 -0
- dorian_vwp-1.0.0/tests/test_binding_gate.py +347 -0
- dorian_vwp-1.0.0/tests/test_binding_lifecycle_bench.py +229 -0
- dorian_vwp-1.0.0/tests/test_bindings.py +419 -0
- dorian_vwp-1.0.0/tests/test_blast.py +272 -0
- dorian_vwp-1.0.0/tests/test_c1.py +253 -0
- dorian_vwp-1.0.0/tests/test_c3.py +319 -0
- dorian_vwp-1.0.0/tests/test_c3_regex_timeout.py +57 -0
- dorian_vwp-1.0.0/tests/test_c4.py +337 -0
- dorian_vwp-1.0.0/tests/test_c5.py +326 -0
- dorian_vwp-1.0.0/tests/test_capture.py +232 -0
- dorian_vwp-1.0.0/tests/test_churn.py +635 -0
- dorian_vwp-1.0.0/tests/test_claims_io.py +81 -0
- dorian_vwp-1.0.0/tests/test_claude_code_docs.py +163 -0
- dorian_vwp-1.0.0/tests/test_cli_blackbox.py +180 -0
- dorian_vwp-1.0.0/tests/test_cli_docs_sync.py +62 -0
- dorian_vwp-1.0.0/tests/test_cli_edge_cases.py +174 -0
- dorian_vwp-1.0.0/tests/test_config_binding.py +218 -0
- dorian_vwp-1.0.0/tests/test_config_value.py +258 -0
- dorian_vwp-1.0.0/tests/test_controlled_mutation.py +206 -0
- dorian_vwp-1.0.0/tests/test_datachecks.py +378 -0
- dorian_vwp-1.0.0/tests/test_deny_exec_policy.py +267 -0
- dorian_vwp-1.0.0/tests/test_determinism.py +176 -0
- dorian_vwp-1.0.0/tests/test_docs.py +76 -0
- dorian_vwp-1.0.0/tests/test_docs_polish.py +112 -0
- dorian_vwp-1.0.0/tests/test_e2e.py +150 -0
- dorian_vwp-1.0.0/tests/test_examples_claude_code.py +73 -0
- dorian_vwp-1.0.0/tests/test_extract_anchor.py +200 -0
- dorian_vwp-1.0.0/tests/test_extract_candidate.py +198 -0
- dorian_vwp-1.0.0/tests/test_extract_gate.py +333 -0
- dorian_vwp-1.0.0/tests/test_extract_real_gate.py +563 -0
- dorian_vwp-1.0.0/tests/test_fold.py +256 -0
- dorian_vwp-1.0.0/tests/test_gitio.py +58 -0
- dorian_vwp-1.0.0/tests/test_large_mutation.py +376 -0
- dorian_vwp-1.0.0/tests/test_model.py +116 -0
- dorian_vwp-1.0.0/tests/test_packaging.py +123 -0
- dorian_vwp-1.0.0/tests/test_perf_smoke.py +60 -0
- dorian_vwp-1.0.0/tests/test_pystructural.py +349 -0
- dorian_vwp-1.0.0/tests/test_readme_example.py +79 -0
- dorian_vwp-1.0.0/tests/test_real_metamorph.py +224 -0
- dorian_vwp-1.0.0/tests/test_realworld_usecases.py +121 -0
- dorian_vwp-1.0.0/tests/test_release_state.py +396 -0
- dorian_vwp-1.0.0/tests/test_render_md.py +271 -0
- dorian_vwp-1.0.0/tests/test_revalidate.py +765 -0
- dorian_vwp-1.0.0/tests/test_scope_lint.py +286 -0
- dorian_vwp-1.0.0/tests/test_seal.py +721 -0
- dorian_vwp-1.0.0/tests/test_security.py +151 -0
- dorian_vwp-1.0.0/tests/test_semantic_context.py +124 -0
- dorian_vwp-1.0.0/tests/test_store.py +411 -0
- dorian_vwp-1.0.0/tests/test_strength.py +219 -0
- dorian_vwp-1.0.0/tests/test_symbol_index.py +736 -0
- dorian_vwp-1.0.0/tests/test_trusted_base.py +292 -0
- dorian_vwp-1.0.0/tests/test_verify.py +258 -0
- dorian_vwp-1.0.0/tests/test_version_sync.py +47 -0
- dorian_vwp-1.0.0/tests/test_warrant_quality.py +167 -0
- dorian_vwp-1.0.0/uv.lock +738 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: Benchmark / reproduction submission
|
|
2
|
+
description: A reproducible public-repo case for the micro-benchmark (a real catch, a false alarm, or a clean case).
|
|
3
|
+
labels: [benchmark, reproduction]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: >-
|
|
8
|
+
See docs/PUBLIC_BENCHMARK_PROTOCOL.md and bench/public/manifest.example.json.
|
|
9
|
+
Submissions must be reproducible from frozen inputs; results are scoped to
|
|
10
|
+
those inputs, never a broad real-world claim (docs/VALIDATION_HONESTY.md).
|
|
11
|
+
- type: input
|
|
12
|
+
id: repo
|
|
13
|
+
attributes:
|
|
14
|
+
label: Public repo URL
|
|
15
|
+
validations:
|
|
16
|
+
required: true
|
|
17
|
+
- type: input
|
|
18
|
+
id: base_sha
|
|
19
|
+
attributes:
|
|
20
|
+
label: Frozen base SHA
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
- type: input
|
|
24
|
+
id: head
|
|
25
|
+
attributes:
|
|
26
|
+
label: Head SHA or patch
|
|
27
|
+
description: A frozen head SHA, or a patch applied to base (preferred for injected mutations).
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
- type: textarea
|
|
31
|
+
id: claims
|
|
32
|
+
attributes:
|
|
33
|
+
label: claims.json
|
|
34
|
+
render: json
|
|
35
|
+
validations:
|
|
36
|
+
required: true
|
|
37
|
+
- type: dropdown
|
|
38
|
+
id: layer
|
|
39
|
+
attributes:
|
|
40
|
+
label: Which layer does this exercise?
|
|
41
|
+
options: ["trigger/selection", "truth/alarm", "both"]
|
|
42
|
+
validations:
|
|
43
|
+
required: true
|
|
44
|
+
- type: input
|
|
45
|
+
id: expected
|
|
46
|
+
attributes:
|
|
47
|
+
label: Expected outcome
|
|
48
|
+
description: e.g. "claim X selected and BROKEN" / "no claim selected"
|
|
49
|
+
validations:
|
|
50
|
+
required: true
|
|
51
|
+
- type: input
|
|
52
|
+
id: license
|
|
53
|
+
attributes:
|
|
54
|
+
label: Repo license
|
|
55
|
+
validations:
|
|
56
|
+
required: true
|
|
57
|
+
- type: dropdown
|
|
58
|
+
id: outcome
|
|
59
|
+
attributes:
|
|
60
|
+
label: What is this case
|
|
61
|
+
options: ["true catch", "false alarm", "miss", "partial (trigger only)", "clean (no break)"]
|
|
62
|
+
validations:
|
|
63
|
+
required: true
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: dorian crashed, errored, or did something other than its documented behavior.
|
|
3
|
+
labels: [bug]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: version
|
|
7
|
+
attributes:
|
|
8
|
+
label: dorian version
|
|
9
|
+
description: Output of `dorian --version`.
|
|
10
|
+
placeholder: dorian 0.10.0
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: input
|
|
14
|
+
id: command
|
|
15
|
+
attributes:
|
|
16
|
+
label: Exact command run
|
|
17
|
+
placeholder: dorian verify note.md --claims claims.json
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: dropdown
|
|
21
|
+
id: checker
|
|
22
|
+
attributes:
|
|
23
|
+
label: Checker family involved
|
|
24
|
+
options: ["C1 span", "C3 path/symbol/string/regex", "C4 pytest", "C5 typed data", "C5 shell", "none / not sure"]
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: dropdown
|
|
28
|
+
id: executable
|
|
29
|
+
attributes:
|
|
30
|
+
label: Were executable checkers (C4 pytest / C5 shell) involved?
|
|
31
|
+
options: ["No", "Yes", "Not sure"]
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: dropdown
|
|
35
|
+
id: trust
|
|
36
|
+
attributes:
|
|
37
|
+
label: Context
|
|
38
|
+
options: ["Trusted/internal repo", "Untrusted claims (used --deny-exec)", "CI / GitHub Action", "Other"]
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
41
|
+
- type: textarea
|
|
42
|
+
id: expected_actual
|
|
43
|
+
attributes:
|
|
44
|
+
label: Expected vs. actual
|
|
45
|
+
description: What you expected, what happened, and the exit code.
|
|
46
|
+
validations:
|
|
47
|
+
required: true
|
|
48
|
+
- type: textarea
|
|
49
|
+
id: sidecar
|
|
50
|
+
attributes:
|
|
51
|
+
label: Relevant claim / sidecar excerpt
|
|
52
|
+
description: The claim or `.warrant` snippet. Redact anything sensitive.
|
|
53
|
+
render: json
|
|
54
|
+
- type: input
|
|
55
|
+
id: artifact
|
|
56
|
+
attributes:
|
|
57
|
+
label: Artifact path
|
|
58
|
+
placeholder: docs/changes/login.md
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Checker request
|
|
2
|
+
description: A kind of claim you want to make deterministically that no current checker can verify.
|
|
3
|
+
labels: [checker-request, enhancement]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: claim_kind
|
|
7
|
+
attributes:
|
|
8
|
+
label: What claim do you want to hold true over time?
|
|
9
|
+
description: A concrete example sentence an agent or human would write.
|
|
10
|
+
placeholder: '"the /login route still requires the rate-limit decorator"'
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: deterministic
|
|
15
|
+
attributes:
|
|
16
|
+
label: How could this be checked deterministically (no model at check time)?
|
|
17
|
+
description: dorian only adds checkers that are deterministic and, ideally, non-executing. What file would it read, and what would it look for?
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: dropdown
|
|
21
|
+
id: closest
|
|
22
|
+
attributes:
|
|
23
|
+
label: Closest existing checker
|
|
24
|
+
options: ["C1 span", "C3 path/symbol/string/regex", "C4 pytest", "C5 typed data", "C5 shell", "none fit"]
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: dropdown
|
|
28
|
+
id: executing
|
|
29
|
+
attributes:
|
|
30
|
+
label: Would it need to execute code?
|
|
31
|
+
description: Non-executing checkers are strongly preferred (deny-exec keeps them usable in untrusted contexts).
|
|
32
|
+
options: ["No — reads files only", "Yes — runs code", "Not sure"]
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability (private)
|
|
4
|
+
url: https://github.com/ajaysurya1221/dorian/security/advisories/new
|
|
5
|
+
about: >-
|
|
6
|
+
Report a vulnerability privately via a GitHub security advisory. Do NOT
|
|
7
|
+
open a public issue with working exploit details. See SECURITY.md.
|
|
8
|
+
- name: Question / discussion
|
|
9
|
+
url: https://github.com/ajaysurya1221/dorian/discussions
|
|
10
|
+
about: Open-ended questions about claims, checkers, or the trust model.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: False alarm
|
|
2
|
+
description: dorian flipped a claim to BROKEN/REVOKED but the claim was actually still true.
|
|
3
|
+
labels: [false-alarm, accuracy]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: version
|
|
7
|
+
attributes:
|
|
8
|
+
label: dorian version
|
|
9
|
+
validations:
|
|
10
|
+
required: true
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: claim
|
|
13
|
+
attributes:
|
|
14
|
+
label: The claim and its checker(s)
|
|
15
|
+
render: json
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: still_true
|
|
20
|
+
attributes:
|
|
21
|
+
label: Why the claim is still true
|
|
22
|
+
description: Show that the fact still holds despite the BROKEN verdict (e.g. the value moved but the checker was brittle).
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: input
|
|
26
|
+
id: change
|
|
27
|
+
attributes:
|
|
28
|
+
label: Change that triggered the false alarm
|
|
29
|
+
placeholder: reformatted the constant; renamed the file; etc.
|
|
30
|
+
- type: input
|
|
31
|
+
id: command
|
|
32
|
+
attributes:
|
|
33
|
+
label: Command + exit code
|
|
34
|
+
placeholder: dorian revalidate --since main (exit 4)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: False pass / false confidence
|
|
2
|
+
description: A claim stayed TRUSTED (or sealed) when the underlying fact was actually false or unverified.
|
|
3
|
+
labels: [false-pass, accuracy]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: >-
|
|
8
|
+
This is the most important report dorian can get: a verdict that said
|
|
9
|
+
"true" when it wasn't. It usually means a **weak binding** (the watched
|
|
10
|
+
source didn't include the file that defines the fact) or a **checker too
|
|
11
|
+
weak** to see the change (the trigger-vs-truth ceiling).
|
|
12
|
+
- type: input
|
|
13
|
+
id: version
|
|
14
|
+
attributes:
|
|
15
|
+
label: dorian version
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: claim
|
|
20
|
+
attributes:
|
|
21
|
+
label: The claim and its checker(s)
|
|
22
|
+
description: The natural-language claim plus the `type:program` of each checker.
|
|
23
|
+
render: json
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: why_false
|
|
28
|
+
attributes:
|
|
29
|
+
label: Why the fact was actually false / unverified
|
|
30
|
+
description: What changed in the source that the verdict missed.
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: dropdown
|
|
34
|
+
id: suspected
|
|
35
|
+
attributes:
|
|
36
|
+
label: Suspected cause
|
|
37
|
+
options: ["Weak binding (watched file didn't define the fact)", "Checker too weak (e.g. symbol exists but behavior changed)", "Not sure"]
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
- type: input
|
|
41
|
+
id: command
|
|
42
|
+
attributes:
|
|
43
|
+
label: Command + exit code
|
|
44
|
+
placeholder: dorian revalidate --since HEAD~1 (exit 0)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
on:
|
|
3
|
+
push: { branches: [main] }
|
|
4
|
+
pull_request:
|
|
5
|
+
# Least privilege: CI only reads the repo. No write scopes, so a malicious PR
|
|
6
|
+
# cannot use the default GITHUB_TOKEN to mutate the repo or releases.
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python: ["3.11", "3.12", "3.13"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6.0.3
|
|
17
|
+
- uses: astral-sh/setup-uv@v8.2.0
|
|
18
|
+
with: { python-version: "${{ matrix.python }}" }
|
|
19
|
+
- run: uv sync --all-extras
|
|
20
|
+
- run: uv run ruff check src tests bench
|
|
21
|
+
- run: uv run ruff format --check src tests bench
|
|
22
|
+
- run: uv run pytest
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Public real-repo micro-benchmark — MANUAL dispatch only, read-only, fail-closed.
|
|
2
|
+
#
|
|
3
|
+
# Safe by design: workflow_dispatch only (never auto/PR-triggered), read-only token, NO
|
|
4
|
+
# pull_request_target, clones cached by frozen SHA, results uploaded as artifacts. The harness
|
|
5
|
+
# runs with --deny-exec by default (a fail-closed re-check policy, NOT a sandbox): C4/C5 checkers
|
|
6
|
+
# are blocked and fold to ERRORED. While claims are draft/human-review-required the run reports
|
|
7
|
+
# NO_CLAIMS — no numbers are produced. Do NOT add this to branch protection.
|
|
8
|
+
name: public-microbench
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
inputs:
|
|
13
|
+
repo:
|
|
14
|
+
description: "limit to one manifest repo (blank = all eligible)"
|
|
15
|
+
required: false
|
|
16
|
+
default: ""
|
|
17
|
+
deny_exec:
|
|
18
|
+
description: "block C4/C5 at re-check (fail-closed; not a sandbox)"
|
|
19
|
+
type: boolean
|
|
20
|
+
required: false
|
|
21
|
+
default: true
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
microbench:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v6.0.3
|
|
31
|
+
- uses: astral-sh/setup-uv@v8.2.0
|
|
32
|
+
with: { python-version: "3.12" }
|
|
33
|
+
- run: uv sync --all-extras
|
|
34
|
+
|
|
35
|
+
# Cache cloned public subjects keyed by the manifest's frozen SHAs, so a re-run is offline.
|
|
36
|
+
- name: Cache frozen subject checkouts
|
|
37
|
+
uses: actions/cache@v4
|
|
38
|
+
with:
|
|
39
|
+
path: .bench/public-work/checkouts
|
|
40
|
+
key: public-microbench-checkouts-${{ hashFiles('bench/public/manifest.v1.yaml') }}
|
|
41
|
+
|
|
42
|
+
- name: Plan (dry-run — no clone, no seal, no results)
|
|
43
|
+
run: >-
|
|
44
|
+
uv run python -m dorian.cli bench public-repos
|
|
45
|
+
--manifest bench/public/manifest.v1.yaml
|
|
46
|
+
--out bench/public/results --dry-run
|
|
47
|
+
|
|
48
|
+
- name: Run harness (fail-closed re-check)
|
|
49
|
+
run: >-
|
|
50
|
+
uv run python -m dorian.cli bench public-repos
|
|
51
|
+
--manifest bench/public/manifest.v1.yaml
|
|
52
|
+
--out bench/public/results --workdir .bench/public-work
|
|
53
|
+
${{ inputs.repo != '' && format('--repo {0}', inputs.repo) || '' }}
|
|
54
|
+
${{ inputs.deny_exec && '--deny-exec' || '' }}
|
|
55
|
+
|
|
56
|
+
- name: Upload results
|
|
57
|
+
if: always()
|
|
58
|
+
uses: actions/upload-artifact@v4
|
|
59
|
+
with:
|
|
60
|
+
name: public-microbench-results
|
|
61
|
+
path: bench/public/results/
|
|
62
|
+
if-no-files-found: ignore
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# TestPyPI dry-run via Trusted Publishing (OIDC) — MANUAL ONLY.
|
|
2
|
+
#
|
|
3
|
+
# A rehearsal of the real publish (publish.yml) against TestPyPI. It exists so the
|
|
4
|
+
# Trusted-Publisher / OIDC path is verified BEFORE a real release, and it never
|
|
5
|
+
# touches production PyPI. Like publish.yml it:
|
|
6
|
+
# - runs only on workflow_dispatch (never push/PR/fork),
|
|
7
|
+
# - uses OIDC (id-token: write) — NO stored API token, no long-lived secret,
|
|
8
|
+
# - is gated behind a GitHub Environment with required reviewers.
|
|
9
|
+
#
|
|
10
|
+
# Prerequisite (one-time, off-CI): create a TestPyPI Trusted Publisher for
|
|
11
|
+
# project `dorian-vwp` pointing at this repo + workflow `publish-testpypi.yml` +
|
|
12
|
+
# environment `testpypi`. Until then the upload step has no credentials and is a
|
|
13
|
+
# no-op rehearsal of the wiring. The real publish to pypi.org stays in publish.yml.
|
|
14
|
+
name: publish-testpypi
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
inputs:
|
|
19
|
+
ref:
|
|
20
|
+
description: Tag to build and dry-run-publish to TestPyPI (e.g. v1.0.0rc2)
|
|
21
|
+
required: true
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
build:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v6.0.3
|
|
31
|
+
with:
|
|
32
|
+
ref: ${{ inputs.ref }}
|
|
33
|
+
- uses: actions/setup-python@v5
|
|
34
|
+
with: { python-version: "3.12" }
|
|
35
|
+
- name: Build sdist + wheel
|
|
36
|
+
run: |
|
|
37
|
+
python -m pip install --upgrade build twine
|
|
38
|
+
python -m build
|
|
39
|
+
python -m twine check dist/*
|
|
40
|
+
- uses: actions/upload-artifact@v4
|
|
41
|
+
with:
|
|
42
|
+
name: dist
|
|
43
|
+
path: dist/
|
|
44
|
+
|
|
45
|
+
testpypi:
|
|
46
|
+
needs: build
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
# the environment gates the dry-run behind required reviewers and is the
|
|
49
|
+
# subject the TestPyPI Trusted Publisher is bound to
|
|
50
|
+
environment: testpypi
|
|
51
|
+
permissions:
|
|
52
|
+
id-token: write # OIDC: mint a short-lived token, no stored secret
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/download-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist
|
|
57
|
+
path: dist/
|
|
58
|
+
- name: Publish to TestPyPI (Trusted Publishing dry-run)
|
|
59
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
60
|
+
with:
|
|
61
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# PyPI publish via Trusted Publishing (OIDC) — MANUAL ONLY.
|
|
2
|
+
#
|
|
3
|
+
# This workflow does NOT run on push or tag. It runs only when a maintainer
|
|
4
|
+
# triggers it by hand (workflow_dispatch) against a tag, and only after the PyPI
|
|
5
|
+
# side is configured:
|
|
6
|
+
# 1. Create a PyPI Trusted Publisher for project `dorian-vwp` pointing at this
|
|
7
|
+
# repo + workflow `publish.yml` + environment `pypi` (no API token anywhere).
|
|
8
|
+
# 2. Create a GitHub Environment named `pypi` with required-reviewer protection.
|
|
9
|
+
# Until both exist, the publish step has no credentials and cannot upload.
|
|
10
|
+
#
|
|
11
|
+
# It deliberately uses OIDC (id-token: write) instead of a stored token, and
|
|
12
|
+
# never triggers from an arbitrary branch — see docs/RELEASE_CHECKLIST.md.
|
|
13
|
+
name: publish
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
inputs:
|
|
18
|
+
ref:
|
|
19
|
+
description: Tag to build and publish (e.g. v0.10.0)
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
ref: ${{ inputs.ref }}
|
|
32
|
+
- uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.12"
|
|
35
|
+
- name: Build sdist + wheel
|
|
36
|
+
run: |
|
|
37
|
+
python -m pip install --upgrade build twine
|
|
38
|
+
python -m build
|
|
39
|
+
python -m twine check dist/*
|
|
40
|
+
- name: Verify the built version matches the tag
|
|
41
|
+
run: |
|
|
42
|
+
python - <<'PY'
|
|
43
|
+
import os, pathlib, tomllib
|
|
44
|
+
tag = os.environ["REF"].lstrip("v")
|
|
45
|
+
ver = tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]["version"]
|
|
46
|
+
assert ver == tag, f"tag {tag!r} != pyproject version {ver!r}"
|
|
47
|
+
print(f"ok: building {ver}")
|
|
48
|
+
PY
|
|
49
|
+
env:
|
|
50
|
+
REF: ${{ inputs.ref }}
|
|
51
|
+
- uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: dist
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
publish:
|
|
57
|
+
needs: build
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
# the environment gates publishing behind required reviewers and is the
|
|
60
|
+
# subject the PyPI Trusted Publisher is bound to
|
|
61
|
+
environment: pypi
|
|
62
|
+
permissions:
|
|
63
|
+
id-token: write # OIDC: mint a short-lived token, no stored secret
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/download-artifact@v4
|
|
66
|
+
with:
|
|
67
|
+
name: dist
|
|
68
|
+
path: dist/
|
|
69
|
+
- name: Publish to PyPI (Trusted Publishing)
|
|
70
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Release gate — build, test-matrix, hash, and ATTEST PROVENANCE for a tag.
|
|
2
|
+
#
|
|
3
|
+
# Build + verification automation for the 1.0.0 line. It does NOT publish to PyPI
|
|
4
|
+
# (that is publish.yml / publish-testpypi.yml, manual + OIDC). It runs only on a
|
|
5
|
+
# manual dispatch against a tag or on a pushed tag — never on a fork PR — so the
|
|
6
|
+
# id-token / attestations write scopes are never exposed to untrusted code.
|
|
7
|
+
#
|
|
8
|
+
# Provenance lane: GitHub artifact attestations (actions/attest-build-provenance),
|
|
9
|
+
# an in-toto/SLSA build-provenance statement signed via Sigstore and recorded in
|
|
10
|
+
# the public transparency log. This is the accepted GA provenance lane when a
|
|
11
|
+
# signed git tag is not available (see docs/RELEASE_GATE_1_0.md).
|
|
12
|
+
name: release-gate
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
inputs:
|
|
17
|
+
ref:
|
|
18
|
+
description: Tag to build, verify, and attest (e.g. v1.0.0rc2)
|
|
19
|
+
required: true
|
|
20
|
+
push:
|
|
21
|
+
tags: ["v*"]
|
|
22
|
+
|
|
23
|
+
# Default to read-only; elevate per-job only where strictly required.
|
|
24
|
+
permissions:
|
|
25
|
+
contents: read
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
test:
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
strategy:
|
|
31
|
+
matrix:
|
|
32
|
+
python: ["3.11", "3.12", "3.13"]
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v6.0.3
|
|
35
|
+
with:
|
|
36
|
+
ref: ${{ inputs.ref || github.ref }}
|
|
37
|
+
fetch-depth: 0
|
|
38
|
+
- uses: astral-sh/setup-uv@v8.2.0
|
|
39
|
+
with: { python-version: "${{ matrix.python }}" }
|
|
40
|
+
- run: uv sync --all-extras
|
|
41
|
+
- run: uv run ruff check src tests bench
|
|
42
|
+
- run: uv run ruff format --check src tests bench
|
|
43
|
+
- run: uv run pytest -m "not slow"
|
|
44
|
+
|
|
45
|
+
build-attest:
|
|
46
|
+
needs: test
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
permissions:
|
|
49
|
+
contents: read
|
|
50
|
+
id-token: write # OIDC for Sigstore signing — short-lived, no stored secret
|
|
51
|
+
attestations: write # write the build-provenance attestation
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v6.0.3
|
|
54
|
+
with:
|
|
55
|
+
ref: ${{ inputs.ref || github.ref }}
|
|
56
|
+
fetch-depth: 0
|
|
57
|
+
- uses: actions/setup-python@v5
|
|
58
|
+
with: { python-version: "3.12" }
|
|
59
|
+
- name: Build sdist + wheel
|
|
60
|
+
run: |
|
|
61
|
+
python -m pip install --upgrade build twine
|
|
62
|
+
python -m build
|
|
63
|
+
python -m twine check dist/*
|
|
64
|
+
- name: Verify the built version matches the tag
|
|
65
|
+
if: ${{ inputs.ref != '' || startsWith(github.ref, 'refs/tags/') }}
|
|
66
|
+
run: |
|
|
67
|
+
python - <<'PY'
|
|
68
|
+
import os, pathlib, re, tomllib
|
|
69
|
+
ref = os.environ.get("REF") or os.environ.get("GITHUB_REF", "")
|
|
70
|
+
tag = re.sub(r"^refs/tags/", "", ref).lstrip("v")
|
|
71
|
+
ver = tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]["version"]
|
|
72
|
+
assert ver == tag, f"tag {tag!r} != pyproject version {ver!r}"
|
|
73
|
+
print(f"ok: building {ver}")
|
|
74
|
+
PY
|
|
75
|
+
env:
|
|
76
|
+
REF: ${{ inputs.ref }}
|
|
77
|
+
- name: SHA-256 of artifacts
|
|
78
|
+
run: |
|
|
79
|
+
cd dist && sha256sum * | tee SHA256SUMS
|
|
80
|
+
- name: Attest build provenance
|
|
81
|
+
uses: actions/attest-build-provenance@v1
|
|
82
|
+
with:
|
|
83
|
+
subject-path: "dist/*.whl, dist/*.tar.gz"
|
|
84
|
+
- uses: actions/upload-artifact@v4
|
|
85
|
+
with:
|
|
86
|
+
name: dist
|
|
87
|
+
path: dist/
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.pyc
|
|
3
|
+
.venv/
|
|
4
|
+
dist/
|
|
5
|
+
.warrant/index.sqlite
|
|
6
|
+
.pytest_cache/
|
|
7
|
+
.ruff_cache/
|
|
8
|
+
.coverage
|
|
9
|
+
htmlcov/
|
|
10
|
+
bench/workspace/
|
|
11
|
+
bench/cache/
|
|
12
|
+
.claims_cache/
|
|
13
|
+
bench/results/
|
|
14
|
+
bench/real/
|
|
15
|
+
.DS_Store
|
|
16
|
+
/assets/
|
|
17
|
+
.env
|
|
18
|
+
|
|
19
|
+
# tool working dirs (not release content)
|
|
20
|
+
.claude/
|
|
21
|
+
.gitnexus/
|
|
22
|
+
|
|
23
|
+
# internal program/audit working docs — provenance only, never shipped in the release
|
|
24
|
+
/RESEARCH_REPORT_DORIAN_0_11_0.md
|
|
25
|
+
/V1_IMPLEMENTATION_TRACKER.md
|
|
26
|
+
/V1_ALIGNMENT_REPORT.md
|
|
27
|
+
/AUDIT_RELEASE_GATE.md
|
|
28
|
+
/GITHUB_RELEASE_NOTES.md
|
|
29
|
+
research/
|
|
30
|
+
.bench/
|
|
31
|
+
.release/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|