factorforge-cds 3.5.2__tar.gz → 3.5.4__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 (207) hide show
  1. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/PKG-INFO +15 -7
  2. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/README.md +14 -6
  3. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/pyproject.toml +9 -2
  4. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/analysis/metrics.py +1 -3
  5. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/analysis/sequence_risks.py +1 -1
  6. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/benchmark/runner.py +1 -2
  7. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/cli/main.py +0 -65
  8. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/host_model.py +0 -1
  9. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/reranker.py +2 -2
  10. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/slate_engine.py +0 -2
  11. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/slate_generator.py +0 -1
  12. factorforge_cds-3.5.4/src/factorforge/database.py +450 -0
  13. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/db/connector.py +3 -4
  14. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2.py +1 -1
  15. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/targeted_remediator.py +3 -3
  16. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/evaluation/evaluator.py +1 -1
  17. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/evaluation/metrics.py +1 -1
  18. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/profiles/profile_snapshot.py +1 -2
  19. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/method_registry.py +1 -1
  20. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/version_manifest.json +3 -3
  21. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/review/evaluation_integrity.py +1 -1
  22. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/schemas/evidence.py +0 -1
  23. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/scoring/quantization.py +1 -1
  24. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation/hub.py +0 -1
  25. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/PKG-INFO +15 -7
  26. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/SOURCES.txt +3 -2
  27. factorforge_cds-3.5.4/src/factorforge_cds.egg-info/top_level.txt +1 -0
  28. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_harness.py +0 -3
  29. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_scoring.py +0 -2
  30. factorforge_cds-3.5.4/tests/test_database.py +121 -0
  31. factorforge_cds-3.5.4/tests/test_database_configuration.py +119 -0
  32. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_dp_v2_1_initiation.py +3 -3
  33. factorforge_cds-3.5.4/tests/test_learning_workflow_boundary.py +11 -0
  34. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_multi_engine_governance.py +3 -3
  35. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_no_raw_sequence_logging.py +0 -1
  36. factorforge_cds-3.5.4/tests/test_public_surface_scanner.py +37 -0
  37. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_quantized_scoring.py +0 -1
  38. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_rule_registry.py +0 -1
  39. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_sllm_biological_pipeline.py +8 -2
  40. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_slm_interface.py +0 -1
  41. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_suite_capability_compat.py +13 -4
  42. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_version_manifest.py +2 -2
  43. factorforge_cds-3.5.2/src/factorforge/database.py +0 -147
  44. factorforge_cds-3.5.2/src/factorforge_cds.egg-info/top_level.txt +0 -3
  45. factorforge_cds-3.5.2/src/scratch/integrity_test.py +0 -100
  46. factorforge_cds-3.5.2/src/scripts/seed_fixtures.py +0 -107
  47. factorforge_cds-3.5.2/tests/test_database.py +0 -47
  48. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/LICENSE +0 -0
  49. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/setup.cfg +0 -0
  50. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/__init__.py +0 -0
  51. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/__main__.py +0 -0
  52. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/analysis/__init__.py +0 -0
  53. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/analysis/feasibility.py +0 -0
  54. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/benchmark/models.py +0 -0
  55. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/cli/__init__.py +0 -0
  56. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/cli/benchmark_cli.py +0 -0
  57. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/cli/legacy_cli.py +0 -0
  58. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/constraints/__init__.py +0 -0
  59. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/constraints/type_iis.py +0 -0
  60. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/__init__.py +0 -0
  61. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/exporter.py +0 -0
  62. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/optimizer.py +0 -0
  63. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/validator.py +0 -0
  64. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/nbenthamiana_codons.json +0 -0
  65. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/nbenthamiana_golden_set.json +0 -0
  66. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/ntabacum_codons.json +0 -0
  67. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_codons.json +0 -0
  68. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_filtered_stats.json +0 -0
  69. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_manifest.json +0 -0
  70. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_codons.json +0 -0
  71. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_filtered_stats.json +0 -0
  72. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_manifest.json +0 -0
  73. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_derived_codons.json +0 -0
  74. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_derived_manifest.json +0 -0
  75. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_filtered_stats.json +0 -0
  76. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/reference/reference_policy_manifest.json +0 -0
  77. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/templates/high_expression.json +0 -0
  78. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/templates/standard_expression.json +0 -0
  79. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/data/wolffia_globosa_codons.json +0 -0
  80. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/db/__init__.py +0 -0
  81. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/design_review.py +0 -0
  82. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/__init__.py +0 -0
  83. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/acquisition.py +0 -0
  84. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/acquisition_logger.py +0 -0
  85. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/filter.py +0 -0
  86. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/generator.py +0 -0
  87. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/panel_builder.py +0 -0
  88. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/schemas.py +0 -0
  89. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/slate.py +0 -0
  90. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/discovery/traits.py +0 -0
  91. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/__init__.py +0 -0
  92. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/balanced_optimizer.py +0 -0
  93. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_adapter.py +0 -0
  94. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2_1.py +0 -0
  95. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2_1_1.py +0 -0
  96. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/__init__.py +0 -0
  97. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/adapter.py +0 -0
  98. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/diagnostics.py +0 -0
  99. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/inference.py +0 -0
  100. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/models/__init__.py +0 -0
  101. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/models/mbart_codon.py +0 -0
  102. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/tokenizer/control_tokenizer.py +0 -0
  103. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/__init__.py +0 -0
  104. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/codon_table_builder.py +0 -0
  105. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/construct_builder.py +0 -0
  106. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/exporter.py +0 -0
  107. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/optimizer.py +0 -0
  108. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/pipeline.py +0 -0
  109. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/__init__.py +0 -0
  110. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/domesticator.py +0 -0
  111. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/reverse_translator.py +0 -0
  112. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/rule_engine.py +0 -0
  113. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/scoring.py +0 -0
  114. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/scoring_ml.py +0 -0
  115. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/utils.py +0 -0
  116. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/validator.py +0 -0
  117. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/registry.py +0 -0
  118. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/adapters.py +0 -0
  119. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/automaton.py +0 -0
  120. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/compiler.py +0 -0
  121. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/__init__.py +0 -0
  122. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/corpus_builder.py +0 -0
  123. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/tokenizer.py +0 -0
  124. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/decoder.py +0 -0
  125. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/interfaces.py +0 -0
  126. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/__init__.py +0 -0
  127. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/arch.py +0 -0
  128. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/baselines.py +0 -0
  129. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/export_onnx.py +0 -0
  130. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/evaluation/evidence_logger.py +0 -0
  131. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/evaluation/models.py +0 -0
  132. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/io/__init__.py +0 -0
  133. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/io/fasta.py +0 -0
  134. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/io/validation.py +0 -0
  135. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/learning/__init__.py +0 -0
  136. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/learning/ranker.py +0 -0
  137. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/__init__.py +0 -0
  138. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/annotate.py +0 -0
  139. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/kd_scale.py +0 -0
  140. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/risk_classifier.py +0 -0
  141. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/sp_predict.py +0 -0
  142. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/tm_predict.py +0 -0
  143. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/__init__.py +0 -0
  144. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/model_registry.py +0 -0
  145. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/registry_loader.py +0 -0
  146. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/registry/versioning.py +0 -0
  147. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/review/__init__.py +0 -0
  148. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/rules/models.py +0 -0
  149. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/rules/registry.py +0 -0
  150. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/schemas/__init__.py +0 -0
  151. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/schemas/design_package.py +0 -0
  152. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/schemas/design_package.schema.json +0 -0
  153. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/schemas/run_config.schema.json +0 -0
  154. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/sops/config.py +0 -0
  155. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/__init__.py +0 -0
  156. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/construct_id.py +0 -0
  157. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/exceptions.py +0 -0
  158. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/restriction_sites.py +0 -0
  159. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/sequence_identity.py +0 -0
  160. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/sequence_validator.py +0 -0
  161. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/utils/validation.py +0 -0
  162. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation/__init__.py +0 -0
  163. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation/cli.py +0 -0
  164. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation/package_generator.py +0 -0
  165. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation_registry.py +0 -0
  166. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge/validation_report.py +0 -0
  167. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/dependency_links.txt +0 -0
  168. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/entry_points.txt +0 -0
  169. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/requires.txt +0 -0
  170. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_baselines.py +0 -0
  171. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_cli_output_guard.py +0 -0
  172. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_codon_table_metadata.py +0 -0
  173. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_regression.py +0 -0
  174. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_benchmark_smoke.py +0 -0
  175. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_cai.py +0 -0
  176. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_codon_table_manifest.py +0 -0
  177. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_cross_engine_evaluation.py +0 -0
  178. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_db_connector.py +0 -0
  179. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_design_package_schema.py +0 -0
  180. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_design_package_semantics.py +0 -0
  181. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_design_package_serialization.py +0 -0
  182. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_design_review.py +0 -0
  183. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_docs_consistency.py +0 -0
  184. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_dp_v2_1_1.py +0 -0
  185. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_fasta_io.py +0 -0
  186. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_gc_content.py +0 -0
  187. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_host_profile_metadata.py +0 -0
  188. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_iupac_validation.py +0 -0
  189. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_legacy_cli.py +0 -0
  190. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_lm_alpha_contract.py +0 -0
  191. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_math_v2_dp_optimality.py +0 -0
  192. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_openbio_missing_metric_contract.py +0 -0
  193. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_optional_postgres.py +0 -0
  194. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_parameter_registry.py +0 -0
  195. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_partial_dp_rescue.py +0 -0
  196. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_prepare_lm_dataset.py +0 -0
  197. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_protein_risk.py +0 -0
  198. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_registry_production_sync.py +0 -0
  199. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_restriction_sites.py +0 -0
  200. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_sequence_validator.py +0 -0
  201. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_slm_decoder.py +0 -0
  202. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_sop_profile.py +0 -0
  203. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_translation_integrity.py +0 -0
  204. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_validation_contract_compat.py +0 -0
  205. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_validation_registry.py +0 -0
  206. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_validation_report.py +0 -0
  207. {factorforge_cds-3.5.2 → factorforge_cds-3.5.4}/tests/test_worked_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: factorforge-cds
