bioai-evidence-validator 0.4.1__tar.gz → 0.7.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.
Files changed (118) hide show
  1. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/.gitattributes +1 -0
  2. bioai_evidence_validator-0.7.0/.github/ISSUE_TEMPLATE/bug_report.yml +53 -0
  3. bioai_evidence_validator-0.7.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. bioai_evidence_validator-0.7.0/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
  5. bioai_evidence_validator-0.7.0/.github/ISSUE_TEMPLATE/profile_proposal.yml +42 -0
  6. bioai_evidence_validator-0.7.0/.github/pull_request_template.md +18 -0
  7. bioai_evidence_validator-0.7.0/.github/workflows/ci.yml +90 -0
  8. bioai_evidence_validator-0.7.0/.github/workflows/docs.yml +43 -0
  9. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/.gitignore +4 -0
  10. bioai_evidence_validator-0.7.0/CHANGELOG.md +89 -0
  11. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/CITATION.cff +1 -1
  12. bioai_evidence_validator-0.7.0/CODE_OF_CONDUCT.md +16 -0
  13. bioai_evidence_validator-0.7.0/CONTRIBUTING.md +76 -0
  14. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/PKG-INFO +128 -18
  15. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/README.md +120 -16
  16. bioai_evidence_validator-0.7.0/SECURITY.md +35 -0
  17. bioai_evidence_validator-0.7.0/action.yml +57 -0
  18. bioai_evidence_validator-0.7.0/community/profiles/README.md +37 -0
  19. bioai_evidence_validator-0.7.0/community/profiles/_template/README.md +18 -0
  20. bioai_evidence_validator-0.7.0/community/profiles/_template/cases/curated_assay.yaml +14 -0
  21. bioai_evidence_validator-0.7.0/community/profiles/_template/cases/llm_only.yaml +14 -0
  22. bioai_evidence_validator-0.7.0/community/profiles/_template/cases/network_without_review.yaml +14 -0
  23. bioai_evidence_validator-0.7.0/community/profiles/_template/cases/synthetic_study.txt +2 -0
  24. bioai_evidence_validator-0.7.0/community/profiles/_template/expected.yaml +14 -0
  25. bioai_evidence_validator-0.7.0/community/profiles/_template/profile.yaml +19 -0
  26. bioai_evidence_validator-0.7.0/docs/DRAFTS.md +99 -0
  27. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/ENGINEERING.md +42 -10
  28. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/GOLD_STANDARD.md +10 -5
  29. bioai_evidence_validator-0.7.0/docs/STANDARDS.md +79 -0
  30. bioai_evidence_validator-0.7.0/docs/assets/clinvar_germline_benchmark.svg +4101 -0
  31. bioai_evidence_validator-0.7.0/docs/index.md +58 -0
  32. bioai_evidence_validator-0.7.0/evaluation/clinvar_review/README.md +125 -0
  33. bioai_evidence_validator-0.7.0/evaluation/clinvar_review/RUBRIC.md +74 -0
  34. bioai_evidence_validator-0.7.0/evaluation/clinvar_review/import_sheets.py +126 -0
  35. bioai_evidence_validator-0.7.0/evaluation/clinvar_review/prepare_packets.py +221 -0
  36. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/evaluation/gold_standard/README.md +13 -3
  37. bioai_evidence_validator-0.7.0/examples/clinvar_germline/README.md +178 -0
  38. bioai_evidence_validator-0.7.0/examples/clinvar_germline/pipeline.py +231 -0
  39. bioai_evidence_validator-0.7.0/examples/clinvar_germline/plot.py +135 -0
  40. bioai_evidence_validator-0.7.0/examples/clinvar_germline/prepare_source.py +200 -0
  41. bioai_evidence_validator-0.7.0/examples/clinvar_germline/profile.yaml +24 -0
  42. bioai_evidence_validator-0.7.0/examples/clinvar_germline/results/divergences.csv +246 -0
  43. bioai_evidence_validator-0.7.0/examples/clinvar_germline/results/summary.json +556 -0
  44. bioai_evidence_validator-0.7.0/examples/clinvar_germline/results/summary.md +48 -0
  45. bioai_evidence_validator-0.7.0/examples/clinvar_germline/run.py +179 -0
  46. bioai_evidence_validator-0.7.0/examples/clinvar_germline/sources/README.md +33 -0
  47. bioai_evidence_validator-0.7.0/examples/clinvar_germline/sources/clinvar-sample.jsonl.gz +0 -0
  48. bioai_evidence_validator-0.7.0/examples/clinvar_germline/sources/manifest.json +39 -0
  49. bioai_evidence_validator-0.7.0/examples/clinvar_germline/sources/population_outcomes.json +121 -0
  50. bioai_evidence_validator-0.7.0/examples/drafts/llm_claim.yaml +28 -0
  51. bioai_evidence_validator-0.7.0/examples/drafts/reviewed_claim.yaml +35 -0
  52. bioai_evidence_validator-0.7.0/examples/drafts/synthetic_paper.txt +2 -0
  53. bioai_evidence_validator-0.7.0/examples/quickstart.ipynb +255 -0
  54. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/pipeline.py +1 -1
  55. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/results/summary.json +1 -1
  56. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/run.py +2 -1
  57. bioai_evidence_validator-0.7.0/mkdocs.yml +62 -0
  58. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/pyproject.toml +41 -3
  59. bioai_evidence_validator-0.7.0/src/bioevidence_validator/__init__.py +8 -0
  60. bioai_evidence_validator-0.7.0/src/bioevidence_validator/cli.py +212 -0
  61. bioai_evidence_validator-0.7.0/src/bioevidence_validator/draft.py +253 -0
  62. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/engine.py +2 -2
  63. bioai_evidence_validator-0.7.0/src/bioevidence_validator/review.py +388 -0
  64. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/schema/bioevidence_core.yaml +18 -4
  65. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_cli.py +1 -2
  66. bioai_evidence_validator-0.7.0/tests/test_clinvar_case.py +121 -0
  67. bioai_evidence_validator-0.7.0/tests/test_clinvar_review_kit.py +138 -0
  68. bioai_evidence_validator-0.7.0/tests/test_community_profiles.py +39 -0
  69. bioai_evidence_validator-0.7.0/tests/test_draft.py +174 -0
  70. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_engine.py +2 -1
  71. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_evidence_quality.py +3 -1
  72. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_fail_closed.py +2 -0
  73. bioai_evidence_validator-0.7.0/tests/test_github_action.py +43 -0
  74. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_profiles.py +2 -2
  75. bioai_evidence_validator-0.7.0/tests/test_repository_files.py +21 -0
  76. bioai_evidence_validator-0.7.0/tests/test_review.py +230 -0
  77. bioai_evidence_validator-0.7.0/tests/test_standards.py +34 -0
  78. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tests/test_vbo_case.py +3 -1
  79. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/tools/check_distribution.py +18 -2
  80. bioai_evidence_validator-0.7.0/tools/github_action.py +91 -0
  81. bioai_evidence_validator-0.7.0/tools/mkdocs_hooks.py +73 -0
  82. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/uv.lock +508 -3
  83. bioai_evidence_validator-0.4.1/.github/workflows/ci.yml +0 -38
  84. bioai_evidence_validator-0.4.1/CHANGELOG.md +0 -44
  85. bioai_evidence_validator-0.4.1/src/bioevidence_validator/__init__.py +0 -3
  86. bioai_evidence_validator-0.4.1/src/bioevidence_validator/cli.py +0 -114
  87. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/.github/workflows/release.yml +0 -0
  88. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/LICENSE +0 -0
  89. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/ADR-001-canine-breed-first.md +0 -0
  90. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/ADR-002-domain-neutral-main.md +0 -0
  91. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/CASE_STUDY.md +0 -0
  92. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/MIGRATION-0.4.md +0 -0
  93. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/PROFILES.md +0 -0
  94. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/docs/assets/vbo_canine_benchmark.svg +0 -0
  95. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/evaluation/gold_standard/adjudications.template.csv +0 -0
  96. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/evaluation/gold_standard/annotations.template.csv +0 -0
  97. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/evaluation/gold_standard/manifest.template.json +0 -0
  98. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/custom_profile/assay.yaml +0 -0
  99. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/custom_profile/assay_record.json +0 -0
  100. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/dataset_label/curated_sample_label.json +0 -0
  101. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/dataset_label/missing_sample_link.json +0 -0
  102. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/general/curated_assertion.json +0 -0
  103. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/literature_claim/curated_association.json +0 -0
  104. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/literature_claim/llm_only.json +0 -0
  105. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/README.md +0 -0
  106. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/prepare_source.py +0 -0
  107. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/profile.yaml +0 -0
  108. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/reference_cases.json +0 -0
  109. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/results/decisions.jsonl +0 -0
  110. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/results/review_queue.csv +0 -0
  111. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/results/summary.md +0 -0
  112. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/sources/README.md +0 -0
  113. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/sources/manifest.json +0 -0
  114. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/examples/vbo_canine/sources/vbo-dogs.json +0 -0
  115. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/config.py +0 -0
  116. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/profiles/dataset-label.yaml +0 -0
  117. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/profiles/general.yaml +0 -0
  118. {bioai_evidence_validator-0.4.1 → bioai_evidence_validator-0.7.0}/src/bioevidence_validator/profiles/literature-claim.yaml +0 -0
