gitgrip 2.0.0a10__tar.gz → 2.0.0a12__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.
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/PKG-INFO +2 -2
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/README.md +1 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/PKG-INFO +2 -2
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/SOURCES.txt +14 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/lane_workspace_prototype.py +47 -7
- gitgrip-2.0.0a12/gr2/python_cli/_build.json +1 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/app.py +417 -47
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/approvals.py +46 -5
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/clone_exec.py +4 -4
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/commit.py +5 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/delete.py +3 -2
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gitops.py +23 -9
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/grip.py +13 -3
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/grip_cli.py +16 -6
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/hooks.py +2 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/leased_push.py +3 -2
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_gate.py +63 -5
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/migration.py +97 -11
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/open_gr_review.py +5 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/push.py +1 -1
- gitgrip-2.0.0a12/gr2/python_cli/read_review.py +107 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_update.py +1 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/root_option.py +10 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/spec_apply.py +9 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_guidance.py +2 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/pyproject.toml +1 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_api_dump.py +4 -1
- gitgrip-2.0.0a12/tests/test_branch_in_lane.py +441 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_commit.py +22 -2
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_fetch_refmap_pr_base.py +28 -0
- gitgrip-2.0.0a12/tests/test_fetch_refmap_verbs.py +134 -0
- gitgrip-2.0.0a12/tests/test_git_positional_refusal.py +110 -0
- gitgrip-2.0.0a12/tests/test_git_positional_sites.py +197 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_defaults.py +288 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_plugins.py +34 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_remove.py +222 -5
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_materialize_pin.py +39 -4
- gitgrip-2.0.0a12/tests/test_migrate_gr1_member_origin.py +215 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_outside_names_as_git_options.py +88 -2
- gitgrip-2.0.0a12/tests/test_pin_rewind_shallow_path_quoted.py +37 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_view.py +136 -0
- gitgrip-2.0.0a12/tests/test_printed_command_values_quoted.py +140 -0
- gitgrip-2.0.0a12/tests/test_review_check_unknown.py +82 -0
- gitgrip-2.0.0a12/tests/test_review_merge_tracking_command_quoted.py +269 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_after_push.py +50 -0
- gitgrip-2.0.0a12/tests/test_review_read_pr.py +295 -0
- gitgrip-2.0.0a12/tests/test_review_reads.py +344 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_update.py +38 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_root_option_verbs.py +2 -2
- gitgrip-2.0.0a12/tests/test_root_optional_help.py +44 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_selected_workspace_commit.py +2 -2
- gitgrip-2.0.0a12/tests/test_spec_sourced_git_lines_quoted.py +153 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sprint21_sync_platform.py +90 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_submodule_init.py +19 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_static.py +2 -2
- gitgrip-2.0.0a10/gr2/python_cli/_build.json +0 -1
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/dependency_links.txt +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/entry_points.txt +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/requires.txt +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/top_level.txt +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/PLATFORM_ADAPTER_CHANGELOG.md +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/__init__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/api_core.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/__init__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/activate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/agent_manifest.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/cross_repo.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/drivers.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/introspection.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/language_drivers.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/objects.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/perf.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/refs.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/trust.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/types.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/units.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/workspace_spec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/__init__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/cache_materialization_probe.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_event_stress.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_lease_stress.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_workspace_cap_stress.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/contribution_protocol.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/cross_mode_lane_stress.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/jsonl_store.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/layout_model_probe.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/propagation_daemon.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/propagation_state_machine.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_exec_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_hook_runtime_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_migration_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_review_checkout_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_spec_apply_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/real_git_lane_materialization.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/real_git_playground.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/recall_lane_history.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/repo_maintenance_prototype.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/repo_transport_probe.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/__init__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/__main__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/add.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/agent_record.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/approval_schema.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/arbon.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/branch_update.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/channel_bridge.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/check_records.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/config.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/consent.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/context.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/declared_sets.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/defaults.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/ecosystems_python.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/env_exec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/events.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/execops.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/exit_codes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/failures.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/file_exec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/git_review.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gitinclude.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gr_resolver.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gr_shadow.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_defaults.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_downstream.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_graph.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_plugins.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/launch_exec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/layout.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/member_field_tree.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_receipts.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_verification.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/names.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/next_steps.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/platform.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/pr.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/project_review.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/proto_json.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/prune.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_allocation.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_diff.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_dispatch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_ephemeral.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_field_tree.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_members.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_rebind.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_records.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_run.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_runners.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/set_check.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/set_hints.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/shadow.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/staging_cleanup.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/store_hooks.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/syncops.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/target.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/tracking.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/version.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_mode.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_snapshot.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.approval.v1alpha1/approval.proto +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.approval.v1alpha1/descriptor_set.pb +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.check.v1alpha1/check.proto +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.check.v1alpha1/descriptor_set.pb +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.merge.v1alpha1/descriptor_set.pb +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.merge.v1alpha1/merge.proto +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.review.v1alpha1/descriptor_set.pb +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.review.v1alpha1/review.proto +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/gr2-materialization-plan-v1.schema.json +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/gr2-workspace-spec-v1.schema.json +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2_overlay/__init__.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/setup.cfg +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/setup.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_add.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_add_lane_from_a_subdirectory.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_manifest_overlay_source.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_append.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_fold.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_stamps.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_api_core_seam.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_app_event_outcomes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_apply_convergence.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_apply_gr1_sibling_adoption.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_approval_schema.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_arbon.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_bind_merge_head_refusals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_break_17_unit_path_containment.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_break_18_gr1_sibling_units.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_channel_bridge.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_cli_adapter_error_boundary.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_cli_shape_witnesses.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_clone_materialization.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_config_base_path_guard.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_config_overlay.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_conftest_git_isolation.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_consent_key_paths.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_context_resolver.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_contribution_protocol.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_declared_set_pins.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_declared_sets.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_defaults_from_repo.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_delete.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_deprecation_registry.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_ecosystems_python.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_ensure_lane_checkout_reference_clone.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_env_materialization.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_event_log_integrity.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_event_outcome_policy.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_events.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_events_torn_line.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_apostrophe_and_oserror.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_run_names_what_did_not_run.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_single_string_and_materialize_plan.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_execops.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_failure_event_outcome.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_fetch_refmap.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_field_tree_name.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_field_tree_schema_reader.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_files_compose.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_first_five_minutes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_foreground_launch_runtime.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_git_review.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_git_transport_allow_list.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitinclude_compiler.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitops_locating_env.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitops_shared.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr1_first_run_guidance.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr2_packaging.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr2_review_receipt.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_installed_wheel.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_resolved_cleared.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_resolver_conformance.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_shadow.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_hardening.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_snapshot.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_toml_literals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_toml_schema_v1.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hook_events.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hook_hardening.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hooks_consent.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hooks_group_names.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hostile_names.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hostile_names_helper.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_init_advice_never_nests.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_jsonl_store.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_cache_keyed_by_member_name.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_checkout_root.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_fork_base_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_refusal_leaves_nothing.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_refuses_own_branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_downstream.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_downstream_run.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_enter_hook_warnings.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_exit_keeps_dirty_work.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_graph.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_lease_show_json.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_lifecycle_safety.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_probe.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_probe_batch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_push.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_repo_paths_and_all_skipped.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_roles.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_show_name.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_store_path_pins.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_toml_serialization.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_launch_primitive.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_layout_census.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_leased_push.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_linked_review_receipts.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_hindsight.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_mem0.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_zep.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_malformed_remote_refusal.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_materialization_plan_contract.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_member_working_root_checkout_materialize.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_credential_remotes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_evidence.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_parent_verification.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migrate_gr1_one_root.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migration.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migration_overlay_compatibility.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_names.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_native_store_gitinclude.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_native_store_review_record_probes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_no_bare_python_cli_imports.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_np_bench_contract_scenario.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_null_current_lane_refusal.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_one_pin_record.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_open_gr_enter.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_open_project_refusal_reason_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_out_of_set_hint.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_outbox_ack_after_effect.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_acceptance.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_activate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cli_wiring.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_composition_merge.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_atomic_apply.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_perf_gate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_rollback.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_driver_registry.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_introspection.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_multi_stack.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_object_encoding.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_perf_gates.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_python_driver.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_encoding.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_perf_gates.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_repo_state.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_staging_discipline.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_trust_model.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_workspace_spec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_platform_adapter_changelog.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_platform_adapter_plugins.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_adapter_v2_target.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_create_pins_itself.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_events.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_group_legibility.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_head_pin.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_method.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_missing_target.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_partial_failure.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_review_subject.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_file_materialization.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_review_range_reconstruction.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_review_three_repo.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_projection_tracked_dest.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_contribution.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_daemon.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_state_machine.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_proto_json.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_prune.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_push.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_python_group_install.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_readme_verbs_exist.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_readme_walk.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_record_schema_copies.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_refusal_names_the_cause.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_remote_check_records.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_maintenance_gitops.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_path_read_through.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_linked_worktree.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_schema_version.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_symlinked_git_dir.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_retire_gr1.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4_v2.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4_v3.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_allocation_recovery.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ansi_parse.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_approvals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_b3_reader_alignment.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_author.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_fork_base.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_from_range.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_migration.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_native_store.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_root_refs.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_verify.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_check_name.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_close_gr.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_close_keeps_local_work.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_context_defaults.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_context_witnesses.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_create_project_cli.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_dispatch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ephemeral.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_events.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree_reader_edges.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree_readers.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_install_hint.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_json_refusals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_gate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_gate_lost_ack.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_platform.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_receipt.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_set_alone.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_set_required.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_updates_tracking_ref.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_named_refusals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_open_lane.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_open_reader_lane.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_ratified.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_rows_json_help.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_stamp_names.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pinned_target.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pr_marker_context.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_publish_all.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_reader_defaults.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_rebind.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_receipt_cleanup.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_receive_no_migrate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_migration.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_reader.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_writer.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_remote_safety.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_context.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_deleted_cwd.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_dependency_order.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_import_isolation.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_integrity_recheck.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_multi_repo.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_package_name.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_plugin_order.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_rerun_and_refusal_receipt.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_venv_and_refusal_identity.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_runners.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_show_diff.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_subject.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_transport.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_v1_format_guard.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_verify_inside.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_verify_json_refusals.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_vocabulary.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_rmtree_or_refuse.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_credential_remote.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_merge_head.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_remote_heads.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_shadow.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_shadow_lease.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_single_repo_cwd_refusal.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_skill_dump.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_snapshot_id_prefix_resolution.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_apply_event_outcomes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_declaration_ref_pin.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_show_native_root.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_staging_cleanup.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_break_attempts.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_check_undeclared_gitlink.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_checkout_atomicity.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_compat_next_step.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_follows_branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_keeps_record.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_noop.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_refuses_rewind.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_declared_members.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_fence_no_pin.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_carrier.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_coverage.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_layers.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_records.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_git_hooks.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_git_native_smoke.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_gitmodules.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_gitmodules_branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_hook_takes_verb_coverage.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_branch_inference.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_clone.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_derived_spec.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_slot_pointer.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_slot_write_error.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_log_adoption_boundary.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_branch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_fetches_new_pin.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_installs_hooks.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_member_path_hygiene.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_member_state.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_migrate_branch_inference.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_moved_workspace_guard.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_landed_by_another.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_member_refs.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s2.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s3a.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s3b.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_refusal_names_both_exits.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_shadow_fence.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_shadow_s1.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_inspection.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_push_undeclared_gitlink.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_values.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_submodule_update_merge.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_untracked_member.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verb_rename.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verb_witnesses.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verbs_name_their_root.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_subdir_cwd_review_verbs.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_subdir_cwd_verbs.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_submodule_member_predicate.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_superproject_import.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_event_outcomes.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_fast_forward.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_fetch.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_seed_local.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_ssh_rewrite.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_status_probe.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_target.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_tmux_launch_runtime.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_tracking.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_abort.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_apply.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_apply_dry_run.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_manifest_schema.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_propose.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_topological_apply.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_update.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_validate_repo_path_conflict.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_build_stamp.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_identity.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_vocabulary.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_convert_clone.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_edit_lease_cap.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_identity_boundary.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_init_from_topology.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_init_local_repos.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_root_defaults.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_root_nearest_marker.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_snapshot.py +0 -0
- {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_spec_missing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitgrip
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.0a12
|
|
4
4
|
Summary: Workspace layer for multi-repo work: workspaces, isolated lanes, and one grouped review per slice
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -119,7 +119,7 @@ Not there yet:
|
|
|
119
119
|
| `pr` | create, status, checks, merge, view |
|
|
120
120
|
| `check` | run, show, set |
|
|
121
121
|
| `proto` | json |
|
|
122
|
-
| `review` | open, close, checkout-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind |
|
|
122
|
+
| `review` | open, close, checkout-pr, read-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind, stamps, merged, blockers, list |
|
|
123
123
|
| `exec` | status, run |
|
|
124
124
|
| `repo` | status, projection-run |
|
|
125
125
|
| `hooks` | trust, revoke, status, show, run |
|
|
@@ -102,7 +102,7 @@ Not there yet:
|
|
|
102
102
|
| `pr` | create, status, checks, merge, view |
|
|
103
103
|
| `check` | run, show, set |
|
|
104
104
|
| `proto` | json |
|
|
105
|
-
| `review` | open, close, checkout-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind |
|
|
105
|
+
| `review` | open, close, checkout-pr, read-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind, stamps, merged, blockers, list |
|
|
106
106
|
| `exec` | status, run |
|
|
107
107
|
| `repo` | status, projection-run |
|
|
108
108
|
| `hooks` | trust, revoke, status, show, run |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitgrip
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.0a12
|
|
4
4
|
Summary: Workspace layer for multi-repo work: workspaces, isolated lanes, and one grouped review per slice
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -119,7 +119,7 @@ Not there yet:
|
|
|
119
119
|
| `pr` | create, status, checks, merge, view |
|
|
120
120
|
| `check` | run, show, set |
|
|
121
121
|
| `proto` | json |
|
|
122
|
-
| `review` | open, close, checkout-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind |
|
|
122
|
+
| `review` | open, close, checkout-pr, read-pr, run, check, pin, publish, receive, verify, show, stamp, merge, update, repin, create-project, bind, approve, rebind, stamps, merged, blockers, list |
|
|
123
123
|
| `exec` | status, run |
|
|
124
124
|
| `repo` | status, projection-run |
|
|
125
125
|
| `hooks` | trust, revoke, status, show, run |
|
|
@@ -103,6 +103,7 @@ gr2/python_cli/project_review.py
|
|
|
103
103
|
gr2/python_cli/proto_json.py
|
|
104
104
|
gr2/python_cli/prune.py
|
|
105
105
|
gr2/python_cli/push.py
|
|
106
|
+
gr2/python_cli/read_review.py
|
|
106
107
|
gr2/python_cli/review.py
|
|
107
108
|
gr2/python_cli/review_allocation.py
|
|
108
109
|
gr2/python_cli/review_diff.py
|
|
@@ -155,6 +156,7 @@ tests/test_approval_schema.py
|
|
|
155
156
|
tests/test_arbon.py
|
|
156
157
|
tests/test_bind_merge_head_refusals.py
|
|
157
158
|
tests/test_branch.py
|
|
159
|
+
tests/test_branch_in_lane.py
|
|
158
160
|
tests/test_break_17_unit_path_containment.py
|
|
159
161
|
tests/test_break_18_gr1_sibling_units.py
|
|
160
162
|
tests/test_channel_bridge.py
|
|
@@ -187,11 +189,14 @@ tests/test_execops.py
|
|
|
187
189
|
tests/test_failure_event_outcome.py
|
|
188
190
|
tests/test_fetch_refmap.py
|
|
189
191
|
tests/test_fetch_refmap_pr_base.py
|
|
192
|
+
tests/test_fetch_refmap_verbs.py
|
|
190
193
|
tests/test_field_tree_name.py
|
|
191
194
|
tests/test_field_tree_schema_reader.py
|
|
192
195
|
tests/test_files_compose.py
|
|
193
196
|
tests/test_first_five_minutes.py
|
|
194
197
|
tests/test_foreground_launch_runtime.py
|
|
198
|
+
tests/test_git_positional_refusal.py
|
|
199
|
+
tests/test_git_positional_sites.py
|
|
195
200
|
tests/test_git_review.py
|
|
196
201
|
tests/test_git_transport_allow_list.py
|
|
197
202
|
tests/test_gitinclude_compiler.py
|
|
@@ -254,6 +259,7 @@ tests/test_member_working_root_checkout_materialize.py
|
|
|
254
259
|
tests/test_merge_credential_remotes.py
|
|
255
260
|
tests/test_merge_evidence.py
|
|
256
261
|
tests/test_merge_parent_verification.py
|
|
262
|
+
tests/test_migrate_gr1_member_origin.py
|
|
257
263
|
tests/test_migrate_gr1_one_root.py
|
|
258
264
|
tests/test_migration.py
|
|
259
265
|
tests/test_migration_overlay_compatibility.py
|
|
@@ -289,6 +295,7 @@ tests/test_overlay_tier_b_repo_state.py
|
|
|
289
295
|
tests/test_overlay_tier_b_staging_discipline.py
|
|
290
296
|
tests/test_overlay_trust_model.py
|
|
291
297
|
tests/test_overlay_workspace_spec.py
|
|
298
|
+
tests/test_pin_rewind_shallow_path_quoted.py
|
|
292
299
|
tests/test_platform_adapter_changelog.py
|
|
293
300
|
tests/test_platform_adapter_plugins.py
|
|
294
301
|
tests/test_pr_adapter_v2_target.py
|
|
@@ -301,6 +308,7 @@ tests/test_pr_merge_missing_target.py
|
|
|
301
308
|
tests/test_pr_merge_partial_failure.py
|
|
302
309
|
tests/test_pr_review_subject.py
|
|
303
310
|
tests/test_pr_view.py
|
|
311
|
+
tests/test_printed_command_values_quoted.py
|
|
304
312
|
tests/test_project_file_materialization.py
|
|
305
313
|
tests/test_project_review_range_reconstruction.py
|
|
306
314
|
tests/test_project_review_three_repo.py
|
|
@@ -338,6 +346,7 @@ tests/test_review_bind_native_store.py
|
|
|
338
346
|
tests/test_review_bind_root_refs.py
|
|
339
347
|
tests/test_review_bind_verify.py
|
|
340
348
|
tests/test_review_check_name.py
|
|
349
|
+
tests/test_review_check_unknown.py
|
|
341
350
|
tests/test_review_cli.py
|
|
342
351
|
tests/test_review_close_gr.py
|
|
343
352
|
tests/test_review_close_keeps_local_work.py
|
|
@@ -358,6 +367,7 @@ tests/test_review_merge_platform.py
|
|
|
358
367
|
tests/test_review_merge_receipt.py
|
|
359
368
|
tests/test_review_merge_set_alone.py
|
|
360
369
|
tests/test_review_merge_set_required.py
|
|
370
|
+
tests/test_review_merge_tracking_command_quoted.py
|
|
361
371
|
tests/test_review_merge_updates_tracking_ref.py
|
|
362
372
|
tests/test_review_named_refusals.py
|
|
363
373
|
tests/test_review_open_lane.py
|
|
@@ -369,7 +379,9 @@ tests/test_review_pin_stamp_names.py
|
|
|
369
379
|
tests/test_review_pinned_target.py
|
|
370
380
|
tests/test_review_pr_marker_context.py
|
|
371
381
|
tests/test_review_publish_all.py
|
|
382
|
+
tests/test_review_read_pr.py
|
|
372
383
|
tests/test_review_reader_defaults.py
|
|
384
|
+
tests/test_review_reads.py
|
|
373
385
|
tests/test_review_rebind.py
|
|
374
386
|
tests/test_review_receipt_cleanup.py
|
|
375
387
|
tests/test_review_receive_no_migrate.py
|
|
@@ -399,6 +411,7 @@ tests/test_review_verify_json_refusals.py
|
|
|
399
411
|
tests/test_review_vocabulary.py
|
|
400
412
|
tests/test_rmtree_or_refuse.py
|
|
401
413
|
tests/test_root_option_verbs.py
|
|
414
|
+
tests/test_root_optional_help.py
|
|
402
415
|
tests/test_selected_workspace_commit.py
|
|
403
416
|
tests/test_set_check.py
|
|
404
417
|
tests/test_set_check_credential_remote.py
|
|
@@ -412,6 +425,7 @@ tests/test_snapshot_id_prefix_resolution.py
|
|
|
412
425
|
tests/test_spec_apply_event_outcomes.py
|
|
413
426
|
tests/test_spec_declaration_ref_pin.py
|
|
414
427
|
tests/test_spec_show_native_root.py
|
|
428
|
+
tests/test_spec_sourced_git_lines_quoted.py
|
|
415
429
|
tests/test_sprint21_sync_platform.py
|
|
416
430
|
tests/test_staging_cleanup.py
|
|
417
431
|
tests/test_store_break_attempts.py
|
|
@@ -38,6 +38,7 @@ from gr2.python_cli import gitops
|
|
|
38
38
|
from gr2.python_cli import review as _review
|
|
39
39
|
from gr2.python_cli import push as _push
|
|
40
40
|
from gr2.python_cli import review_records as _records
|
|
41
|
+
from gr2.python_cli.layout import grip_dir as _layout_grip_dir
|
|
41
42
|
|
|
42
43
|
LANE_SCHEMA_VERSION = 1
|
|
43
44
|
SCRATCHPAD_SCHEMA_VERSION = 1
|
|
@@ -432,6 +433,10 @@ def lane_checkout_root(workspace_root: Path, owner_unit: str, lane_name: str) ->
|
|
|
432
433
|
if kind == "bound":
|
|
433
434
|
if "checkout_root" in doc or not isinstance(doc.get("bound_worktree"), str) or not doc["bound_worktree"]:
|
|
434
435
|
raise SystemExit("bound lane needs its explicit bound_worktree and no checkout_root")
|
|
436
|
+
# A relative path would resolve against the process CWD, not the workspace; create --bind writes it absolute.
|
|
437
|
+
if not Path(doc["bound_worktree"]).is_absolute():
|
|
438
|
+
raise SystemExit(f"bound lane {owner_unit}/{lane_name} needs an absolute bound_worktree, "
|
|
439
|
+
f"not {doc['bound_worktree']!r}")
|
|
435
440
|
return Path(doc["bound_worktree"]).resolve()
|
|
436
441
|
if kind not in {"materialized", "review-ephemeral"} or doc.get("bound_worktree") is not None:
|
|
437
442
|
raise SystemExit("invalid or conflicting lane checkout coordinates")
|
|
@@ -610,7 +615,11 @@ def native_lane_members(workspace_root: Path, doc: dict) -> list[dict[str, str]]
|
|
|
610
615
|
if top.returncode or Path(top.stdout.strip()).resolve() != root.resolve():
|
|
611
616
|
raise SystemExit(f"native lane root is not its own Git checkout: {root}")
|
|
612
617
|
head = gitops.current_head_sha(root)
|
|
613
|
-
|
|
618
|
+
try:
|
|
619
|
+
return grip_cli._native_members(root, head)
|
|
620
|
+
except grip_cli.NativeStoreRefusal as exc:
|
|
621
|
+
print(exc, file=sys.stderr)
|
|
622
|
+
raise SystemExit(exc.code) from None
|
|
614
623
|
|
|
615
624
|
|
|
616
625
|
def record_fork_base(
|
|
@@ -642,6 +651,10 @@ def record_fork_base(
|
|
|
642
651
|
if not re.fullmatch(r"[0-9a-f]{40}", sha):
|
|
643
652
|
raise SystemExit(f"fork_base sha for {repo} must be a 40-hex commit, got: {sha!r}")
|
|
644
653
|
validated[repo] = {"branch": branch, "sha": sha}
|
|
654
|
+
if "start" in entry:
|
|
655
|
+
if entry["start"] not in ("tip", "pin", "local"):
|
|
656
|
+
raise SystemExit(f"fork_base start for {repo} must be tip, pin or local, got: {entry['start']!r}")
|
|
657
|
+
validated[repo]["start"] = entry["start"]
|
|
645
658
|
document["fork_base"] = {repo: validated[repo] for repo in sorted(validated)}
|
|
646
659
|
atomic_replace_text(path, serialize_toml(document))
|
|
647
660
|
|
|
@@ -1314,7 +1327,7 @@ def bind_bound_lane(
|
|
|
1314
1327
|
f"bind_bound_lane: bound lane {owner_unit}/{lane_name} is missing "
|
|
1315
1328
|
"bound_worktree or bound_head; it was not created by lane create --bind"
|
|
1316
1329
|
)
|
|
1317
|
-
resolved =
|
|
1330
|
+
resolved = lane_checkout_root(workspace_root.resolve(), owner_unit, lane_name)
|
|
1318
1331
|
if not gitops.is_git_repo(resolved):
|
|
1319
1332
|
raise SystemExit(f"bind refuses: bound worktree {resolved} is no longer a git work tree")
|
|
1320
1333
|
if not gitops.current_branch(resolved):
|
|
@@ -1398,7 +1411,7 @@ def pr_create_bound_lane(
|
|
|
1398
1411
|
worktree = Path(lane_doc.get("bound_worktree") or "")
|
|
1399
1412
|
if not worktree:
|
|
1400
1413
|
raise SystemExit(f"pr create refuses: bound lane {owner_unit}/{lane_name} has no bound_worktree")
|
|
1401
|
-
resolved =
|
|
1414
|
+
resolved = lane_checkout_root(workspace_root.resolve(), owner_unit, lane_name)
|
|
1402
1415
|
members = lane_doc.get("repos", [])
|
|
1403
1416
|
if len(members) != 1:
|
|
1404
1417
|
raise SystemExit("pr create refuses: a bound lane must name exactly one member")
|
|
@@ -1783,15 +1796,31 @@ def create_review_lane(args: argparse.Namespace) -> int:
|
|
|
1783
1796
|
return 0
|
|
1784
1797
|
|
|
1785
1798
|
|
|
1799
|
+
def _pr_group_names(workspace_root: Path):
|
|
1800
|
+
for path in sorted((_layout_grip_dir(workspace_root) / "pr_groups").glob("*.json")):
|
|
1801
|
+
try:
|
|
1802
|
+
doc = json.loads(path.read_text())
|
|
1803
|
+
except (OSError, ValueError):
|
|
1804
|
+
continue
|
|
1805
|
+
prs = doc.get("prs") if isinstance(doc, dict) else None
|
|
1806
|
+
for item in prs if isinstance(prs, list) else []:
|
|
1807
|
+
if isinstance(item, dict) and item.get("repo") is not None:
|
|
1808
|
+
yield str(item.get("repo")), str(item.get("pr_number"))
|
|
1809
|
+
|
|
1810
|
+
|
|
1786
1811
|
def check_review_requirements(args: argparse.Namespace) -> int:
|
|
1787
1812
|
workspace_root = args.workspace_root.resolve()
|
|
1788
1813
|
ref = f"{args.repo}#{args.pr_number}"
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
)
|
|
1814
|
+
spec = load_workspace_spec(workspace_root)
|
|
1815
|
+
policy = spec.get("workspace_constraints", {}).get("required_reviewers", {})
|
|
1816
|
+
required = int(policy.get(args.repo, 0))
|
|
1817
|
+
group_prs = set(_pr_group_names(workspace_root))
|
|
1818
|
+
known_repos = {str(row.get("name")) for row in spec.get("repos", [])} | set(policy)
|
|
1819
|
+
known_repos.update(repo for repo, _ in group_prs)
|
|
1792
1820
|
matching: list[dict] = []
|
|
1793
1821
|
for path in iter_lane_files(workspace_root):
|
|
1794
1822
|
doc = tomllib.loads(path.read_text())
|
|
1823
|
+
known_repos.update(doc.get("repos", []))
|
|
1795
1824
|
if doc.get("lane_type") != "review":
|
|
1796
1825
|
continue
|
|
1797
1826
|
refs = [item["ref"] for item in doc.get("pr_associations", [])]
|
|
@@ -1804,15 +1833,26 @@ def check_review_requirements(args: argparse.Namespace) -> int:
|
|
|
1804
1833
|
"repos": doc.get("repos", []),
|
|
1805
1834
|
}
|
|
1806
1835
|
)
|
|
1836
|
+
# A FALSE YES IS WORSE THAN NO ANSWER. With no policy, 0 required >= 0 actual made any repo and any
|
|
1837
|
+
# number "satisfied". A repo nothing names is refused: the count would describe nothing. A PR of a declared
|
|
1838
|
+
# repo that no review lane, PR group or policy names is reported, but not satisfied, with the basis named:
|
|
1839
|
+
# the workspace cannot know which PR numbers exist upstream. A policy keeps 0/N as a true "not satisfied".
|
|
1840
|
+
if args.repo not in known_repos:
|
|
1841
|
+
print(json.dumps({"refused": "unknown_repo", "repo": args.repo, "pr_number": args.pr_number}))
|
|
1842
|
+
print(f"gr2: unknown_repo: no workspace member, review lane or PR group names repo {args.repo}", file=sys.stderr)
|
|
1843
|
+
return 2
|
|
1844
|
+
unnamed = not matching and required == 0 and (args.repo, str(args.pr_number)) not in group_prs
|
|
1807
1845
|
reviewer_units = sorted({row["owner_unit"] for row in matching})
|
|
1808
1846
|
payload = {
|
|
1809
1847
|
"repo": args.repo,
|
|
1810
1848
|
"pr_number": args.pr_number,
|
|
1811
1849
|
"required_reviewers": required,
|
|
1812
1850
|
"actual_reviewers": len(reviewer_units),
|
|
1813
|
-
"satisfied": len(reviewer_units) >= required,
|
|
1851
|
+
"satisfied": len(reviewer_units) >= required and not unnamed,
|
|
1814
1852
|
"review_lanes": matching,
|
|
1815
1853
|
}
|
|
1854
|
+
if unnamed:
|
|
1855
|
+
payload["basis"] = "no_lane_or_group_names_this_pr"
|
|
1816
1856
|
if args.json:
|
|
1817
1857
|
print(json.dumps(payload, indent=2))
|
|
1818
1858
|
else:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"commit": "8c58df6", "release": true}
|