booley-rtl 0.2.2__tar.gz → 0.2.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 (425) hide show
  1. {booley_rtl-0.2.2/src/booley_rtl.egg-info → booley_rtl-0.2.4}/PKG-INFO +2 -1
  2. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/THIRD_PARTY_NOTICES.md +1 -1
  3. booley_rtl-0.2.4/VERSION +1 -0
  4. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/pyproject.toml +4 -0
  5. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/build.sh +10 -5
  6. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/AGENTS_TEMPLATE.md +1 -0
  7. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/3-agents-md.md +3 -0
  8. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/fusesoc_registry.py +18 -1
  9. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/auto_doctor.py +40 -6
  10. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/booley.py +16 -7
  11. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/doctor.py +323 -288
  12. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_cmd.py +10 -3
  13. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_docker_image.py +16 -0
  14. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/interactive_docker.py +14 -4
  15. {booley_rtl-0.2.2 → booley_rtl-0.2.4/src/booley_rtl.egg-info}/PKG-INFO +2 -1
  16. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley_rtl.egg-info/SOURCES.txt +1 -0
  17. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley_rtl.egg-info/requires.txt +1 -0
  18. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_fusesoc_registry.py +23 -0
  19. booley_rtl-0.2.4/tests/test_pytest_configuration.py +44 -0
  20. booley_rtl-0.2.2/VERSION +0 -1
  21. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/LICENSE +0 -0
  22. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/README.md +0 -0
  23. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/setup.cfg +0 -0
  24. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/__init__.py +0 -0
  25. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/__init__.py +0 -0
  26. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/agent_schema.py +0 -0
  27. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/config_common.py +0 -0
  28. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/configs_schema.py +0 -0
  29. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/contracts.py +0 -0
  30. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/design_size.py +0 -0
  31. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/eda_environment.py +0 -0
  32. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/flow_schema.py +0 -0
  33. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/host_environment.py +0 -0
  34. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/project_schema.py +0 -0
  35. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/resource_policy.py +0 -0
  36. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/audit/target_matrix.py +0 -0
  37. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/bwave/__init__.py +0 -0
  38. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/bwave/cli.py +0 -0
  39. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/bwave/contract.py +0 -0
  40. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/bwave/sessions.py +0 -0
  41. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/bwave/wcp.py +0 -0
  42. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/__init__.py +0 -0
  43. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/agent.py +0 -0
  44. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/editor.py +0 -0
  45. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/guidance_links.py +0 -0
  46. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/limits.py +0 -0
  47. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/pricing.py +0 -0
  48. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/project_config.py +0 -0
  49. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/config/settings.py +0 -0
  50. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/core/__init__.py +0 -0
  51. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/core/boundary.py +0 -0
  52. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/core/config_paths.py +0 -0
  53. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/core/models.py +0 -0
  54. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/core/run_command.py +0 -0
  55. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/__init__.py +0 -0
  56. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/cheatsheet.md +0 -0
  57. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/criteria.toml +0 -0
  58. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/Dockerfile +0 -0
  59. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/Dockerfile.egress-proxy +0 -0
  60. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/Dockerfile.flexnet-relay +0 -0
  61. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/Dockerfile.reaper +0 -0
  62. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/Dockerfile.riscv +0 -0
  63. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/agent-clis-package-lock.json +0 -0
  64. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/agent-clis-package.json +0 -0
  65. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/build-riscv.sh +0 -0
  66. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/claude-managed-settings.json +0 -0
  67. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/codex-requirements.toml +0 -0
  68. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/docker/vivado-wrapper +0 -0
  69. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/edalize/verible.py +0 -0
  70. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/licenses/Nangate-OCL-1.0.txt +0 -0
  71. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/TROUBLESHOOTING.md +0 -0
  72. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/booley_vcd_dump.sv +0 -0
  73. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/cocotb_tb_style_guide.md +0 -0
  74. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/bugs.md +0 -0
  75. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/code_style.md +0 -0
  76. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/optimization.md +0 -0
  77. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/protocol-cdc.md +0 -0
  78. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/security.md +0 -0
  79. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/rtl/spec.md +0 -0
  80. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/testbench/cocotb-tb-review.md +0 -0
  81. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/code_review/testbench/tb-review.md +0 -0
  82. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/rtl-mutation-testing.md +0 -0
  83. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/rtl_style_guide.md +0 -0
  84. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/sim_result_sentinel.sv +0 -0
  85. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/refs/tb_style_guide.md +0 -0
  86. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-feedback/SKILL.md +0 -0
  87. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-feedback/minimal-reproducer.md +0 -0
  88. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-heal/SKILL.md +0 -0
  89. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-heal/agents/openai.yaml +0 -0
  90. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/BOOLEY_TEMPLATE.toml +0 -0
  91. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/CORE_TEMPLATE.yaml +0 -0
  92. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/SETUP_PLAN_TEMPLATE.md +0 -0
  93. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/SKILL.md +0 -0
  94. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/TESTS_TEMPLATE.toml +0 -0
  95. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/agents/openai.yaml +0 -0
  96. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/0-plan.md +0 -0
  97. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/2-project-config.md +0 -0
  98. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/4-doctor.md +0 -0
  99. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/5-parity.md +0 -0
  100. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/6-findings.md +0 -0
  101. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-setup/steps/new-greenfield.md +0 -0
  102. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-create/SKILL.md +0 -0
  103. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-create/TICKET_TEMPLATE.md +0 -0
  104. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-create/agents/openai.yaml +0 -0
  105. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-create/grilling.md +0 -0
  106. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/SKILL.md +0 -0
  107. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/agents/openai.yaml +0 -0
  108. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/explain-diff-prompt.md +0 -0
  109. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/flow-specialist-reference.md +0 -0
  110. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/review-template.md +0 -0
  111. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/steps/01-board-orphans.md +0 -0
  112. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/steps/02-blocked.md +0 -0
  113. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/steps/03-review.md +0 -0
  114. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/data/skills/booley-ticket-triage/steps/04-summary.md +0 -0
  115. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/__init__.py +0 -0
  116. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/commit_git_io.py +0 -0
  117. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/commit_message_format.py +0 -0
  118. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/commit_msg_hook.py +0 -0
  119. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/commit_msg_utils.py +0 -0
  120. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/compare_vcd.py +0 -0
  121. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/contract_path_policy.py +0 -0
  122. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/criteria.py +0 -0
  123. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/criteria_reference.py +0 -0
  124. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/deploy_skills.py +0 -0
  125. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/development_state.py +0 -0
  126. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/flow_specialist_reference.py +0 -0
  127. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/mut_harness_inject.py +0 -0
  128. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/mutation_lock.py +0 -0
  129. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/pre-commit-ruff.sh +0 -0
  130. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/pre_push_hook.py +0 -0
  131. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/review_dispositions.py +0 -0
  132. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/run_mutmut.py +0 -0
  133. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/scope_precommit_hook.py +0 -0
  134. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/validate_commit_msg.py +0 -0
  135. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/workspace_isolation.py +0 -0
  136. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/dev_support/worktree_create.sh +0 -0
  137. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/docker/__init__.py +0 -0
  138. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/docker/egress_proxy.py +0 -0
  139. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/docker/proxy_entry.py +0 -0
  140. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/docker/reaper.py +0 -0
  141. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/__init__.py +0 -0
  142. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/authority.py +0 -0
  143. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/cli.py +0 -0
  144. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/config.py +0 -0
  145. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/flexnet_docker.py +0 -0
  146. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/flexnet_relay.py +0 -0
  147. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/runtime_spec.py +0 -0
  148. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/eda/vivado.py +0 -0
  149. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/__init__.py +0 -0
  150. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/cli.py +0 -0
  151. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/findings.py +0 -0
  152. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/redact.py +0 -0
  153. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/render.py +0 -0
  154. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/feedback/submit.py +0 -0
  155. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/__init__.py +0 -0
  156. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/artifacts.py +0 -0
  157. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/base.py +0 -0
  158. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/baseline_worktree.py +0 -0
  159. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/clock_timing.py +0 -0
  160. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/criterion_freshness.py +0 -0
  161. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/eda_parsers.py +0 -0
  162. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/edam.py +0 -0
  163. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/elab/__init__.py +0 -0
  164. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/elab/__main__.py +0 -0
  165. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/elab/flow.py +0 -0
  166. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/execution.py +0 -0
  167. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/flow_config.py +0 -0
  168. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/__init__.py +0 -0
  169. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/__main__.py +0 -0
  170. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/cache.py +0 -0
  171. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/edam.py +0 -0
  172. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/flow.py +0 -0
  173. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/metrics.py +0 -0
  174. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/fpga/recipe.py +0 -0
  175. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/human_display.py +0 -0
  176. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/lint/__init__.py +0 -0
  177. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/lint/__main__.py +0 -0
  178. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/lint/flow.py +0 -0
  179. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/output_budget.py +0 -0
  180. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/recipe_evidence.py +0 -0
  181. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/run_evidence.py +0 -0
  182. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/sim/__init__.py +0 -0
  183. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/sim/__main__.py +0 -0
  184. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/sim/edam.py +0 -0
  185. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/sim/flow.py +0 -0
  186. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/sim/target_tests.py +0 -0
  187. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/source_fingerprint.py +0 -0
  188. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/__init__.py +0 -0
  189. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/__main__.py +0 -0
  190. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/flow.py +0 -0
  191. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/ppa_config.py +0 -0
  192. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/recipe.py +0 -0
  193. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/synth/threshold_eval.py +0 -0
  194. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/target_campaign.py +0 -0
  195. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/target_criteria.py +0 -0
  196. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/target_parameters.py +0 -0
  197. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/flows/target_test_suite.py +0 -0
  198. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/__init__.py +0 -0
  199. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/core_projection.py +0 -0
  200. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/core_security.py +0 -0
  201. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/fusesoc_trace_overlay.py +0 -0
  202. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/fusesoc/selftest_overlay.py +0 -0
  203. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/__init__.py +0 -0
  204. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/__main__.py +0 -0
  205. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/_ticket_ops.py +0 -0
  206. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/auth_cmd.py +0 -0
  207. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/auto_retry.py +0 -0
  208. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/blocked_prep.py +0 -0
  209. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/blocking.py +0 -0
  210. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/booley_status_display.py +0 -0
  211. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/build_stamp.py +0 -0
  212. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/cheatsheet.py +0 -0
  213. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/colors.py +0 -0
  214. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/__init__.py +0 -0
  215. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/app.py +0 -0
  216. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/console.tcss +0 -0
  217. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/criteria_format.py +0 -0
  218. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/events.py +0 -0
  219. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/links.py +0 -0
  220. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/path_backtick.py +0 -0
  221. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console/widgets.py +0 -0
  222. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/console_metrics.py +0 -0
  223. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/devcontainer.py +0 -0
  224. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/developer.py +0 -0
  225. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/developer_display.py +0 -0
  226. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/developer_guardrails.py +0 -0
  227. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/developer_probe.py +0 -0
  228. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/developer_prompt.py +0 -0
  229. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/doctor_stamp.py +0 -0
  230. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/doctor_waivers.py +0 -0
  231. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_common.py +0 -0
  232. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_git_hooks.py +0 -0
  233. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_plan.py +0 -0
  234. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_scaffold.py +0 -0
  235. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/init_skills.py +0 -0
  236. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/job_fence.py +0 -0
  237. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/logging_utils.py +0 -0
  238. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/models.py +0 -0
  239. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/nangate_pdk.py +0 -0
  240. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/orphan_handler.py +0 -0
  241. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/preflight.py +0 -0
  242. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/render_md.py +0 -0
  243. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/review_artifact.py +0 -0
  244. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/review_evidence.py +0 -0
  245. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/review_explanation.py +0 -0
  246. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/review_prep.py +0 -0
  247. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/sandbox.py +0 -0
  248. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/scope_policy.py +0 -0
  249. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/session_runtime.py +0 -0
  250. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/setup/__init__.py +0 -0
  251. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/setup/intake.py +0 -0
  252. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/setup/project_worktree.py +0 -0
  253. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/setup/workspace.py +0 -0
  254. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/setup/worktree_lock_gc.py +0 -0
  255. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/subscription_limit.py +0 -0
  256. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/synth_probe.py +0 -0
  257. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/terminal.py +0 -0
  258. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/ticket_cli.py +0 -0
  259. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/transcript_distill.py +0 -0
  260. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/triage_package.py +0 -0
  261. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/web_isolation.py +0 -0
  262. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/harness/worktree_health.py +0 -0
  263. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/__init__.py +0 -0
  264. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/base.py +0 -0
  265. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/diff_classify.py +0 -0
  266. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/events.py +0 -0
  267. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/registry.py +0 -0
  268. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/run_lock.py +0 -0
  269. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/schema_extractor.py +0 -0
  270. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/server.py +0 -0
  271. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/mcp/submit_run_report.py +0 -0
  272. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/__init__.py +0 -0
  273. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_claude_backend.py +0 -0
  274. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_claude_transcript_md.py +0 -0
  275. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_codex_backend.py +0 -0
  276. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_codex_live_usage.py +0 -0
  277. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_codex_transcript_md.py +0 -0
  278. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_cost.py +0 -0
  279. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/_retry.py +0 -0
  280. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/agent.py +0 -0
  281. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/agent_backend.py +0 -0
  282. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/agent_errors.py +0 -0
  283. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/auth_token.py +0 -0
  284. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/bootstrap_mode.py +0 -0
  285. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/build_metadata.py +0 -0
  286. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/developer_budget.py +0 -0
  287. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/eda_tool_lock.py +0 -0
  288. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/environment.py +0 -0
  289. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/file_lock.py +0 -0
  290. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/filesystem_utils.py +0 -0
  291. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/git.py +0 -0
  292. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/heartbeat.py +0 -0
  293. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/incontainer_live_preview.py +0 -0
  294. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/incontainer_register.py +0 -0
  295. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/incontainer_vaporview.py +0 -0
  296. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/init_plan.py +0 -0
  297. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/job_records.py +0 -0
  298. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/job_slots.py +0 -0
  299. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/mcp_config.py +0 -0
  300. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/nested_mcp_capabilities.py +0 -0
  301. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/paths.py +0 -0
  302. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/pid.py +0 -0
  303. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/platform_paths.py +0 -0
  304. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/process_group.py +0 -0
  305. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/project_dir.py +0 -0
  306. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/project_image.py +0 -0
  307. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/prompt_artifacts.py +0 -0
  308. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/runtime_context.py +0 -0
  309. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/shared_infra.py +0 -0
  310. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/ticket_repositories.py +0 -0
  311. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/timefmt.py +0 -0
  312. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/runtime/zombie_cleanup.py +0 -0
  313. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/bwave_fifo.py +0 -0
  314. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/cocotb_results.py +0 -0
  315. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/cocotb_run.py +0 -0
  316. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/iverilog_run.py +0 -0
  317. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/run_guard.py +0 -0
  318. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/sim_result.py +0 -0
  319. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/trace_session.py +0 -0
  320. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/vcs_run.py +0 -0
  321. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/verilator_run.py +0 -0
  322. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/sim/xcelium_run.py +0 -0
  323. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/__init__.py +0 -0
  324. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/coverage_analyst.py +0 -0
  325. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/coverage_verilog_utils.py +0 -0
  326. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/mutation_tester.py +0 -0
  327. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/reviewer.py +0 -0
  328. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/specialist.py +0 -0
  329. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/specialist_workspace.py +0 -0
  330. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/specialists/tb_coder.py +0 -0
  331. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/synthesis/__init__.py +0 -0
  332. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/synthesis/profiles.py +0 -0
  333. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/targets/__init__.py +0 -0
  334. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/targets/flow_names.py +0 -0
  335. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/targets/parameter_integrity.py +0 -0
  336. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/targets/target_naming.py +0 -0
  337. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/targets/target_surface.py +0 -0
  338. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/__init__.py +0 -0
  339. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/__main__.py +0 -0
  340. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/analytics.py +0 -0
  341. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/archive.py +0 -0
  342. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/cli.py +0 -0
  343. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/cli_handlers.py +0 -0
  344. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/constants.py +0 -0
  345. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/contract_ops.py +0 -0
  346. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/criteria_acceptance.py +0 -0
  347. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/criteria_markdown.py +0 -0
  348. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/criteria_summary_format.py +0 -0
  349. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/evidence.py +0 -0
  350. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/execution.py +0 -0
  351. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/frontmatter.py +0 -0
  352. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/git_ops.py +0 -0
  353. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/helpers.py +0 -0
  354. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/io.py +0 -0
  355. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/lifecycle.py +0 -0
  356. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/logs.py +0 -0
  357. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/notifications.py +0 -0
  358. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/operations.py +0 -0
  359. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/paths.py +0 -0
  360. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/project_git_ops.py +0 -0
  361. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/reporting.py +0 -0
  362. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/run_metrics.py +0 -0
  363. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/scanner.py +0 -0
  364. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/target_contract.py +0 -0
  365. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/validation.py +0 -0
  366. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/ticket_board/validation_logs.py +0 -0
  367. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/vivado/xdc/timing.xdc +0 -0
  368. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/abc_config.json +0 -0
  369. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/abc_scripts/abc_aggressive.script +0 -0
  370. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/abc_scripts/abc_balanced.script +0 -0
  371. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/abc_scripts/abc_fast.script +0 -0
  372. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/openroad_timing.py +0 -0
  373. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/ppa.py +0 -0
  374. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/run_yosys_syn.py +0 -0
  375. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/sdc/abc_simple.sdc +0 -0
  376. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_config.py +0 -0
  377. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_core.py +0 -0
  378. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_discovery.py +0 -0
  379. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_make.py +0 -0
  380. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_parse.py +0 -0
  381. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/syn_subprocess.py +0 -0
  382. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley/yosys/synthesis_watchdog.py +0 -0
  383. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley_rtl.egg-info/dependency_links.txt +0 -0
  384. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley_rtl.egg-info/entry_points.txt +0 -0
  385. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/src/booley_rtl.egg-info/top_level.txt +0 -0
  386. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_bootstrap_mode.py +0 -0
  387. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_build_metadata.py +0 -0
  388. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_core_boundary.py +0 -0
  389. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_core_projection.py +0 -0
  390. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_core_security.py +0 -0
  391. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_dependency_direction.py +0 -0
  392. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_eda_tool_lock.py +0 -0
  393. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_entry_points.py +0 -0
  394. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_filesystem_utils.py +0 -0
  395. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_flow_names.py +0 -0
  396. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_guidance_links.py +0 -0
  397. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_guidance_links_portable.py +0 -0
  398. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_heartbeat.py +0 -0
  399. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_incontainer_live_preview.py +0 -0
  400. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_incontainer_register.py +0 -0
  401. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_incontainer_vaporview.py +0 -0
  402. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_interactive_smoke.py +0 -0
  403. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_job_slots.py +0 -0
  404. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_mcp_server.py +0 -0
  405. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_native_bwave_resolution.py +0 -0
  406. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_nested_mcp_capabilities.py +0 -0
  407. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_no_retired_host_execution.py +0 -0
  408. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_parameter_integrity.py +0 -0
  409. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_paths.py +0 -0
  410. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_platform_paths.py +0 -0
  411. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_pricing.py +0 -0
  412. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_project_config_human_in_loop.py +0 -0
  413. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_project_config_run_report.py +0 -0
  414. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_project_dir.py +0 -0
  415. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_run_command.py +0 -0
  416. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_run_mutmut.py +0 -0
  417. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_runtime_context.py +0 -0
  418. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_selftest_overlay.py +0 -0
  419. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_shared_infra.py +0 -0
  420. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_source_map_from_core.py +0 -0
  421. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_target_naming.py +0 -0
  422. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_target_surface.py +0 -0
  423. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_timefmt.py +0 -0
  424. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_triage_diff_paths.py +0 -0
  425. {booley_rtl-0.2.2 → booley_rtl-0.2.4}/tests/test_zombie_cleanup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: booley-rtl
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: RTL development harness with ticket-based workflow automation
5
5
  Author-email: "A.R." <boldaxolotl@proton.me>
