From d86b0ef2cf25700d63a0ddd11cf281fb2b4dce41 Mon Sep 17 00:00:00 2001 From: Anant Date: Wed, 7 Oct 2026 17:55:13 +0530 Subject: [PATCH 1/6] Request Ben and Utkarsh on future reviews --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..67653be --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# Request both developers on future Relay PRs; one approval is required. +* @ben-kaufman @cakesoft-utkarsh From 383408e24db3d6484d0758bcf5fe5ae924b56ed8 Mon Sep 17 00:00:00 2001 From: Anant Date: Wed, 7 Oct 2026 18:01:39 +0530 Subject: [PATCH 2/6] Include Parsh in developer review requests --- .github/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 67653be..6a7390a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ -# Request both developers on future Relay PRs; one approval is required. -* @ben-kaufman @cakesoft-utkarsh +# Request Ben, Utkarsh, and Parsh on future Relay PRs; one approval is required. +* @ben-kaufman @cakesoft-utkarsh @Parsh From 78b3a4d45b6b4e29246bca6eb607435737e35019 Mon Sep 17 00:00:00 2001 From: Anant Date: Wed, 7 Oct 2026 22:03:01 +0530 Subject: [PATCH 3/6] docs: record Copilot effort and developer review process --- .github/PULL_REQUEST_TEMPLATE.md | 22 ++++++++++++++++++++++ .github/REVIEW_POLICY.md | 31 +++++++++++++++++++++++++++++++ AGENTS.md | 3 +++ CONTRIBUTING.md | 2 ++ 4 files changed, 58 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/REVIEW_POLICY.md create mode 100644 AGENTS.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..07b00c6 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,22 @@ +## Change + + + +## Verification + + + +## Review record + + + +- Selected Copilot effort: Lite / Balanced +- Reason: +- Actual Copilot effort and reviewed commit: pending +- Feedback and disposition: pending +- Independent human approval: pending (Ben, Utkarsh, or Parsh; one is sufficient) + + + +- [ ] Required checks pass and relevant review concerns are resolved. +- [ ] One independent developer approval is recorded. diff --git a/.github/REVIEW_POLICY.md b/.github/REVIEW_POLICY.md new file mode 100644 index 0000000..c662d5a --- /dev/null +++ b/.github/REVIEW_POLICY.md @@ -0,0 +1,31 @@ +# Pull request review policy + +## Choose Copilot effort + +Repository default: **Balanced**. Before requesting the first review or marking the PR ready, verify the Copilot effort in the PR's GitHub Reviewers controls and override it for the change. A remembered PR choice can override the repository default. GitHub controls the underlying review model; the chat model selector does not change it. + +- **Lite:** routine UI or styling, noncritical copy, documentation, and isolated changes with known low risk. +- **Balanced:** keys, signing, recovery, backup, authentication, pairing, transactions, migrations, security-critical copy, security dependencies, permissions, complex or cross-service changes, and unknown risk. Use Balanced for mixed changes that include these areas. + +Effort is selected explicitly. This document does not implement automatic risk classification or a CI gate for effort selection. + +## Review timing and evidence + +Finish feasible verification before marking a PR ready. Automatic Copilot review of ready PRs remains enabled; automatic draft reviews and automatic reviews on every push are disabled. Keep work in draft while it is being prepared. + +Batch fixes and stabilize checks before requesting another review. Request a new review when changes materially affect correctness or security; avoid repeated reviews for verified routine documentation or metadata changes. Workflow permissions, security dependencies, secrets, and release signing count as material changes. + +If a material security change received an automatic Lite review, select Balanced and request one review of the final substantive changes after batching fixes and stabilizing checks. Do not count a Lite review as a Balanced review. + +Record these in the PR description: + +- Selected effort and the reason for it. +- Actual effort reported by Copilot and the commit SHA it reviewed; distinguish the selected mode from a completed review. +- Real findings and their disposition, including any substantive review-overview concerns. Check feedback against the implementation and verification. +- Pending or unavailable review status when appropriate. A quota response is an unavailable review, not a successful review or evidence of no findings. + +## Human approval + +Request Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`), and Parsh (`Parsh`) when they have review access. Record pending invitations accurately; keep review-owner proposals draft until GitHub recognizes the owners and required checks pass. + +One independent approval from any one of these developers is required, together with passing required checks and resolution of relevant review concerns. All three approvals are unnecessary. The PR author cannot approve their own change, and Copilot feedback does not satisfy the human approval requirement. Product signoff remains separate. Do not merge automatically. diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..7a1a713 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,3 @@ +# Repository agent instructions + +Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template, explicitly select the appropriate Copilot effort in GitHub, record actual review evidence, and retain the independent human approval requirement. Do not request repeated reviews of drafts or every push. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3c86d55..7cca401 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,3 +9,5 @@ Run `yarn audit --groups dependencies` for runtime dependencies; CI requires thi Keep changes to wallet signing, recovery and server-key behavior in their separately reviewed work. Provider integration changes should state which runtime identity, project and permission they need and how an unavailable provider fails. Never make an optional provider credential a condition for starting the local backend. Report security issues privately through [SECURITY.md](SECURITY.md). + +Follow the [pull request review policy](.github/REVIEW_POLICY.md) and complete the PR template before requesting review. From 93d56a43029e1886ea8239f65734debe48d3a190 Mon Sep 17 00:00:00 2001 From: Anant Date: Wed, 7 Oct 2026 22:05:38 +0530 Subject: [PATCH 4/6] docs: preserve verification and approval conventions --- .github/REVIEW_POLICY.md | 4 ++-- AGENTS.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/REVIEW_POLICY.md b/.github/REVIEW_POLICY.md index c662d5a..dff7ac9 100644 --- a/.github/REVIEW_POLICY.md +++ b/.github/REVIEW_POLICY.md @@ -2,7 +2,7 @@ ## Choose Copilot effort -Repository default: **Balanced**. Before requesting the first review or marking the PR ready, verify the Copilot effort in the PR's GitHub Reviewers controls and override it for the change. A remembered PR choice can override the repository default. GitHub controls the underlying review model; the chat model selector does not change it. +Repository default: **Balanced**. Before requesting the first review or marking the PR ready, verify the Copilot effort in the PR's GitHub Reviewers controls and override it for the change. A remembered PR choice can override the repository default. GitHub controls the underlying review model; the chat model selector does not change it. See [GitHub's code review documentation](https://docs.github.com/en/copilot/concepts/agents/code-review). - **Lite:** routine UI or styling, noncritical copy, documentation, and isolated changes with known low risk. - **Balanced:** keys, signing, recovery, backup, authentication, pairing, transactions, migrations, security-critical copy, security dependencies, permissions, complex or cross-service changes, and unknown risk. Use Balanced for mixed changes that include these areas. @@ -28,4 +28,4 @@ Record these in the PR description: Request Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`), and Parsh (`Parsh`) when they have review access. Record pending invitations accurately; keep review-owner proposals draft until GitHub recognizes the owners and required checks pass. -One independent approval from any one of these developers is required, together with passing required checks and resolution of relevant review concerns. All three approvals are unnecessary. The PR author cannot approve their own change, and Copilot feedback does not satisfy the human approval requirement. Product signoff remains separate. Do not merge automatically. +One independent approval from any one of these developers is required, together with passing required checks and resolution of relevant review concerns. All three approvals are unnecessary. The PR author cannot approve their own change, and Copilot feedback does not satisfy the human approval requirement. Product signoff remains separate. Do not bypass required checks or independent human approval. diff --git a/AGENTS.md b/AGENTS.md index 7a1a713..739f987 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,3 +1,5 @@ # Repository agent instructions Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template, explicitly select the appropriate Copilot effort in GitHub, record actual review evidence, and retain the independent human approval requirement. Do not request repeated reviews of drafts or every push. + +Preserve existing repository conventions. Complete feasible agent verification before delivery, scaled to the change; documentation changes need link, formatting, and diff checks. Human live verification remains retrospective after delivery. Retain existing required checks and one independent developer approval before merge. From 4443f2f84fd8c8975b8928ed9cfa64f64b1b43fc Mon Sep 17 00:00:00 2001 From: antuz123 <43998049+antuz123@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:37:57 +0530 Subject: [PATCH 5/6] docs: make human developer reviews optional --- .github/CODEOWNERS | 4 ++-- .github/PULL_REQUEST_TEMPLATE.md | 3 +-- .github/REVIEW_POLICY.md | 6 +++--- AGENTS.md | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6a7390a..0564a25 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ -# Request Ben, Utkarsh, and Parsh on future Relay PRs; one approval is required. -* @ben-kaufman @cakesoft-utkarsh @Parsh +# Human developer reviews are optional; no automatic code-owner assignment is required. +# Suggested reviewers when useful and already eligible: @ben-kaufman @cakesoft-utkarsh @Parsh diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 07b00c6..33ab2f2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -14,9 +14,8 @@ - Reason: - Actual Copilot effort and reviewed commit: pending - Feedback and disposition: pending -- Independent human approval: pending (Ben, Utkarsh, or Parsh; one is sufficient) +- Optional human review: not requested / pending / received (reviewer, link and findings if applicable) - [ ] Required checks pass and relevant review concerns are resolved. -- [ ] One independent developer approval is recorded. diff --git a/.github/REVIEW_POLICY.md b/.github/REVIEW_POLICY.md index dff7ac9..0d8113f 100644 --- a/.github/REVIEW_POLICY.md +++ b/.github/REVIEW_POLICY.md @@ -24,8 +24,8 @@ Record these in the PR description: - Real findings and their disposition, including any substantive review-overview concerns. Check feedback against the implementation and verification. - Pending or unavailable review status when appropriate. A quota response is an unavailable review, not a successful review or evidence of no findings. -## Human approval +## Optional human review -Request Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`), and Parsh (`Parsh`) when they have review access. Record pending invitations accurately; keep review-owner proposals draft until GitHub recognizes the owners and required checks pass. +Human developer review is optional. Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`), and Parsh (`Parsh`) are suggested reviewers when useful and already eligible. Pending invitations or the absence of human review do not block readiness or merge and do not require an access grant. -One independent approval from any one of these developers is required, together with passing required checks and resolution of relevant review concerns. All three approvals are unnecessary. The PR author cannot approve their own change, and Copilot feedback does not satisfy the human approval requirement. Product signoff remains separate. Do not bypass required checks or independent human approval. +Passing required checks and resolution of relevant review concerns remain required. Record any requested human review, findings and their disposition accurately; no human developer approval is required. Product signoff, required security and native validation, and operation-specific signing, deployment and release authorization remain separate. Do not bypass those gates. diff --git a/AGENTS.md b/AGENTS.md index 739f987..9bf094e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,5 @@ # Repository agent instructions -Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template, explicitly select the appropriate Copilot effort in GitHub, record actual review evidence, and retain the independent human approval requirement. Do not request repeated reviews of drafts or every push. +Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template, explicitly select the appropriate Copilot effort in GitHub, record actual review evidence, and treat human developer review as optional. Do not request repeated reviews of drafts or every push. -Preserve existing repository conventions. Complete feasible agent verification before delivery, scaled to the change; documentation changes need link, formatting, and diff checks. Human live verification remains retrospective after delivery. Retain existing required checks and one independent developer approval before merge. +Preserve existing repository conventions. Complete feasible agent verification before delivery, scaled to the change; documentation changes need link, formatting, and diff checks. Human live verification remains retrospective after delivery. Retain existing required checks before merge. Record requested human feedback and its disposition without making approval a merge gate. From b948b8149b01172f488f53b3aadae657b884b886 Mon Sep 17 00:00:00 2001 From: antuz123 <43998049+antuz123@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:53:33 +0530 Subject: [PATCH 6/6] Use conditional cloud review based on risk and cost --- .github/PULL_REQUEST_TEMPLATE.md | 37 +++++++++++++++++-------- .github/REVIEW_POLICY.md | 47 ++++++++++++++++++++------------ AGENTS.md | 2 +- 3 files changed, 57 insertions(+), 29 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 33ab2f2..4aad233 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,14 +8,29 @@ ## Review record - - -- Selected Copilot effort: Lite / Balanced -- Reason: -- Actual Copilot effort and reviewed commit: pending -- Feedback and disposition: pending -- Optional human review: not requested / pending / received (reviewer, link and findings if applicable) - - - -- [ ] Required checks pass and relevant review concerns are resolved. + + +- Review decision: Skip provider review / Lite / Balanced +- Severity, scope, cost and reason: +- Checks/source evidence supporting this decision: +- Least-cost adequate installed cloud route, intended effort and authorized allowance, if used: +- Reused exact head/base review receipt, or initial/re-review reason: +- Actual provider/model/effort, reviewed SHA, coverage and evidence, or skipped/pending/unavailable: +- Real findings and evidence for their disposition: +- Independent coverage needed? Why, exact scope and actual status: +- Material changes since reviewed SHA / further review needed: +- Optional human review, if requested (reviewer, link, status and findings): + + + +- [ ] Required checks and applicable validation pass; remaining failures/limits are recorded. +- [ ] Substantive review findings have evidence-based dispositions. diff --git a/.github/REVIEW_POLICY.md b/.github/REVIEW_POLICY.md index 0d8113f..4450861 100644 --- a/.github/REVIEW_POLICY.md +++ b/.github/REVIEW_POLICY.md @@ -1,31 +1,44 @@ # Pull request review policy -## Choose Copilot effort +## Review decision: severity and cost -Repository default: **Balanced**. Before requesting the first review or marking the PR ready, verify the Copilot effort in the PR's GitHub Reviewers controls and override it for the change. A remembered PR choice can override the repository default. GitHub controls the underlying review model; the chat model selector does not change it. See [GitHub's code review documentation](https://docs.github.com/en/copilot/concepts/agents/code-review). +Cloud review is the primary developer-review route when the change warrants it; it replaces a mandatory human developer-approval gate. Human developer review is optional. Choose whether a separate provider review is useful and, if so, its type from the actual severity, uncertainty, scope and cost. Complete feasible deterministic verification first. -- **Lite:** routine UI or styling, noncritical copy, documentation, and isolated changes with known low risk. -- **Balanced:** keys, signing, recovery, backup, authentication, pairing, transactions, migrations, security-critical copy, security dependencies, permissions, complex or cross-service changes, and unknown risk. Use Balanced for mixed changes that include these areas. +| Decision | Use when | Evidence | +| --- | --- | --- | +| Skip provider review | Verified routine documentation, noncritical copy or pure style changes with no behavior, security, permission, dependency or workflow impact; policy/security/agent/workflow documents are excluded | Record the reason and the checks/source inspection supporting the low-risk classification. | +| Lite | Bounded normal changes with understood risk that benefit from cloud review | Record the bounded scope, chosen route, intended effort and cost/allowance. | +| Balanced | Signing, keys, authentication, recovery, backup, pairing, transactions, migrations, workflows, permissions, security-sensitive dependencies/copy, complex or cross-service changes, or unknown risk | Record the risks and coverage needed; use Balanced when categories are mixed or risk is uncertain. | -Effort is selected explicitly. This document does not implement automatic risk classification or a CI gate for effort selection. +A filename or a documentation label alone does not justify skipping review. Policy, security, agent and workflow documents are not routine documentation eligible for Skip. Assess their actual effect and choose an adequate Lite or Balanced route. A low-cost check or source inspection may resolve uncertainty without another provider call after valid review coverage; explain that evidence. -## Review timing and evidence +Independent cloud review is needed only when the actual risk or a substantive finding requires independence. Record why and what it must cover. Use only an already installed, authorized route whose repository scope, provider access and budget permit that review. Do not add another model, paid review or external executor merely to satisfy a routine checklist. If needed independent coverage is unavailable, record the exact blocker; substantive security concerns remain unresolved until supported by evidence, not waived because review is unavailable. -Finish feasible verification before marking a PR ready. Automatic Copilot review of ready PRs remains enabled; automatic draft reviews and automatic reviews on every push are disabled. Keep work in draft while it is being prepared. +## Route, effort and budget -Batch fixes and stabilize checks before requesting another review. Request a new review when changes materially affect correctness or security; avoid repeated reviews for verified routine documentation or metadata changes. Workflow permissions, security dependencies, secrets, and release signing count as material changes. +When using Copilot, verify the PR's saved effort because an override may differ from the repository default. [GitHub controls Copilot's review model](https://docs.github.com/en/copilot/concepts/agents/code-review); selecting a ChatGPT or Codex model does not select Copilot's model. Lite and Balanced here specify the review choice; do not claim a mode or independent coverage that the selected route cannot provide. -If a material security change received an automatic Lite review, select Balanced and request one review of the final substantive changes after batching fixes and stabilizing checks. Do not count a Lite review as a Balanced review. +Use the least-cost already authorized route that adequately covers the risk. Reuse valid review receipts for the exact head/base and coverage; do not buy duplicate initial reviews. Complete stable checks before one initial review, batch material fixes before a necessary re-review, and preserve existing spending limits, permanent reservations, deduplication and no-retry controls. Routine reviews within an established scope and allowance do not need repeated owner permission. -Record these in the PR description: +Verify installed scope, applicable allowance and expected cost before a provider request. If quota, cap, activation or scope is unavailable, record unavailable and use another already-authorized adequate cloud route or hold the applicable gate. Do not silently downgrade critical review, create paid retries/fallbacks or infer a fresh budget. An uninstalled or disabled reviewer is not an available route, and these files do not install or activate one. Existing Claude limits, where applicable, of $3 reserved per attempt, two attempts per head and three per PR are ceilings, not activation or a fresh allowance. Historical Copilot balances or spending-cap observations are not current-credit proof. -- Selected effort and the reason for it. -- Actual effort reported by Copilot and the commit SHA it reviewed; distinguish the selected mode from a completed review. -- Real findings and their disposition, including any substantive review-overview concerns. Check feedback against the implementation and verification. -- Pending or unavailable review status when appropriate. A quota response is an unavailable review, not a successful review or evidence of no findings. +## Timing, automation and evidence -## Optional human review +Batch material fixes and stabilize relevant checks before another review. Repeat cloud review only when a change materially alters the reviewed correctness/security scope or a finding needs independent confirmation. Verified routine follow-up edits do not automatically require another provider call. A Lite review of earlier content is not a Balanced review of the final changes. -Human developer review is optional. Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`), and Parsh (`Parsh`) are suggested reviewers when useful and already eligible. Pending invitations or the absence of human review do not block readiness or merge and do not require an access grant. +Blanket automatic ready-PR or every-push review does not implement this conditional decision and may consume allowance for changes classified Skip. Intended automation must honor the recorded decision; otherwise use an explicitly authorized trigger. Keep automatic draft and every-push review off. Inspect and record actual settings before a ready transition or request; these documents do not change GitHub rules, enforce risk classification, grant a budget or prove an installed trigger. Report a settings mismatch rather than claiming it is fixed by Markdown. -Passing required checks and resolution of relevant review concerns remain required. Record any requested human review, findings and their disposition accurately; no human developer approval is required. Product signoff, required security and native validation, and operation-specific signing, deployment and release authorization remain separate. Do not bypass those gates. +Record in the PR: + +- Review decision: Skip provider review / Lite / Balanced, with severity, scope, uncertainty, cost and reason. +- Deterministic checks and source evidence; distinguish passed, failed, blocked and not run. +- Selected installed cloud route and intended effort, if used; applicable scope/allowance. +- Actual provider/model/effort, exact reviewed SHA, coverage, link and result, or accurately skipped/pending/unavailable. +- Real findings, including substantive overview concerns, and evidence for each disposition. A skipped or unavailable review is not evidence of no findings. +- Whether independent coverage is needed, why, and its actual status. Do not transfer old-SHA results to new changes. + +## Optional human review and required gates + +Ben (`ben-kaufman`), Utkarsh (`cakesoft-utkarsh`) and Parsh (`Parsh`) are suggested human reviewers when useful and already eligible. Pending invitations or the absence of human review do not block readiness or merge and do not require an access grant. Record any requested human feedback and its disposition; no human developer approval is required. CODEOWNERS suggestions, where present, do not create a mandatory review assignment. + +Required CI/status checks, resolution of substantive findings, security and native/device validation, product signoff and operation-specific signing, deployment and release authorization remain intact. Conditional review is not permission to bypass these gates or to merge a change with unresolved substantive security concerns. Repository protection remains the enforcement mechanism; report any live mismatch separately. diff --git a/AGENTS.md b/AGENTS.md index 9bf094e..2ef8950 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,5 @@ # Repository agent instructions -Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template, explicitly select the appropriate Copilot effort in GitHub, record actual review evidence, and treat human developer review as optional. Do not request repeated reviews of drafts or every push. +Read and follow [.github/REVIEW_POLICY.md](.github/REVIEW_POLICY.md) before opening or updating a pull request. Use the PR template to choose Skip provider review / Lite / Balanced from actual severity, uncertainty, scope and cost. Cloud review replaces mandatory human developer approval when warranted; human review is optional. Independent coverage is needed only when actual risk/findings require it and installed scope/budget permit. Record the decision, real checks, reviewed SHA/coverage and findings/dispositions. Avoid repeated provider requests for drafts/every push, and report unavailable routes or unresolved substantive security concerns honestly. Preserve existing repository conventions. Complete feasible agent verification before delivery, scaled to the change; documentation changes need link, formatting, and diff checks. Human live verification remains retrospective after delivery. Retain existing required checks before merge. Record requested human feedback and its disposition without making approval a merge gate.