diff --git a/.claude/hooks/branch_prompt_loader.py b/.claude/hooks/branch_prompt_loader.py index c3d2e94e..56f5ff69 100644 --- a/.claude/hooks/branch_prompt_loader.py +++ b/.claude/hooks/branch_prompt_loader.py @@ -74,6 +74,11 @@ def main(): branch_name = branch_root.name.upper() print(f"\n# Branch Context: {branch_name}\n\n{content}") + integrations_dir = branch_root / "apps" / "integrations" + if integrations_dir.is_dir(): + for prompt in sorted(integrations_dir.glob("*/private_prompt.md")): + print(f"\n{prompt.read_text().strip()}") + if __name__ == "__main__": import sys diff --git a/.claude/hooks/git_gate.py b/.claude/hooks/git_gate.py index 77d5df46..44ed4f5f 100755 --- a/.claude/hooks/git_gate.py +++ b/.claude/hooks/git_gate.py @@ -43,6 +43,12 @@ BLOCKED_GIT_RE = re.compile( r"(" + "|".join(BLOCKED_GIT_VERBS) + r")\b" ) +# Full binary path bypass: /usr/bin/git, /usr/local/bin/git, ./git, etc. +BLOCKED_GIT_PATH_RE = re.compile( + r"/git\s+(?:--?[A-Za-z][A-Za-z0-9_-]*(?:[= ][^\s]+)?\s+)*" + r"(" + "|".join(BLOCKED_GIT_VERBS) + r")\b" +) + BLOCKED_GIT_STASH_RE = re.compile(r"(?&1 | tee pytest-output.txt + echo "EXIT_CODE=${PIPESTATUS[0]}" >> "$GITHUB_ENV" + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: macos-pytest-results + path: pytest-output.txt diff --git a/src/aipass/devpulse/apps/integrations/README.md b/src/aipass/devpulse/apps/integrations/README.md new file mode 100644 index 00000000..e3401f5f --- /dev/null +++ b/src/aipass/devpulse/apps/integrations/README.md @@ -0,0 +1,5 @@ +# Integrations + +Private project integrations. Contents gitignored — only this README is tracked. + +Drop project-specific scripts here. They're available to the branch agent but invisible to git.