openfactory 0.2.1__tar.gz → 0.3.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 (818) hide show
  1. {openfactory-0.2.1/openfactory.egg-info → openfactory-0.3.0}/PKG-INFO +1 -1
  2. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/__init__.py +1 -1
  3. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/__init__.py +31 -6
  4. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/catalog.py +442 -74
  5. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/base.py +120 -11
  6. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/claude_code.py +56 -18
  7. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/codex.py +5 -2
  8. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/kimi.py +5 -2
  9. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/opencode.py +5 -2
  10. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/azure_devops.py +15 -0
  11. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/base.py +112 -0
  12. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/columns.py +48 -0
  13. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/factory.py +16 -4
  14. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/jira.py +22 -0
  15. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/local.py +34 -0
  16. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/local.py +10 -1
  17. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/registry.py +26 -0
  18. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/azure_devops.py +76 -0
  19. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/base.py +62 -0
  20. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/github.py +207 -4
  21. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/local.py +5 -0
  22. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/azure_devops.py +15 -4
  23. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/base.py +82 -1
  24. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github.py +56 -0
  25. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github_project.py +15 -0
  26. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/jira.py +266 -25
  27. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/local.py +13 -10
  28. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/parse.py +108 -10
  29. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/registry.py +22 -2
  30. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/app.py +337 -66
  31. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/panel.html +388 -44
  32. openfactory-0.3.0/openfactory/approvals.py +341 -0
  33. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/cli.py +212 -40
  34. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/conformance/adapters.py +16 -0
  35. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/refs.py +19 -0
  36. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/run.py +15 -0
  37. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/doctor.py +210 -41
  38. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/ladder.py +7 -1
  39. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/reading.py +258 -14
  40. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/people.py +10 -3
  41. openfactory-0.3.0/openfactory/listeners.py +245 -0
  42. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/messages.py +2 -2
  43. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/transcript.py +4 -4
  44. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/deployment.py +19 -7
  45. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/ops/impediment.py +8 -1
  46. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/machine.py +240 -66
  47. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/plugins.py +18 -0
  48. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/preflight.py +7 -9
  49. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/authoring.py +12 -0
  50. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/brownfield.py +14 -4
  51. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/channel.py +5 -1
  52. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/confirm.py +21 -1
  53. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/corpus.py +71 -0
  54. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/module.py +63 -11
  55. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/release.py +105 -5
  56. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/role.py +2 -2
  57. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/triage.py +37 -0
  58. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/voice.py +55 -0
  59. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/registry.py +16 -1
  60. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/boxed_job.py +10 -3
  61. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/host.py +103 -13
  62. openfactory-0.3.0/openfactory/runtime/repairable.py +73 -0
  63. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/activities.py +164 -92
  64. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/connection.py +90 -7
  65. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/io.py +6 -0
  66. openfactory-0.3.0/openfactory/runtime/temporal/standing.py +134 -0
  67. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/view.py +140 -47
  68. openfactory-0.3.0/openfactory/runtime/temporal/vocabulary.py +64 -0
  69. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/worker.py +44 -7
  70. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/workflow.py +113 -15
  71. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/__init__.py +2 -0
  72. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/classify.py +54 -2
  73. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/conversation.py +28 -27
  74. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/voice.py +39 -0
  75. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/watch.py +10 -1
  76. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/testing/local_flow.py +1 -1
  77. {openfactory-0.2.1 → openfactory-0.3.0/openfactory.egg-info}/PKG-INFO +1 -1
  78. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/SOURCES.txt +38 -0
  79. {openfactory-0.2.1 → openfactory-0.3.0}/pyproject.toml +1 -1
  80. openfactory-0.3.0/tests/test_a_card_that_was_split_is_not_delivered_until_its_children_are.py +320 -0
  81. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_is_asked_of_its_own_axis.py +2 -0
  82. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_is_scoped.py +3 -2
  83. openfactory-0.3.0/tests/test_a_declined_read_is_said_where_it_is_read.py +260 -0
  84. openfactory-0.3.0/tests/test_a_delivered_card_is_closed_by_its_tracker.py +210 -0
  85. openfactory-0.3.0/tests/test_a_deployments_addresses_have_one_owner.py +592 -0
  86. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_disabled_project_does_not_look_armed.py +7 -1
  87. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failing_check_is_read_for_what_it_is.py +1 -1
  88. openfactory-0.3.0/tests/test_a_finished_card_is_closed_as_delivered.py +466 -0
  89. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_frame_does_not_erase_what_it_omits.py +10 -3
  90. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_free_deployment_can_read_its_logs.py +4 -2
  91. openfactory-0.3.0/tests/test_a_machine_made_hold_says_its_own_cause.py +379 -0
  92. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_manifest_that_loads_is_not_a_manifest_that_is_right.py +0 -1
  93. openfactory-0.3.0/tests/test_a_name_nobody_registered_is_not_removed.py +145 -0
  94. openfactory-0.3.0/tests/test_a_process_that_approves_keeps_one_engine_client.py +341 -0
  95. openfactory-0.3.0/tests/test_a_project_nobody_registered_is_never_a_500.py +184 -0
  96. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposal_can_carry_what_to_change.py +6 -4
  97. openfactory-0.3.0/tests/test_a_provider_is_named_by_its_own_row.py +223 -0
  98. openfactory-0.3.0/tests/test_a_refusal_is_not_an_answer.py +673 -0
  99. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_staged_decision_survives_a_refresh.py +4 -3
  100. openfactory-0.3.0/tests/test_a_store_that_cannot_be_read_authorizes_nobody_and_says_so.py +529 -0
  101. openfactory-0.3.0/tests/test_a_stream_ends_when_its_credential_does.py +913 -0
  102. openfactory-0.3.0/tests/test_a_verdict_nobody_answers_is_said_so_inside_the_deadline.py +381 -0
  103. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wait_can_say_until_when.py +8 -0
  104. openfactory-0.3.0/tests/test_a_withdrawn_card_is_not_delivered_on_jira.py +473 -0
  105. openfactory-0.3.0/tests/test_a_withdrawn_card_lands_in_the_sites_own_status_on_jira.py +478 -0
  106. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_acceptance_loop.py +2 -2
  107. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_accepting_starts_the_work.py +1 -1
  108. openfactory-0.3.0/tests/test_accepting_what_the_code_already_does_files_nothing.py +709 -0
  109. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_acknowledgement.py +2 -2
  110. openfactory-0.3.0/tests/test_an_activity_uses_the_client_its_worker_holds.py +383 -0
  111. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_unreadable_store_is_not_an_empty_one.py +2 -1
  112. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_api.py +6 -1
  113. openfactory-0.3.0/tests/test_auto_merge_is_judged_from_the_gates_that_were_read.py +257 -0
  114. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_board_is_vendor_neutral.py +13 -4
  115. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_card_maintenance.py +1 -1
  116. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_card_maintenance_channel.py +1 -1
  117. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_confirmation_by_click.py +2 -2
  118. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_decision_loop.py +2 -2
  119. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_doctor.py +18 -7
  120. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_doctor_checks_the_product_link.py +0 -1
  121. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_recall_eval.py +2 -2
  122. openfactory-0.3.0/tests/test_no_front_end_pays_for_the_engines_client_by_accident.py +584 -0
  123. openfactory-0.3.0/tests/test_nothing_speaks_before_it_asks_the_language.py +293 -0
  124. openfactory-0.3.0/tests/test_one_author_writes_the_close_of_a_repair_brief.py +382 -0
  125. openfactory-0.3.0/tests/test_one_author_writes_the_order_of_a_recovery_and_a_resume.py +415 -0
  126. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_orphaned_cards_are_repointed.py +12 -7
  127. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_simulation.py +3 -3
  128. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_provenance_in_the_brief.py +2 -2
  129. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sweep_client_surface.py +1 -1
  130. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sweep_records_only_what_posted.py +12 -7
  131. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_view.py +12 -3
  132. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_action_layer.py +5 -4
  133. openfactory-0.3.0/tests/test_the_approver_verbs_ask_which_store_is_in_force.py +334 -0
  134. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_is_a_page_on_the_panel.py +27 -2
  135. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_lives_in_one_file.py +3 -1
  136. openfactory-0.3.0/tests/test_the_board_row_says_which_stage_its_column_is.py +541 -0
  137. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_image_resolves_in_one_place.py +6 -9
  138. openfactory-0.3.0/tests/test_the_budget_read_leaves_the_panels_loop.py +309 -0
  139. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_has_its_own_fences.py +4 -6
  140. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ci_is_read_more_than_once.py +1 -1
  141. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cloud_is_a_directory_delete.py +18 -18
  142. openfactory-0.3.0/tests/test_the_doctor_names_the_gates_only_a_person_settles.py +341 -0
  143. openfactory-0.3.0/tests/test_the_doctor_never_says_no_gate_about_a_branch_it_could_not_read.py +410 -0
  144. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_survives_its_own_probes.py +5 -2
  145. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_starts_only_beside_the_library_its_worker_runs_on.py +8 -3
  146. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_first_yes_writes_and_the_second_yes_is_on_the_ticket.py +2 -2
  147. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_a_platform_capability.py +6 -4
  148. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_not_re_read_on_every_frame.py +14 -2
  149. openfactory-0.3.0/tests/test_the_intake_memo_is_read_once_and_handed_out_as_a_copy.py +365 -0
  150. openfactory-0.3.0/tests/test_the_merge_gate_is_heard_on_every_path.py +428 -0
  151. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_is_a_channel.py +2 -1
  152. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_reads_as_a_control_room.py +4 -2
  153. openfactory-0.3.0/tests/test_the_panel_serves_without_the_engines_client.py +440 -0
  154. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_conversation_is_core.py +2 -1
  155. openfactory-0.3.0/tests/test_the_repair_brief_states_the_failure_it_was_given.py +272 -0
  156. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_second_deployment_is_not_the_first.py +7 -2
  157. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_cannot_reach_a_live_engine.py +3 -2
  158. openfactory-0.3.0/tests/test_the_techlead_asks_the_engine_on_a_loop_that_outlives_the_question.py +233 -0
  159. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_sees_a_jira_floor.py +15 -22
  160. openfactory-0.3.0/tests/test_the_worker_waits_for_the_engine_to_listen.py +247 -0
  161. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_three_commands_one_verdict.py +3 -2
  162. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_transcript_memory.py +2 -2
  163. openfactory-0.3.0/tests/test_what_the_card_shows_inside_a_bullet_is_what_is_read.py +202 -0
  164. openfactory-0.2.1/openfactory/approvals.py +0 -86
  165. openfactory-0.2.1/tests/test_nothing_speaks_before_it_asks_the_language.py +0 -172
  166. {openfactory-0.2.1 → openfactory-0.3.0}/LICENSE +0 -0
  167. {openfactory-0.2.1 → openfactory-0.3.0}/NOTICE +0 -0
  168. {openfactory-0.2.1 → openfactory-0.3.0}/README.md +0 -0
  169. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/base.py +0 -0
  170. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/floor_intents.py +0 -0
  171. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/__init__.py +0 -0
  172. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/__init__.py +0 -0
  173. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/registry.py +0 -0
  174. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/roles.py +0 -0
  175. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/routes.py +0 -0
  176. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/session_store.py +0 -0
  177. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/stream.py +0 -0
  178. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/techlead.py +0 -0
  179. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/token_pool.py +0 -0
  180. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/azure_devops.py +0 -0
  181. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/__init__.py +0 -0
  182. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_db.py +0 -0
  183. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/__init__.py +0 -0
  184. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/base.py +0 -0
  185. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/registry.py +0 -0
  186. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/__init__.py +0 -0
  187. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/base.py +0 -0
  188. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/panel.py +0 -0
  189. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/registry.py +0 -0
  190. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/credential/__init__.py +0 -0
  191. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/credential/registry.py +0 -0
  192. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/__init__.py +0 -0
  193. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/azure_pipelines.py +0 -0
  194. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/base.py +0 -0
  195. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/github_actions.py +0 -0
  196. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/none.py +0 -0
  197. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/__init__.py +0 -0
  198. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/registry.py +0 -0
  199. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/github_app.py +0 -0
  200. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/__init__.py +0 -0
  201. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/base.py +0 -0
  202. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/panel.py +0 -0
  203. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/registry.py +0 -0
  204. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/__init__.py +0 -0
  205. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/base.py +0 -0
  206. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/claude_code.py +0 -0
  207. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/harness.py +0 -0
  208. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/__init__.py +0 -0
  209. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/base.py +0 -0
  210. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/container.py +0 -0
  211. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/registry.py +0 -0
  212. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/timeouts.py +0 -0
  213. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/worktree.py +0 -0
  214. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/__init__.py +0 -0
  215. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github_board_setup.py +0 -0
  216. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/after_merge.py +0 -0
  217. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/agent_answer.py +0 -0
  218. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/__init__.py +0 -0
  219. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/metrics_view.py +0 -0
  220. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/box_prove.py +0 -0
  221. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/cli_refusals.py +0 -0
  222. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/conformance/__init__.py +0 -0
  223. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/__init__.py +0 -0
  224. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/bot.py +0 -0
  225. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/checks.py +0 -0
  226. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/commands.py +0 -0
  227. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/decision.py +0 -0
  228. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/item_space.py +0 -0
  229. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/manifest.py +0 -0
  230. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/product.py +0 -0
  231. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/profile.py +0 -0
  232. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/project.py +0 -0
  233. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/review.py +0 -0
  234. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/state.py +0 -0
  235. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/ticket.py +0 -0
  236. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/credentials.py +0 -0
  237. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/doors.py +0 -0
  238. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/environ.py +0 -0
  239. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/factory.py +0 -0
  240. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/__init__.py +0 -0
  241. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/__init__.py +0 -0
  242. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/base.py +0 -0
  243. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/local.py +0 -0
  244. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/oidc.py +0 -0
  245. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/registry.py +0 -0
  246. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/__init__.py +0 -0
  247. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/bundle.py +0 -0
  248. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/check.py +0 -0
  249. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/contracts.py +0 -0
  250. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/experiment.py +0 -0
  251. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gaps.py +0 -0
  252. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gate.py +0 -0
  253. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gather.py +0 -0
  254. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/generator.py +0 -0
  255. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/inventory.py +0 -0
  256. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/okf.py +0 -0
  257. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/pipeline.py +0 -0
  258. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/render.py +0 -0
  259. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/service.py +0 -0
  260. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/staleness.py +0 -0
  261. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/language/__init__.py +0 -0
  262. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/language/assent.py +0 -0
  263. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/loader.py +0 -0
  264. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/__init__.py +0 -0
  265. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/ledger.py +0 -0
  266. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/recall.py +0 -0
  267. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/store.py +0 -0
  268. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/namespace.py +0 -0
  269. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/__init__.py +0 -0
  270. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/events.py +0 -0
  271. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/job_record.py +0 -0
  272. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/metrics.py +0 -0
  273. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/query.py +0 -0
  274. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/registry.py +0 -0
  275. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/sqlite_metrics.py +0 -0
  276. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/trajectory.py +0 -0
  277. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/__init__.py +0 -0
  278. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/concepts.py +0 -0
  279. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/context.py +0 -0
  280. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/cover.py +0 -0
  281. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/firstrun.py +0 -0
  282. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/history.py +0 -0
  283. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/infer.py +0 -0
  284. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/live_ci.py +0 -0
  285. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/onboard.py +0 -0
  286. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/propose_manifest.py +0 -0
  287. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/questions.py +0 -0
  288. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/readiness.py +0 -0
  289. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/renew.py +0 -0
  290. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/spend.py +0 -0
  291. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/ops/__init__.py +0 -0
  292. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/__init__.py +0 -0
  293. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/context.py +0 -0
  294. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/errors.py +0 -0
  295. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/merge_policy.py +0 -0
  296. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/promotion.py +0 -0
  297. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/risk.py +0 -0
  298. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/validation.py +0 -0
  299. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/engineering.md +0 -0
  300. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/floor.yaml +0 -0
  301. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/profiles/prototype.yaml +0 -0
  302. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/profiles/regulated.yaml +0 -0
  303. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/requirements/0000-template.md +0 -0
  304. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/coordinator.md +0 -0
  305. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/executor.md +0 -0
  306. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/planner.md +0 -0
  307. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/product.md +0 -0
  308. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/recovery.md +0 -0
  309. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/sizer.md +0 -0
  310. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/techlead.md +0 -0
  311. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/tdd.md +0 -0
  312. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/own_work.py +0 -0
  313. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/paths.py +0 -0
  314. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/__init__.py +0 -0
  315. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/authz.py +0 -0
  316. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/census.py +0 -0
  317. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/conformance.py +0 -0
  318. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/floor.py +0 -0
  319. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/presets.py +0 -0
  320. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/profiles.py +0 -0
  321. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/protected.py +0 -0
  322. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/test_work.py +0 -0
  323. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/node.yaml +0 -0
  324. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/python.yaml +0 -0
  325. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/security-oss.yaml +0 -0
  326. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/terraform.yaml +0 -0
  327. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/__init__.py +0 -0
  328. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/asked.py +0 -0
  329. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/board.py +0 -0
  330. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/case.py +0 -0
  331. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/config.py +0 -0
  332. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/conversation.py +0 -0
  333. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/domain.py +0 -0
  334. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/facts.py +0 -0
  335. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/followup.py +0 -0
  336. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/intents.py +0 -0
  337. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/loader.py +0 -0
  338. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/needs_action.py +0 -0
  339. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/onboard.py +0 -0
  340. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/queue.py +0 -0
  341. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/reading.py +0 -0
  342. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/requester.py +0 -0
  343. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/staging.py +0 -0
  344. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/workspace.py +0 -0
  345. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/review/__init__.py +0 -0
  346. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/review/verdict.py +0 -0
  347. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/__init__.py +0 -0
  348. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/card_repo.py +0 -0
  349. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/repo_cache.py +0 -0
  350. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/__init__.py +0 -0
  351. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/poller.py +0 -0
  352. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/schedule.py +0 -0
  353. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/starter.py +0 -0
  354. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/toolbox.py +0 -0
  355. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/scheduler.py +0 -0
  356. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/semver.py +0 -0
  357. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/diagnosis.py +0 -0
  358. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/memory.py +0 -0
  359. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/pack.py +0 -0
  360. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/testing/__init__.py +0 -0
  361. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/__init__.py +0 -0
  362. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/bounded.py +0 -0
  363. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/causes.py +0 -0
  364. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/scratch.py +0 -0
  365. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/dependency_links.txt +0 -0
  366. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/entry_points.txt +0 -0
  367. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/requires.txt +0 -0
  368. {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/top_level.txt +0 -0
  369. {openfactory-0.2.1 → openfactory-0.3.0}/setup.cfg +0 -0
  370. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_banner_line_does_not_kill_the_review.py +0 -0
  371. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_budget_nothing_spends_is_not_a_defect.py +0 -0
  372. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_card_is_named_in_the_forge_only_where_the_forge_owns_it.py +0 -0
  373. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_card_says_who_asked_for_it.py +0 -0
  374. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_case_does_not_outlive_its_test.py +0 -0
  375. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_concept_is_earned_not_declared.py +0 -0
  376. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_context_repository_is_creatable_on_azure_too.py +0 -0
  377. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_count_is_a_number_not_a_sentence.py +0 -0
  378. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_only_goes_to_its_own_host.py +0 -0
  379. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_decision_is_written_down.py +0 -0
  380. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_declared_environment_is_observed_or_named.py +0 -0
  381. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_delivered_ticket_is_not_rerun.py +0 -0
  382. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_double_without_intake_answers_every_turn.py +0 -0
  383. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failed_board_read_is_not_a_wrong_root.py +0 -0
  384. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failing_setup_is_not_silent.py +0 -0
  385. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_file_nothing_describes_is_the_least_safe_to_change.py +0 -0
  386. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fingerprint_gains_a_reader.py +0 -0
  387. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_forge_that_brings_its_own_credential_is_not_reported_as_having_none.py +0 -0
  388. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_free_deployment_resumes_its_own_sessions.py +0 -0
  389. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fresh_install_reads_an_empty_store.py +0 -0
  390. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fresh_install_registers_no_projects.py +0 -0
  391. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_is_not_a_stall.py +0 -0
  392. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_that_could_not_run.py +0 -0
  393. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_that_holds_says_so_where_the_person_decides.py +0 -0
  394. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_green_deploy_asks_somebody_to_look.py +0 -0
  395. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_green_environment_is_green_for_THIS_change.py +0 -0
  396. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_hostile_value_stays_data.py +0 -0
  397. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_human_gate_is_not_a_review.py +0 -0
  398. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_jira_project_is_a_board.py +0 -0
  399. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_job_branches_from_the_base_the_forge_holds.py +0 -0
  400. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_killed_mutation_run_cannot_hide.py +0 -0
  401. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_local_deployment_names_no_vendor.py +0 -0
  402. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_manifest_can_be_proven_before_it_is_merged.py +0 -0
  403. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_message_never_claims_an_action_nobody_takes.py +0 -0
  404. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_message_only_teaches_a_verb_the_channel_parses.py +0 -0
  405. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_model_nobody_can_run_is_not_a_setting.py +0 -0
  406. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_named_check_is_not_dropped.py +0 -0
  407. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_negation_the_bridge_carries_is_refused.py +0 -0
  408. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pass_in_flight_is_not_a_gate.py +0 -0
  409. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pass_that_changed_nothing.py +0 -0
  410. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_path_nothing_declares_is_not_the_freest.py +0 -0
  411. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_path_registers_itself.py +0 -0
  412. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_paused_factory_says_so.py +0 -0
  413. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_person_is_invited_not_signed_up.py +0 -0
  414. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_personal_accounts_board_is_readable.py +0 -0
  415. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_personal_boards_columns_can_be_read.py +0 -0
  416. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_poller_that_is_on_is_not_a_poller_that_ticks.py +0 -0
  417. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_preexisting_context_repo_is_declarable.py +0 -0
  418. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_probe_set_is_pinned_whole.py +0 -0
  419. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_can_change_the_language_it_speaks_first.py +0 -0
  420. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_declares_what_it_is.py +0 -0
  421. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_is_not_registered_as_the_wrong_vendor.py +0 -0
  422. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_promotion_the_box_cannot_run_is_refused_before_the_first_card.py +0 -0
  423. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proof_that_was_not_recorded_says_so.py +0 -0
  424. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposal_whose_base_moved_still_lands_on_the_local_forge.py +0 -0
  425. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposed_command_can_run_where_the_box_runs_it.py +0 -0
  426. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pull_request_is_read_and_merged_in_its_own_repository.py +0 -0
  427. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pull_that_changes_nothing_is_impossible_to_miss.py +0 -0
  428. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_question_reaches_the_person_who_asked.py +0 -0
  429. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_range_is_a_citation.py +0 -0
  430. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_rebuild_is_not_a_change.py +0 -0
  431. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ref_that_is_not_a_number.py +0 -0
  432. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_rejected_review_can_be_asked_again.py +0 -0
  433. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_remedy_names_a_document_that_exists.py +0 -0
  434. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_repaired_card_is_announced_on_any_tracker.py +0 -0
  435. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_repository_on_the_former_name_is_refused_at_every_door.py +0 -0
  436. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_resume_re_enters_the_merge.py +0 -0
  437. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_retired_pipeline_is_not_a_gate.py +0 -0
  438. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_review_belongs_to_the_code_it_read.py +0 -0
  439. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_scenario_is_one_criterion.py +0 -0
  440. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_scratch_directory_is_the_only_thing_we_delete.py +0 -0
  441. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_skip_is_something_that_happened.py +0 -0
  442. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_stranger_can_add_a_role.py +0 -0
  443. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_stranger_can_add_an_adapter.py +0 -0
  444. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_suite_that_stopped_collecting_is_not_a_green_suite.py +0 -0
  445. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ticket_ref_is_never_typed_as_a_number.py +0 -0
  446. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ticket_written_in_portuguese.py +0 -0
  447. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_trust_file_nobody_reads_is_a_green_proof.py +0 -0
  448. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_typed_instruction_reaches_the_same_row_as_the_button.py +0 -0
  449. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_vendor_error_code_is_not_a_status.py +0 -0
  450. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_verb_says_what_to_put_in_it.py +0 -0
  451. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wedged_job_has_an_exit.py +0 -0
  452. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wedged_job_is_seen.py +0 -0
  453. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_write_that_did_not_land_is_not_counted.py +0 -0
  454. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_yes_is_an_answer.py +0 -0
  455. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_accept_flows_end_to_end.py +0 -0
  456. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_adapter_conformance_suite.py +0 -0
  457. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_advisory_findings_survive_save.py +0 -0
  458. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_harness.py +0 -0
  459. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_resume_c2.py +0 -0
  460. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_roles.py +0 -0
  461. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_stream.py +0 -0
  462. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_token_pool.py +0 -0
  463. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_already_asked_is_answered_from_the_board_not_the_transcript.py +0 -0
  464. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_advisory_gate_cannot_hold_a_pickup.py +0 -0
  465. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_advisory_gate_reports_and_never_blocks.py +0 -0
  466. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_environment_written_before_this_change_still_resolves_the_old_path.py +0 -0
  467. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_intake_is_a_typed_case.py +0 -0
  468. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_open_question_can_be_retired.py +0 -0
  469. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_open_question_is_an_offer_not_a_toll.py +0 -0
  470. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_unread_review_is_not_a_rejection.py +0 -0
  471. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_board_read_cost.py +0 -0
  472. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_bot_push.py +0 -0
  473. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_box_carries_the_provider_kind.py +0 -0
  474. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_box_prove.py +0 -0
  475. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_breakdown_reuses_what_exists.py +0 -0
  476. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_brownfield_wired.py +0 -0
  477. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_c18_has_an_azure_expression.py +0 -0
  478. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_c18_reaches_every_entry_point.py +0 -0
  479. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_causes.py +0 -0
  480. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_ci_runs_what_we_run.py +0 -0
  481. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_client_board_is_not_a_test_bench.py +0 -0
  482. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_commit_workflow_strip.py +0 -0
  483. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_compose_forwards_the_whole_env_file.py +0 -0
  484. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_confirmation_is_understood.py +0 -0
  485. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_context.py +0 -0
  486. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_conversation_worlds.py +0 -0
  487. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_corpus_health_and_board_placement.py +0 -0
  488. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_create_repository_survives_an_app_token.py +0 -0
  489. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_decision.py +0 -0
  490. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_deploy_watch_workflow.py +0 -0
  491. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_diff_hygiene.py +0 -0
  492. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_apply_answers_in_the_readers_language.py +0 -0
  493. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_apply_takes_a_path_like_env_read.py +0 -0
  494. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_proposes_before_it_verifies.py +0 -0
  495. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_event_sinks.py +0 -0
  496. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_FROM_the_release_builds_resolves_without_the_local_daemon.py +0 -0
  497. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_image_the_compose_file_names_is_one_the_release_builds.py +0 -0
  498. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_mutation_plan_can_run.py +0 -0
  499. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_factory_asks_for_help.py +0 -0
  500. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_filed_work_is_reachable.py +0 -0
  501. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_first_real_conversation.py +0 -0
  502. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_ci.py +0 -0
  503. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_deploy.py +0 -0
  504. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_idempotency.py +0 -0
  505. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_foundation.py +0 -0
  506. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_gh_is_authenticated.py +0 -0
  507. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_handoff.py +0 -0
  508. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_asks_for_one_machine.py +0 -0
  509. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_generates_the_deployment.py +0 -0
  510. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_speaks_to_the_operator_not_to_us.py +0 -0
  511. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_that_acts.py +0 -0
  512. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_internal_imports_resolve.py +0 -0
  513. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_judge_verdict_parsing.py +0 -0
  514. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_kernel_names_no_vendor.py +0 -0
  515. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge.py +0 -0
  516. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_build_reaches_a_factory_cloned_project.py +0 -0
  517. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_derived_not_cached.py +0 -0
  518. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_experiment.py +0 -0
  519. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_pipeline.py +0 -0
  520. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_local_flow.py +0 -0
  521. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_loops_are_reachable.py +0 -0
  522. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_manifest_version.py +0 -0
  523. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_ledger.py +0 -0
  524. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_store.py +0 -0
  525. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_merge_policy.py +0 -0
  526. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_metrics.py +0 -0
  527. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_card_id_reaches_a_stranger.py +0 -0
  528. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_checkout_assumes_a_branch_name.py +0 -0
  529. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_gesture_exists_in_one_language_only.py +0 -0
  530. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_module_is_ever_called_like_a_function.py +0 -0
  531. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_plumbing_reaches_the_client.py +0 -0
  532. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_silent_failures.py +0 -0
  533. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_unbounded_growth.py +0 -0
  534. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_non_numeric_refs_reach_the_api.py +0 -0
  535. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_observability_registries.py +0 -0
  536. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboard_builds_the_context_too.py +0 -0
  537. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboard_proposes_a_measured_setup.py +0 -0
  538. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_a_context_that_already_exists.py +0 -0
  539. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_backfills_the_context.py +0 -0
  540. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_creates_the_context_repository.py +0 -0
  541. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_firstrun.py +0 -0
  542. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_one_process_one_installation.py +0 -0
  543. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_one_question_decides_where_the_factory_runs.py +0 -0
  544. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_opencode_harness.py +0 -0
  545. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_panel_approval_store.py +0 -0
  546. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_panel_reads_events_without_aws.py +0 -0
  547. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_park_alert.py +0 -0
  548. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_paths_are_traversal_safe.py +0 -0
  549. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_permission_is_an_order_in_every_language.py +0 -0
  550. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_ports_are_serialisable.py +0 -0
  551. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight.py +0 -0
  552. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_json_is_the_document_the_agent_lane_reads.py +0 -0
  553. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_names_a_remedy_for_every_thing_it_refuses.py +0 -0
  554. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_says_which_machine_it_measured.py +0 -0
  555. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_authoring.py +0 -0
  556. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_board_reads.py +0 -0
  557. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_brownfield.py +0 -0
  558. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_channel.py +0 -0
  559. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_config.py +0 -0
  560. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_corpus.py +0 -0
  561. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_followup.py +0 -0
  562. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_followup_e2e.py +0 -0
  563. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_init_writes_a_file_its_own_check_accepts.py +0 -0
  564. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_intents.py +0 -0
  565. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_loader.py +0 -0
  566. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_module.py +0 -0
  567. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_needs_action.py +0 -0
  568. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_role.py +0 -0
  569. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_sees_the_code.py +0 -0
  570. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_sweep.py +0 -0
  571. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_triage.py +0 -0
  572. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_view_is_stable.py +0 -0
  573. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_voice.py +0 -0
  574. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_workspace.py +0 -0
  575. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_project_add_exposes_language.py +0 -0
  576. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_project_add_speaks_azure_devops.py +0 -0
  577. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_promotion.py +0 -0
  578. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_provider_seams.py +0 -0
  579. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_public_core_names_no_forge.py +0 -0
  580. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_recent_runs_outlives_the_engine.py +0 -0
  581. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_registry_is_runtime_state.py +0 -0
  582. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_repo_cache_credentials.py +0 -0
  583. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_repo_cache_lifecycle.py +0 -0
  584. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_requirement_can_be_dropped.py +0 -0
  585. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_requirement_lifecycle.py +0 -0
  586. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sandbox_registry.py +0 -0
  587. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_scheduler.py +0 -0
  588. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_schedules_are_reachable.py +0 -0
  589. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_somebody_is_asked_to_look_at_what_shipped.py +0 -0
  590. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_something_finally_asks_the_agent.py +0 -0
  591. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sqlite_metrics.py +0 -0
  592. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sso_is_a_row_the_core_ships.py +0 -0
  593. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_classify.py +0 -0
  594. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_memory.py +0 -0
  595. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_self_heal.py +0 -0
  596. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_watch.py +0 -0
  597. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_telemetry_reads_from_the_configured_sink.py +0 -0
  598. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_call_arity.py +0 -0
  599. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_workflow.py +0 -0
  600. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_acceptance_map_reaches_a_person.py +0 -0
  601. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_add_on_packages_install.py +0 -0
  602. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_board.py +0 -0
  603. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_coordinates_have_one_home.py +0 -0
  604. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_credential_outlives_one_token.py +0 -0
  605. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_forge.py +0 -0
  606. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_pipelines.py +0 -0
  607. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_tracker.py +0 -0
  608. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_alert_names_its_ticket_on_any_tracker.py +0 -0
  609. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_announcement_carries_the_verdict.py +0 -0
  610. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_app_key_reaches_every_entry_point.py +0 -0
  611. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_app_permission_table_has_one_home.py +0 -0
  612. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_areas_that_change_are_the_ones_that_matter.py +0 -0
  613. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_attended_driver_records_what_it_spent.py +0 -0
  614. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_is_metered.py +0 -0
  615. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_names_the_real_reason.py +0 -0
  616. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_reads_every_source.py +0 -0
  617. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfills_questions_can_be_finished.py +0 -0
  618. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_base_branch_is_asked_not_assumed.py +0 -0
  619. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_bench_is_not_the_case.py +0 -0
  620. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_keeps_your_place.py +0 -0
  621. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_names_its_own_pickup_column.py +0 -0
  622. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_port_takes_any_providers_ref.py +0 -0
  623. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_says_where_it_lives.py +0 -0
  624. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_can_obtain_the_repository.py +0 -0
  625. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_can_reach_the_pr_branch.py +0 -0
  626. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_claims_only_what_it_does.py +0 -0
  627. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_clones_from_the_forge_it_was_told.py +0 -0
  628. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_does_not_run_the_clients_shell_profile.py +0 -0
  629. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_env_is_a_named_seam.py +0 -0
  630. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_image_the_worker_spawns_is_one_the_install_pulls.py +0 -0
  631. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_program_can_be_launched.py +0 -0
  632. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_proof_is_watchable.py +0 -0
  633. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_says_where_the_harness_is.py +0 -0
  634. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_transmits_while_it_runs.py +0 -0
  635. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_boxed_job_entrypoint.py +0 -0
  636. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_branch_carries_the_products_name.py +0 -0
  637. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_button_without_a_gate.py +0 -0
  638. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_carries_ONE_acceptance_section.py +0 -0
  639. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_moves_even_when_the_link_cannot_be_built.py +0 -0
  640. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_says_what_the_floor_says.py +0 -0
  641. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_is_a_directory_delete.py +0 -0
  642. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_thread_survives_a_refresh.py +0 -0
  643. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cli_refuses_in_sentences.py +0 -0
  644. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cli_runs_in_the_deployments_box.py +0 -0
  645. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_client_never_reads_an_emoji.py +0 -0
  646. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_client_releases_production.py +0 -0
  647. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_columns_and_the_identity_are_the_platforms.py +0 -0
  648. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_compose_file_can_be_installed_and_built_from_one_file.py +0 -0
  649. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_confirmation_executor.py +0 -0
  650. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_proposal_is_reachable.py +0 -0
  651. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_repository_can_be_created.py +0 -0
  652. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_repository_exists_on_this_runtime.py +0 -0
  653. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_addon_ledger.py +0 -0
  654. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_boundary.py +0 -0
  655. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_does_not_need_a_cloud.py +0 -0
  656. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_is_a_core.py +0 -0
  657. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_credential_scan_reads_a_delimiter.py +0 -0
  658. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_default_language_is_the_products.py +0 -0
  659. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_deployment_asks_the_rows_for_their_variables.py +0 -0
  660. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_diff_decides_scope_and_what_validates.py +0 -0
  661. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_distribution_ships_what_it_tells_you_to_copy.py +0 -0
  662. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_do_not_drift.py +0 -0
  663. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_name_no_vendor_as_the_core.py +0 -0
  664. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_say_which_promise.py +0 -0
  665. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_says_where_project_less_speech_goes.py +0 -0
  666. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_tells_the_truth_about_this_machine.py +0 -0
  667. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documentation_has_one_front_door.py +0 -0
  668. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documented_default_is_the_real_one.py +0 -0
  669. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documents_describe_the_product_this_tree_is.py +0 -0
  670. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documents_name_the_repository_and_keep_their_accents.py +0 -0
  671. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doors_derive_from_the_registries.py +0 -0
  672. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_end_to_end_install_is_a_script_the_suite_can_run.py +0 -0
  673. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_answers_or_says_so.py +0 -0
  674. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_dying_under_a_job_is_not_a_mystery.py +0 -0
  675. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_environment_carries_the_products_name.py +0 -0
  676. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_environment_round_is_a_terminal_verb.py +0 -0
  677. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_event_axis_is_reached.py +0 -0
  678. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_examples_a_reader_copies_load_on_the_core.py +0 -0
  679. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_extensibility_doc_names_the_real_group.py +0 -0
  680. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_extra_ca_file_is_always_a_valid_pem.py +0 -0
  681. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_asks_before_it_starts.py +0 -0
  682. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_authors_what_it_does_not_know_before_it_changes_it.py +0 -0
  683. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_runs_on_one_machine.py +0 -0
  684. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_runs_without_a_cloud.py +0 -0
  685. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_facts_are_files_the_techlead_can_open.py +0 -0
  686. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_facts_stay_files_for_every_harness.py +0 -0
  687. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_first_hour_fails_by_name.py +0 -0
  688. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_first_round_is_reachable.py +0 -0
  689. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_and_the_inbox_agree.py +0 -0
  690. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_a_deployment_default_not_a_transcription.py +0 -0
  691. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_enforced_where_the_money_is.py +0 -0
  692. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_can_read_a_foreign_repository.py +0 -0
  693. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_credential_is_per_project.py +0 -0
  694. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_opens_a_pr_in_another_repository.py +0 -0
  695. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_form_asks_what_the_address_needs.py +0 -0
  696. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_checks_the_shell_script_a_stranger_runs_first.py +0 -0
  697. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_holds_when_the_store_cannot_be_read.py +0 -0
  698. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_shows_what_the_review_found.py +0 -0
  699. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_generated_environment_names_a_work_directory_that_needs_no_root.py +0 -0
  700. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_endpoint_is_the_clients.py +0 -0
  701. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_is_watched_while_it_runs.py +0 -0
  702. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_pulse.py +0 -0
  703. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_history_says_where_the_work_is.py +0 -0
  704. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_install_line_the_readme_prints_is_the_url_the_release_publishes_to.py +0 -0
  705. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_builds_the_commands_it_says_it_does.py +0 -0
  706. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_knows_exactly_two_facts_the_package_does_not.py +0 -0
  707. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_never_calls_sudo.py +0 -0
  708. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_pins_a_version_and_never_installs_a_floating_tag.py +0 -0
  709. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_inventory_counts_what_it_could_not_place.py +0 -0
  710. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_journal_is_where_the_deployment_says.py +0 -0
  711. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_journal_records_how_a_job_ENDED.py +0 -0
  712. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_judging_roles_can_reach_their_model.py +0 -0
  713. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_language_reaches_every_unprompted_surface.py +0 -0
  714. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_lifecycle_names_no_provider.py +0 -0
  715. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_loop_tells_the_truth.py +0 -0
  716. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_manifest_can_be_proposed_server_side.py +0 -0
  717. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_manifest_reference_is_complete.py +0 -0
  718. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_does_not_wait_for_a_merge.py +0 -0
  719. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_is_published_beside_the_concepts.py +0 -0
  720. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_says_what_it_does_not_cover.py +0 -0
  721. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_merge_is_the_end_of_the_road.py +0 -0
  722. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_merge_re_authors_what_it_invalidated.py +0 -0
  723. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_model_is_a_per_project_choice.py +0 -0
  724. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_model_is_set_from_the_cli.py +0 -0
  725. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_mutation_runner_is_not_decoration.py +0 -0
  726. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_namespace_is_the_products_name.py +0 -0
  727. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_net_that_protects_the_client.py +0 -0
  728. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_number_told_is_the_number_written.py +0 -0
  729. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_one_machine_deployment_runs_unattended.py +0 -0
  730. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_open_distribution_has_a_voice.py +0 -0
  731. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_operator_hears_the_projects_language.py +0 -0
  732. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_operator_path_names_what_the_code_mints.py +0 -0
  733. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_oss_distribution.py +0 -0
  734. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_holds_one_engine_client.py +0 -0
  735. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_is_pushed_to.py +0 -0
  736. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_names_no_vendor.py +0 -0
  737. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_a_pass_is_running.py +0 -0
  738. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_where_to_change_things.py +0 -0
  739. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_whether_work_is_picked_up.py +0 -0
  740. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_which_harness.py +0 -0
  741. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_speaks_one_language.py +0 -0
  742. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_touches_no_cloud_locally.py +0 -0
  743. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_platform_reads_a_repository_and_proposes.py +0 -0
  744. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_poller_has_a_lever.py +0 -0
  745. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_carries_no_ones_past.py +0 -0
  746. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_carries_no_owners_name.py +0 -0
  747. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_opens_a_card_as_described.py +0 -0
  748. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_orders_the_backlog_from_chat.py +0 -0
  749. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_reads_an_intake_and_teaches.py +0 -0
  750. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_writes_the_backlog_order.py +0 -0
  751. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owners_facts_are_files.py +0 -0
  752. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_path_is_not_github_by_construction.py +0 -0
  753. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_role_lives_outside_slack.py +0 -0
  754. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_role_speaks_the_clients_language.py +0 -0
  755. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_project_remembers_what_everyone_said.py +0 -0
  756. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_promotion_tail_speaks.py +0 -0
  757. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_gates_each_repository.py +0 -0
  758. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_gates_pickup.py +0 -0
  759. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_on_the_host.py +0 -0
  760. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proposal_covers_the_floor.py +0 -0
  761. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_public_cut_is_written_down.py +0 -0
  762. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_public_documents_serve_a_stranger.py +0 -0
  763. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_pull_request_lives_in_the_file.py +0 -0
  764. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_pull_request_says_what_the_card_says.py +0 -0
  765. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_queue_proposes_in_batches.py +0 -0
  766. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_reading_is_bound_against_the_bundle_that_exists.py +0 -0
  767. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_refusal_reads_the_file_it_would_write.py +0 -0
  768. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_release_assembles_what_the_installer_downloads.py +0 -0
  769. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_remedy_a_refusal_hands_you_can_be_followed.py +0 -0
  770. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_renewal_keeps_the_inventory_current.py +0 -0
  771. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_repository_moves_to_the_ticket.py +0 -0
  772. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_review_findings_stay_fixed.py +0 -0
  773. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_reviewer_can_actually_run.py +0 -0
  774. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_role_does_not_claim_blindness.py +0 -0
  775. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_roles_can_reach_the_bundle.py +0 -0
  776. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_roles_run_on_the_local_rows.py +0 -0
  777. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_second_yes_is_the_requesters.py +0 -0
  778. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_security_policy_promises_what_the_scrub_does.py +0 -0
  779. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_set_ends_together.py +0 -0
  780. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_shell_we_ship_runs_on_both_seds.py +0 -0
  781. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_sizer_names_the_area_it_expects_to_touch.py +0 -0
  782. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_socket_is_real_and_scoped.py +0 -0
  783. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_split_says_which_card_to_drag.py +0 -0
  784. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_starter_template_passes_its_own_floor.py +0 -0
  785. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_station_strip_resets_on_a_re_run.py +0 -0
  786. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_stock_box_runs_what_the_proposer_proposes.py +0 -0
  787. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_structural_documents_speak_the_projects_portuguese.py +0 -0
  788. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_cannot_reach_production.py +0 -0
  789. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_runs_where_a_maintainer_sits.py +0 -0
  790. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_answers_without_a_channel.py +0 -0
  791. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_can_see_the_change_it_judges.py +0 -0
  792. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_can_see_what_it_reasons_about.py +0 -0
  793. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_does_not_cry_wolf.py +0 -0
  794. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_reads_through_the_ports.py +0 -0
  795. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_remembers_the_conversation.py +0 -0
  796. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ticket_url_is_the_trackers_own.py +0 -0
  797. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_toolbox.py +0 -0
  798. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_tracker_has_a_read_side.py +0 -0
  799. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_tracker_reads_what_a_person_wrote.py +0 -0
  800. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_trajectory_is_a_measurement.py +0 -0
  801. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_trajectory_reaches_the_record.py +0 -0
  802. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_two_halves_agree_on_which_code_they_run.py +0 -0
  803. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_vendors_credential_is_found_by_default.py +0 -0
  804. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_verifier_is_not_editable_by_what_it_verifies.py +0 -0
  805. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_walk_respects_what_the_repository_ignores.py +0 -0
  806. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_web_conversation_is_directed_at_the_person_in_it.py +0 -0
  807. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_web_offers_the_room_and_the_private_chat.py +0 -0
  808. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_wheel_is_published_under_the_name_the_docs_tell_you_to_install.py +0 -0
  809. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_wheel_ships_what_the_platform_needs.py +0 -0
  810. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_word_list_is_a_shortcut_not_a_gate.py +0 -0
  811. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_token_provider.py +0 -0
  812. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_tracker_board_writes.py +0 -0
  813. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_tracker_is_vendor_neutral.py +0 -0
  814. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_two_projects_do_not_share_a_box.py +0 -0
  815. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_voice_vocabulary.py +0 -0
  816. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_walking_skeleton.py +0 -0
  817. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_what_git_refuses_the_person_reads.py +0 -0
  818. {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_who_is_asking.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openfactory
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: A framework to run software tickets autonomously with coding agents — policies authorize actions, humans evaluate results.
5
5
  Author: The OpenFactory Authors
6
6
  License-Expression: Apache-2.0
@@ -4,4 +4,4 @@ Policies authorize actions; humans evaluate results. See
4
4
  docs/adr/0001-foundational-conceptual-model.md for the conceptual model.
5
5
  """
6
6
 
7
- __version__ = "0.2.1"
7
+ __version__ = "0.3.0"
@@ -99,7 +99,13 @@ class _Catalog:
99
99
  eagerly would put `temporalio` on the import path of every front end — including the panel,
100
100
  which is explicitly built to serve without the `runtime` extra installed. The bodies already
101
101
  import lazily; this keeps the module itself lazy too, so the guard tests can walk the table on
102
- a machine that has none of it."""
102
+ a machine that has none of it.
103
+
104
+ THAT PROMISE IS HELD BY A GUARD SINCE #178, because for a while it was only written down: the
105
+ page's own words came from `view.py` and `workflow.py`, so `/` and `/api/floor` answered 500
106
+ on exactly the install this paragraph describes. It asks every GET route in an interpreter
107
+ where `temporalio` cannot be found:
108
+ `tests/test_the_panel_serves_without_the_engines_client.py`."""
103
109
 
104
110
  def __getitem__(self, name: str) -> ActionSpec:
105
111
  return _catalog()[name]
@@ -220,8 +226,6 @@ async def perform(name: str, *, by: Actor, **params: object) -> Outcome:
220
226
  walks the chain, because an error crossing a Temporal activity boundary otherwise arrives as
221
227
  the fixed string "Activity task failed" (#66).
222
228
  """
223
- from openfactory.util.causes import first_message
224
-
225
229
  key = (name or "").strip().lower()
226
230
  found = _catalog().get(key)
227
231
  if found is None:
@@ -264,9 +268,7 @@ async def perform(name: str, *, by: Actor, **params: object) -> Outcome:
264
268
  outcome = await found.run(by=by, **params)
265
269
  except Exception as exc: # noqa: BLE001 — an action must never take its caller down
266
270
  log.exception("action %s raised for %s", key, by)
267
- return refused(
268
- FAILED, f"could not {key}: {first_message(exc)}",
269
- )
271
+ return refused(FAILED, f"could not {key}: {_why(exc)}")
270
272
  if not isinstance(outcome, Outcome): # an action that returns None is a silent success (F5)
271
273
  log.error("action %s returned %r, not an Outcome", key, type(outcome).__name__)
272
274
  return refused(
@@ -285,6 +287,29 @@ async def perform(name: str, *, by: Actor, **params: object) -> Outcome:
285
287
  _SECRET = frozenset({"password", "token", "secret", "key"})
286
288
 
287
289
 
290
+ def _why(exc: Exception) -> str:
291
+ """What the refusal says an action died of — the install, when the install is what is missing.
292
+
293
+ THE ROWS THAT ARE THE ENGINE'S IMPORT ITS MODULES INSIDE THEIR BODIES, by design: that is what
294
+ keeps `temporalio` off every front end's import path (see `_Catalog`). So on an install made
295
+ without the `runtime` extra, `start`, `stop`, `approve` and the rest raise here, and the person
296
+ read `could not start: No module named 'temporalio'` — a cause with no remedy. The catch-all
297
+ above is the one guard all of them share, so it is the one place that names the install:
298
+ `host.CLIENT_MISSING`, the sentence every other surface gives for that condition (#178)."""
299
+ from openfactory.runtime.host import CLIENT_MISSING, the_client_is_what_is_missing
300
+ from openfactory.util.causes import first_message
301
+
302
+ # The chain, not only its head: a row that wraps its own failures still died of the import.
303
+ link: BaseException | None = exc
304
+ for _ in range(8): # bounded: a chain is short, and a hand-built cyclic one must not spin
305
+ if link is None:
306
+ break
307
+ if the_client_is_what_is_missing(link):
308
+ return CLIENT_MISSING
309
+ link = link.__cause__ or link.__context__
310
+ return first_message(exc)
311
+
312
+
288
313
  def _loggable(params: dict[str, object]) -> dict[str, object]:
289
314
  return {k: ("***" if k in _SECRET else v) for k, v in params.items()}
290
315