uofa 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 (688) hide show
  1. uofa-0.7.0/.devcontainer/devcontainer.json +29 -0
  2. uofa-0.7.0/.gitattributes +38 -0
  3. uofa-0.7.0/.github/workflows/release-wheels.yml +396 -0
  4. uofa-0.7.0/.github/workflows/validate.yml +18 -0
  5. uofa-0.7.0/.gitignore +85 -0
  6. uofa-0.7.0/CHANGELOG.md +117 -0
  7. uofa-0.7.0/CITATION.cff +21 -0
  8. uofa-0.7.0/CONTRIBUTING.md +153 -0
  9. uofa-0.7.0/LICENSE +202 -0
  10. uofa-0.7.0/LICENSES/LICENSE-ollama.txt +34 -0
  11. uofa-0.7.0/LICENSES/LICENSE-openjdk.txt +54 -0
  12. uofa-0.7.0/LICENSES/LICENSE-qwen.txt +97 -0
  13. uofa-0.7.0/Makefile +14 -0
  14. uofa-0.7.0/NOTICE +36 -0
  15. uofa-0.7.0/PKG-INFO +731 -0
  16. uofa-0.7.0/README.md +682 -0
  17. uofa-0.7.0/build-config/Makefile +109 -0
  18. uofa-0.7.0/build-config/hatch_build.py +237 -0
  19. uofa-0.7.0/build-config/jre_manifest.toml +48 -0
  20. uofa-0.7.0/build-config/ollama_manifest.toml +47 -0
  21. uofa-0.7.0/dev/build/phase2_5/README.md +127 -0
  22. uofa-0.7.0/dev/specs/README.md +29 -0
  23. uofa-0.7.0/dev/specs/confirm_existing/.gitkeep +1 -0
  24. uofa-0.7.0/dev/specs/confirm_existing/compound-01.yaml +27 -0
  25. uofa-0.7.0/dev/specs/confirm_existing/compound-03.yaml +27 -0
  26. uofa-0.7.0/dev/specs/confirm_existing/w-al-01.yaml +27 -0
  27. uofa-0.7.0/dev/specs/confirm_existing/w-al-02.yaml +27 -0
  28. uofa-0.7.0/dev/specs/confirm_existing/w-ar-01.yaml +27 -0
  29. uofa-0.7.0/dev/specs/confirm_existing/w-ar-02.yaml +27 -0
  30. uofa-0.7.0/dev/specs/confirm_existing/w-ar-03.yaml +27 -0
  31. uofa-0.7.0/dev/specs/confirm_existing/w-ar-04.yaml +27 -0
  32. uofa-0.7.0/dev/specs/confirm_existing/w-con-01.yaml +27 -0
  33. uofa-0.7.0/dev/specs/confirm_existing/w-con-02.yaml +27 -0
  34. uofa-0.7.0/dev/specs/confirm_existing/w-con-03.yaml +27 -0
  35. uofa-0.7.0/dev/specs/confirm_existing/w-con-04.yaml +27 -0
  36. uofa-0.7.0/dev/specs/confirm_existing/w-con-05.yaml +27 -0
  37. uofa-0.7.0/dev/specs/confirm_existing/w-ep-01.yaml +27 -0
  38. uofa-0.7.0/dev/specs/confirm_existing/w-ep-02.yaml +27 -0
  39. uofa-0.7.0/dev/specs/confirm_existing/w-ep-03.yaml +27 -0
  40. uofa-0.7.0/dev/specs/confirm_existing/w-ep-04.yaml +27 -0
  41. uofa-0.7.0/dev/specs/confirm_existing/w-on-01.yaml +27 -0
  42. uofa-0.7.0/dev/specs/confirm_existing/w-on-02.yaml +27 -0
  43. uofa-0.7.0/dev/specs/confirm_existing/w-prov-01.yaml +27 -0
  44. uofa-0.7.0/dev/specs/confirm_existing/w-si-01.yaml +27 -0
  45. uofa-0.7.0/dev/specs/confirm_existing/w-si-02.yaml +27 -0
  46. uofa-0.7.0/dev/specs/confirm_existing/w_ar_05.yaml +48 -0
  47. uofa-0.7.0/dev/specs/cross_pack/README.md +49 -0
  48. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_compound_01.yaml +33 -0
  49. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_al_01.yaml +31 -0
  50. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_ar_01.yaml +34 -0
  51. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_ar_05.yaml +31 -0
  52. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_con_01.yaml +31 -0
  53. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_ep_01.yaml +31 -0
  54. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_ep_04.yaml +31 -0
  55. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_on_01.yaml +31 -0
  56. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_prov_01.yaml +31 -0
  57. uofa-0.7.0/dev/specs/cross_pack/cp_nasa_w_si_01.yaml +31 -0
  58. uofa-0.7.0/dev/specs/gap_probe/.gitkeep +1 -0
  59. uofa-0.7.0/dev/specs/gap_probe/README.md +61 -0
  60. uofa-0.7.0/dev/specs/gap_probe/clarissa_wf_eliminative_argumentation.yaml +28 -0
  61. uofa-0.7.0/dev/specs/gap_probe/clarissa_wf_residual_risk_justification.yaml +28 -0
  62. uofa-0.7.0/dev/specs/gap_probe/clarissa_wf_theory_preconditions.yaml +28 -0
  63. uofa-0.7.0/dev/specs/gap_probe/gohar_ctx_configuration.yaml +28 -0
  64. uofa-0.7.0/dev/specs/gap_probe/gohar_ctx_environmental_factors.yaml +28 -0
  65. uofa-0.7.0/dev/specs/gap_probe/gohar_ctx_faults_physical.yaml +28 -0
  66. uofa-0.7.0/dev/specs/gap_probe/gohar_ctx_faults_software.yaml +28 -0
  67. uofa-0.7.0/dev/specs/gap_probe/gohar_ctx_human_errors.yaml +28 -0
  68. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_coverage_edge_cases.yaml +28 -0
  69. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_data_drift.yaml +28 -0
  70. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_fidelity.yaml +28 -0
  71. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_inadequate_metrics.yaml +28 -0
  72. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_model_variance.yaml +28 -0
  73. uofa-0.7.0/dev/specs/gap_probe/gohar_ev_robustness.yaml +28 -0
  74. uofa-0.7.0/dev/specs/gap_probe/gohar_req_ambiguous.yaml +28 -0
  75. uofa-0.7.0/dev/specs/gap_probe/gohar_req_inconsistent.yaml +28 -0
  76. uofa-0.7.0/dev/specs/gap_probe/gohar_req_incorrect.yaml +28 -0
  77. uofa-0.7.0/dev/specs/gap_probe/gohar_req_missing.yaml +28 -0
  78. uofa-0.7.0/dev/specs/gap_probe/gohar_req_stale.yaml +28 -0
  79. uofa-0.7.0/dev/specs/gap_probe/greenwell_suf_arguing_from_ignorance.yaml +28 -0
  80. uofa-0.7.0/dev/specs/gap_probe/greenwell_suf_confusion_necessary_sufficient.yaml +28 -0
  81. uofa-0.7.0/dev/specs/gap_probe/greenwell_suf_hasty_inductive_generalization.yaml +28 -0
  82. uofa-0.7.0/dev/specs/interaction/.gitkeep +1 -0
  83. uofa-0.7.0/dev/specs/interaction/README.md +43 -0
  84. uofa-0.7.0/dev/specs/interaction/int-1-critical-plus-high.yaml +27 -0
  85. uofa-0.7.0/dev/specs/interaction/int-2-two-criticals.yaml +27 -0
  86. uofa-0.7.0/dev/specs/interaction/int-3-high-assurance-with-gaps.yaml +27 -0
  87. uofa-0.7.0/dev/specs/interaction/int-4-three-way.yaml +27 -0
  88. uofa-0.7.0/dev/specs/interaction/int-5-critical-plus-medium.yaml +27 -0
  89. uofa-0.7.0/dev/specs/interaction/int-6-accepted-with-critical.yaml +27 -0
  90. uofa-0.7.0/dev/specs/negative_controls/.gitkeep +1 -0
  91. uofa-0.7.0/dev/specs/negative_controls/nc-clean-compound-free.yaml +29 -0
  92. uofa-0.7.0/dev/specs/negative_controls/nc-clean-full-morrison-cou1.yaml +34 -0
  93. uofa-0.7.0/dev/specs/negative_controls/nc-clean-full-morrison-cou2.yaml +41 -0
  94. uofa-0.7.0/dev/specs/negative_controls/nc-clean-full-nagaraja.yaml +36 -0
  95. uofa-0.7.0/dev/specs/negative_controls/nc-clean-low-confidence-but-documented.yaml +29 -0
  96. uofa-0.7.0/dev/specs/negative_controls/nc-clean-minimal-morrison-cou1.yaml +29 -0
  97. uofa-0.7.0/dev/specs/negative_controls/nc-clean-not-applicable-factors.yaml +29 -0
  98. uofa-0.7.0/dev/specs/negative_controls/nc-clean-partial-envelope.yaml +29 -0
  99. uofa-0.7.0/dev/specs/negative_controls/nc-clean-rejected-decision.yaml +29 -0
  100. uofa-0.7.0/dev/specs/negative_controls/nc-clean-scoped-out-factors.yaml +29 -0
  101. uofa-0.7.0/dev/specs/paraphrasing/data-drift_p0.yaml +29 -0
  102. uofa-0.7.0/dev/specs/paraphrasing/data-drift_p1.yaml +29 -0
  103. uofa-0.7.0/dev/specs/paraphrasing/data-drift_p2.yaml +29 -0
  104. uofa-0.7.0/dev/specs/paraphrasing/elim-arg_p0.yaml +29 -0
  105. uofa-0.7.0/dev/specs/paraphrasing/elim-arg_p1.yaml +29 -0
  106. uofa-0.7.0/dev/specs/paraphrasing/elim-arg_p2.yaml +29 -0
  107. uofa-0.7.0/dev/specs/paraphrasing/hasty-induct_p0.yaml +29 -0
  108. uofa-0.7.0/dev/specs/paraphrasing/hasty-induct_p1.yaml +29 -0
  109. uofa-0.7.0/dev/specs/paraphrasing/hasty-induct_p2.yaml +29 -0
  110. uofa-0.7.0/dev/specs/paraphrasing/req-missing_p0.yaml +29 -0
  111. uofa-0.7.0/dev/specs/paraphrasing/req-missing_p1.yaml +29 -0
  112. uofa-0.7.0/dev/specs/paraphrasing/req-missing_p2.yaml +29 -0
  113. uofa-0.7.0/dev/specs/paraphrasing/w-al-01_p0.yaml +28 -0
  114. uofa-0.7.0/dev/specs/paraphrasing/w-al-01_p1.yaml +28 -0
  115. uofa-0.7.0/dev/specs/paraphrasing/w-al-01_p2.yaml +28 -0
  116. uofa-0.7.0/dev/specs/paraphrasing/w-ar-05_p0.yaml +35 -0
  117. uofa-0.7.0/dev/specs/paraphrasing/w-ar-05_p1.yaml +35 -0
  118. uofa-0.7.0/dev/specs/paraphrasing/w-ar-05_p2.yaml +35 -0
  119. uofa-0.7.0/dev/specs/paraphrasing/w-con-01_p0.yaml +28 -0
  120. uofa-0.7.0/dev/specs/paraphrasing/w-con-01_p1.yaml +28 -0
  121. uofa-0.7.0/dev/specs/paraphrasing/w-con-01_p2.yaml +28 -0
  122. uofa-0.7.0/dev/specs/paraphrasing/w-ep-01_p0.yaml +28 -0
  123. uofa-0.7.0/dev/specs/paraphrasing/w-ep-01_p1.yaml +28 -0
  124. uofa-0.7.0/dev/specs/paraphrasing/w-ep-01_p2.yaml +28 -0
  125. uofa-0.7.0/dev/specs/paraphrasing/w-on-02_p0.yaml +28 -0
  126. uofa-0.7.0/dev/specs/paraphrasing/w-on-02_p1.yaml +28 -0
  127. uofa-0.7.0/dev/specs/paraphrasing/w-on-02_p2.yaml +28 -0
  128. uofa-0.7.0/dev/specs/paraphrasing/w-prov-01_p0.yaml +28 -0
  129. uofa-0.7.0/dev/specs/paraphrasing/w-prov-01_p1.yaml +28 -0
  130. uofa-0.7.0/dev/specs/paraphrasing/w-prov-01_p2.yaml +28 -0
  131. uofa-0.7.0/dev/specs/quality_benchmark/README.md +51 -0
  132. uofa-0.7.0/dev/specs/quality_benchmark/qb_01_w_ar_01.yaml +27 -0
  133. uofa-0.7.0/dev/specs/quality_benchmark/qb_02_w_ep_01.yaml +27 -0
  134. uofa-0.7.0/dev/specs/quality_benchmark/qb_03_w_al_01.yaml +27 -0
  135. uofa-0.7.0/dev/specs/quality_benchmark/qb_04_w_on_02.yaml +27 -0
  136. uofa-0.7.0/dev/specs/quality_benchmark/qb_05_data_drift.yaml +28 -0
  137. uofa-0.7.0/dev/specs/quality_benchmark/qb_06_req_missing.yaml +28 -0
  138. uofa-0.7.0/dev/specs/quality_benchmark/qb_07_hasty.yaml +28 -0
  139. uofa-0.7.0/dev/specs/quality_benchmark/qb_08_elim_arg.yaml +28 -0
  140. uofa-0.7.0/dev/tools/explain_sme_review/generate_sample.py +175 -0
  141. uofa-0.7.0/dev/tools/explain_sme_review/round1_audit.md +126 -0
  142. uofa-0.7.0/dev/tools/explain_sme_review/round1_audit.py +157 -0
  143. uofa-0.7.0/dev/tools/explain_sme_review/sample_ollama_qwen3.5_4b_20260502-113219.json +177 -0
  144. uofa-0.7.0/dev/tools/explain_sme_review/sample_ollama_qwen3.5_4b_20260502-123649.json +166 -0
  145. uofa-0.7.0/dev/tools/explain_sme_review/sample_ollama_qwen3.5_4b_20260502-124203.json +166 -0
  146. uofa-0.7.0/dev/tools/explain_sme_review/sample_ollama_qwen3.5_4b_20260502-145911.json +188 -0
  147. uofa-0.7.0/dev/tools/explain_sme_review/sample_ollama_qwen3.5_4b_20260502-152523.json +188 -0
  148. uofa-0.7.0/dev/tools/explain_sme_review/sme_scoring.md +163 -0
  149. uofa-0.7.0/dev/tools/phase2_5/README.md +96 -0
  150. uofa-0.7.0/dev/tools/phase2_5/__init__.py +27 -0
  151. uofa-0.7.0/dev/tools/phase2_5/analysis/__init__.py +0 -0
  152. uofa-0.7.0/dev/tools/phase2_5/analysis/inspect_misfires.py +212 -0
  153. uofa-0.7.0/dev/tools/phase2_5/analysis/plot_pr.py +302 -0
  154. uofa-0.7.0/dev/tools/phase2_5/analysis/verify_sentinels.py +116 -0
  155. uofa-0.7.0/dev/tools/phase2_5/audit/__init__.py +0 -0
  156. uofa-0.7.0/dev/tools/phase2_5/audit/audit_phase_a.py +256 -0
  157. uofa-0.7.0/dev/tools/phase2_5/audit/audit_phase_b.py +218 -0
  158. uofa-0.7.0/dev/tools/phase2_5/audit/pilot_tool_use.py +245 -0
  159. uofa-0.7.0/dev/tools/phase2_5/audit/run_phase_a.sh +60 -0
  160. uofa-0.7.0/dev/tools/phase2_5/corpus_regen/__init__.py +0 -0
  161. uofa-0.7.0/dev/tools/phase2_5/corpus_regen/regen_nc_consistency.py +339 -0
  162. uofa-0.7.0/dev/tools/phase2_5/corpus_regen/regen_nc_envelope.py +377 -0
  163. uofa-0.7.0/dev/tools/phase2_5/corpus_regen/regen_nc_offset_rationale.py +374 -0
  164. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/__init__.py +0 -0
  165. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/lock_in.py +363 -0
  166. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/log.py +132 -0
  167. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/log_decision.py +142 -0
  168. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/metrics.py +389 -0
  169. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/propose_revision.py +280 -0
  170. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/refine_loop.py +501 -0
  171. uofa-0.7.0/dev/tools/phase2_5/refinement_loop/split.py +229 -0
  172. uofa-0.7.0/dev/tools/phase2_5/tests/__init__.py +0 -0
  173. uofa-0.7.0/dev/tools/phase2_5/tests/test_log.py +104 -0
  174. uofa-0.7.0/dev/tools/phase2_5/tests/test_metrics.py +193 -0
  175. uofa-0.7.0/dev/tools/phase2_5/tests/test_refine_loop.py +302 -0
  176. uofa-0.7.0/dev/tools/phase2_5/tests/test_split.py +155 -0
  177. uofa-0.7.0/dev/tools/scripts/build_phase2_review_packet.py +238 -0
  178. uofa-0.7.0/dev/tools/scripts/export_view3_markdown.py +136 -0
  179. uofa-0.7.0/dev/tools/scripts/export_view_pdf.py +105 -0
  180. uofa-0.7.0/dev/tools/scripts/extract_accuracy_log.jsonl +5 -0
  181. uofa-0.7.0/dev/tools/scripts/refresh_jre_manifest.py +173 -0
  182. uofa-0.7.0/dev/tools/scripts/refresh_ollama_manifest.py +167 -0
  183. uofa-0.7.0/dev/tools/scripts/release_check.py +481 -0
  184. uofa-0.7.0/dev/tools/scripts/score_extraction.py +707 -0
  185. uofa-0.7.0/docs/archive/architecture.md +584 -0
  186. uofa-0.7.0/docs/archive/getting-started.md +272 -0
  187. uofa-0.7.0/docs/explain.md +210 -0
  188. uofa-0.7.0/docs/llm-config.md +145 -0
  189. uofa-0.7.0/docs/m5_findings.md +235 -0
  190. uofa-0.7.0/docs/onboarding.md +1049 -0
  191. uofa-0.7.0/docs/phase2_runbook.md +265 -0
  192. uofa-0.7.0/docs/repo-layout.md +147 -0
  193. uofa-0.7.0/docs/security.md +126 -0
  194. uofa-0.7.0/docs/v0.5-morrison-deltas.md +222 -0
  195. uofa-0.7.0/keys/research.key +3 -0
  196. uofa-0.7.0/keys/research.pub +3 -0
  197. uofa-0.7.0/packs/README.md +214 -0
  198. uofa-0.7.0/packs/core/pack.json +14 -0
  199. uofa-0.7.0/packs/core/rules/uofa_weakener.rules +645 -0
  200. uofa-0.7.0/packs/core/shapes/uofa_shacl.ttl +519 -0
  201. uofa-0.7.0/packs/core/source_taxonomies.json +215 -0
  202. uofa-0.7.0/packs/core/templates/uofa-complete-skeleton.jsonld +102 -0
  203. uofa-0.7.0/packs/core/templates/uofa-minimal-skeleton.jsonld +32 -0
  204. uofa-0.7.0/packs/core/templates/uofa-template.xlsx +0 -0
  205. uofa-0.7.0/packs/nasa-7009b/examples/aerospace/aero-evidence-cou1.zip +0 -0
  206. uofa-0.7.0/packs/nasa-7009b/examples/aerospace/aero-evidence-cou2.zip +0 -0
  207. uofa-0.7.0/packs/nasa-7009b/examples/aerospace/uofa-aero-cou1-nasa7009b.jsonld +337 -0
  208. uofa-0.7.0/packs/nasa-7009b/examples/aerospace/uofa-aero-cou2-nasa7009b.jsonld +386 -0
  209. uofa-0.7.0/packs/nasa-7009b/examples/starters/uofa-aero-fatigue-minimal.jsonld +33 -0
  210. uofa-0.7.0/packs/nasa-7009b/examples/starters/uofa-aero-hpt-blade-thermal-gaps.xlsx +0 -0
  211. uofa-0.7.0/packs/nasa-7009b/pack.json +14 -0
  212. uofa-0.7.0/packs/nasa-7009b/prompts/nasa_7009b_extract_prompt.txt +161 -0
  213. uofa-0.7.0/packs/nasa-7009b/rules/nasa_7009b_weakener.rules +133 -0
  214. uofa-0.7.0/packs/nasa-7009b/shapes/nasa_7009b_shapes.ttl +79 -0
  215. uofa-0.7.0/packs/nasa-7009b/templates/nasa-7009b-template.xlsx +0 -0
  216. uofa-0.7.0/packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld +188 -0
  217. uofa-0.7.0/packs/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonld +280 -0
  218. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou1-cou2-diff-report-screenshot.png +0 -0
  219. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou1-cou2-diff-report.txt +70 -0
  220. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou1-weakener-report-screenshot.png +0 -0
  221. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou1-weakener-report.txt +58 -0
  222. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou2-weakener-report-screenshot.png +0 -0
  223. uofa-0.7.0/packs/vv40/examples/morrison/slide-assets/cou2-weakener-report.txt +35 -0
  224. uofa-0.7.0/packs/vv40/examples/nagaraja/cou1/uofa-nagaraja-cou1.jsonld +229 -0
  225. uofa-0.7.0/packs/vv40/examples/starters/uofa-structural-bridge-minimal.jsonld +33 -0
  226. uofa-0.7.0/packs/vv40/pack.json +14 -0
  227. uofa-0.7.0/packs/vv40/prompts/vv40_extract_prompt.txt +127 -0
  228. uofa-0.7.0/packs/vv40/shapes/vv40_shapes.ttl +69 -0
  229. uofa-0.7.0/packs/vv40/templates/uofa-starter-filled.xlsx +0 -0
  230. uofa-0.7.0/packs/vv40/templates/vv40-template.xlsx +0 -0
  231. uofa-0.7.0/pyproject.toml +123 -0
  232. uofa-0.7.0/spec/README.md +24 -0
  233. uofa-0.7.0/spec/context/v0.1.jsonld +73 -0
  234. uofa-0.7.0/spec/context/v0.2.jsonld +87 -0
  235. uofa-0.7.0/spec/context/v0.3.jsonld +276 -0
  236. uofa-0.7.0/spec/context/v0.4.jsonld +346 -0
  237. uofa-0.7.0/spec/context/v0.5.jsonld +412 -0
  238. uofa-0.7.0/spec/schemas/uofa.schema.json +568 -0
  239. uofa-0.7.0/spec/schemas/uofa_shacl.ttl +1 -0
  240. uofa-0.7.0/src/uofa_cli/__init__.py +19 -0
  241. uofa-0.7.0/src/uofa_cli/__main__.py +7 -0
  242. uofa-0.7.0/src/uofa_cli/_data/fixtures/demo/manifest.json +19 -0
  243. uofa-0.7.0/src/uofa_cli/_data/fixtures/demo/passage.txt +13 -0
  244. uofa-0.7.0/src/uofa_cli/_data/fixtures/demo/uofa-demo-cou1.jsonld +33 -0
  245. uofa-0.7.0/src/uofa_cli/_data/fixtures/verify/expected.json +40 -0
  246. uofa-0.7.0/src/uofa_cli/_data/fixtures/verify/passage.txt +9 -0
  247. uofa-0.7.0/src/uofa_cli/_engine/.gitkeep +0 -0
  248. uofa-0.7.0/src/uofa_cli/adversarial/__init__.py +13 -0
  249. uofa-0.7.0/src/uofa_cli/adversarial/circularity.py +131 -0
  250. uofa-0.7.0/src/uofa_cli/adversarial/classifier.py +859 -0
  251. uofa-0.7.0/src/uofa_cli/adversarial/generator.py +863 -0
  252. uofa-0.7.0/src/uofa_cli/adversarial/hash_utils.py +37 -0
  253. uofa-0.7.0/src/uofa_cli/adversarial/model_costs.py +32 -0
  254. uofa-0.7.0/src/uofa_cli/adversarial/prep_review.py +405 -0
  255. uofa-0.7.0/src/uofa_cli/adversarial/prompts/__init__.py +214 -0
  256. uofa-0.7.0/src/uofa_cli/adversarial/prompts/aleatory.py +142 -0
  257. uofa-0.7.0/src/uofa_cli/adversarial/prompts/base.py +234 -0
  258. uofa-0.7.0/src/uofa_cli/adversarial/prompts/clarissa_machinery.py +156 -0
  259. uofa-0.7.0/src/uofa_cli/adversarial/prompts/compound.py +152 -0
  260. uofa-0.7.0/src/uofa_cli/adversarial/prompts/consistency.py +324 -0
  261. uofa-0.7.0/src/uofa_cli/adversarial/prompts/contextual.py +241 -0
  262. uofa-0.7.0/src/uofa_cli/adversarial/prompts/d1_undermining.py +81 -0
  263. uofa-0.7.0/src/uofa_cli/adversarial/prompts/d2_rebutting.py +80 -0
  264. uofa-0.7.0/src/uofa_cli/adversarial/prompts/d3_undercutting_inference.py +268 -0
  265. uofa-0.7.0/src/uofa_cli/adversarial/prompts/d3_undercutting_model.py +89 -0
  266. uofa-0.7.0/src/uofa_cli/adversarial/prompts/epistemic.py +275 -0
  267. uofa-0.7.0/src/uofa_cli/adversarial/prompts/evidence_validity.py +278 -0
  268. uofa-0.7.0/src/uofa_cli/adversarial/prompts/logical_fallacies.py +147 -0
  269. uofa-0.7.0/src/uofa_cli/adversarial/prompts/multi_target.py +186 -0
  270. uofa-0.7.0/src/uofa_cli/adversarial/prompts/negative_controls.py +343 -0
  271. uofa-0.7.0/src/uofa_cli/adversarial/prompts/ontological.py +145 -0
  272. uofa-0.7.0/src/uofa_cli/adversarial/prompts/paraphrase.py +98 -0
  273. uofa-0.7.0/src/uofa_cli/adversarial/prompts/provenance.py +84 -0
  274. uofa-0.7.0/src/uofa_cli/adversarial/prompts/requirements_engineering.py +198 -0
  275. uofa-0.7.0/src/uofa_cli/adversarial/prompts/structural.py +129 -0
  276. uofa-0.7.0/src/uofa_cli/adversarial/reporter.py +528 -0
  277. uofa-0.7.0/src/uofa_cli/adversarial/runner.py +568 -0
  278. uofa-0.7.0/src/uofa_cli/adversarial/skeleton.py +416 -0
  279. uofa-0.7.0/src/uofa_cli/adversarial/spec_loader.py +594 -0
  280. uofa-0.7.0/src/uofa_cli/adversarial/tool_schema.py +288 -0
  281. uofa-0.7.0/src/uofa_cli/cli.py +141 -0
  282. uofa-0.7.0/src/uofa_cli/commands/__init__.py +1 -0
  283. uofa-0.7.0/src/uofa_cli/commands/adversarial.py +208 -0
  284. uofa-0.7.0/src/uofa_cli/commands/catalog.py +135 -0
  285. uofa-0.7.0/src/uofa_cli/commands/check.py +311 -0
  286. uofa-0.7.0/src/uofa_cli/commands/demo.py +157 -0
  287. uofa-0.7.0/src/uofa_cli/commands/diff.py +470 -0
  288. uofa-0.7.0/src/uofa_cli/commands/explain.py +253 -0
  289. uofa-0.7.0/src/uofa_cli/commands/extract_cmd.py +273 -0
  290. uofa-0.7.0/src/uofa_cli/commands/import_excel.py +145 -0
  291. uofa-0.7.0/src/uofa_cli/commands/init.py +231 -0
  292. uofa-0.7.0/src/uofa_cli/commands/keygen.py +23 -0
  293. uofa-0.7.0/src/uofa_cli/commands/migrate.py +79 -0
  294. uofa-0.7.0/src/uofa_cli/commands/packs.py +105 -0
  295. uofa-0.7.0/src/uofa_cli/commands/rules.py +612 -0
  296. uofa-0.7.0/src/uofa_cli/commands/schema.py +695 -0
  297. uofa-0.7.0/src/uofa_cli/commands/setup.py +293 -0
  298. uofa-0.7.0/src/uofa_cli/commands/shacl.py +134 -0
  299. uofa-0.7.0/src/uofa_cli/commands/sign.py +66 -0
  300. uofa-0.7.0/src/uofa_cli/commands/validate.py +126 -0
  301. uofa-0.7.0/src/uofa_cli/commands/verify.py +118 -0
  302. uofa-0.7.0/src/uofa_cli/document_reader.py +206 -0
  303. uofa-0.7.0/src/uofa_cli/eval_scoring.py +104 -0
  304. uofa-0.7.0/src/uofa_cli/excel_constants.py +171 -0
  305. uofa-0.7.0/src/uofa_cli/excel_mapper.py +270 -0
  306. uofa-0.7.0/src/uofa_cli/excel_reader.py +536 -0
  307. uofa-0.7.0/src/uofa_cli/excel_writer.py +352 -0
  308. uofa-0.7.0/src/uofa_cli/explain.py +58 -0
  309. uofa-0.7.0/src/uofa_cli/integrity.py +167 -0
  310. uofa-0.7.0/src/uofa_cli/interpretation/__init__.py +122 -0
  311. uofa-0.7.0/src/uofa_cli/interpretation/cache.py +221 -0
  312. uofa-0.7.0/src/uofa_cli/interpretation/cli.py +164 -0
  313. uofa-0.7.0/src/uofa_cli/interpretation/context.py +497 -0
  314. uofa-0.7.0/src/uofa_cli/interpretation/degrade.py +245 -0
  315. uofa-0.7.0/src/uofa_cli/interpretation/dispatcher.py +126 -0
  316. uofa-0.7.0/src/uofa_cli/interpretation/envelope.py +150 -0
  317. uofa-0.7.0/src/uofa_cli/interpretation/formatters.py +431 -0
  318. uofa-0.7.0/src/uofa_cli/interpretation/functions/__init__.py +27 -0
  319. uofa-0.7.0/src/uofa_cli/interpretation/functions/contextualize.py +149 -0
  320. uofa-0.7.0/src/uofa_cli/interpretation/functions/cross.py +149 -0
  321. uofa-0.7.0/src/uofa_cli/interpretation/functions/explain.py +486 -0
  322. uofa-0.7.0/src/uofa_cli/interpretation/functions/group.py +254 -0
  323. uofa-0.7.0/src/uofa_cli/interpretation/functions/narrative.py +168 -0
  324. uofa-0.7.0/src/uofa_cli/interpretation/pipeline.py +294 -0
  325. uofa-0.7.0/src/uofa_cli/interpretation/templates/diff/explain.jinja2 +91 -0
  326. uofa-0.7.0/src/uofa_cli/interpretation/templates/rules/contextualize.jinja2 +80 -0
  327. uofa-0.7.0/src/uofa_cli/interpretation/templates/rules/cross.jinja2 +85 -0
  328. uofa-0.7.0/src/uofa_cli/interpretation/templates/rules/explain.jinja2 +164 -0
  329. uofa-0.7.0/src/uofa_cli/interpretation/templates/rules/group.jinja2 +88 -0
  330. uofa-0.7.0/src/uofa_cli/interpretation/templates/rules/narrative.jinja2 +70 -0
  331. uofa-0.7.0/src/uofa_cli/interpretation/templates/shacl/contextualize.jinja2 +64 -0
  332. uofa-0.7.0/src/uofa_cli/interpretation/templates/shacl/explain.jinja2 +77 -0
  333. uofa-0.7.0/src/uofa_cli/interpretation/templates/shacl/group.jinja2 +73 -0
  334. uofa-0.7.0/src/uofa_cli/interpretation/templates.py +112 -0
  335. uofa-0.7.0/src/uofa_cli/llm/__init__.py +103 -0
  336. uofa-0.7.0/src/uofa_cli/llm/backend.py +156 -0
  337. uofa-0.7.0/src/uofa_cli/llm/config.py +287 -0
  338. uofa-0.7.0/src/uofa_cli/llm/errors.py +97 -0
  339. uofa-0.7.0/src/uofa_cli/llm/litellm_backend.py +551 -0
  340. uofa-0.7.0/src/uofa_cli/llm/mock_backend.py +129 -0
  341. uofa-0.7.0/src/uofa_cli/llm_extractor.py +621 -0
  342. uofa-0.7.0/src/uofa_cli/output.py +193 -0
  343. uofa-0.7.0/src/uofa_cli/paths.py +371 -0
  344. uofa-0.7.0/src/uofa_cli/readers/__init__.py +3 -0
  345. uofa-0.7.0/src/uofa_cli/readers/csv_reader.py +78 -0
  346. uofa-0.7.0/src/uofa_cli/readers/docx_reader.py +62 -0
  347. uofa-0.7.0/src/uofa_cli/readers/pdf_reader.py +46 -0
  348. uofa-0.7.0/src/uofa_cli/readers/text_reader.py +41 -0
  349. uofa-0.7.0/src/uofa_cli/readers/xlsx_reader.py +104 -0
  350. uofa-0.7.0/src/uofa_cli/setup_bundle.py +359 -0
  351. uofa-0.7.0/src/uofa_cli/setup_install.py +398 -0
  352. uofa-0.7.0/src/uofa_cli/setup_state.py +231 -0
  353. uofa-0.7.0/src/uofa_cli/setup_uninstall.py +114 -0
  354. uofa-0.7.0/src/uofa_cli/setup_verify.py +195 -0
  355. uofa-0.7.0/src/uofa_cli/shacl_friendly.py +246 -0
  356. uofa-0.7.0/src/weakener-engine/README.md +212 -0
  357. uofa-0.7.0/src/weakener-engine/pom.xml +101 -0
  358. uofa-0.7.0/src/weakener-engine/src/main/java/com/crediblesimulation/WeakenerEngine.java +365 -0
  359. uofa-0.7.0/tests/adversarial/__init__.py +0 -0
  360. uofa-0.7.0/tests/adversarial/conftest.py +70 -0
  361. uofa-0.7.0/tests/adversarial/fixtures/mock_response.jsonld +70 -0
  362. uofa-0.7.0/tests/adversarial/fixtures/snapshot_d3_w_ar_05_high.txt +189 -0
  363. uofa-0.7.0/tests/adversarial/fixtures/snapshot_d3_w_ar_05_low.txt +189 -0
  364. uofa-0.7.0/tests/adversarial/fixtures/snapshot_d3_w_ar_05_medium.txt +189 -0
  365. uofa-0.7.0/tests/adversarial/fixtures/snapshots/README.md +45 -0
  366. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_01_high.txt +206 -0
  367. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_01_low.txt +206 -0
  368. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_01_medium.txt +206 -0
  369. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_02_high.txt +208 -0
  370. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_02_low.txt +208 -0
  371. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_aleatory_w_al_02_medium.txt +208 -0
  372. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_eliminative_argumentation_high.txt +206 -0
  373. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_eliminative_argumentation_low.txt +206 -0
  374. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_eliminative_argumentation_medium.txt +206 -0
  375. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_residual_risk_justification_high.txt +206 -0
  376. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_residual_risk_justification_low.txt +206 -0
  377. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_residual_risk_justification_medium.txt +206 -0
  378. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_theory_preconditions_high.txt +206 -0
  379. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_theory_preconditions_low.txt +206 -0
  380. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_clarissa_machinery_clarissa_machinery_workflow_theory_preconditions_medium.txt +206 -0
  381. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_01_high.txt +209 -0
  382. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_01_low.txt +209 -0
  383. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_01_medium.txt +209 -0
  384. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_03_high.txt +208 -0
  385. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_03_low.txt +208 -0
  386. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_compound_compound_03_medium.txt +208 -0
  387. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_01_high.txt +206 -0
  388. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_01_low.txt +206 -0
  389. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_01_medium.txt +206 -0
  390. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_02_high.txt +208 -0
  391. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_02_low.txt +208 -0
  392. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_02_medium.txt +208 -0
  393. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_03_high.txt +208 -0
  394. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_03_low.txt +208 -0
  395. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_03_medium.txt +208 -0
  396. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_04_high.txt +206 -0
  397. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_04_low.txt +206 -0
  398. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_04_medium.txt +206 -0
  399. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_05_high.txt +206 -0
  400. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_05_low.txt +206 -0
  401. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_consistency_w_con_05_medium.txt +206 -0
  402. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_configuration_high.txt +206 -0
  403. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_configuration_low.txt +206 -0
  404. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_configuration_medium.txt +206 -0
  405. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_environmental_factors_high.txt +206 -0
  406. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_environmental_factors_low.txt +206 -0
  407. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_environmental_factors_medium.txt +206 -0
  408. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_physical_high.txt +206 -0
  409. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_physical_low.txt +206 -0
  410. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_physical_medium.txt +206 -0
  411. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_software_high.txt +206 -0
  412. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_software_low.txt +206 -0
  413. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_faults_software_medium.txt +206 -0
  414. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_human_errors_high.txt +206 -0
  415. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_human_errors_low.txt +206 -0
  416. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_contextual_gohar_contextual_human_errors_medium.txt +206 -0
  417. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d1_undermining_w_ar_01_high.txt +206 -0
  418. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d1_undermining_w_ar_01_low.txt +206 -0
  419. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d1_undermining_w_ar_01_medium.txt +206 -0
  420. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d2_rebutting_w_ar_02_high.txt +206 -0
  421. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d2_rebutting_w_ar_02_low.txt +206 -0
  422. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d2_rebutting_w_ar_02_medium.txt +206 -0
  423. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_inference_w_ar_03_high.txt +210 -0
  424. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_inference_w_ar_03_low.txt +210 -0
  425. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_inference_w_ar_03_medium.txt +210 -0
  426. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_model_w_ar_04_high.txt +209 -0
  427. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_model_w_ar_04_low.txt +209 -0
  428. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_d3_undercutting_model_w_ar_04_medium.txt +209 -0
  429. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_01_high.txt +206 -0
  430. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_01_low.txt +206 -0
  431. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_01_medium.txt +206 -0
  432. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_02_high.txt +206 -0
  433. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_02_low.txt +206 -0
  434. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_02_medium.txt +206 -0
  435. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_03_high.txt +208 -0
  436. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_03_low.txt +208 -0
  437. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_03_medium.txt +208 -0
  438. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_04_high.txt +209 -0
  439. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_04_low.txt +209 -0
  440. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_epistemic_w_ep_04_medium.txt +209 -0
  441. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_coverage_edge_cases_high.txt +206 -0
  442. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_coverage_edge_cases_low.txt +206 -0
  443. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_coverage_edge_cases_medium.txt +206 -0
  444. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_data_drift_high.txt +206 -0
  445. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_data_drift_low.txt +206 -0
  446. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_data_drift_medium.txt +206 -0
  447. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_fidelity_high.txt +206 -0
  448. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_fidelity_low.txt +206 -0
  449. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_fidelity_medium.txt +206 -0
  450. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_inadequate_metrics_high.txt +206 -0
  451. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_inadequate_metrics_low.txt +206 -0
  452. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_inadequate_metrics_medium.txt +206 -0
  453. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_model_variance_high.txt +206 -0
  454. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_model_variance_low.txt +206 -0
  455. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_model_variance_medium.txt +206 -0
  456. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_robustness_high.txt +206 -0
  457. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_robustness_low.txt +206 -0
  458. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_evidence_validity_gohar_evidence_validity_robustness_medium.txt +206 -0
  459. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_arguing_from_ignorance_high.txt +206 -0
  460. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_arguing_from_ignorance_low.txt +206 -0
  461. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_arguing_from_ignorance_medium.txt +206 -0
  462. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_confusion_necessary_sufficient_high.txt +206 -0
  463. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_confusion_necessary_sufficient_low.txt +206 -0
  464. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_confusion_necessary_sufficient_medium.txt +206 -0
  465. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_hasty_inductive_generalization_high.txt +206 -0
  466. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_hasty_inductive_generalization_low.txt +206 -0
  467. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_logical_fallacies_greenwell_sufficiency_hasty_inductive_generalization_medium.txt +206 -0
  468. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_301_int_1_critical_plus_high_high.txt +208 -0
  469. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_301_int_1_critical_plus_high_low.txt +208 -0
  470. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_301_int_1_critical_plus_high_medium.txt +208 -0
  471. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_302_int_2_two_criticals_high.txt +207 -0
  472. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_302_int_2_two_criticals_low.txt +207 -0
  473. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_302_int_2_two_criticals_medium.txt +207 -0
  474. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_303_int_3_high_assurance_with_gaps_high.txt +207 -0
  475. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_303_int_3_high_assurance_with_gaps_low.txt +207 -0
  476. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_303_int_3_high_assurance_with_gaps_medium.txt +207 -0
  477. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_304_int_4_three_way_high.txt +208 -0
  478. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_304_int_4_three_way_low.txt +208 -0
  479. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_304_int_4_three_way_medium.txt +208 -0
  480. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_305_int_5_critical_plus_medium_high.txt +208 -0
  481. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_305_int_5_critical_plus_medium_low.txt +208 -0
  482. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_305_int_5_critical_plus_medium_medium.txt +208 -0
  483. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_306_int_6_accepted_with_critical_high.txt +208 -0
  484. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_306_int_6_accepted_with_critical_low.txt +208 -0
  485. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_multi_target_adv_2026_p2_306_int_6_accepted_with_critical_medium.txt +208 -0
  486. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_201_nc_clean_full_morrison_cou1_high.txt +253 -0
  487. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_201_nc_clean_full_morrison_cou1_low.txt +253 -0
  488. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_201_nc_clean_full_morrison_cou1_medium.txt +253 -0
  489. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_202_nc_clean_minimal_morrison_cou1_high.txt +253 -0
  490. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_202_nc_clean_minimal_morrison_cou1_low.txt +253 -0
  491. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_202_nc_clean_minimal_morrison_cou1_medium.txt +253 -0
  492. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_203_nc_clean_full_morrison_cou2_high.txt +253 -0
  493. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_203_nc_clean_full_morrison_cou2_low.txt +253 -0
  494. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_203_nc_clean_full_morrison_cou2_medium.txt +253 -0
  495. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_204_nc_clean_full_nagaraja_high.txt +253 -0
  496. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_204_nc_clean_full_nagaraja_low.txt +253 -0
  497. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_204_nc_clean_full_nagaraja_medium.txt +253 -0
  498. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_205_nc_clean_scoped_out_factors_high.txt +253 -0
  499. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_205_nc_clean_scoped_out_factors_low.txt +253 -0
  500. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_205_nc_clean_scoped_out_factors_medium.txt +253 -0
  501. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_206_nc_clean_not_applicable_factors_high.txt +253 -0
  502. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_206_nc_clean_not_applicable_factors_low.txt +253 -0
  503. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_206_nc_clean_not_applicable_factors_medium.txt +253 -0
  504. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_207_nc_clean_rejected_decision_high.txt +256 -0
  505. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_207_nc_clean_rejected_decision_low.txt +256 -0
  506. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_207_nc_clean_rejected_decision_medium.txt +256 -0
  507. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_208_nc_clean_partial_envelope_high.txt +253 -0
  508. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_208_nc_clean_partial_envelope_low.txt +253 -0
  509. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_208_nc_clean_partial_envelope_medium.txt +253 -0
  510. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_209_nc_clean_low_confidence_but_documented_high.txt +253 -0
  511. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_209_nc_clean_low_confidence_but_documented_low.txt +253 -0
  512. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_209_nc_clean_low_confidence_but_documented_medium.txt +253 -0
  513. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_210_nc_clean_compound_free_high.txt +253 -0
  514. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_210_nc_clean_compound_free_low.txt +253 -0
  515. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_negative_controls_adv_2026_p2_210_nc_clean_compound_free_medium.txt +253 -0
  516. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_01_high.txt +197 -0
  517. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_01_low.txt +197 -0
  518. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_01_medium.txt +197 -0
  519. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_02_high.txt +206 -0
  520. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_02_low.txt +206 -0
  521. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_ontological_w_on_02_medium.txt +206 -0
  522. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_provenance_w_prov_01_high.txt +210 -0
  523. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_provenance_w_prov_01_low.txt +210 -0
  524. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_provenance_w_prov_01_medium.txt +210 -0
  525. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_ambiguous_high.txt +206 -0
  526. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_ambiguous_low.txt +206 -0
  527. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_ambiguous_medium.txt +206 -0
  528. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_inconsistent_high.txt +206 -0
  529. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_inconsistent_low.txt +206 -0
  530. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_inconsistent_medium.txt +206 -0
  531. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_incorrect_high.txt +206 -0
  532. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_incorrect_low.txt +206 -0
  533. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_incorrect_medium.txt +206 -0
  534. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_missing_high.txt +206 -0
  535. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_missing_low.txt +206 -0
  536. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_missing_medium.txt +206 -0
  537. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_stale_high.txt +206 -0
  538. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_stale_low.txt +206 -0
  539. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_requirements_engineering_gohar_requirements_stale_medium.txt +206 -0
  540. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_01_high.txt +206 -0
  541. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_01_low.txt +206 -0
  542. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_01_medium.txt +206 -0
  543. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_02_high.txt +206 -0
  544. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_02_low.txt +206 -0
  545. uofa-0.7.0/tests/adversarial/fixtures/snapshots/snapshot_structural_w_si_02_medium.txt +206 -0
  546. uofa-0.7.0/tests/adversarial/fixtures/spec_confirm_existing_explicit_taxonomy.yaml +28 -0
  547. uofa-0.7.0/tests/adversarial/fixtures/spec_gap_probe_missing_taxonomy.yaml +27 -0
  548. uofa-0.7.0/tests/adversarial/fixtures/spec_gap_probe_unresolved_taxonomy.yaml +28 -0
  549. uofa-0.7.0/tests/adversarial/fixtures/spec_gap_probe_valid.yaml +28 -0
  550. uofa-0.7.0/tests/adversarial/fixtures/spec_negative_control_bad_taxonomy.yaml +28 -0
  551. uofa-0.7.0/tests/adversarial/fixtures/spec_negative_control_valid.yaml +28 -0
  552. uofa-0.7.0/tests/adversarial/fixtures/spec_w_ar_05_bad_factor.yaml +17 -0
  553. uofa-0.7.0/tests/adversarial/fixtures/spec_w_ar_05_bad_mode.yaml +17 -0
  554. uofa-0.7.0/tests/adversarial/fixtures/spec_w_ar_05_bad_weakener.yaml +17 -0
  555. uofa-0.7.0/tests/adversarial/fixtures/spec_w_ar_05_valid.yaml +32 -0
  556. uofa-0.7.0/tests/adversarial/test_acceptance.sh +109 -0
  557. uofa-0.7.0/tests/adversarial/test_circularity.py +71 -0
  558. uofa-0.7.0/tests/adversarial/test_classifier.py +937 -0
  559. uofa-0.7.0/tests/adversarial/test_generator.py +197 -0
  560. uofa-0.7.0/tests/adversarial/test_hash_utils.py +85 -0
  561. uofa-0.7.0/tests/adversarial/test_integration.py +158 -0
  562. uofa-0.7.0/tests/adversarial/test_paraphrase.py +196 -0
  563. uofa-0.7.0/tests/adversarial/test_phase2_smoke.py +300 -0
  564. uofa-0.7.0/tests/adversarial/test_prep_review.py +307 -0
  565. uofa-0.7.0/tests/adversarial/test_prompt_base.py +55 -0
  566. uofa-0.7.0/tests/adversarial/test_prompt_templates.py +174 -0
  567. uofa-0.7.0/tests/adversarial/test_reporter.py +305 -0
  568. uofa-0.7.0/tests/adversarial/test_runner.py +484 -0
  569. uofa-0.7.0/tests/adversarial/test_sign_verify_refusal.py +121 -0
  570. uofa-0.7.0/tests/adversarial/test_skeleton.py +72 -0
  571. uofa-0.7.0/tests/adversarial/test_spec_loader.py +167 -0
  572. uofa-0.7.0/tests/conftest.py +37 -0
  573. uofa-0.7.0/tests/corpus/.gitignore +4 -0
  574. uofa-0.7.0/tests/corpus/README.md +32 -0
  575. uofa-0.7.0/tests/corpus/build.py +74 -0
  576. uofa-0.7.0/tests/corpus/edge_case_builders.py +216 -0
  577. uofa-0.7.0/tests/corpus/import_test_builders.py +146 -0
  578. uofa-0.7.0/tests/fixtures/__init__.py +0 -0
  579. uofa-0.7.0/tests/fixtures/extract/__init__.py +0 -0
  580. uofa-0.7.0/tests/fixtures/extract/_build_aero_fixtures.py +272 -0
  581. uofa-0.7.0/tests/fixtures/extract/aero-cou1-imported.jsonld +259 -0
  582. uofa-0.7.0/tests/fixtures/extract/aero-cou2-imported.jsonld +251 -0
  583. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/EVIDENCE_MANIFEST.txt +112 -0
  584. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/cascade_rig_temperature_data.csv +49 -0
  585. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/cfx_solver_settings.txt +66 -0
  586. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/cou_definition.docx +0 -0
  587. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/credibility_assessment_narrative.docx +0 -0
  588. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/decision_rationale.pdf +0 -0
  589. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/mesh_convergence_study.csv +7 -0
  590. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/review_board_minutes_2026Q1.txt +118 -0
  591. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/risk_assessment_memo.pdf +0 -0
  592. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou1/sensitivity_study_turbulence_intensity.csv +12 -0
  593. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/EVIDENCE_MANIFEST.txt +114 -0
  594. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/cascade_reuse_traceability.txt +58 -0
  595. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/cfx_solver_settings.txt +69 -0
  596. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/cou_definition.docx +0 -0
  597. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/credibility_assessment_narrative.docx +0 -0
  598. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/cruise_uq_study.csv +16 -0
  599. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/decision_rationale.pdf +93 -0
  600. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/review_board_minutes_cruise_2026Q2.txt +155 -0
  601. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/risk_assessment_memo.pdf +93 -0
  602. uofa-0.7.0/tests/fixtures/extract/aero-evidence-cou2/sensitivity_study_cruise.csv +10 -0
  603. uofa-0.7.0/tests/fixtures/extract/ground_truth/aero-cou1-nasa7009b.json +83 -0
  604. uofa-0.7.0/tests/fixtures/extract/ground_truth/aero-cou2-nasa7009b.json +80 -0
  605. uofa-0.7.0/tests/fixtures/extract/ground_truth/morrison-cou1.json +136 -0
  606. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/EVIDENCE_MANIFEST.txt +39 -0
  607. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/ansys_cfx_solver_settings.txt +48 -0
  608. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/boundary_conditions_specification.txt +43 -0
  609. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/cou_definitions.docx +0 -0
  610. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/credibility_assessment_narrative.docx +0 -0
  611. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/decision_rationale_cou1.pdf +80 -0
  612. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/decision_rationale_cou2.pdf +74 -0
  613. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/hemolysis_mih_comparison.csv +8 -0
  614. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/mesh_convergence_study.csv +5 -0
  615. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/monte_carlo_uq_cou2.csv +201 -0
  616. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/piv_velocity_validation.csv +18 -0
  617. uofa-0.7.0/tests/fixtures/extract/morrison-evidence/risk_assessment_memo.pdf +93 -0
  618. uofa-0.7.0/tests/fixtures/import/__init__.py +0 -0
  619. uofa-0.7.0/tests/fixtures/import/generator.py +755 -0
  620. uofa-0.7.0/tests/fixtures/regression/README.md +46 -0
  621. uofa-0.7.0/tests/fixtures/weakeners/W-AL-02/boundary.jsonld +35 -0
  622. uofa-0.7.0/tests/fixtures/weakeners/W-AL-02/negative.jsonld +36 -0
  623. uofa-0.7.0/tests/fixtures/weakeners/W-AL-02/positive.jsonld +35 -0
  624. uofa-0.7.0/tests/fixtures/weakeners/W-AR-03/boundary.jsonld +40 -0
  625. uofa-0.7.0/tests/fixtures/weakeners/W-AR-03/negative.jsonld +44 -0
  626. uofa-0.7.0/tests/fixtures/weakeners/W-AR-03/positive.jsonld +44 -0
  627. uofa-0.7.0/tests/fixtures/weakeners/W-AR-04/negative.jsonld +45 -0
  628. uofa-0.7.0/tests/fixtures/weakeners/W-AR-04/positive.jsonld +45 -0
  629. uofa-0.7.0/tests/fixtures/weakeners/W-CON-01/boundary.jsonld +35 -0
  630. uofa-0.7.0/tests/fixtures/weakeners/W-CON-01/negative.jsonld +36 -0
  631. uofa-0.7.0/tests/fixtures/weakeners/W-CON-01/positive.jsonld +34 -0
  632. uofa-0.7.0/tests/fixtures/weakeners/W-CON-02/negative.jsonld +38 -0
  633. uofa-0.7.0/tests/fixtures/weakeners/W-CON-02/positive.jsonld +33 -0
  634. uofa-0.7.0/tests/fixtures/weakeners/W-CON-03/boundary.jsonld +38 -0
  635. uofa-0.7.0/tests/fixtures/weakeners/W-CON-03/negative.jsonld +38 -0
  636. uofa-0.7.0/tests/fixtures/weakeners/W-CON-03/positive.jsonld +38 -0
  637. uofa-0.7.0/tests/fixtures/weakeners/W-CON-04/negative.jsonld +32 -0
  638. uofa-0.7.0/tests/fixtures/weakeners/W-CON-04/positive.jsonld +31 -0
  639. uofa-0.7.0/tests/fixtures/weakeners/W-CON-05/negative.jsonld +38 -0
  640. uofa-0.7.0/tests/fixtures/weakeners/W-CON-05/positive.jsonld +37 -0
  641. uofa-0.7.0/tests/fixtures/weakeners/W-EP-03/boundary.jsonld +45 -0
  642. uofa-0.7.0/tests/fixtures/weakeners/W-EP-03/negative.jsonld +45 -0
  643. uofa-0.7.0/tests/fixtures/weakeners/W-EP-03/positive.jsonld +45 -0
  644. uofa-0.7.0/tests/fixtures/weakeners/W-ON-02/negative.jsonld +36 -0
  645. uofa-0.7.0/tests/fixtures/weakeners/W-ON-02/positive.jsonld +36 -0
  646. uofa-0.7.0/tests/fixtures/weakeners/W-PROV-01/negative.jsonld +40 -0
  647. uofa-0.7.0/tests/fixtures/weakeners/W-PROV-01/positive.jsonld +39 -0
  648. uofa-0.7.0/tests/fixtures/weakeners/_build_fixtures.py +447 -0
  649. uofa-0.7.0/tests/scripts/__init__.py +0 -0
  650. uofa-0.7.0/tests/scripts/test_m7_tools.py +253 -0
  651. uofa-0.7.0/tests/test_bundled_paths.py +56 -0
  652. uofa-0.7.0/tests/test_catalog.py +120 -0
  653. uofa-0.7.0/tests/test_command_structured.py +241 -0
  654. uofa-0.7.0/tests/test_corpus_edge_cases.py +133 -0
  655. uofa-0.7.0/tests/test_corpus_import.py +108 -0
  656. uofa-0.7.0/tests/test_demo.py +66 -0
  657. uofa-0.7.0/tests/test_document_reader.py +233 -0
  658. uofa-0.7.0/tests/test_excel_writer.py +253 -0
  659. uofa-0.7.0/tests/test_explain.py +79 -0
  660. uofa-0.7.0/tests/test_explain_flag_integration.py +211 -0
  661. uofa-0.7.0/tests/test_explain_standalone.py +229 -0
  662. uofa-0.7.0/tests/test_extract_eval.py +149 -0
  663. uofa-0.7.0/tests/test_extract_integration.py +331 -0
  664. uofa-0.7.0/tests/test_extract_migration.py +244 -0
  665. uofa-0.7.0/tests/test_import_corpus.py +457 -0
  666. uofa-0.7.0/tests/test_integration.py +1334 -0
  667. uofa-0.7.0/tests/test_interpretation_cache.py +284 -0
  668. uofa-0.7.0/tests/test_interpretation_context_enrichment.py +374 -0
  669. uofa-0.7.0/tests/test_interpretation_degrade.py +302 -0
  670. uofa-0.7.0/tests/test_interpretation_diff_explain.py +181 -0
  671. uofa-0.7.0/tests/test_interpretation_explain.py +424 -0
  672. uofa-0.7.0/tests/test_interpretation_formatters.py +255 -0
  673. uofa-0.7.0/tests/test_interpretation_group.py +233 -0
  674. uofa-0.7.0/tests/test_interpretation_scaffolding.py +481 -0
  675. uofa-0.7.0/tests/test_interpretation_shacl_explain.py +139 -0
  676. uofa-0.7.0/tests/test_java_executable.py +81 -0
  677. uofa-0.7.0/tests/test_litellm_backend.py +510 -0
  678. uofa-0.7.0/tests/test_llm_backend.py +186 -0
  679. uofa-0.7.0/tests/test_llm_config.py +370 -0
  680. uofa-0.7.0/tests/test_llm_extractor.py +284 -0
  681. uofa-0.7.0/tests/test_output_spinner.py +84 -0
  682. uofa-0.7.0/tests/test_parse_firings_jsonld.py +237 -0
  683. uofa-0.7.0/tests/test_setup_bundle.py +140 -0
  684. uofa-0.7.0/tests/test_setup_install.py +203 -0
  685. uofa-0.7.0/tests/test_setup_state.py +154 -0
  686. uofa-0.7.0/tests/test_setup_uninstall.py +86 -0
  687. uofa-0.7.0/tests/test_setup_verify.py +98 -0
  688. uofa-0.7.0/tests/test_weakener_rules.py +93 -0
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "UofA Development Environment",
3
+ "image": "mcr.microsoft.com/devcontainers/python:3.11",
4
+
5
+ "features": {
6
+ "ghcr.io/devcontainers/features/java:1": {
7
+ "version": "17",
8
+ "installMaven": "true"
9
+ }
10
+ },
11
+
12
+ "postCreateCommand": "pip install -e '.[test,excel,extract]' && cd src/weakener-engine && mvn package -q",
13
+
14
+ "customizations": {
15
+ "vscode": {
16
+ "extensions": [
17
+ "redhat.vscode-yaml"
18
+ ],
19
+ "settings": {
20
+ "json.schemas": [
21
+ {
22
+ "fileMatch": ["*.jsonld"],
23
+ "url": "./spec/schemas/uofa.schema.json"
24
+ }
25
+ ]
26
+ }
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,38 @@
1
+ # Force LF line endings across platforms for ALL text-format files. The
2
+ # Windows default `core.autocrlf=true` would convert LF to CRLF on
3
+ # checkout, which breaks the hash + signature integrity verification:
4
+ # the canonicalized JSON-LD form depends on the exact bytes of the
5
+ # referenced @context file (and the package itself), and CRLF vs LF
6
+ # in those source files produces different canonical hashes.
7
+ #
8
+ # This file pins line endings to LF on disk regardless of platform —
9
+ # the same content + bytes = the same hash on Linux, macOS, and Windows.
10
+
11
+ * text=auto eol=lf
12
+ *.jsonld text eol=lf
13
+ *.json text eol=lf
14
+ *.rules text eol=lf
15
+ *.ttl text eol=lf
16
+ *.yaml text eol=lf
17
+ *.yml text eol=lf
18
+ *.py text eol=lf
19
+ *.md text eol=lf
20
+ *.toml text eol=lf
21
+ *.cfg text eol=lf
22
+ *.ini text eol=lf
23
+ *.key text eol=lf
24
+ *.pub text eol=lf
25
+ *.txt text eol=lf
26
+
27
+ # Binary formats — never normalize.
28
+ *.png binary
29
+ *.jpg binary
30
+ *.jpeg binary
31
+ *.gif binary
32
+ *.pdf binary
33
+ *.zip binary
34
+ *.tar.gz binary
35
+ *.jar binary
36
+ *.xlsx binary
37
+ *.xlsm binary
38
+ *.docx binary
@@ -0,0 +1,396 @@
1
+ name: Release Wheels
2
+
3
+ # PR 3 scope: full 6-wheel matrix.
4
+ # * py3-none-any — bundles JAR; system Java still required
5
+ # * py3-none-manylinux_2_28_x86_64
6
+ # * py3-none-manylinux_2_28_aarch64
7
+ # * py3-none-macosx_11_0_x86_64
8
+ # * py3-none-macosx_11_0_arm64
9
+ # * py3-none-win_amd64
10
+ #
11
+ # Each platform-tagged wheel bundles the JAR AND a per-platform OpenJDK 17
12
+ # JRE; no system Java needed at runtime. Smoke tests run on native runners
13
+ # of each OS to confirm the bundled JRE is the one being executed.
14
+
15
+ on:
16
+ push:
17
+ tags: ['v*']
18
+ pull_request:
19
+ paths:
20
+ - 'pyproject.toml'
21
+ - 'build-config/hatch_build.py'
22
+ - 'build-config/jre_manifest.toml'
23
+ - 'src/uofa_cli/paths.py'
24
+ - 'src/uofa_cli/commands/rules.py'
25
+ - 'src/weakener-engine/**'
26
+ - 'dev/tools/scripts/refresh_jre_manifest.py'
27
+ - '.github/workflows/release-wheels.yml'
28
+ workflow_dispatch:
29
+
30
+ jobs:
31
+ build-jar:
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v4
35
+
36
+ - uses: actions/setup-java@v4
37
+ with:
38
+ distribution: temurin
39
+ java-version: '17'
40
+
41
+ - name: Build fat JAR
42
+ run: cd src/weakener-engine && mvn package -q
43
+
44
+ - name: Upload JAR artifact
45
+ uses: actions/upload-artifact@v4
46
+ with:
47
+ name: weakener-engine-jar
48
+ path: src/weakener-engine/target/uofa-weakener-engine-*.jar
49
+ if-no-files-found: error
50
+ retention-days: 1
51
+
52
+ # Source distribution. Doesn't bundle the JAR (per pyproject.toml's
53
+ # [tool.hatch.build.targets.sdist] exclude); sdist consumers rebuild the JAR
54
+ # via Maven on install. Runs in parallel with build-jar/build-wheel.
55
+ build-sdist:
56
+ runs-on: ubuntu-latest
57
+ steps:
58
+ - uses: actions/checkout@v4
59
+ - uses: actions/setup-python@v5
60
+ with:
61
+ python-version: '3.11'
62
+ - name: Install build tooling
63
+ run: python -m pip install --upgrade pip build
64
+ - name: Build sdist
65
+ run: python -m build --sdist
66
+ - name: Upload sdist artifact
67
+ uses: actions/upload-artifact@v4
68
+ with:
69
+ name: uofa-sdist
70
+ path: dist/*.tar.gz
71
+ if-no-files-found: error
72
+
73
+ build-wheel:
74
+ needs: build-jar
75
+ runs-on: ubuntu-latest
76
+ strategy:
77
+ fail-fast: false
78
+ matrix:
79
+ include:
80
+ - variant: pure
81
+ artifact: uofa-cli-wheel-pure
82
+ env_jar: '1'
83
+ env_platform: ''
84
+ - variant: linux-x86_64
85
+ artifact: uofa-cli-wheel-manylinux-x86_64
86
+ env_jar: ''
87
+ env_platform: 'manylinux_2_28_x86_64'
88
+ - variant: linux-aarch64
89
+ artifact: uofa-cli-wheel-manylinux-aarch64
90
+ env_jar: ''
91
+ env_platform: 'manylinux_2_28_aarch64'
92
+ # macos-x86_64 (Intel) dropped in v0.7.0: GHA queue waits for the
93
+ # macos-13 runner routinely block PyPI publish. Intel Mac users
94
+ # install the py3-none-any wheel + system Java 17 instead.
95
+ - variant: macos-arm64
96
+ artifact: uofa-cli-wheel-macos-arm64
97
+ env_jar: ''
98
+ env_platform: 'macosx_11_0_arm64'
99
+ - variant: win-amd64
100
+ artifact: uofa-cli-wheel-win-amd64
101
+ env_jar: ''
102
+ env_platform: 'win_amd64'
103
+ steps:
104
+ - uses: actions/checkout@v4
105
+
106
+ - uses: actions/setup-python@v5
107
+ with:
108
+ python-version: '3.11'
109
+
110
+ - name: Install build tooling
111
+ run: python -m pip install --upgrade pip build
112
+
113
+ - name: Download JAR artifact into Maven target/
114
+ uses: actions/download-artifact@v4
115
+ with:
116
+ name: weakener-engine-jar
117
+ path: src/weakener-engine/target/
118
+
119
+ - name: Build wheel (${{ matrix.variant }})
120
+ env:
121
+ UOFA_BUNDLE_JAR: ${{ matrix.env_jar }}
122
+ UOFA_BUNDLE_PLATFORM: ${{ matrix.env_platform }}
123
+ run: python -m build --wheel
124
+
125
+ - name: Assert wheel size under 200 MB
126
+ run: |
127
+ for w in dist/*.whl; do
128
+ size=$(stat -c%s "$w")
129
+ mb=$((size / 1024 / 1024))
130
+ echo "$w: ${mb} MB"
131
+ if [ "$size" -gt $((200 * 1024 * 1024)) ]; then
132
+ echo "FAIL: wheel exceeds 200 MB ceiling"
133
+ exit 1
134
+ fi
135
+ done
136
+
137
+ - name: Upload wheel artifact
138
+ uses: actions/upload-artifact@v4
139
+ with:
140
+ name: ${{ matrix.artifact }}
141
+ path: dist/*.whl
142
+ if-no-files-found: error
143
+
144
+ smoke-pure-wheel:
145
+ # py3-none-any wheel: bundled JAR, requires system Java at runtime.
146
+ needs: build-wheel
147
+ runs-on: ubuntu-latest
148
+ steps:
149
+ - uses: actions/checkout@v4
150
+
151
+ - uses: actions/setup-python@v5
152
+ with:
153
+ python-version: '3.11'
154
+
155
+ - uses: actions/setup-java@v4
156
+ with:
157
+ distribution: temurin
158
+ java-version: '17'
159
+
160
+ - name: Download pure wheel
161
+ uses: actions/download-artifact@v4
162
+ with:
163
+ name: uofa-cli-wheel-pure
164
+ path: dist/
165
+
166
+ - name: Install pure wheel into a fresh venv
167
+ run: |
168
+ python -m venv /tmp/uofa-pure-venv
169
+ /tmp/uofa-pure-venv/bin/pip install --upgrade pip
170
+ /tmp/uofa-pure-venv/bin/pip install dist/*.whl
171
+
172
+ - name: Confirm bundled JAR present, no bundled JRE
173
+ run: |
174
+ /tmp/uofa-pure-venv/bin/python <<'PY'
175
+ from uofa_cli import paths
176
+ assert paths.bundled_jar() is not None, "bundled JAR missing"
177
+ assert paths.bundled_jre_executable() is None, "py3-none-any wheel should not include a JRE"
178
+ print(f"OK: JAR={paths.bundled_jar()}")
179
+ PY
180
+
181
+ - name: Run uofa check against Morrison example
182
+ run: |
183
+ /tmp/uofa-pure-venv/bin/uofa check packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld
184
+
185
+ smoke-linux-x86_64:
186
+ needs: build-wheel
187
+ runs-on: ubuntu-latest
188
+ steps:
189
+ - uses: actions/checkout@v4
190
+ - uses: actions/download-artifact@v4
191
+ with:
192
+ name: uofa-cli-wheel-manylinux-x86_64
193
+ path: dist/
194
+ - name: Smoke test in python:3.11-slim Docker (no Java preinstalled)
195
+ run: |
196
+ cat > /tmp/check_bundled_jre.py <<'PY'
197
+ from uofa_cli import paths
198
+ jre = paths.bundled_jre_executable()
199
+ assert jre is not None and jre.exists(), "bundled JRE missing"
200
+ assert "site-packages" in str(jre), "bundled JRE not from wheel install"
201
+ print(f"OK: java_executable={paths.java_executable()}")
202
+ PY
203
+ docker run --rm \
204
+ -v "$PWD:/work" \
205
+ -v /tmp/check_bundled_jre.py:/check_bundled_jre.py:ro \
206
+ -w /work \
207
+ python:3.11-slim bash -c '
208
+ set -euo pipefail
209
+ if command -v java; then echo "FAIL: java unexpectedly on PATH"; exit 1; fi
210
+ pip install --quiet dist/*manylinux_2_28_x86_64*.whl
211
+ python /check_bundled_jre.py
212
+ uofa check packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld
213
+ '
214
+
215
+ smoke-linux-aarch64:
216
+ needs: build-wheel
217
+ runs-on: ubuntu-24.04-arm
218
+ steps:
219
+ - uses: actions/checkout@v4
220
+ - uses: actions/download-artifact@v4
221
+ with:
222
+ name: uofa-cli-wheel-manylinux-aarch64
223
+ path: dist/
224
+ - name: Smoke test in python:3.11-slim Docker (no Java preinstalled)
225
+ run: |
226
+ cat > /tmp/check_bundled_jre.py <<'PY'
227
+ from uofa_cli import paths
228
+ jre = paths.bundled_jre_executable()
229
+ assert jre is not None and jre.exists(), "bundled JRE missing"
230
+ assert "site-packages" in str(jre), "bundled JRE not from wheel install"
231
+ print(f"OK: java_executable={paths.java_executable()}")
232
+ PY
233
+ docker run --rm \
234
+ -v "$PWD:/work" \
235
+ -v /tmp/check_bundled_jre.py:/check_bundled_jre.py:ro \
236
+ -w /work \
237
+ python:3.11-slim bash -c '
238
+ set -euo pipefail
239
+ if command -v java; then echo "FAIL: java unexpectedly on PATH"; exit 1; fi
240
+ pip install --quiet dist/*manylinux_2_28_aarch64*.whl
241
+ python /check_bundled_jre.py
242
+ uofa check packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld
243
+ '
244
+
245
+ smoke-macos:
246
+ needs: build-wheel
247
+ strategy:
248
+ fail-fast: false
249
+ matrix:
250
+ include:
251
+ # macos-13 (Intel) dropped in v0.7.0 — see the matching note in
252
+ # build-wheel above.
253
+ - runner: macos-14
254
+ artifact: uofa-cli-wheel-macos-arm64
255
+ wheel_glob: '*macosx_11_0_arm64*.whl'
256
+ runs-on: ${{ matrix.runner }}
257
+ steps:
258
+ - uses: actions/checkout@v4
259
+
260
+ - uses: actions/setup-python@v5
261
+ with:
262
+ python-version: '3.11'
263
+
264
+ - uses: actions/download-artifact@v4
265
+ with:
266
+ name: ${{ matrix.artifact }}
267
+ path: dist/
268
+
269
+ - name: Hide system Java (Gatekeeper-safe pruning of PATH)
270
+ run: |
271
+ # macOS GHA runners have Java preinstalled; mask it so we prove the
272
+ # bundled JRE is the one being used.
273
+ echo "JAVA_HOME=" >> "$GITHUB_ENV"
274
+ # Strip every PATH segment that resolves a 'java' binary.
275
+ new_path=""
276
+ IFS=':'
277
+ for p in $PATH; do
278
+ if [ -x "$p/java" ]; then continue; fi
279
+ new_path="${new_path:+$new_path:}$p"
280
+ done
281
+ echo "PATH=$new_path" >> "$GITHUB_ENV"
282
+
283
+ - name: Confirm no system Java
284
+ run: |
285
+ if command -v java; then echo "FAIL: java still on PATH after pruning"; exit 1; fi
286
+ echo "OK: no system Java on PATH"
287
+
288
+ - name: Install wheel and run uofa check
289
+ run: |
290
+ python -m venv /tmp/uofa-venv
291
+ /tmp/uofa-venv/bin/pip install --upgrade pip
292
+ /tmp/uofa-venv/bin/pip install dist/${{ matrix.wheel_glob }}
293
+ /tmp/uofa-venv/bin/python <<'PY'
294
+ from uofa_cli import paths
295
+ jre = paths.bundled_jre_executable()
296
+ assert jre is not None and jre.exists(), "bundled JRE missing"
297
+ assert "site-packages" in str(jre), f"unexpected JRE source: {jre}"
298
+ print(f"OK: java_executable={paths.java_executable()}")
299
+ PY
300
+ /tmp/uofa-venv/bin/uofa check packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld
301
+
302
+ smoke-windows:
303
+ needs: build-wheel
304
+ runs-on: windows-latest
305
+ steps:
306
+ - uses: actions/checkout@v4
307
+
308
+ - uses: actions/setup-python@v5
309
+ with:
310
+ python-version: '3.11'
311
+
312
+ - uses: actions/download-artifact@v4
313
+ with:
314
+ name: uofa-cli-wheel-win-amd64
315
+ path: dist/
316
+
317
+ - name: Hide system Java (PATH prune)
318
+ shell: pwsh
319
+ run: |
320
+ $env:JAVA_HOME = ""
321
+ $newPath = ($env:PATH -split ';' | Where-Object {
322
+ -not (Test-Path (Join-Path $_ 'java.exe'))
323
+ }) -join ';'
324
+ "JAVA_HOME=" | Out-File -FilePath $env:GITHUB_ENV -Append
325
+ "PATH=$newPath" | Out-File -FilePath $env:GITHUB_ENV -Append
326
+
327
+ - name: Confirm no system Java
328
+ shell: pwsh
329
+ run: |
330
+ if (Get-Command java -ErrorAction SilentlyContinue) {
331
+ Write-Error "FAIL: java still on PATH"; exit 1
332
+ }
333
+ Write-Host "OK: no system Java on PATH"
334
+
335
+ - name: Install wheel and run uofa check
336
+ shell: pwsh
337
+ run: |
338
+ python -m venv $env:RUNNER_TEMP\uofa-venv
339
+ & $env:RUNNER_TEMP\uofa-venv\Scripts\pip.exe install --upgrade pip
340
+ $wheel = (Get-ChildItem dist\*win_amd64*.whl)[0].FullName
341
+ & $env:RUNNER_TEMP\uofa-venv\Scripts\pip.exe install $wheel
342
+ $py = "$env:RUNNER_TEMP\uofa-venv\Scripts\python.exe"
343
+ & $py -c @"
344
+ from uofa_cli import paths
345
+ jre = paths.bundled_jre_executable()
346
+ assert jre is not None and jre.exists(), 'bundled JRE missing'
347
+ assert 'site-packages' in str(jre), f'unexpected JRE source: {jre}'
348
+ print(f'OK: java_executable={paths.java_executable()}')
349
+ "@
350
+ & $env:RUNNER_TEMP\uofa-venv\Scripts\uofa.exe check packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld
351
+
352
+ # Publish all wheels + sdist to PyPI via Trusted Publishing (OIDC).
353
+ # Gates on every smoke job so we never publish a wheel we didn't smoke-test.
354
+ # Tag-push only — PR runs of this workflow build but don't publish.
355
+ publish-pypi:
356
+ needs:
357
+ - build-sdist
358
+ - smoke-pure-wheel
359
+ - smoke-linux-x86_64
360
+ - smoke-linux-aarch64
361
+ - smoke-macos # macos-14 (arm64) only after the macos-13 drop
362
+ - smoke-windows
363
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
364
+ runs-on: ubuntu-latest
365
+ environment:
366
+ name: pypi
367
+ url: https://pypi.org/p/uofa
368
+ permissions:
369
+ id-token: write # required for OIDC token exchange with PyPI
370
+ steps:
371
+ - uses: actions/setup-python@v5
372
+ with:
373
+ python-version: '3.11'
374
+
375
+ # Pull every wheel + sdist artifact into one dist/ directory. The glob
376
+ # 'uofa*' matches both legacy `uofa-cli-wheel-*` artifact names and the
377
+ # new `uofa-sdist`. merge-multiple flattens them into a single dir.
378
+ - name: Download all wheel + sdist artifacts
379
+ uses: actions/download-artifact@v4
380
+ with:
381
+ path: dist/
382
+ pattern: 'uofa*'
383
+ merge-multiple: true
384
+
385
+ - name: List artifacts to publish
386
+ run: ls -la dist/
387
+
388
+ - name: Validate distribution metadata
389
+ run: |
390
+ python -m pip install --upgrade twine
391
+ twine check dist/*
392
+
393
+ - name: Publish to PyPI
394
+ uses: pypa/gh-action-pypi-publish@release/v1
395
+ # No `with:` block — Trusted Publishing config on the PyPI side
396
+ # supplies auth, and the action uploads dist/* by default.
@@ -0,0 +1,18 @@
1
+ name: Validate UofA (SHACL + Integrity + Jena Rules)
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ validate:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+
13
+ - name: Build and run in devcontainer
14
+ uses: devcontainers/ci@v0.3
15
+ with:
16
+ push: never
17
+ runCmd: |
18
+ make all
uofa-0.7.0/.gitignore ADDED
@@ -0,0 +1,85 @@
1
+ # macOS
2
+ .DS_Store
3
+ ._*
4
+ .Spotlight-V100
5
+ .Trashes
6
+ .claude
7
+
8
+ tests/fixtures/extract/*-extracted.xlsx
9
+
10
+ # Java / Maven
11
+ target/
12
+ *.class
13
+ *.jar
14
+ *.war
15
+ *.ear
16
+ dependency-reduced-pom.xml
17
+ buildNumber.properties
18
+ .mvn/timing.properties
19
+ .mvn/wrapper/maven-wrapper.jar
20
+
21
+ # Python
22
+ __pycache__/
23
+ .pytest_cache/
24
+ *.py[cod]
25
+ *$py.class
26
+ *.egg-info/
27
+ dist/
28
+ # build/ — Python wheel build artifacts (top-level convention).
29
+ build/
30
+ # dev/build/ — UofA pipeline outputs (Phase 2.5 refinement workspace +
31
+ # adversarial corpora). Nested under dev/ in Phase E. Everything
32
+ # regenerable from git-tracked sources.
33
+ dev/build/
34
+ # ...except for the documentation README inside dev/build/phase2_5/ (the
35
+ # Phase 2.5 refinement workspace index), which is force-tracked so
36
+ # contributors see the layout without having to regenerate the dir.
37
+ !dev/build/phase2_5/README.md
38
+ *.egg
39
+ .eggs/
40
+ *.whl
41
+ .venv/
42
+ venv/
43
+ env/
44
+
45
+ # IDE
46
+ .idea/
47
+ *.iml
48
+ .vscode/
49
+ *.swp
50
+ *.swo
51
+ *~
52
+ .project
53
+ .classpath
54
+ .settings/
55
+
56
+ # Keys (private keys must NOT be committed)
57
+ keys/*.pem
58
+ !keys/*.pub
59
+
60
+ # OS
61
+ Thumbs.db
62
+ ehthumbs.db
63
+ Desktop.ini
64
+
65
+ # Logs
66
+ *.log
67
+ hs_err_pid*
68
+
69
+ # Temp
70
+ *.tmp
71
+ *.bak
72
+ *.orig
73
+
74
+ # Generated test fixtures (regenerated at test time from generator.py)
75
+ tests/fixtures/import/e2e-*.xlsx
76
+
77
+ # Wheel-bundled artifacts (populated by hatch_build.py at wheel build time).
78
+ # .jar is already covered by *.jar above; listed explicitly so the location
79
+ # is documented and so the .gitkeep placeholder is preserved.
80
+ src/uofa_cli/_engine/*.jar
81
+ !src/uofa_cli/_engine/.gitkeep
82
+ # JRE tree downloaded by hatch_build.py when UOFA_BUNDLE_PLATFORM is set.
83
+ src/uofa_cli/_runtime/jre/
84
+ src/uofa_cli/_runtime/PLATFORM
85
+ src/uofa_cli/_runtime/JRE_VERSION
@@ -0,0 +1,117 @@
1
+ # Changelog — Unit of Assurance (UoFA) Specification
2
+
3
+ All notable changes to this project are documented here.
4
+
5
+ ## [0.5.0] — 2026-04-21
6
+
7
+ ### Added — v0.5 JSON-LD context
8
+
9
+ - **New optional vocabulary** (`spec/context/v0.5.jsonld`): 12 additions backing the expanded weakener catalog. All backward-compatible — every v0.4 property is preserved; new properties are optional at the SHACL level.
10
+ - Data vintage / model revision: `dataVintage`, `modelRevisionDate`
11
+ - Evidence timestamps: `evidenceTimestamp`, `signatureTimestamp`
12
+ - Provenance marking: `isFoundationalEvidence`
13
+ - Model versioning: `modelVersion` (on ModelConfiguration)
14
+ - Sensitivity + activities: `hasSensitivityAnalysis`, `hasVerificationActivity`
15
+ - Identifier resolution: `referencesIdentifier`
16
+ - Staged CLARISSA vocabulary for v0.6 W-AR-06/W-AR-07: `residualRiskJustification`, `consideredAlternative`, `knownLimitation`
17
+
18
+ ### Added — Weakener catalog expansion (12 → 23 patterns)
19
+
20
+ Eleven new weakener patterns join the `packs/core` catalog. All validated via unit-test fixtures under `tests/fixtures/weakeners/` (27 tests pass) plus inline Morrison regression (see `docs/v0.5-morrison-deltas.md`).
21
+
22
+ - **W-ON-02** (High) — Unbounded Applicability: COU lacks both `hasApplicabilityConstraint` and `hasOperatingEnvelope`.
23
+ - **W-AR-03** (High) — Inference Method Mismatch: requirement's `requiredVerificationMethod` differs from generating activity's `activityType`.
24
+ - **W-AR-04** (High) — Model Version Drift: `ModelConfiguration.modelVersion` ≠ UofA's `currentModelVersion`.
25
+ - **W-AL-02** (Medium) — Sensitivity Gap: UQ declared but no `hasSensitivityAnalysis` linked.
26
+ - **W-EP-03** (High) — Stale Input Data: dataset `dataVintage` predates UofA `modelRevisionDate`.
27
+ - **W-CON-01** (High) — Factor-Decision Consistency: `Accepted` decision with credibility factors lacking both `requiredLevel` and `achievedLevel`.
28
+ - **W-CON-03** (High) — Future-dated Evidence: `evidenceTimestamp` > UofA `signatureTimestamp`.
29
+ - **W-CON-04** (Medium) — Profile-Structure Consistency: Complete profile with no `hasSensitivityAnalysis` (single-branch v0.5; broader enumeration deferred to v0.6).
30
+ - **W-CON-02** (Medium, **Python**) — Identifier Resolution: `referencesIdentifier` target neither resolves locally nor has an external-fetch hint.
31
+ - **W-CON-05** (High, **Python**) — Activity-Evidence Consistency: `hasVerificationActivity` declared with no evidence linked via `prov:wasGeneratedBy`.
32
+ - **W-PROV-01** (Critical, **Python**) — Provenance Chain Incomplete: BFS upstream from `bindsClaim` — emit at nodes without upstream edges that are not marked `uofa:isFoundationalEvidence=true`.
33
+
34
+ ### Added — CLI
35
+
36
+ - **`uofa catalog`** — enumerates all weakener patterns across active packs. `--format json` for machine-readable output. Covers Jena rules and Python-implemented rules. Satisfies the "catalog CLI" deliverable.
37
+
38
+ ### Changed — Morrison regression deltas
39
+
40
+ | | v0.4.0-nafems (baseline) | v0.5.0-pre-phase2 | Delta |
41
+ |---|---|---|---|
42
+ | Morrison COU1 | 14 | 24 | +10 (W-ON-02 + W-CON-01×6 + W-CON-04 + COMPOUND-01×2 cascades) |
43
+ | Morrison COU2 | 6 | 16 | +10 (W-ON-02 + W-AL-02 + W-CON-04 + W-PROV-01×7) |
44
+
45
+ Per-rule attribution in `docs/v0.5-morrison-deltas.md`.
46
+
47
+ ### Release-branch discipline
48
+
49
+ - **Frozen reference tag** `v0.4.0-nafems` (on commit `e11b2b4`) preserves the exact state used for NAFEMS demo slide screenshots. All screenshots regenerated from v0.5 will show different counts; the demo runs from the frozen tag regardless.
50
+ - **v0.5.0-pre-phase2** tag lands on `main` as the Phase 2 experimental baseline.
51
+
52
+ ### Known limitations
53
+
54
+ - Python post-pass rules (W-PROV-01, W-CON-02, W-CON-05) do not feed back into the Jena `COMPOUND-01` cascade. Python-generated Critical weakeners are reported but not paired with Jena-detected High weakeners via the existing compound rule. Compound cascade across engines is deferred to v0.6.
55
+ - W-CON-04 ships one branch (Complete profile missing SensitivityAnalysis). Broader ProfileComplete structural enumeration is deferred to v0.6 once distinct semantics beyond SHACL enforcement are settled.
56
+ - W-CON-02 limits identifier resolution to the local graph plus HTTP(S) URL self-documentation; no HTTP fetch attempts in v0.5.
57
+ - COMPOUND-02 (Factor Credibility Erosion) remains deferred (commented out in `packs/core/rules/uofa_weakener.rules`). `uofa catalog` filters it out.
58
+
59
+ ## [0.4.1] — 2026-04-04
60
+ ### Added
61
+ - **`uofa import` command:** Imports practitioner-filled Excel workbooks into signed, validated JSON-LD UofA artifacts. Supports VV40 (13 factors) and NASA-STD-7009B (19 factors) packs, v2 evidence types (`ReviewActivity`, `ProcessAttestation`, `DeploymentRecord`, `InputPedigreeLink`), automatic URI generation, `assessmentPhase` assignment, and `ImportActivity` provenance tracking. Optional `--sign` and `--check` flags for one-command import-sign-validate workflow.
62
+ - **`uofa schema --emit python`:** Generates `excel_constants.py` from SHACL shapes (factor names, level ranges, dropdown enums, evidence types). Keeps import validation in sync with SHACL — no manual constant maintenance.
63
+ - **Excel import pipeline modules:** `excel_reader.py` (parse + validate workbooks), `excel_mapper.py` (intermediate dict → JSON-LD), `excel_constants.py` (generated from SHACL).
64
+ - **`openpyxl` optional dependency:** `pip install uofa-cli[excel]` for Excel import support.
65
+ - **Test corpus:** 15 programmatic Excel test fixtures with manifest-driven parametrized test runner (106 tests covering happy paths, error cases, NASA factors, and URI generation).
66
+
67
+ ## [0.4] — 2026-04-02
68
+ ### Added
69
+ - **NASA-STD-7009B support:** New `packs/nasa-7009b/` domain pack with 19 credibility factors (13 shared with V&V 40 + 6 NASA-only), 6 NASA-specific weakener rules (W-NASA-01 through W-NASA-06), and SHACL shapes enforcing CAS level range 0-4 and assessment phase requirement.
70
+ - **Multi-pack CLI support:** `--pack` flag now accepts multiple values (`--pack vv40 --pack nasa-7009b`). SHACL shapes and Jena rules from all specified packs are loaded as a union.
71
+ - **`uofa migrate` command:** Upgrades v0.3 JSON-LD files to v0.4 (updates context URL, adds `factorStandard` to each CredibilityFactor). Supports `--dry-run`.
72
+ - **v0.4 JSON-LD context** (`spec/context/v0.4.jsonld`): 3 new properties (`factorStandard`, `assessmentPhase`, `hasEvidence`) and 4 new evidence classes (`ReviewActivity`, `ProcessAttestation`, `DeploymentRecord`, `InputPedigreeLink`) with supporting properties.
73
+ - **V&V 40 domain pack** (`packs/vv40/`): Extracted V&V 40 factor taxonomy (13 factors, level range 1-5) from core into its own pack.
74
+ - **Aerospace example** (`examples/aerospace/uofa-aero-nasa7009b.jsonld`): Demonstrates multi-standard assessment with all 19 factors, evidence classes, and multi-pack validation.
75
+ - **Evidence class SHACL shapes:** ReviewActivityShape, ProcessAttestationShape, DeploymentRecordShape, InputPedigreeLinkShape added to core shapes.
76
+ - **W-NASA pattern IDs:** WeakenerAnnotation patternId regex updated to accept `W-NASA-NN` format.
77
+
78
+ ### Changed
79
+ - **Core pack is now standards-agnostic:** `packs/core/pack.json` no longer lists specific standards or constrains factorType to V&V 40 values. Factor taxonomy enforcement is delegated to domain packs.
80
+ - **Default pack is `vv40`:** When no `--pack` flag is specified, the CLI defaults to `--pack vv40` for backward compatibility with v0.3 behavior.
81
+ - **Morrison examples upgraded to v0.4:** Context URL updated, `factorStandard: "ASME-VV40-2018"` added to all CredibilityFactor entries.
82
+ - **All skeleton templates and starters updated** to v0.4 context and factorStandard.
83
+
84
+ ## [0.3] — 2026-04-01
85
+ ### Added
86
+ - **13-factor expansion:** Morrison COUs now encode all 13 V&V 40 credibility factors (7 assessed + 6 not-assessed), up from the original 7.
87
+ - **W-EP-04 weakener pattern:** Detects unassessed credibility factors at elevated model risk (MRL > 2). Fires 6 times on COU2 (MRL 5) but not on COU1 (MRL 2) — the core risk-driven divergence demonstration.
88
+ - **`uofa diff` command:** Compares weakener profiles across two COUs with identity block, divergence table (core + compound patterns separated), severity summary, and divergence explanations from the rule engine.
89
+ - **Domain packs system:** SHACL shapes, Jena rules, templates, and prompts organized into modular packs under `packs/`. Core pack ships with 13 factors and 13 weakener patterns.
90
+ - **`uofa init` command:** Scaffolds new UofA projects with template JSON-LD, signing keys, and `.gitignore`.
91
+ - **`uofa packs` command:** Lists and inspects installed domain packs.
92
+ - **Starter examples:** Real-world starter templates under `examples/starters/`.
93
+
94
+ ### Changed
95
+ - **`uofa diff` now runs Jena rules dynamically** instead of reading static `hasWeakener` arrays from JSON-LD files.
96
+ - **Morrison COU1 weakener profile:** 14 weakeners across 6 patterns (4 Critical, 10 High). Compound patterns (COMPOUND-01, COMPOUND-03) fire via chained forward-chaining inference.
97
+ - **Morrison COU2 weakener profile:** 6 weakeners, all W-EP-04 (High) — fires on 6 unassessed factors at MRL 5.
98
+ - **COU divergence:** 7 divergent patterns between COU1 and COU2 (5 core + 2 compound), all divergent (no shared patterns).
99
+ - SHACL shapes and Jena rules moved from `spec/` to `packs/core/` with symlinks for backward compatibility.
100
+ - JSON-LD context updated to v0.3 (`spec/context/v0.3.jsonld`).
101
+
102
+ ### Fixed
103
+ - Removed `@type: @id` from `acceptanceCriteria` context definition (was silently dropping strings).
104
+
105
+ ## [0.1] — 2025-11-01
106
+ ### Added
107
+ - Initial **UoFA** specification published at https://uofa.net (single-page canonical spec).
108
+ - Namespace established: `https://uofa.net/vocab#` with prefix `uofa`.
109
+ - JSON-LD Context released: `context/v0.1.jsonld`.
110
+ - JSON-LD Frame (skeleton) released: `schema/v0.1.jsonld`.
111
+ - Repository bootstrap: README, licensing (CC BY 4.0), example snippet.
112
+
113
+ ### Notes
114
+ - This is a **draft** intended for early adopters and pilot implementations.
115
+ - Formal validation to be provided via **SHACL shapes** and/or a JSON Schema profile in a subsequent release.
116
+
117
+ [0.1]: https://uofa.net