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.
- {openfactory-0.2.1/openfactory.egg-info → openfactory-0.3.0}/PKG-INFO +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/__init__.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/__init__.py +31 -6
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/catalog.py +442 -74
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/base.py +120 -11
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/claude_code.py +56 -18
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/codex.py +5 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/kimi.py +5 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/opencode.py +5 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/azure_devops.py +15 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/base.py +112 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/columns.py +48 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/factory.py +16 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/jira.py +22 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/local.py +34 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/local.py +10 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/registry.py +26 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/azure_devops.py +76 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/base.py +62 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/github.py +207 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/local.py +5 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/azure_devops.py +15 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/base.py +82 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github.py +56 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github_project.py +15 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/jira.py +266 -25
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/local.py +13 -10
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/parse.py +108 -10
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/registry.py +22 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/app.py +337 -66
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/panel.html +388 -44
- openfactory-0.3.0/openfactory/approvals.py +341 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/cli.py +212 -40
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/conformance/adapters.py +16 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/refs.py +19 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/run.py +15 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/doctor.py +210 -41
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/ladder.py +7 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/reading.py +258 -14
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/people.py +10 -3
- openfactory-0.3.0/openfactory/listeners.py +245 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/messages.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/transcript.py +4 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/deployment.py +19 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/ops/impediment.py +8 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/machine.py +240 -66
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/plugins.py +18 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/preflight.py +7 -9
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/authoring.py +12 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/brownfield.py +14 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/channel.py +5 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/confirm.py +21 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/corpus.py +71 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/module.py +63 -11
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/release.py +105 -5
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/role.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/triage.py +37 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/voice.py +55 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/registry.py +16 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/boxed_job.py +10 -3
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/host.py +103 -13
- openfactory-0.3.0/openfactory/runtime/repairable.py +73 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/activities.py +164 -92
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/connection.py +90 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/io.py +6 -0
- openfactory-0.3.0/openfactory/runtime/temporal/standing.py +134 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/view.py +140 -47
- openfactory-0.3.0/openfactory/runtime/temporal/vocabulary.py +64 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/worker.py +44 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/workflow.py +113 -15
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/__init__.py +2 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/classify.py +54 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/conversation.py +28 -27
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/voice.py +39 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/watch.py +10 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/testing/local_flow.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0/openfactory.egg-info}/PKG-INFO +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/SOURCES.txt +38 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/pyproject.toml +1 -1
- openfactory-0.3.0/tests/test_a_card_that_was_split_is_not_delivered_until_its_children_are.py +320 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_is_asked_of_its_own_axis.py +2 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_is_scoped.py +3 -2
- openfactory-0.3.0/tests/test_a_declined_read_is_said_where_it_is_read.py +260 -0
- openfactory-0.3.0/tests/test_a_delivered_card_is_closed_by_its_tracker.py +210 -0
- openfactory-0.3.0/tests/test_a_deployments_addresses_have_one_owner.py +592 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_disabled_project_does_not_look_armed.py +7 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failing_check_is_read_for_what_it_is.py +1 -1
- openfactory-0.3.0/tests/test_a_finished_card_is_closed_as_delivered.py +466 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_frame_does_not_erase_what_it_omits.py +10 -3
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_free_deployment_can_read_its_logs.py +4 -2
- openfactory-0.3.0/tests/test_a_machine_made_hold_says_its_own_cause.py +379 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_manifest_that_loads_is_not_a_manifest_that_is_right.py +0 -1
- openfactory-0.3.0/tests/test_a_name_nobody_registered_is_not_removed.py +145 -0
- openfactory-0.3.0/tests/test_a_process_that_approves_keeps_one_engine_client.py +341 -0
- openfactory-0.3.0/tests/test_a_project_nobody_registered_is_never_a_500.py +184 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposal_can_carry_what_to_change.py +6 -4
- openfactory-0.3.0/tests/test_a_provider_is_named_by_its_own_row.py +223 -0
- openfactory-0.3.0/tests/test_a_refusal_is_not_an_answer.py +673 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_staged_decision_survives_a_refresh.py +4 -3
- openfactory-0.3.0/tests/test_a_store_that_cannot_be_read_authorizes_nobody_and_says_so.py +529 -0
- openfactory-0.3.0/tests/test_a_stream_ends_when_its_credential_does.py +913 -0
- openfactory-0.3.0/tests/test_a_verdict_nobody_answers_is_said_so_inside_the_deadline.py +381 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wait_can_say_until_when.py +8 -0
- openfactory-0.3.0/tests/test_a_withdrawn_card_is_not_delivered_on_jira.py +473 -0
- openfactory-0.3.0/tests/test_a_withdrawn_card_lands_in_the_sites_own_status_on_jira.py +478 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_acceptance_loop.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_accepting_starts_the_work.py +1 -1
- openfactory-0.3.0/tests/test_accepting_what_the_code_already_does_files_nothing.py +709 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_acknowledgement.py +2 -2
- openfactory-0.3.0/tests/test_an_activity_uses_the_client_its_worker_holds.py +383 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_unreadable_store_is_not_an_empty_one.py +2 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_api.py +6 -1
- openfactory-0.3.0/tests/test_auto_merge_is_judged_from_the_gates_that_were_read.py +257 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_board_is_vendor_neutral.py +13 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_card_maintenance.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_card_maintenance_channel.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_confirmation_by_click.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_decision_loop.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_doctor.py +18 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_doctor_checks_the_product_link.py +0 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_recall_eval.py +2 -2
- openfactory-0.3.0/tests/test_no_front_end_pays_for_the_engines_client_by_accident.py +584 -0
- openfactory-0.3.0/tests/test_nothing_speaks_before_it_asks_the_language.py +293 -0
- openfactory-0.3.0/tests/test_one_author_writes_the_close_of_a_repair_brief.py +382 -0
- openfactory-0.3.0/tests/test_one_author_writes_the_order_of_a_recovery_and_a_resume.py +415 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_orphaned_cards_are_repointed.py +12 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_simulation.py +3 -3
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_provenance_in_the_brief.py +2 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sweep_client_surface.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sweep_records_only_what_posted.py +12 -7
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_view.py +12 -3
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_action_layer.py +5 -4
- openfactory-0.3.0/tests/test_the_approver_verbs_ask_which_store_is_in_force.py +334 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_is_a_page_on_the_panel.py +27 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_lives_in_one_file.py +3 -1
- openfactory-0.3.0/tests/test_the_board_row_says_which_stage_its_column_is.py +541 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_image_resolves_in_one_place.py +6 -9
- openfactory-0.3.0/tests/test_the_budget_read_leaves_the_panels_loop.py +309 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_has_its_own_fences.py +4 -6
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ci_is_read_more_than_once.py +1 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cloud_is_a_directory_delete.py +18 -18
- openfactory-0.3.0/tests/test_the_doctor_names_the_gates_only_a_person_settles.py +341 -0
- openfactory-0.3.0/tests/test_the_doctor_never_says_no_gate_about_a_branch_it_could_not_read.py +410 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_survives_its_own_probes.py +5 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_starts_only_beside_the_library_its_worker_runs_on.py +8 -3
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_a_platform_capability.py +6 -4
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_not_re_read_on_every_frame.py +14 -2
- openfactory-0.3.0/tests/test_the_intake_memo_is_read_once_and_handed_out_as_a_copy.py +365 -0
- openfactory-0.3.0/tests/test_the_merge_gate_is_heard_on_every_path.py +428 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_is_a_channel.py +2 -1
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_reads_as_a_control_room.py +4 -2
- openfactory-0.3.0/tests/test_the_panel_serves_without_the_engines_client.py +440 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_conversation_is_core.py +2 -1
- openfactory-0.3.0/tests/test_the_repair_brief_states_the_failure_it_was_given.py +272 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_second_deployment_is_not_the_first.py +7 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_cannot_reach_a_live_engine.py +3 -2
- openfactory-0.3.0/tests/test_the_techlead_asks_the_engine_on_a_loop_that_outlives_the_question.py +233 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_sees_a_jira_floor.py +15 -22
- openfactory-0.3.0/tests/test_the_worker_waits_for_the_engine_to_listen.py +247 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_three_commands_one_verdict.py +3 -2
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_transcript_memory.py +2 -2
- openfactory-0.3.0/tests/test_what_the_card_shows_inside_a_bullet_is_what_is_read.py +202 -0
- openfactory-0.2.1/openfactory/approvals.py +0 -86
- openfactory-0.2.1/tests/test_nothing_speaks_before_it_asks_the_language.py +0 -172
- {openfactory-0.2.1 → openfactory-0.3.0}/LICENSE +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/NOTICE +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/README.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/actions/floor_intents.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/roles.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/routes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/session_store.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/stream.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/techlead.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/agent/token_pool.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/azure_devops.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_db.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/board_setup/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/panel.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/channel/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/credential/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/credential/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/azure_pipelines.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/github_actions.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/environment/none.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/forge/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/github_app.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/panel.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/notify/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/claude_code.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/reviewer/harness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/container.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/timeouts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/sandbox/worktree.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/adapters/tracker/github_board_setup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/after_merge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/agent_answer.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/api/metrics_view.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/box_prove.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/cli_refusals.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/conformance/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/bot.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/checks.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/commands.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/decision.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/item_space.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/manifest.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/product.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/profile.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/project.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/review.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/state.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/contracts/ticket.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/credentials.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/doors.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/environ.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/factory.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/floor/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/base.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/local.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/oidc.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/identity/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/bundle.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/check.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/contracts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/experiment.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gaps.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gate.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/gather.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/generator.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/inventory.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/okf.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/pipeline.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/render.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/service.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/knowledge/staleness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/language/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/language/assent.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/loader.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/ledger.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/recall.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/memory/store.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/namespace.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/events.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/job_record.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/metrics.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/query.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/sqlite_metrics.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/observability/trajectory.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/concepts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/context.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/cover.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/firstrun.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/history.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/infer.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/live_ci.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/onboard.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/propose_manifest.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/questions.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/readiness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/renew.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/onboarding/spend.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/ops/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/context.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/errors.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/merge_policy.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/promotion.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/risk.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/orchestrator/validation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/engineering.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/floor.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/profiles/prototype.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/profiles/regulated.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/requirements/0000-template.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/coordinator.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/executor.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/planner.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/product.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/recovery.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/sizer.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/roles/techlead.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/org_defaults/tdd.md +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/own_work.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/paths.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/authz.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/census.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/conformance.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/floor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/presets.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/profiles.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/protected.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/policy/test_work.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/node.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/python.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/security-oss.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/presets/terraform.yaml +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/asked.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/board.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/case.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/config.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/conversation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/domain.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/facts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/followup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/intents.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/loader.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/needs_action.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/onboard.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/queue.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/reading.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/requester.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/staging.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/product/workspace.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/review/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/review/verdict.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/card_repo.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/repo_cache.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/poller.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/schedule.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/temporal/starter.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/runtime/toolbox.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/scheduler.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/semver.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/diagnosis.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/memory.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/techlead/pack.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/testing/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/__init__.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/bounded.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/causes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory/util/scratch.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/dependency_links.txt +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/entry_points.txt +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/requires.txt +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/openfactory.egg-info/top_level.txt +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/setup.cfg +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_banner_line_does_not_kill_the_review.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_budget_nothing_spends_is_not_a_defect.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_card_says_who_asked_for_it.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_case_does_not_outlive_its_test.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_concept_is_earned_not_declared.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_context_repository_is_creatable_on_azure_too.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_count_is_a_number_not_a_sentence.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_credential_only_goes_to_its_own_host.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_decision_is_written_down.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_declared_environment_is_observed_or_named.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_delivered_ticket_is_not_rerun.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_double_without_intake_answers_every_turn.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failed_board_read_is_not_a_wrong_root.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_failing_setup_is_not_silent.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_file_nothing_describes_is_the_least_safe_to_change.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fingerprint_gains_a_reader.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_free_deployment_resumes_its_own_sessions.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fresh_install_reads_an_empty_store.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_fresh_install_registers_no_projects.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_is_not_a_stall.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_that_could_not_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_gate_that_holds_says_so_where_the_person_decides.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_green_deploy_asks_somebody_to_look.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_green_environment_is_green_for_THIS_change.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_hostile_value_stays_data.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_human_gate_is_not_a_review.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_jira_project_is_a_board.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_job_branches_from_the_base_the_forge_holds.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_killed_mutation_run_cannot_hide.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_local_deployment_names_no_vendor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_manifest_can_be_proven_before_it_is_merged.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_message_never_claims_an_action_nobody_takes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_message_only_teaches_a_verb_the_channel_parses.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_model_nobody_can_run_is_not_a_setting.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_named_check_is_not_dropped.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_negation_the_bridge_carries_is_refused.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pass_in_flight_is_not_a_gate.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pass_that_changed_nothing.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_path_nothing_declares_is_not_the_freest.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_path_registers_itself.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_paused_factory_says_so.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_person_is_invited_not_signed_up.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_personal_accounts_board_is_readable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_personal_boards_columns_can_be_read.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_poller_that_is_on_is_not_a_poller_that_ticks.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_preexisting_context_repo_is_declarable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_probe_set_is_pinned_whole.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_can_change_the_language_it_speaks_first.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_declares_what_it_is.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_project_is_not_registered_as_the_wrong_vendor.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proof_that_was_not_recorded_says_so.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposal_whose_base_moved_still_lands_on_the_local_forge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_proposed_command_can_run_where_the_box_runs_it.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pull_request_is_read_and_merged_in_its_own_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_pull_that_changes_nothing_is_impossible_to_miss.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_question_reaches_the_person_who_asked.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_range_is_a_citation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_rebuild_is_not_a_change.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ref_that_is_not_a_number.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_rejected_review_can_be_asked_again.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_remedy_names_a_document_that_exists.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_repaired_card_is_announced_on_any_tracker.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_repository_on_the_former_name_is_refused_at_every_door.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_resume_re_enters_the_merge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_retired_pipeline_is_not_a_gate.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_review_belongs_to_the_code_it_read.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_scenario_is_one_criterion.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_scratch_directory_is_the_only_thing_we_delete.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_skip_is_something_that_happened.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_stranger_can_add_a_role.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_stranger_can_add_an_adapter.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_suite_that_stopped_collecting_is_not_a_green_suite.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ticket_ref_is_never_typed_as_a_number.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_ticket_written_in_portuguese.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_trust_file_nobody_reads_is_a_green_proof.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_typed_instruction_reaches_the_same_row_as_the_button.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_vendor_error_code_is_not_a_status.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_verb_says_what_to_put_in_it.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wedged_job_has_an_exit.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_wedged_job_is_seen.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_write_that_did_not_land_is_not_counted.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_a_yes_is_an_answer.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_accept_flows_end_to_end.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_adapter_conformance_suite.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_advisory_findings_survive_save.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_harness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_resume_c2.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_roles.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_stream.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_agent_token_pool.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_already_asked_is_answered_from_the_board_not_the_transcript.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_advisory_gate_cannot_hold_a_pickup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_advisory_gate_reports_and_never_blocks.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_environment_written_before_this_change_still_resolves_the_old_path.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_intake_is_a_typed_case.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_open_question_can_be_retired.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_open_question_is_an_offer_not_a_toll.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_an_unread_review_is_not_a_rejection.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_board_read_cost.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_bot_push.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_box_carries_the_provider_kind.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_box_prove.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_breakdown_reuses_what_exists.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_brownfield_wired.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_c18_has_an_azure_expression.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_c18_reaches_every_entry_point.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_causes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_ci_runs_what_we_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_client_board_is_not_a_test_bench.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_commit_workflow_strip.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_compose_forwards_the_whole_env_file.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_confirmation_is_understood.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_context.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_conversation_worlds.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_corpus_health_and_board_placement.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_create_repository_survives_an_app_token.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_decision.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_deploy_watch_workflow.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_diff_hygiene.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_apply_answers_in_the_readers_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_apply_takes_a_path_like_env_read.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_env_proposes_before_it_verifies.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_event_sinks.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_FROM_the_release_builds_resolves_without_the_local_daemon.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_image_the_compose_file_names_is_one_the_release_builds.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_every_mutation_plan_can_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_factory_asks_for_help.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_filed_work_is_reachable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_first_real_conversation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_ci.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_deploy.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_forge_idempotency.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_foundation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_gh_is_authenticated.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_handoff.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_asks_for_one_machine.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_generates_the_deployment.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_speaks_to_the_operator_not_to_us.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_init_that_acts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_internal_imports_resolve.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_judge_verdict_parsing.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_kernel_names_no_vendor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_build_reaches_a_factory_cloned_project.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_derived_not_cached.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_experiment.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_knowledge_pipeline.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_local_flow.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_loops_are_reachable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_manifest_version.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_ledger.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_memory_store.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_merge_policy.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_metrics.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_card_id_reaches_a_stranger.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_checkout_assumes_a_branch_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_gesture_exists_in_one_language_only.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_module_is_ever_called_like_a_function.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_plumbing_reaches_the_client.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_silent_failures.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_no_unbounded_growth.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_non_numeric_refs_reach_the_api.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_observability_registries.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboard_builds_the_context_too.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboard_proposes_a_measured_setup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_a_context_that_already_exists.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_backfills_the_context.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_creates_the_context_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_onboarding_firstrun.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_one_process_one_installation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_one_question_decides_where_the_factory_runs.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_opencode_harness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_panel_approval_store.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_panel_reads_events_without_aws.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_park_alert.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_paths_are_traversal_safe.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_permission_is_an_order_in_every_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_ports_are_serialisable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_json_is_the_document_the_agent_lane_reads.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_names_a_remedy_for_every_thing_it_refuses.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_preflight_says_which_machine_it_measured.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_authoring.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_board_reads.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_brownfield.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_channel.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_config.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_corpus.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_followup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_followup_e2e.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_init_writes_a_file_its_own_check_accepts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_intents.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_loader.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_module.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_needs_action.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_role.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_sees_the_code.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_sweep.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_triage.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_view_is_stable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_voice.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_product_workspace.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_project_add_exposes_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_project_add_speaks_azure_devops.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_promotion.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_provider_seams.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_public_core_names_no_forge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_recent_runs_outlives_the_engine.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_registry_is_runtime_state.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_repo_cache_credentials.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_repo_cache_lifecycle.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_requirement_can_be_dropped.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_requirement_lifecycle.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sandbox_registry.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_scheduler.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_schedules_are_reachable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_somebody_is_asked_to_look_at_what_shipped.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_something_finally_asks_the_agent.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sqlite_metrics.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_sso_is_a_row_the_core_ships.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_classify.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_memory.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_self_heal.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_techlead_watch.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_telemetry_reads_from_the_configured_sink.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_call_arity.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_temporal_workflow.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_acceptance_map_reaches_a_person.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_add_on_packages_install.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_board.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_coordinates_have_one_home.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_credential_outlives_one_token.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_forge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_pipelines.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ado_tracker.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_alert_names_its_ticket_on_any_tracker.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_announcement_carries_the_verdict.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_app_key_reaches_every_entry_point.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_app_permission_table_has_one_home.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_areas_that_change_are_the_ones_that_matter.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_attended_driver_records_what_it_spent.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_is_metered.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_names_the_real_reason.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfill_reads_every_source.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_backfills_questions_can_be_finished.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_base_branch_is_asked_not_assumed.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_bench_is_not_the_case.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_keeps_your_place.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_names_its_own_pickup_column.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_port_takes_any_providers_ref.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_board_says_where_it_lives.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_can_obtain_the_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_can_reach_the_pr_branch.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_claims_only_what_it_does.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_clones_from_the_forge_it_was_told.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_does_not_run_the_clients_shell_profile.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_env_is_a_named_seam.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_image_the_worker_spawns_is_one_the_install_pulls.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_program_can_be_launched.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_proof_is_watchable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_says_where_the_harness_is.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_box_transmits_while_it_runs.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_boxed_job_entrypoint.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_branch_carries_the_products_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_button_without_a_gate.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_carries_ONE_acceptance_section.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_moves_even_when_the_link_cannot_be_built.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_card_says_what_the_floor_says.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_is_a_directory_delete.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_chat_thread_survives_a_refresh.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cli_refuses_in_sentences.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_cli_runs_in_the_deployments_box.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_client_never_reads_an_emoji.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_client_releases_production.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_columns_and_the_identity_are_the_platforms.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_compose_file_can_be_installed_and_built_from_one_file.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_confirmation_executor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_proposal_is_reachable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_repository_can_be_created.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_context_repository_exists_on_this_runtime.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_addon_ledger.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_boundary.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_does_not_need_a_cloud.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_core_is_a_core.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_credential_scan_reads_a_delimiter.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_default_language_is_the_products.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_deployment_asks_the_rows_for_their_variables.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_diff_decides_scope_and_what_validates.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_distribution_ships_what_it_tells_you_to_copy.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_do_not_drift.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_name_no_vendor_as_the_core.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_docs_say_which_promise.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_says_where_project_less_speech_goes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doctor_tells_the_truth_about_this_machine.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documentation_has_one_front_door.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documented_default_is_the_real_one.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documents_describe_the_product_this_tree_is.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_documents_name_the_repository_and_keep_their_accents.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_doors_derive_from_the_registries.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_answers_or_says_so.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_engine_dying_under_a_job_is_not_a_mystery.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_environment_carries_the_products_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_environment_round_is_a_terminal_verb.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_event_axis_is_reached.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_examples_a_reader_copies_load_on_the_core.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_extensibility_doc_names_the_real_group.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_extra_ca_file_is_always_a_valid_pem.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_asks_before_it_starts.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_runs_on_one_machine.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_factory_runs_without_a_cloud.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_facts_are_files_the_techlead_can_open.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_facts_stay_files_for_every_harness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_first_hour_fails_by_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_first_round_is_reachable.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_and_the_inbox_agree.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_a_deployment_default_not_a_transcription.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_floor_is_enforced_where_the_money_is.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_can_read_a_foreign_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_credential_is_per_project.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_forge_opens_a_pr_in_another_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_form_asks_what_the_address_needs.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_checks_the_shell_script_a_stranger_runs_first.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_holds_when_the_store_cannot_be_read.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_gate_shows_what_the_review_found.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_generated_environment_names_a_work_directory_that_needs_no_root.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_endpoint_is_the_clients.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_is_watched_while_it_runs.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_harness_pulse.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_history_says_where_the_work_is.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_builds_the_commands_it_says_it_does.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_knows_exactly_two_facts_the_package_does_not.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_never_calls_sudo.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_installer_pins_a_version_and_never_installs_a_floating_tag.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_inventory_counts_what_it_could_not_place.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_journal_is_where_the_deployment_says.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_journal_records_how_a_job_ENDED.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_judging_roles_can_reach_their_model.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_language_reaches_every_unprompted_surface.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_lifecycle_names_no_provider.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_loop_tells_the_truth.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_manifest_can_be_proposed_server_side.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_manifest_reference_is_complete.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_does_not_wait_for_a_merge.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_is_published_beside_the_concepts.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_map_says_what_it_does_not_cover.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_merge_is_the_end_of_the_road.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_merge_re_authors_what_it_invalidated.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_model_is_a_per_project_choice.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_model_is_set_from_the_cli.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_mutation_runner_is_not_decoration.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_namespace_is_the_products_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_net_that_protects_the_client.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_number_told_is_the_number_written.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_one_machine_deployment_runs_unattended.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_open_distribution_has_a_voice.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_operator_hears_the_projects_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_operator_path_names_what_the_code_mints.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_oss_distribution.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_holds_one_engine_client.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_is_pushed_to.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_names_no_vendor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_a_pass_is_running.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_where_to_change_things.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_whether_work_is_picked_up.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_says_which_harness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_speaks_one_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_panel_touches_no_cloud_locally.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_platform_reads_a_repository_and_proposes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_poller_has_a_lever.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_carries_no_ones_past.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_carries_no_owners_name.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_opens_a_card_as_described.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_orders_the_backlog_from_chat.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_reads_an_intake_and_teaches.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owner_writes_the_backlog_order.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_owners_facts_are_files.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_path_is_not_github_by_construction.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_role_lives_outside_slack.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_product_role_speaks_the_clients_language.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_project_remembers_what_everyone_said.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_promotion_tail_speaks.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_gates_each_repository.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_gates_pickup.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proof_on_the_host.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_proposal_covers_the_floor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_public_cut_is_written_down.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_public_documents_serve_a_stranger.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_pull_request_lives_in_the_file.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_pull_request_says_what_the_card_says.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_queue_proposes_in_batches.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_reading_is_bound_against_the_bundle_that_exists.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_refusal_reads_the_file_it_would_write.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_release_assembles_what_the_installer_downloads.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_remedy_a_refusal_hands_you_can_be_followed.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_renewal_keeps_the_inventory_current.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_repository_moves_to_the_ticket.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_review_findings_stay_fixed.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_reviewer_can_actually_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_role_does_not_claim_blindness.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_roles_can_reach_the_bundle.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_roles_run_on_the_local_rows.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_second_yes_is_the_requesters.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_security_policy_promises_what_the_scrub_does.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_set_ends_together.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_shell_we_ship_runs_on_both_seds.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_sizer_names_the_area_it_expects_to_touch.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_socket_is_real_and_scoped.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_split_says_which_card_to_drag.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_starter_template_passes_its_own_floor.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_station_strip_resets_on_a_re_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_stock_box_runs_what_the_proposer_proposes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_structural_documents_speak_the_projects_portuguese.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_cannot_reach_production.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_suite_runs_where_a_maintainer_sits.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_answers_without_a_channel.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_can_see_the_change_it_judges.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_can_see_what_it_reasons_about.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_does_not_cry_wolf.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_reads_through_the_ports.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_techlead_remembers_the_conversation.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_ticket_url_is_the_trackers_own.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_toolbox.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_tracker_has_a_read_side.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_tracker_reads_what_a_person_wrote.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_trajectory_is_a_measurement.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_trajectory_reaches_the_record.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_two_halves_agree_on_which_code_they_run.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_vendors_credential_is_found_by_default.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_verifier_is_not_editable_by_what_it_verifies.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_walk_respects_what_the_repository_ignores.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_web_conversation_is_directed_at_the_person_in_it.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_web_offers_the_room_and_the_private_chat.py +0 -0
- {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
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_wheel_ships_what_the_platform_needs.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_the_word_list_is_a_shortcut_not_a_gate.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_token_provider.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_tracker_board_writes.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_tracker_is_vendor_neutral.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_two_projects_do_not_share_a_box.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_voice_vocabulary.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_walking_skeleton.py +0 -0
- {openfactory-0.2.1 → openfactory-0.3.0}/tests/test_what_git_refuses_the_person_reads.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
|