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.
Files changed (517) hide show
  1. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/PKG-INFO +2 -2
  2. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/README.md +1 -1
  3. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/PKG-INFO +2 -2
  4. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/SOURCES.txt +14 -0
  5. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/lane_workspace_prototype.py +47 -7
  6. gitgrip-2.0.0a12/gr2/python_cli/_build.json +1 -0
  7. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/app.py +417 -47
  8. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/approvals.py +46 -5
  9. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/clone_exec.py +4 -4
  10. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/commit.py +5 -1
  11. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/delete.py +3 -2
  12. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gitops.py +23 -9
  13. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/grip.py +13 -3
  14. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/grip_cli.py +16 -6
  15. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/hooks.py +2 -1
  16. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/leased_push.py +3 -2
  17. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_gate.py +63 -5
  18. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/migration.py +97 -11
  19. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/open_gr_review.py +5 -1
  20. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/push.py +1 -1
  21. gitgrip-2.0.0a12/gr2/python_cli/read_review.py +107 -0
  22. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_update.py +1 -1
  23. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/root_option.py +10 -0
  24. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/spec_apply.py +9 -1
  25. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_guidance.py +2 -1
  26. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/pyproject.toml +1 -1
  27. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_api_dump.py +4 -1
  28. gitgrip-2.0.0a12/tests/test_branch_in_lane.py +441 -0
  29. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_commit.py +22 -2
  30. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_fetch_refmap_pr_base.py +28 -0
  31. gitgrip-2.0.0a12/tests/test_fetch_refmap_verbs.py +134 -0
  32. gitgrip-2.0.0a12/tests/test_git_positional_refusal.py +110 -0
  33. gitgrip-2.0.0a12/tests/test_git_positional_sites.py +197 -0
  34. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_defaults.py +288 -1
  35. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_plugins.py +34 -1
  36. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_remove.py +222 -5
  37. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_materialize_pin.py +39 -4
  38. gitgrip-2.0.0a12/tests/test_migrate_gr1_member_origin.py +215 -0
  39. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_outside_names_as_git_options.py +88 -2
  40. gitgrip-2.0.0a12/tests/test_pin_rewind_shallow_path_quoted.py +37 -0
  41. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_view.py +136 -0
  42. gitgrip-2.0.0a12/tests/test_printed_command_values_quoted.py +140 -0
  43. gitgrip-2.0.0a12/tests/test_review_check_unknown.py +82 -0
  44. gitgrip-2.0.0a12/tests/test_review_merge_tracking_command_quoted.py +269 -0
  45. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_after_push.py +50 -0
  46. gitgrip-2.0.0a12/tests/test_review_read_pr.py +295 -0
  47. gitgrip-2.0.0a12/tests/test_review_reads.py +344 -0
  48. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_update.py +38 -0
  49. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_root_option_verbs.py +2 -2
  50. gitgrip-2.0.0a12/tests/test_root_optional_help.py +44 -0
  51. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_selected_workspace_commit.py +2 -2
  52. gitgrip-2.0.0a12/tests/test_spec_sourced_git_lines_quoted.py +153 -0
  53. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sprint21_sync_platform.py +90 -0
  54. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_submodule_init.py +19 -1
  55. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_static.py +2 -2
  56. gitgrip-2.0.0a10/gr2/python_cli/_build.json +0 -1
  57. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/dependency_links.txt +0 -0
  58. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/entry_points.txt +0 -0
  59. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/requires.txt +0 -0
  60. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gitgrip.egg-info/top_level.txt +0 -0
  61. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/PLATFORM_ADAPTER_CHANGELOG.md +0 -0
  62. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/__init__.py +0 -0
  63. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/api_core.py +0 -0
  64. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/__init__.py +0 -0
  65. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/activate.py +0 -0
  66. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/agent_manifest.py +0 -0
  67. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/cli.py +0 -0
  68. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/cross_repo.py +0 -0
  69. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/drivers.py +0 -0
  70. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/introspection.py +0 -0
  71. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/language_drivers.py +0 -0
  72. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/objects.py +0 -0
  73. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/perf.py +0 -0
  74. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/refs.py +0 -0
  75. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/trust.py +0 -0
  76. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/types.py +0 -0
  77. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/units.py +0 -0
  78. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/overlay/workspace_spec.py +0 -0
  79. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/__init__.py +0 -0
  80. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/cache_materialization_probe.py +0 -0
  81. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_event_stress.py +0 -0
  82. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_lease_stress.py +0 -0
  83. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/concurrent_workspace_cap_stress.py +0 -0
  84. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/contribution_protocol.py +0 -0
  85. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/cross_mode_lane_stress.py +0 -0
  86. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/jsonl_store.py +0 -0
  87. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/layout_model_probe.py +0 -0
  88. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/propagation_daemon.py +0 -0
  89. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/propagation_state_machine.py +0 -0
  90. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_exec_playground.py +0 -0
  91. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_hook_runtime_playground.py +0 -0
  92. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_migration_playground.py +0 -0
  93. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_review_checkout_playground.py +0 -0
  94. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/python_spec_apply_playground.py +0 -0
  95. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/real_git_lane_materialization.py +0 -0
  96. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/real_git_playground.py +0 -0
  97. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/recall_lane_history.py +0 -0
  98. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/repo_maintenance_prototype.py +0 -0
  99. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/prototypes/repo_transport_probe.py +0 -0
  100. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/__init__.py +0 -0
  101. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/__main__.py +0 -0
  102. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/add.py +0 -0
  103. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/agent_record.py +0 -0
  104. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/approval_schema.py +0 -0
  105. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/arbon.py +0 -0
  106. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/branch.py +0 -0
  107. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/branch_update.py +0 -0
  108. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/channel_bridge.py +0 -0
  109. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/check_records.py +0 -0
  110. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/config.py +0 -0
  111. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/consent.py +0 -0
  112. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/context.py +0 -0
  113. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/declared_sets.py +0 -0
  114. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/defaults.py +0 -0
  115. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/ecosystems_python.py +0 -0
  116. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/env_exec.py +0 -0
  117. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/events.py +0 -0
  118. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/execops.py +0 -0
  119. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/exit_codes.py +0 -0
  120. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/failures.py +0 -0
  121. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/file_exec.py +0 -0
  122. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/git_review.py +0 -0
  123. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gitinclude.py +0 -0
  124. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gr_resolver.py +0 -0
  125. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/gr_shadow.py +0 -0
  126. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_defaults.py +0 -0
  127. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_downstream.py +0 -0
  128. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_graph.py +0 -0
  129. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/lane_plugins.py +0 -0
  130. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/launch_exec.py +0 -0
  131. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/layout.py +0 -0
  132. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/member_field_tree.py +0 -0
  133. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_receipts.py +0 -0
  134. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/merge_verification.py +0 -0
  135. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/names.py +0 -0
  136. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/next_steps.py +0 -0
  137. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/platform.py +0 -0
  138. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/pr.py +0 -0
  139. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/project_review.py +0 -0
  140. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/proto_json.py +0 -0
  141. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/prune.py +0 -0
  142. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review.py +0 -0
  143. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_allocation.py +0 -0
  144. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_diff.py +0 -0
  145. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_dispatch.py +0 -0
  146. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_ephemeral.py +0 -0
  147. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_field_tree.py +0 -0
  148. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_members.py +0 -0
  149. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_rebind.py +0 -0
  150. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_records.py +0 -0
  151. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_run.py +0 -0
  152. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/review_runners.py +0 -0
  153. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/set_check.py +0 -0
  154. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/set_hints.py +0 -0
  155. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/shadow.py +0 -0
  156. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/staging_cleanup.py +0 -0
  157. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/store_hooks.py +0 -0
  158. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/syncops.py +0 -0
  159. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/target.py +0 -0
  160. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/tracking.py +0 -0
  161. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/version.py +0 -0
  162. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_mode.py +0 -0
  163. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/python_cli/workspace_snapshot.py +0 -0
  164. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.approval.v1alpha1/approval.proto +0 -0
  165. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.approval.v1alpha1/descriptor_set.pb +0 -0
  166. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.check.v1alpha1/check.proto +0 -0
  167. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.check.v1alpha1/descriptor_set.pb +0 -0
  168. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.merge.v1alpha1/descriptor_set.pb +0 -0
  169. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.merge.v1alpha1/merge.proto +0 -0
  170. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.review.v1alpha1/descriptor_set.pb +0 -0
  171. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/dev.synapt.grip.review.v1alpha1/review.proto +0 -0
  172. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/gr2-materialization-plan-v1.schema.json +0 -0
  173. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2/schemas/gr2-workspace-spec-v1.schema.json +0 -0
  174. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/gr2_overlay/__init__.py +0 -0
  175. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/setup.cfg +0 -0
  176. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/setup.py +0 -0
  177. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_add.py +0 -0
  178. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_add_lane_from_a_subdirectory.py +0 -0
  179. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_manifest_overlay_source.py +0 -0
  180. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_append.py +0 -0
  181. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_fold.py +0 -0
  182. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_agent_record_stamps.py +0 -0
  183. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_api_core_seam.py +0 -0
  184. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_app_event_outcomes.py +0 -0
  185. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_apply_convergence.py +0 -0
  186. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_apply_gr1_sibling_adoption.py +0 -0
  187. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_approval_schema.py +0 -0
  188. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_arbon.py +0 -0
  189. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_bind_merge_head_refusals.py +0 -0
  190. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_branch.py +0 -0
  191. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_break_17_unit_path_containment.py +0 -0
  192. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_break_18_gr1_sibling_units.py +0 -0
  193. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_channel_bridge.py +0 -0
  194. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_cli_adapter_error_boundary.py +0 -0
  195. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_cli_shape_witnesses.py +0 -0
  196. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_clone_materialization.py +0 -0
  197. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_config_base_path_guard.py +0 -0
  198. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_config_overlay.py +0 -0
  199. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_conftest_git_isolation.py +0 -0
  200. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_consent_key_paths.py +0 -0
  201. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_context_resolver.py +0 -0
  202. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_contribution_protocol.py +0 -0
  203. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_declared_set_pins.py +0 -0
  204. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_declared_sets.py +0 -0
  205. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_defaults_from_repo.py +0 -0
  206. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_delete.py +0 -0
  207. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_deprecation_registry.py +0 -0
  208. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_ecosystems_python.py +0 -0
  209. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_ensure_lane_checkout_reference_clone.py +0 -0
  210. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_env_materialization.py +0 -0
  211. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_event_log_integrity.py +0 -0
  212. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_event_outcome_policy.py +0 -0
  213. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_events.py +0 -0
  214. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_events_torn_line.py +0 -0
  215. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_apostrophe_and_oserror.py +0 -0
  216. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_run_names_what_did_not_run.py +0 -0
  217. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_exec_single_string_and_materialize_plan.py +0 -0
  218. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_execops.py +0 -0
  219. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_failure_event_outcome.py +0 -0
  220. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_fetch_refmap.py +0 -0
  221. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_field_tree_name.py +0 -0
  222. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_field_tree_schema_reader.py +0 -0
  223. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_files_compose.py +0 -0
  224. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_first_five_minutes.py +0 -0
  225. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_foreground_launch_runtime.py +0 -0
  226. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_git_review.py +0 -0
  227. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_git_transport_allow_list.py +0 -0
  228. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitinclude_compiler.py +0 -0
  229. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitops_locating_env.py +0 -0
  230. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gitops_shared.py +0 -0
  231. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr1_first_run_guidance.py +0 -0
  232. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr2_packaging.py +0 -0
  233. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr2_review_receipt.py +0 -0
  234. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_installed_wheel.py +0 -0
  235. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_resolved_cleared.py +0 -0
  236. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_resolver_conformance.py +0 -0
  237. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_gr_shadow.py +0 -0
  238. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_cli.py +0 -0
  239. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_hardening.py +0 -0
  240. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_snapshot.py +0 -0
  241. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_toml_literals.py +0 -0
  242. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_grip_toml_schema_v1.py +0 -0
  243. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hook_events.py +0 -0
  244. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hook_hardening.py +0 -0
  245. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hooks_consent.py +0 -0
  246. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hooks_group_names.py +0 -0
  247. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hostile_names.py +0 -0
  248. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_hostile_names_helper.py +0 -0
  249. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_init_advice_never_nests.py +0 -0
  250. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_jsonl_store.py +0 -0
  251. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_cache_keyed_by_member_name.py +0 -0
  252. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_checkout_root.py +0 -0
  253. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_fork_base_cli.py +0 -0
  254. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_refusal_leaves_nothing.py +0 -0
  255. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_create_refuses_own_branch.py +0 -0
  256. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_downstream.py +0 -0
  257. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_downstream_run.py +0 -0
  258. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_enter_hook_warnings.py +0 -0
  259. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_exit_keeps_dirty_work.py +0 -0
  260. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_graph.py +0 -0
  261. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_lease_show_json.py +0 -0
  262. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_lifecycle_safety.py +0 -0
  263. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_probe.py +0 -0
  264. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_probe_batch.py +0 -0
  265. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_push.py +0 -0
  266. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_repo_paths_and_all_skipped.py +0 -0
  267. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_roles.py +0 -0
  268. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_show_name.py +0 -0
  269. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_store_path_pins.py +0 -0
  270. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_lane_toml_serialization.py +0 -0
  271. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_launch_primitive.py +0 -0
  272. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_layout_census.py +0 -0
  273. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_leased_push.py +0 -0
  274. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_linked_review_receipts.py +0 -0
  275. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_hindsight.py +0 -0
  276. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_mem0.py +0 -0
  277. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_m2_overlay_zep.py +0 -0
  278. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_malformed_remote_refusal.py +0 -0
  279. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_materialization_plan_contract.py +0 -0
  280. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_member_working_root_checkout_materialize.py +0 -0
  281. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_credential_remotes.py +0 -0
  282. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_evidence.py +0 -0
  283. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_merge_parent_verification.py +0 -0
  284. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migrate_gr1_one_root.py +0 -0
  285. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migration.py +0 -0
  286. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_migration_overlay_compatibility.py +0 -0
  287. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_names.py +0 -0
  288. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_native_store_gitinclude.py +0 -0
  289. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_native_store_review_record_probes.py +0 -0
  290. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_no_bare_python_cli_imports.py +0 -0
  291. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_np_bench_contract_scenario.py +0 -0
  292. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_null_current_lane_refusal.py +0 -0
  293. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_one_pin_record.py +0 -0
  294. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_open_gr_enter.py +0 -0
  295. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_open_project_refusal_reason_cli.py +0 -0
  296. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_out_of_set_hint.py +0 -0
  297. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_outbox_ack_after_effect.py +0 -0
  298. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_acceptance.py +0 -0
  299. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_activate.py +0 -0
  300. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cli.py +0 -0
  301. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cli_wiring.py +0 -0
  302. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_composition_merge.py +0 -0
  303. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_atomic_apply.py +0 -0
  304. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_perf_gate.py +0 -0
  305. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_cross_repo_rollback.py +0 -0
  306. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_driver_registry.py +0 -0
  307. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_introspection.py +0 -0
  308. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_multi_stack.py +0 -0
  309. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_object_encoding.py +0 -0
  310. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_perf_gates.py +0 -0
  311. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_python_driver.py +0 -0
  312. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_encoding.py +0 -0
  313. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_perf_gates.py +0 -0
  314. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_repo_state.py +0 -0
  315. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_tier_b_staging_discipline.py +0 -0
  316. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_trust_model.py +0 -0
  317. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_overlay_workspace_spec.py +0 -0
  318. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_platform_adapter_changelog.py +0 -0
  319. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_platform_adapter_plugins.py +0 -0
  320. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_adapter_v2_target.py +0 -0
  321. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_create_pins_itself.py +0 -0
  322. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_events.py +0 -0
  323. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_group_legibility.py +0 -0
  324. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_head_pin.py +0 -0
  325. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_method.py +0 -0
  326. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_missing_target.py +0 -0
  327. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_merge_partial_failure.py +0 -0
  328. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_pr_review_subject.py +0 -0
  329. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_file_materialization.py +0 -0
  330. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_review_range_reconstruction.py +0 -0
  331. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_project_review_three_repo.py +0 -0
  332. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_projection_tracked_dest.py +0 -0
  333. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_contribution.py +0 -0
  334. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_daemon.py +0 -0
  335. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_propagation_state_machine.py +0 -0
  336. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_proto_json.py +0 -0
  337. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_prune.py +0 -0
  338. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_push.py +0 -0
  339. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_python_group_install.py +0 -0
  340. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_readme_verbs_exist.py +0 -0
  341. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_readme_walk.py +0 -0
  342. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_record_schema_copies.py +0 -0
  343. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_refusal_names_the_cause.py +0 -0
  344. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_remote_check_records.py +0 -0
  345. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_maintenance_gitops.py +0 -0
  346. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_path_read_through.py +0 -0
  347. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_linked_worktree.py +0 -0
  348. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_schema_version.py +0 -0
  349. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_repo_status_symlinked_git_dir.py +0 -0
  350. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_retire_gr1.py +0 -0
  351. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4.py +0 -0
  352. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4_v2.py +0 -0
  353. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_a4_v3.py +0 -0
  354. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_allocation_recovery.py +0 -0
  355. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ansi_parse.py +0 -0
  356. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_approvals.py +0 -0
  357. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_b3_reader_alignment.py +0 -0
  358. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_author.py +0 -0
  359. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_fork_base.py +0 -0
  360. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_from_range.py +0 -0
  361. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_migration.py +0 -0
  362. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_native_store.py +0 -0
  363. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_root_refs.py +0 -0
  364. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_bind_verify.py +0 -0
  365. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_check_name.py +0 -0
  366. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_cli.py +0 -0
  367. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_close_gr.py +0 -0
  368. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_close_keeps_local_work.py +0 -0
  369. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_context_defaults.py +0 -0
  370. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_context_witnesses.py +0 -0
  371. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_create_project_cli.py +0 -0
  372. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_dispatch.py +0 -0
  373. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ephemeral.py +0 -0
  374. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_events.py +0 -0
  375. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree.py +0 -0
  376. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree_reader_edges.py +0 -0
  377. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_field_tree_readers.py +0 -0
  378. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_install_hint.py +0 -0
  379. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_json_refusals.py +0 -0
  380. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_gate.py +0 -0
  381. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_gate_lost_ack.py +0 -0
  382. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_platform.py +0 -0
  383. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_receipt.py +0 -0
  384. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_set_alone.py +0 -0
  385. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_set_required.py +0 -0
  386. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_merge_updates_tracking_ref.py +0 -0
  387. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_named_refusals.py +0 -0
  388. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_open_lane.py +0 -0
  389. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_open_reader_lane.py +0 -0
  390. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_ratified.py +0 -0
  391. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_rows_json_help.py +0 -0
  392. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pin_stamp_names.py +0 -0
  393. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pinned_target.py +0 -0
  394. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_pr_marker_context.py +0 -0
  395. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_publish_all.py +0 -0
  396. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_reader_defaults.py +0 -0
  397. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_rebind.py +0 -0
  398. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_receipt_cleanup.py +0 -0
  399. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_receive_no_migrate.py +0 -0
  400. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_migration.py +0 -0
  401. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_reader.py +0 -0
  402. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_ref_v1_writer.py +0 -0
  403. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_remote_safety.py +0 -0
  404. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run.py +0 -0
  405. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_context.py +0 -0
  406. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_deleted_cwd.py +0 -0
  407. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_dependency_order.py +0 -0
  408. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_import_isolation.py +0 -0
  409. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_integrity_recheck.py +0 -0
  410. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_multi_repo.py +0 -0
  411. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_package_name.py +0 -0
  412. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_plugin_order.py +0 -0
  413. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_rerun_and_refusal_receipt.py +0 -0
  414. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_run_venv_and_refusal_identity.py +0 -0
  415. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_runners.py +0 -0
  416. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_show_diff.py +0 -0
  417. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_subject.py +0 -0
  418. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_transport.py +0 -0
  419. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_v1_format_guard.py +0 -0
  420. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_verify_inside.py +0 -0
  421. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_verify_json_refusals.py +0 -0
  422. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_review_vocabulary.py +0 -0
  423. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_rmtree_or_refuse.py +0 -0
  424. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check.py +0 -0
  425. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_credential_remote.py +0 -0
  426. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_merge_head.py +0 -0
  427. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_set_check_remote_heads.py +0 -0
  428. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_shadow.py +0 -0
  429. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_shadow_lease.py +0 -0
  430. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_single_repo_cwd_refusal.py +0 -0
  431. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_skill_dump.py +0 -0
  432. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_snapshot_id_prefix_resolution.py +0 -0
  433. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_apply_event_outcomes.py +0 -0
  434. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_declaration_ref_pin.py +0 -0
  435. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_spec_show_native_root.py +0 -0
  436. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_staging_cleanup.py +0 -0
  437. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_break_attempts.py +0 -0
  438. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_check_undeclared_gitlink.py +0 -0
  439. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_checkout_atomicity.py +0 -0
  440. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_compat_next_step.py +0 -0
  441. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_follows_branch.py +0 -0
  442. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_keeps_record.py +0 -0
  443. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_noop.py +0 -0
  444. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_commit_refuses_rewind.py +0 -0
  445. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_declared_members.py +0 -0
  446. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_fence_no_pin.py +0 -0
  447. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_carrier.py +0 -0
  448. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_coverage.py +0 -0
  449. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_layers.py +0 -0
  450. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_full_mode_records.py +0 -0
  451. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_git_hooks.py +0 -0
  452. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_git_native_smoke.py +0 -0
  453. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_gitmodules.py +0 -0
  454. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_gitmodules_branch.py +0 -0
  455. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_hook_takes_verb_coverage.py +0 -0
  456. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_branch_inference.py +0 -0
  457. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_clone.py +0 -0
  458. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_derived_spec.py +0 -0
  459. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_slot_pointer.py +0 -0
  460. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_init_slot_write_error.py +0 -0
  461. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_log_adoption_boundary.py +0 -0
  462. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_branch.py +0 -0
  463. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_fetches_new_pin.py +0 -0
  464. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_materialize_installs_hooks.py +0 -0
  465. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_member_path_hygiene.py +0 -0
  466. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_member_state.py +0 -0
  467. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_migrate_branch_inference.py +0 -0
  468. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_moved_workspace_guard.py +0 -0
  469. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_landed_by_another.py +0 -0
  470. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_member_refs.py +0 -0
  471. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s2.py +0 -0
  472. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s3a.py +0 -0
  473. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_push_s3b.py +0 -0
  474. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_refusal_names_both_exits.py +0 -0
  475. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_shadow_fence.py +0 -0
  476. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_shadow_s1.py +0 -0
  477. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_inspection.py +0 -0
  478. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_push_undeclared_gitlink.py +0 -0
  479. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_status_values.py +0 -0
  480. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_submodule_update_merge.py +0 -0
  481. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_untracked_member.py +0 -0
  482. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verb_rename.py +0 -0
  483. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verb_witnesses.py +0 -0
  484. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_store_verbs_name_their_root.py +0 -0
  485. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_subdir_cwd_review_verbs.py +0 -0
  486. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_subdir_cwd_verbs.py +0 -0
  487. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_submodule_member_predicate.py +0 -0
  488. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_superproject_import.py +0 -0
  489. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_event_outcomes.py +0 -0
  490. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_fast_forward.py +0 -0
  491. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_fetch.py +0 -0
  492. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_seed_local.py +0 -0
  493. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_ssh_rewrite.py +0 -0
  494. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_sync_status_probe.py +0 -0
  495. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_target.py +0 -0
  496. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_tmux_launch_runtime.py +0 -0
  497. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_tracking.py +0 -0
  498. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_abort.py +0 -0
  499. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_apply.py +0 -0
  500. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_apply_dry_run.py +0 -0
  501. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_manifest_schema.py +0 -0
  502. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_propose.py +0 -0
  503. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_unit_topological_apply.py +0 -0
  504. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_update.py +0 -0
  505. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_validate_repo_path_conflict.py +0 -0
  506. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_build_stamp.py +0 -0
  507. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_version_identity.py +0 -0
  508. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_vocabulary.py +0 -0
  509. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_convert_clone.py +0 -0
  510. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_edit_lease_cap.py +0 -0
  511. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_identity_boundary.py +0 -0
  512. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_init_from_topology.py +0 -0
  513. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_init_local_repos.py +0 -0
  514. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_root_defaults.py +0 -0
  515. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_root_nearest_marker.py +0 -0
  516. {gitgrip-2.0.0a10 → gitgrip-2.0.0a12}/tests/test_workspace_snapshot.py +0 -0
  517. {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.0a10
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.0a10
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
- return grip_cli._native_members(root, head)
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 = worktree.resolve()
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 = worktree.resolve()
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
- required = int(
1790
- workspace_constraints(workspace_root).get("required_reviewers", {}).get(args.repo, 0)
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}