6
6
  License-Expression: Apache-2.0
@@ -39,6 +39,7 @@ Provides-Extra: dev
39
39
  Requires-Dist: build>=1.0; extra == "dev"
40
40
  Requires-Dist: pytest>=8.0; extra == "dev"
41
41
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
42
+ Requires-Dist: pytest-xdist>=3.8; extra == "dev"
42
43
  Requires-Dist: pytest-timeout>=2.3; extra == "dev"
43
44
  Requires-Dist: coverage>=7.0; extra == "dev"
44
45
  Requires-Dist: ruff==0.15.18; extra == "dev"
@@ -64,7 +64,7 @@ THE LIBRARY.
64
64
 
65
65
  The `bwave` executable statically links Rust crates recorded in
66
66
  `crates/bwave/Cargo.lock`. The dependency versions below describe the lockfile at
67
- Booley 0.2.2. Where a crate offers a choice of licenses, this distribution uses
67
+ Booley 0.2.4. Where a crate offers a choice of licenses, this distribution uses
68
68
  the license named by the group.
69
69
 
70
70
  ### BSD-3-Clause
@@ -0,0 +1 @@
1
+ 0.2.4
@@ -59,6 +59,10 @@ dev = [
59
59
  "build>=1.0",
60
60
  "pytest>=8.0",
61
61
  "pytest-asyncio>=0.23",
62
+ # Run independent test modules concurrently in CI. loadscope scheduling
63
+ # keeps each module/class together while tests/conftest.py gives every
64
+ # worker its own temp root for subprocess-visible caches.
65
+ "pytest-xdist>=3.8",
62
66
  # Bounds every test's wall-clock so a wedged subprocess/stall test fails
63
67
  # loudly instead of hanging the whole suite (default applied in tests/conftest.py).
64
68
  "pytest-timeout>=2.3",
@@ -65,6 +65,9 @@ echo ">>> Building booley wheel..."
65
65
  # build/ is generated packaging state, so always recreate it from the source
66
66
  # tree before producing the wheel consumed by Docker.
67
67
  rm -rf "$BOOLEY_ROOT/build"
68
+ # Docker COPY and pip expand this glob, so an older version must not survive
69
+ # beside the wheel produced by this run (GitHub issue #66).
70
+ rm -f "$BOOLEY_ROOT"/dist/booley_rtl-*.whl
68
71
  # Marker predating the build: the freshness check below proves the wheel the
69
72
  # docker COPY layer will pick up was actually (re)written by *this* run, not left
70
73
  # over from a previous one. Belt-and-suspenders behind `set -e`: if the wheel
@@ -74,13 +77,15 @@ WHEEL_MARKER="$(mktemp)"
74
77
  trap 'rm -f "$STAMP" "$WHEEL_MARKER"' EXIT
75
78
  (cd "$BOOLEY_ROOT" && "$PYBUILD" -P -m build --wheel --outdir dist/)
76
79
 
77
- # Newest wheel in dist/ must be newer than the marker, or the COPY would bake a stale wheel.
78
- FRESH_WHEEL="$(find "$BOOLEY_ROOT/dist" -name 'booley_rtl-*.whl' -newer "$WHEEL_MARKER" -print -quit 2>/dev/null || true)"
79
- if [ -z "$FRESH_WHEEL" ]; then
80
- echo "ERROR: the wheel step produced no fresh dist/booley_rtl-*.whl." >&2
81
- echo " The docker COPY would bake a stale wheel — aborting." >&2
80
+ # Exactly one wheel in dist/ must be newer than the marker, or Docker's glob
81
+ # would either fail to COPY a wheel or pass conflicting versions to pip.
82
+ mapfile -t FRESH_WHEELS < <(find "$BOOLEY_ROOT/dist" -maxdepth 1 -type f -name 'booley_rtl-*.whl' -newer "$WHEEL_MARKER" -print 2>/dev/null)
83
+ if [ "${#FRESH_WHEELS[@]}" -ne 1 ]; then
84
+ echo "ERROR: the wheel step produced ${#FRESH_WHEELS[@]} fresh dist/booley_rtl-*.whl files; expected exactly one." >&2
85
+ echo " The docker COPY requires one unambiguous wheel — aborting." >&2
82
86
  exit 1
83
87
  fi
88
+ FRESH_WHEEL="${FRESH_WHEELS[0]}"
84
89
  echo ">>> Fresh wheel: $(basename "$FRESH_WHEEL")"
85
90
 
86
91
  # Stamp the same build-fingerprint label `booley init` uses, so an image built
@@ -19,6 +19,7 @@ tracks a content-identical root `AGENTS.md` (see `steps/3-agents-md.md`, Step 3)
19
19
  ## Booley-Specific Instructions
20
20
 
21
21
  - Project-specific Booley data lives in `.booley_project/`.
22
+ - This repo is operating in stealth mode. No changes to `.booley_project/` may be visible in the main repo. (Keep only for `[stealth].enabled = true`.)
22
23
  - Keep `booley doctor` green. After changing project configuration, EDA-tool Targets, dependencies, or the Session Runtime, fix every finding or add a narrow, reviewed `doctor-waivers.toml` entry for a deliberate constraint. Before handoff, run plain Doctor on the host and plain plus `--deep` in the Session Runtime; leave no active warnings or errors.
23
24
  - Keep handoffs and plans under `.booley_project/` (e.g. `.booley_project/plans/`, `.booley_project/handoffs/`), never in the RTL repo. They are agent working notes, not project source, and do not belong in source history.
24
25
  - In Interactive Mode, the editor extension uses the user's shared VS Code window attached to this Project's Session Runtime (devcontainer). Use it as the human-facing surface: when useful, open files with `code --goto <path>[:<line>]` and side-by-side diffs with `code --diff <left> <right>` instead of only printing paths.
@@ -37,6 +37,9 @@ file is high leverage: do not auto-write, pad, or invent facts.
37
37
  - When `booley.toml` selects `booley-sandbox-riscv`, keep the template's RISC-V
38
38
  reference-docs bullet verbatim so agents can find the image's offline manuals.
39
39
  Remove that conditional bullet for every other sandbox image.
40
+ - When `booley.toml` has `[stealth].enabled = true`, keep the template's stealth
41
+ mode bullet verbatim so agents do not expose `.booley_project/` changes in the
42
+ main repository. Remove that conditional bullet when stealth mode is disabled.
40
43
  - Do not read RTL, testbench, or test contents by default. Stable docs and
41
44
  config are enough for this task.
42
45
  - Bad content — omit all of it: repo maps and large directory listings;
@@ -1304,6 +1304,22 @@ def target_source_files(
1304
1304
  *target* is not a single selectable Target (ADR 0030).
1305
1305
  """
1306
1306
  ref = resolve_ref(project_root, target)
1307
+ return target_source_files_for_ref(
1308
+ project_root,
1309
+ ref,
1310
+ include_dependencies=include_dependencies,
1311
+ include_headers=include_headers,
1312
+ )
1313
+
1314
+
1315
+ def target_source_files_for_ref(
1316
+ project_root: Path | str,
1317
+ ref: TargetRef,
1318
+ include_dependencies: bool = False,
1319
+ *,
1320
+ include_headers: bool = False,
1321
+ ) -> CoreSources:
1322
+ """Partition sources for a Target reference already resolved by the caller."""
1307
1323
  doc = read_core(ref.core_file)
1308
1324
  targets = doc.get("targets") or {}
1309
1325
  target_def = targets.get(ref.name) if isinstance(targets, Mapping) else None
@@ -1320,7 +1336,8 @@ def target_source_files(
1320
1336
  )
1321
1337
 
1322
1338
  if include_dependencies:
1323
- closure = selectable_core_closure(project_root, [target]) or frozenset()
1339
+ token = f"{ref.vlnv}#{ref.name}"
1340
+ closure = selectable_core_closure(project_root, [token]) or frozenset()
1324
1341
  for core_file in sorted(closure):
1325
1342
  if core_file == ref.core_file:
1326
1343
  continue # already partitioned above, per the selected Target
@@ -18,6 +18,7 @@ import os
18
18
  import subprocess
19
19
  import sys
20
20
  import time
21
+ from collections.abc import Callable
21
22
  from dataclasses import asdict
22
23
  from datetime import UTC, datetime, timedelta
23
24
  from pathlib import Path
@@ -41,6 +42,12 @@ _TIME_FORMAT = MACHINE_TIMESTAMP_FORMAT # Compatibility for report fixtures.
41
42
  _HEALTHY_MAX_AGE = timedelta(days=doctor_stamp.MAX_AGE_DAYS)
42
43
  _UNHEALTHY_RETRY_AGE = timedelta(days=1)
43
44
 
45
+ Progress = Callable[[str], None]
46
+
47
+
48
+ def _ignore_progress(_message: str) -> None:
49
+ """Accept progress when the caller has no visible sink."""
50
+
44
51
 
45
52
  def state_dir(project_dir: Path) -> Path:
46
53
  """Return the automatic Doctor runtime directory."""
@@ -204,7 +211,13 @@ def _exception_report(exc: Exception) -> tuple[dict[str, int], list[dict[str, An
204
211
  return counts, [finding], 1
205
212
 
206
213
 
207
- def _execute(project_root: Path, project_dir: Path, trigger: str) -> dict[str, Any]:
214
+ def _execute(
215
+ project_root: Path,
216
+ project_dir: Path,
217
+ trigger: str,
218
+ *,
219
+ progress: Progress | None = None,
220
+ ) -> dict[str, Any]:
208
221
  """Execute read-only Doctor and persist its structured result."""
209
222
  from booley.harness.doctor import run_doctor_result
210
223
 
@@ -217,6 +230,7 @@ def _execute(project_root: Path, project_dir: Path, trigger: str) -> dict[str, A
217
230
  project_root,
218
231
  read_only=True,
219
232
  record_clean=False,
233
+ progress=progress,
220
234
  )
221
235
  counts = result.counts
222
236
  findings = [asdict(finding) for finding in result.findings]
@@ -224,16 +238,21 @@ def _execute(project_root: Path, project_dir: Path, trigger: str) -> dict[str, A
224
238
  except Exception as exc: # noqa: BLE001 — automatic health must record crashes, never break startup
225
239
  counts, findings, exit_code = _exception_report(exc)
226
240
  output.write(f"\n{findings[0]['message']}\n")
227
- return _persist_report(
241
+ duration_s = time.monotonic() - started
242
+ report = _persist_report(
228
243
  project_root,
229
244
  project_dir,
230
245
  trigger=trigger,
231
- duration_s=time.monotonic() - started,
246
+ duration_s=duration_s,
232
247
  counts=counts,
233
248
  findings=findings,
234
249
  exit_code=exit_code,
235
250
  transcript=output.getvalue(),
236
251
  )
252
+ (progress or _ignore_progress)(
253
+ f"completed in {duration_s:.1f}s; transcript: {transcript_path(project_dir)}"
254
+ )
255
+ return report
237
256
 
238
257
 
239
258
  def _persist_report(
@@ -292,15 +311,30 @@ def record_manual_result(project_root: Path, result: DoctorRunResult) -> dict[st
292
311
  return None
293
312
 
294
313
 
295
- def run_if_due(project_root: Path, *, trigger: str) -> dict[str, Any] | None:
314
+ def run_if_due(
315
+ project_root: Path,
316
+ *,
317
+ trigger: str,
318
+ progress: Progress | None = None,
319
+ ) -> dict[str, Any] | None:
296
320
  """Run one automatic Doctor attempt when stale; never raises."""
297
321
  try:
298
322
  project_dir = resolve_project_dir(project_root)
299
323
  lock_path = state_dir(project_dir) / _RUN_LOCK_NAME
300
324
  with _try_lock(lock_path) as acquired:
301
- if not acquired or due_reason(project_root) is None:
325
+ if not acquired:
326
+ return None
327
+ reason = due_reason(project_root)
328
+ if reason is None:
302
329
  return None
303
- report = _execute(project_root, project_dir, trigger)
330
+ emit_progress = progress or _ignore_progress
331
+ emit_progress(f"starting ({reason})")
332
+ report = _execute(
333
+ project_root,
334
+ project_dir,
335
+ trigger,
336
+ progress=emit_progress,
337
+ )
304
338
  _notify_if_changed(project_root, report)
305
339
  return report
306
340
  except Exception: # noqa: BLE001 — lifecycle advisory must never block a session or ticket sweep
@@ -1895,18 +1895,18 @@ def _sleep_until_next_ticket(args: argparse.Namespace, project_root: Path) -> bo
1895
1895
  return interruptible_sleep(args.wait)
1896
1896
 
1897
1897
 
1898
- def _ticket_loop(
1899
- args: argparse.Namespace,
1900
- project_root: Path,
1901
- venv_py: str,
1902
- ) -> int:
1903
- """Run the main ticket-processing loop; returns exit code."""
1898
+ def _run_automatic_doctor(project_root: Path) -> None:
1899
+ """Run and report the stale startup Doctor without hiding its progress."""
1904
1900
  # Once per sweep (not per ticket): a stale automatic Doctor runs before
1905
1901
  # unattended work begins. It is advisory and fail-soft; the normal
1906
1902
  # preflight remains the blocking gate for ticket execution.
1907
1903
  from booley.harness import auto_doctor
1908
1904
 
1909
- auto_doctor.run_if_due(project_root, trigger="booley-run")
1905
+ auto_doctor.run_if_due(
1906
+ project_root,
1907
+ trigger="booley-run",
1908
+ progress=lambda message: logger.info("Automatic Doctor — %s", message),
1909
+ )
1910
1910
  health_summary = auto_doctor.consume_changed_summary(project_root, channel="booley-run")
1911
1911
  if health_summary:
1912
1912
  report = auto_doctor.load_report(project_root) or {}
@@ -1914,6 +1914,15 @@ def _ticket_loop(
1914
1914
  emit(health_summary)
1915
1915
  elif auto_doctor.load_report(project_root) is None:
1916
1916
  doctor_stamp.warn_if_stale(project_root, logger.warning)
1917
+
1918
+
1919
+ def _ticket_loop(
1920
+ args: argparse.Namespace,
1921
+ project_root: Path,
1922
+ venv_py: str,
1923
+ ) -> int:
1924
+ """Run the main ticket-processing loop; returns exit code."""
1925
+ _run_automatic_doctor(project_root)
1917
1926
  handle_startup_orphans(project_root)
1918
1927
  os.chdir(str(project_root))
1919
1928
  attempt = 0