3
- Version: 3.5.2
3
+ Version: 3.5.4
4
4
  Summary: FactorForge - open-source CDS design and pre-synthesis sequence review by Eijex.
5
5
  Author-email: Eijex <eijex.lab@gmail.com>
6
6
  License-Expression: AGPL-3.0-only
@@ -51,7 +51,7 @@ Dynamic: license-file
51
51
 
52
52
  FactorForge performs deterministic CDS design with CAI/GC metrics, PolyA-signal screening, and Golden Gate/MoClo-aware checks. It is positioned as a pre-synthesis review harness: it helps teams generate reproducible CDS candidates, inspect assembly-relevant sequence constraints, and package design metadata before downstream synthesis, cloning, or experimental review. Primary support: *N. benthamiana* (agroinfiltration). Experimental host context: Tobacco BY-2 (`--host by2`).
53
53
 
54
- FactorForge v3.5.1 uses independently versioned engines:
54
+ FactorForge v3.5.4 uses independently versioned engines:
55
55
 
56
56
  | Generation | Engine | Version | Availability |
57
57
  |---|---|---:|---|
@@ -107,7 +107,7 @@ are available, a separately evaluated 5′ MFE value. It is not the default; its
107
107
  single-target calibration does not establish holdout generalization or biological
108
108
  performance.
