From fd033672afeecd1a6f8280b2322d18f6cbcd4314 Mon Sep 17 00:00:00 2001 From: AIPass Date: Thu, 16 Apr 2026 13:25:11 -0700 Subject: [PATCH] =?UTF-8?q?feat(system):=20doc(drone):=20document=20Window?= =?UTF-8?q?s=20PowerShell=20@=20splatting=20issue=20in=20drone.py=20?= =?UTF-8?q?=E2=80=94=20explains=20why=20bare-branch=20names=20must=20error?= =?UTF-8?q?=20and=20points=20to=20issue=20#340=20for=20the=20PS=20wrapper?= =?UTF-8?q?=20fix=20(#341)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: @devpulse --- src/aipass/drone/apps/drone.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/aipass/drone/apps/drone.py b/src/aipass/drone/apps/drone.py index 6bd55a65..4db95ba6 100644 --- a/src/aipass/drone/apps/drone.py +++ b/src/aipass/drone/apps/drone.py @@ -551,6 +551,17 @@ def main() -> int: return custom_result # Unknown command — check if it's a bare branch name missing @ + # + # The @ prefix is a hard contract: it's our routing convention and cannot be + # silently auto-inferred. Bare `drone prax` must error — any relaxation makes + # typos route to branches and hides bugs. + # + # Windows caveat: PowerShell treats `@` as a splatting operator, so + # `drone @prax` reaches drone as `drone prax` — the @ is consumed before we + # ever see it. This is NOT fixed here. It is fixed via a PowerShell profile + # wrapper (setup.sh writes it for Windows users) that uses $MyInvocation.Line + # to reconstruct the original command string with @ intact. See issue #340. + # Git Bash on Windows is fine — it passes @ through like Linux. try: from aipass.drone.apps.modules.resolver import branch_exists if branch_exists(command):