@@ -1 +1,2 @@
1
1
  * text=auto eol=lf
2
+ *.gz binary
@@ -0,0 +1,53 @@
1
+ name: Bug report
2
+ description: The validator, CLI or GitHub Action does something it should not.
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for reporting. For security problems (for example a record admitted that a
9
+ documented rule should reject), use [private reporting](https://github.com/NingyuSUN/bioai-evidence-validator/security/advisories/new) instead.
10
+ **Do not paste real patient data**; a synthetic record that shows the behavior is enough.
11
+ - type: input
12
+ id: version
13
+ attributes:
14
+ label: Version
15
+ description: Output of `pip show bioai-evidence-validator` or `bioevidence --help` header, or the commit.
16
+ placeholder: "0.7.0"
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: command
21
+ attributes:
22
+ label: Command or code
23
+ description: The exact command or Python call, including `--profile`.
24
+ render: shell
25
+ validations:
26
+ required: true
27
+ - type: textarea
28
+ id: input
29
+ attributes:
30
+ label: Smallest record, draft or profile that reproduces it
31
+ render: yaml
32
+ validations:
33
+ required: true
34
+ - type: textarea
35
+ id: expected
36
+ attributes:
37
+ label: Expected result
38
+ description: Which status, reason code or exit code did you expect, and which rule says so?
39
+ validations:
40
+ required: true
41
+ - type: textarea
42
+ id: actual
43
+ attributes:
44
+ label: Actual result
45
+ description: The report's `overall_status`, `findings` and exit code, or the error message.
46
+ render: json
47
+ validations:
48
+ required: true
49
+ - type: input
50
+ id: environment
51
+ attributes:
52
+ label: Environment
53
+ placeholder: "Python 3.12, Ubuntu 24.04"
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/NingyuSUN/bioai-evidence-validator/security/advisories/new
5
+ about: Report privately; please do not open a public issue.
6
+ - name: Documentation
7
+ url: https://github.com/NingyuSUN/bioai-evidence-validator#readme
8
+ about: Usage, draft format, profiles and benchmarks.
@@ -0,0 +1,28 @@
1
+ name: Feature request
2
+ description: Propose a change to the engine, CLI, formats or integrations.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem
9
+ description: What are you trying to do, and what gets in the way today?
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: Proposal
16
+ description: The behavior you would like. For new rules, describe a record that should pass and one that should not.
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: failure
21
+ attributes:
22
+ label: Failure mode
23
+ description: If this goes wrong, does it admit too much or block too much? How would a user notice?
24
+ - type: textarea
25
+ id: alternatives
26
+ attributes:
27
+ label: Alternatives considered
28
+ description: For example, doing it in a profile or an importer instead of the engine.
@@ -0,0 +1,42 @@
1
+ name: Domain profile proposal
2
+ description: Propose an admission profile for a biological domain.
3
+ labels: [profile]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Profiles decide which evidence each intended use requires; they do not change the engine.
9
+ See [docs/PROFILES.md](https://github.com/NingyuSUN/bioai-evidence-validator/blob/main/docs/PROFILES.md)
10
+ and the [community profile template](https://github.com/NingyuSUN/bioai-evidence-validator/tree/main/community/profiles/_template).
11
+ - type: input
12
+ id: domain
13
+ attributes:
14
+ label: Domain and assertion
15
+ placeholder: "Protein–protein interactions: protein A interacts_with protein B"
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: uses
20
+ attributes:
21
+ label: Intended uses and their evidence requirements
22
+ description: For each use (e.g. research summary, knowledge-base admission, training data), which evidence types are required, and is human acceptance required?
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: basis
27
+ attributes:
28
+ label: Basis for the policy
29
+ description: Community guideline, database policy or published standard the requirements follow (with links), or state that it is your own proposal.
30
+ validations:
31
+ required: true
32
+ - type: textarea
33
+ id: cases
34
+ attributes:
35
+ label: Example cases
36
+ description: At least one claim that should be admitted and one that should not, with the reason.
37
+ - type: checkboxes
38
+ id: pr
39
+ attributes:
40
+ label: Contribution
41
+ options:
42
+ - label: I am willing to open a pull request with the profile and example cases.
@@ -0,0 +1,18 @@
1
+ ## What and why
2
+
3
+ <!-- One purpose per pull request. Link the issue: "Closes #123". -->
4
+
5
+ ## Admission boundary
6
+
7
+ <!-- Does this change what gets admitted, sent to review or rejected? If yes, say which
8
+ records move and why, and point to the tests that pin the new boundary. -->
9
+
10
+ - [ ] No change to admission decisions
11
+ - [ ] Changes admission decisions (explained above; tests on both sides of the boundary)
12
+
13
+ ## Checklist
14
+
15
+ - [ ] `uv run --frozen ruff check .`, `uv run --frozen mypy` and `uv run --frozen pytest --cov` pass
16
+ - [ ] Committed benchmark results regenerated if report contents changed
17
+ - [ ] `CHANGELOG.md` updated if users will notice
18
+ - [ ] New third-party data has its license, attribution and exact version recorded
@@ -0,0 +1,90 @@
1
+ name: Repository checks
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ lint:
10
+ timeout-minutes: 10
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: '3.12'
17
+ - name: Install locked tooling
18
+ run: python -m pip install uv==0.12.17
19
+ - name: Install locked project
20
+ run: uv sync --frozen --extra dev
21
+ - name: Lint
22
+ run: uv run --frozen ruff check --output-format github .
23
+ - name: Type-check
24
+ run: uv run --frozen mypy
25
+
26
+ verify:
27
+ timeout-minutes: 15
28
+ strategy:
29
+ matrix:
30
+ include:
31
+ - os: ubuntu-latest
32
+ python: '3.11'
33
+ - os: ubuntu-latest
34
+ python: '3.12'
35
+ - os: ubuntu-latest
36
+ python: '3.13'
37
+ - os: windows-latest
38
+ python: '3.13'
39
+ runs-on: ${{ matrix.os }}
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - uses: actions/setup-python@v5
43
+ with:
44
+ python-version: ${{ matrix.python }}
45
+ - name: Install locked tooling
46
+ run: python -m pip install uv==0.12.17
47
+ - name: Install locked project
48
+ run: uv sync --frozen --extra dev --python ${{ matrix.python }}
49
+ - name: Run tests with coverage (minimum in pyproject.toml)
50
+ run: uv run --frozen pytest --cov --cov-report=term
51
+ - name: Coverage summary
52
+ if: always()
53
+ shell: bash
54
+ run: uv run --frozen coverage report --format=markdown >> "$GITHUB_STEP_SUMMARY" || true
55
+ - name: Build distributable
56
+ run: uv build
57
+ - name: Verify installed wheel and CLI outside editable source
58
+ shell: bash
59
+ run: uv run --isolated --no-project --python ${{ matrix.python }} --with ./dist/*.whl python tools/check_distribution.py
60
+
61
+ action:
62
+ timeout-minutes: 10
63
+ strategy:
64
+ matrix:
65
+ os: [ubuntu-latest, windows-latest]
66
+ runs-on: ${{ matrix.os }}
67
+ steps:
68
+ - uses: actions/checkout@v4
69
+ - name: Admitted and review-required drafts pass with fail-on rejected
70
+ id: drafts
71
+ uses: ./
72
+ with:
73
+ files: examples/drafts/*.yaml
74
+ profile: literature-claim
75
+ format: draft
76
+ fail-on: rejected
77
+ - name: A rejected record fails the action
78
+ id: rejected
79
+ continue-on-error: true
80
+ uses: ./
81
+ with:
82
+ files: examples/dataset_label/*.json
83
+ profile: dataset-label
84
+ - name: Check action outcomes and outputs
85
+ shell: bash
86
+ run: |
87
+ test "${{ steps.drafts.outputs.admitted }}" = 1
88
+ test "${{ steps.drafts.outputs.review_required }}" = 1
89
+ test "${{ steps.rejected.outcome }}" = failure
90
+ test "${{ steps.rejected.outputs.rejected }}" = 1
@@ -0,0 +1,43 @@
1
+ name: Documentation
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ workflow_dispatch:
7
+ permissions:
8
+ contents: read
9
+ concurrency:
10
+ group: docs-${{ github.ref }}
11
+ cancel-in-progress: true
12
+ jobs:
13
+ build:
14
+ timeout-minutes: 10
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: '3.12'
21
+ # Pinned: MkDocs 2.0 drops the plugin and theme system this site uses.
22
+ - name: Install MkDocs
23
+ run: python -m pip install mkdocs==1.6.1 mkdocs-material==9.7.7
24
+ - name: Build with strict link checking
25
+ run: mkdocs build --strict --site-dir _site
26
+ - if: github.event_name != 'pull_request'
27
+ uses: actions/upload-pages-artifact@v3
28
+ with:
29
+ path: _site
30
+
31
+ deploy:
32
+ if: github.event_name != 'pull_request'
33
+ needs: build
34
+ runs-on: ubuntu-latest
35
+ permissions:
36
+ pages: write
37
+ id-token: write
38
+ environment:
39
+ name: github-pages
40
+ url: ${{ steps.deployment.outputs.page_url }}
41
+ steps:
42
+ - id: deployment
43
+ uses: actions/deploy-pages@v4
@@ -7,3 +7,7 @@ dist/
7
7
  build/
8
8
  artifacts/
9
9
  validation_report.json
10
+ _site/
11
+ site/
12
+ .coverage
13
+ htmlcov/
@@ -0,0 +1,89 @@
1
+ # Changelog
2
+
3
+ ## 0.7.0 — Expert review, quality checks, community and documentation site
4
+
5
+ - Add `bioevidence review` (`check`, `agreement`, `adjudication-sheet`, `score`, `freeze`)
6
+ implementing the gold-standard protocol: strict annotation checks, Krippendorff's α with
7
+ bootstrap interval and Cohen's κ (both cross-checked against reference implementations),
8
+ adjudication of disagreements, scoring on the test split with hash-bound joins, and frozen
9
+ manifests. It never produces labels.
10
+ - Add a blinded ClinVar expert-review kit (`evaluation/clinvar_review/`): all 95 variants where
11
+ the validator and NCBI disagree plus 95 stratum-matched controls, an Excel workbook with
12
+ dropdowns, a reviewer rubric, a private key, and an importer into the protocol format.
13
+ - CI runs ruff and mypy, and enforces a 95% test-coverage minimum (currently 98%).
14
+ - Add CONTRIBUTING, CODE_OF_CONDUCT (Contributor Covenant 2.1), SECURITY, issue forms and a
15
+ pull request template.
16
+ - Add `community/profiles/`: contributed domain profiles whose example cases are built,
17
+ validated and checked against expected outcomes in CI; `_template/` to copy.
18
+ - Add a documentation site (MkDocs, strict link checking) published to GitHub Pages.
19
+ - The canine 0.3 implementation is also preserved at the `canine-0.3` tag.
20
+ - No change to validation decisions or report format; both benchmarks reproduce 0.6.0 exactly
21
+ apart from `validator_version`.
22
+
23
+ ## 0.6.0 — ClinVar case and standards alignment
24
+
25
+ - Add a second real-data case: ClinVar germline classifications. 5,026 sampled variants
26
+ from the 2023-09 release are built from per-submission evidence and validated with a
27
+ ClinVar-style profile; decisions are compared with NCBI's own 2023-09 review status and
28
+ with each classification's 2026-09 outcome, plus controlled faults and a trust-boundary
29
+ cohort. Frozen, hash-pinned sample; rebuild script verifies the three upstream files.
30
+ - Add `docs/STANDARDS.md`, mapping the record model to ECO, Biolink 4.4.4, GA4GH VA-Spec
31
+ 1.0.1 and PROV-O, with mapping strength and caveats.
32
+ - Annotate `ExtractionMethod` values with ECO meanings in the LinkML schema. The compiled
33
+ JSON Schema, and therefore every report's `schema_sha256`, is unchanged.
34
+ - The VBO benchmark summary changes only `validator_version`.
35
+
36
+ ## 0.5.0 — Drafts, LLM draft schema and GitHub Action
37
+
38
+ - Add compact YAML/JSON drafts: `bioevidence build` and `build_record()` derive identifiers,
39
+ group evidence lines and hash named local files, without supplying scope, method, times
40
+ or review decisions. Strict parsing rejects unknown, missing and out-of-choice fields.
41
+ - Add `bioevidence draft-schema` and `draft_json_schema()`: a per-profile JSON Schema for
42
+ drafts, e.g. for LLM structured output.
43
+ - Add a composite GitHub Action that validates records or drafts in pull requests, with a
44
+ job summary, file annotations and count outputs.
45
+ - Add a Colab quickstart notebook and draft examples.
46
+ - Export `build_record`, `load_draft`, `draft_json_schema` and `validate_record` from the package root.
47
+
48
+ ## 0.4.1 — Required-evidence quality and real-source evaluation
49
+
50
+ - Apply extraction-method quality gates to each required evidence type independently.
51
+ - Prevent unrelated manual/parser evidence from admitting an LLM-only required result.
52
+ - Add an attributed, frozen VBO canine name-mapping case and source rebuild script.
53
+ - Evaluate 72 real-source names, 160 controlled faults, and 16 explicit trust-boundary cases separately.
54
+ - Preserve generic main and the legacy canine-breed branch.
55
+ - Publish to PyPI from version tags; add package metadata and citation file.
56
+ - Reject CLI input nested deeper than 100 levels (exit 3) on every platform and Python version.
57
+
58
+ ## 0.4.0 — Domain-neutral main
59
+
60
+ - Preserve canine 0.3 functionality on the `canine-breed` branch.
61
+ - Replace canine defaults with a generic entity/relation/evidence schema and strict YAML profiles.
62
+ - Add general, literature-claim, dataset-label, and custom assay examples.
63
+ - Bind human adjudications to statements and uses; enforce evidence scope and reference integrity.
64
+ - Replace `--policy` with `--profile`; add profile discovery and generic audit fields.
65
+ - Remove the canine SQLite command from main. See `docs/MIGRATION-0.4.md` for breaking changes.
66
+
67
+ ## 0.3.0 — Evidence and snapshot contract hardening
68
+
69
+ - Require resolved supporting evidence, selected-candidate consistency and
70
+ compatible claim predicates; block relationship claims from sample/frequency label use.
71
+ - Enforce scope exclusions from concept scope, use only supporting scope evidence,
72
+ reject blank provenance and unresolved references in unused evidence.
73
+ - Reject incomplete/duplicate/unknown policy configuration; custom schemas cannot
74
+ relax the packaged structural baseline. Snapshot validation context per batch.
75
+ - Reject duplicate database IDs, WAL/SHM/journal sidecars, malformed manifests
76
+ and unrecognized boolean evidence. Include resolution-row provenance,
77
+ limits/accounting and batch hashes; publish the completion summary last.
78
+ - Preserve earlier policy files, synthetic examples and operational CLI exit codes.
79
+
80
+ ## 0.2.0 — Evidence admission contracts and reproducible CLI
81
+
82
+ - Version schema/policy 0.2; preserve policy 0.1 and record generated-schema hashes.
83
+ - Prevent withdrawn statements or conflicting human judgments from silently being admitted.
84
+ - Reject missing, empty, malformed, duplicated or unknown requested uses.
85
+ - Make structural and identity errors block the entire record, including unknown uses.
86
+ - Require evidence collections and reject duplicate IDs before dictionary lookup.
87
+ - Return structured operational CLI errors; parse UTF-8 strictly and write reports atomically.
88
+ - Add regression tests, a Linux/Windows CI workflow and an installed-wheel smoke check.
89
+ - Include the Apache-2.0 license already declared in project metadata.
@@ -9,7 +9,7 @@ abstract: >-
9
9
  authors:
10
10
  - family-names: Sun
11
11
  given-names: Ningyu
12
- version: 0.4.1
12
+ version: 0.7.0
13
13
  license: Apache-2.0
14
14
  repository-code: "https://github.com/NingyuSUN/bioai-evidence-validator"
15
15
  keywords:
@@ -0,0 +1,16 @@
1
+ # Code of conduct
2
+
3
+ This project adopts the
4
+ [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
5
+ as its code of conduct. It applies to all project spaces (issues, pull requests,
6
+ discussions and reviews) and to anyone representing the project elsewhere.
7
+
8
+ In short: be respectful and constructive, assume good faith, critique work rather than
9
+ people, and remember that contributors bring expertise from many fields, from biocuration
10
+ to software engineering.
11
+
12
+ ## Reporting
13
+
14
+ Report unacceptable behavior to the maintainer, Ningyu Sun, at <woshiwosunny@gmail.com>.
15
+ Reports are handled confidentially, and the enforcement guidelines of the Contributor
16
+ Covenant 2.1 apply.
@@ -0,0 +1,76 @@
1
+ # Contributing
2
+
3
+ Thanks for helping make AI-assisted biocuration safer. Contributions of every size are
4
+ welcome: a typo fix, a bug report with a failing record, a new domain profile, or a new
5
+ real-data benchmark.
6
+
7
+ By participating you agree to follow the [code of conduct](CODE_OF_CONDUCT.md).
8
+
9
+ ## Ways to contribute
10
+
11
+ | You have… | Start here |
12
+ |---|---|
13
+ | A record the validator judges wrongly | [Bug report](https://github.com/NingyuSUN/bioai-evidence-validator/issues/new?template=bug_report.yml); attach the smallest record or draft that reproduces it |
14
+ | An admission policy for your domain | [Profile proposal](https://github.com/NingyuSUN/bioai-evidence-validator/issues/new?template=profile_proposal.yml), then a pull request to [`community/profiles/`](community/profiles/README.md) |
15
+ | An idea for the engine, CLI or formats | [Feature request](https://github.com/NingyuSUN/bioai-evidence-validator/issues/new?template=feature_request.yml) first, so we can agree on the contract before code |
16
+ | A security problem | Do **not** open an issue; see [SECURITY.md](SECURITY.md) |
17
+
18
+ Issues labelled [`good first issue`](https://github.com/NingyuSUN/bioai-evidence-validator/labels/good%20first%20issue)
19
+ are scoped to be finished in an afternoon.
20
+
21
+ ## Development setup
22
+
23
+ Python 3.11+ and [uv](https://docs.astral.sh/uv/):
24
+
25
+ ```bash
26
+ git clone https://github.com/NingyuSUN/bioai-evidence-validator.git
27
+ cd bioai-evidence-validator
28
+ uv sync --frozen --extra dev
29
+ ```
30
+
31
+ Before opening a pull request, run what CI runs:
32
+
33
+ ```bash
34
+ uv run --frozen ruff check .
35
+ uv run --frozen mypy
36
+ uv run --frozen pytest --cov
37
+ ```
38
+
39
+ CI also runs the tests on Linux (Python 3.11–3.13) and Windows, builds the wheel and
40
+ smoke-tests it outside the source tree, and runs the GitHub Action. Coverage must stay at
41
+ or above the minimum in `pyproject.toml`.
42
+
43
+ ## Ground rules for changes
44
+
45
+ This project's value is that it **fails closed** and **says exactly what it checked**.
46
+ Changes are reviewed against that:
47
+
48
+ - **No silent weakening.** A change that admits something previously rejected needs an
49
+ explicit reason in the pull request and a test that shows the new boundary.
50
+ - **Every rule has a test on both sides**: a record that passes and a minimal one that fails.
51
+ - **Reports stay reproducible.** If a change alters report contents, the committed benchmark
52
+ results must be regenerated in the same pull request, and the diff explained.
53
+ - **Domain logic stays out of the engine.** New domains are profiles and importers, not
54
+ special cases in `engine.py`.
55
+ - **Honest limits.** Benchmarks state what their labels are (source-derived, authored, or
56
+ independently reviewed) and what they do not measure.
57
+ - Match the surrounding style; ruff enforces correctness rules, not formatting.
58
+
59
+ ## Contributing a domain profile
60
+
61
+ Community profiles live in [`community/profiles/`](community/profiles/README.md). Each one is
62
+ a folder with a profile, a short README and example cases whose expected outcomes are
63
+ checked by the test suite. Copy `community/profiles/_template/` to get started.
64
+
65
+ ## Pull requests
66
+
67
+ - Keep each pull request to one purpose; link the issue it resolves.
68
+ - Update `CHANGELOG.md` under a new heading if users will notice the change.
69
+ - New third-party data needs its license, attribution and exact source version recorded,
70
+ as in `examples/*/sources/README.md`.
71
+
72
+ ## Releases
73
+
74
+ Maintainers release by bumping the version in `pyproject.toml` and
75
+ `src/bioevidence_validator/__init__.py`, adding a `CHANGELOG.md` section, and pushing a
76
+ `vX.Y.Z` tag. The release workflow tests, publishes to PyPI and creates the GitHub release.