109
109
 
110
- The v3.5.1 discovery-slate surface generates versioned Top-K research candidates,
110
+ The v3.5.x discovery-slate surface generates versioned Top-K research candidates,
111
111
  applies a shared deterministic hard-constraint filter, and records generator and
112
112
  fallback lineage. The sLLM path is disabled by default. A partial-DP rescue solves
113
113
  an exact suffix conditioned on the retained prefix; it is not a claim of global
@@ -127,7 +127,7 @@ FactorForge outputs are **in-silico only** and have not been experimentally vali
127
127
  ## Citing
128
128
 
129
129
  ```
130
- FactorForge v3.5.2 (2026). Open-source constraint-based CDS design and sequence review.
130
+ FactorForge v3.5.4 (2026). Open-source constraint-based CDS design and sequence review.
131
131
  Eijex. https://github.com/eijex/factorforge-cds
132
132
  ```
133
133
 
@@ -139,9 +139,17 @@ Mun-Kyu Kim ([@eijex](https://github.com/eijex))
139
139
 
140
140
  ## Optional PostgreSQL support
141
141
 
142
- Install `pip install "factorforge-cds[postgres]"` only when using the PostgreSQL
143
- connector. Explicit local SQLite checkpoints do not require a PostgreSQL driver.
144
- Database integration tests require an explicitly configured `DATABASE_URL`.
142
+ FactorForge design, CLI, Python API, and file export do not require a database.
143
+ PostgreSQL persistence is an explicit Eijex integration path for retaining shared
144
+ campaign and candidate identities; it is not enabled by default.
145
+
146
+ Install `pip install "factorforge-cds[postgres]"` only when using that integration.
147
+ The deployment must also provide a compatible `eijex-db-core` package and set
148
+ `FACTORFORGE_DATABASE_URL`. FactorForge contains no default database credentials and
149
+ does not silently fall back to another backend. See [Persistence](docs/persistence.md).
150
+
151
+ Explicit local SQLite research checkpoints in `factorforge.db.connector` remain a
152
+ separate local-only utility and are not the shared DBTL system of record.
145
153
 
146
154
  ## License
147
155
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  FactorForge performs deterministic CDS design with CAI/GC metrics, PolyA-signal screening, and Golden Gate/MoClo-aware checks. It is positioned as a pre-synthesis review harness: it helps teams generate reproducible CDS candidates, inspect assembly-relevant sequence constraints, and package design metadata before downstream synthesis, cloning, or experimental review. Primary support: *N. benthamiana* (agroinfiltration). Experimental host context: Tobacco BY-2 (`--host by2`).
16
16
 
17
- FactorForge v3.5.1 uses independently versioned engines:
17
+ FactorForge v3.5.4 uses independently versioned engines:
18
18
 
19
19
  | Generation | Engine | Version | Availability |
20
20
  |---|---|---:|---|
@@ -70,7 +70,7 @@ are available, a separately evaluated 5′ MFE value. It is not the default; its
70
70
  single-target calibration does not establish holdout generalization or biological
71
71
  performance.
72
72
 
73
- The v3.5.1 discovery-slate surface generates versioned Top-K research candidates,
73
+ The v3.5.x discovery-slate surface generates versioned Top-K research candidates,
74
74
  applies a shared deterministic hard-constraint filter, and records generator and
75
75
  fallback lineage. The sLLM path is disabled by default. A partial-DP rescue solves
76
76
  an exact suffix conditioned on the retained prefix; it is not a claim of global
@@ -90,7 +90,7 @@ FactorForge outputs are **in-silico only** and have not been experimentally vali
90
90
  ## Citing
91
91
 
92
92
  ```
93
- FactorForge v3.5.2 (2026). Open-source constraint-based CDS design and sequence review.
93
+ FactorForge v3.5.4 (2026). Open-source constraint-based CDS design and sequence review.
94
94
  Eijex. https://github.com/eijex/factorforge-cds
95
95
  ```
96
96
 
@@ -102,9 +102,17 @@ Mun-Kyu Kim ([@eijex](https://github.com/eijex))
102
102
 
103
103
  ## Optional PostgreSQL support
104
104
 
105
- Install `pip install "factorforge-cds[postgres]"` only when using the PostgreSQL
106
- connector. Explicit local SQLite checkpoints do not require a PostgreSQL driver.
107
- Database integration tests require an explicitly configured `DATABASE_URL`.
105
+ FactorForge design, CLI, Python API, and file export do not require a database.
106
+ PostgreSQL persistence is an explicit Eijex integration path for retaining shared
107
+ campaign and candidate identities; it is not enabled by default.
108
+
109
+ Install `pip install "factorforge-cds[postgres]"` only when using that integration.
110
+ The deployment must also provide a compatible `eijex-db-core` package and set
111
+ `FACTORFORGE_DATABASE_URL`. FactorForge contains no default database credentials and
112
+ does not silently fall back to another backend. See [Persistence](docs/persistence.md).
113
+
114
+ Explicit local SQLite research checkpoints in `factorforge.db.connector` remain a
115
+ separate local-only utility and are not the shared DBTL system of record.
108
116
 
109
117
  ## License
110
118
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "factorforge-cds"
7
- version = "3.5.2"
7
+ version = "3.5.4"
8
8
  description = "FactorForge - open-source CDS design and pre-synthesis sequence review by Eijex."
9
9
  readme = "README.md"
10
10
  license = "AGPL-3.0-only"
@@ -56,6 +56,7 @@ factorforge-validate = "factorforge.validation.cli:main"
56
56
 
57
57
  [tool.setuptools.packages.find]
58
58
  where = ["src"]
59
+ include = ["factorforge*"]
59
60
 
60
61
  [tool.setuptools.package-data]
61
62
  "factorforge" = ["data/*.json", "data/templates/*.json", "data/profiles/*.json", "data/reference/*.json", "schemas/*.json", "registry/*.json"]
@@ -68,4 +69,10 @@ pythonpath = ["src"]
68
69
  [tool.ruff]
69
70
  line-length = 100
70
71
  target-version = "py310"
71
- exclude = ["archive"]
72
+ # Versioned reproducibility deposits are immutable evidence, not maintained code.
73
+ exclude = ["archive", "reproducibility"]
74
+
75
+ [tool.ruff.lint.per-file-ignores]
76
+ # Tests initialize paths/optional-dependency skips before importing modules.
77
+ "tests/**" = ["E402"]
78
+ "benchmarks/test_data/test_toy_flip.py" = ["E402"]
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import collections
5
6
  import json
6
7
  import math
7
8
  from collections import Counter
@@ -434,9 +435,6 @@ def detect_invalid_codons(sequence: str) -> list[dict[str, Any]]:
434
435
  elif codon not in STANDARD_GENETIC_CODE:
435
436
  findings.append({"start": start, "end": start + 3, "codon": codon, "reason": "unknown"})
436
437
  return findings
437
- import math
438
- import collections
439
-
440
438
  def calculate_synonymous_entropy(sequence, codon_to_aa):
441
439
  from factorforge.analysis.metrics import _codons
442
440
  codons = _codons(sequence)
@@ -3,7 +3,7 @@
3
3
  Extracted from legacy RuleEngine to serve as shared evaluation metrics.
4
4
  """
5
5
  import re
6
- from typing import Dict, Any, List, Set, Tuple
6
+ from typing import Dict, Any, List
7
7
 
8
8
  # Polyadenylation signals (true biological motifs)
9
9
  POLYA_PATTERNS = {
@@ -1,4 +1,4 @@
1
- from typing import List, Dict, Any, Type
1
+ from typing import List, Dict
2
2
  import time
3
3
  import hashlib
4
4
 
@@ -108,7 +108,6 @@ class BenchmarkRunner:
108
108
  pass_counts = {}
109
109
  total_targets = len(set(r.target_id for r in results))
110
110
 
111
- cai_sums = {}
112
111
  cai_vals = {}
113
112
  gc_sums = {}
114
113
  engine_counts = {}
@@ -904,71 +904,6 @@ def ingest_outcome(dataset_file, measurements_file, output):
904
904
 
905
905
 
906
906
 
907
- @cli.command("audit")
908
- @click.argument("sequence_fasta", type=click.Path(exists=True))
909
- @click.option("--reference-codon-profile", default="nbev11", help="Reference codon profile to use")
910
- @click.option("--exclude-region", help="Region to exclude from analysis (e.g., SP:1-60 or 1-60)")
911
- @click.option("--output", "-o", type=click.Path(), help="Output path for JSON report")
912
- def audit(sequence_fasta, reference_codon_profile, exclude_region, output):
913
- """
914
- Run generic sequence audit to report codon usage, CAI, GC, and AA distribution.
915
- """
916
- _configure_stdio()
917
- from factorforge.engines.profile.utils import parse_fasta_records
918
- from factorforge.analysis.metrics import load_codon_usage_table, calculate_cai, calculate_gc, codon_usage_profile, translate_dna
919
- import hashlib
920
- import json
921
-
922
- from pathlib import Path
923
- fasta_records = parse_fasta_records(Path(sequence_fasta).read_text(encoding='utf-8'))
924
- if not fasta_records:
925
- raise click.UsageError(f"No FASTA records found in {sequence_fasta}")
926
-
927
- results = {}
928
- for header, sequence in fasta_records:
929
- seq = sequence.upper().replace("U", "T")
930
- seq = "".join(seq.split())
931
-
932
- if exclude_region:
933
- parts = exclude_region.split(":")
934
- range_str = parts[-1]
935
- try:
936
- start, end = map(int, range_str.split("-"))
937
- seq = seq[end:] # Naively assume we're removing the N-terminal SP 1-N.
938
- except ValueError:
939
- click.echo(f"Warning: Could not parse exclude region {exclude_region}", err=True)
940
-
941
- table = load_codon_usage_table()
942
-
943
- cai = calculate_cai(seq, table.codon_weights)
944
- gc = calculate_gc(seq)
945
- usage = codon_usage_profile(seq)
946
-
947
- aa_seq = translate_dna(seq)
948
- aa_counts = {}
949
- for aa in aa_seq:
950
- aa_counts[aa] = aa_counts.get(aa, 0) + 1
951
-
952
- res = {
953
- "input_sha256": hashlib.sha256(sequence.encode('utf-8')).hexdigest(),
954
- "codon_table_sha256": hashlib.sha256(json.dumps(table.codon_weights, sort_keys=True).encode()).hexdigest(),
955
- "tool_version": "1.0",
956
- "cai": cai,
957
- "gc_percent": gc,
958
- "length": len(seq),
959
- "aa_counts": aa_counts,
960
- "codon_counts": usage,
961
- }
962
- results[header or "Sequence"] = res
963
-
964
- if output:
965
- with open(output, "w", encoding="utf-8") as f:
966
- json.dump(results, f, indent=2)
967
- click.echo(f"Audit report saved to: {output}")
968
- else:
969
- click.echo(json.dumps(results, indent=2))
970
-
971
-
972
907
  @cli.command("audit")
973
908
  @click.argument("sequence_fasta", type=click.Path(exists=True))
974
909
  @click.option("--reference-codon-profile", default="nbev11", help="Reference codon profile to use")
@@ -7,7 +7,6 @@ weights (w_ij), reference GC bounds, and model provenance.
7
7
  from __future__ import annotations
8
8
 
9
9
  from dataclasses import dataclass, field
10
- import json
11
10
  import logging
12
11
  from pathlib import Path
13
12
  from typing import Any, Dict, List, Optional, Tuple
@@ -6,9 +6,9 @@ Stage 3 (Real 7-D Normalized Trait Space Furthest-First Diversity Selection).
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- from dataclasses import dataclass, field
9
+ from dataclasses import dataclass
10
10
  import math
11
- from typing import Any, Dict, List, Optional, Sequence, Tuple
11
+ from typing import Dict, List, Optional
12
12
 
13
13
  from factorforge.analysis.metrics import calculate_gc_windows, detect_homopolymers
14
14
  from factorforge.core.host_model import HostModel
@@ -11,7 +11,6 @@ Stage 5: Exact Top-K Slate Assembly (Successive Pareto Fronts + Boundary Furthes
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
- from dataclasses import dataclass, field
15
14
  import datetime
16
15
  import logging
17
16
  import time
@@ -21,7 +20,6 @@ from factorforge.core.host_model import HostModel
21
20
  from factorforge.core.reranker import (
22
21
  MultiFactorSlateReranker,
23
22
  PhenotypeDiversitySelector,
24
- ScoredCandidate,
25
23
  )
26
24
  from factorforge.core.slate_generator import (
27
25
  DEFAULT_FORBIDDEN_SITES,
@@ -9,7 +9,6 @@ from __future__ import annotations
9
9
  from dataclasses import dataclass, field
10
10
  import hashlib
11
11
  import random
12
- import re
13
12
  from typing import Any, Dict, List, Optional, Set, Tuple
14
13
 
15
14
  from factorforge.analysis.metrics import (