### gremlin-python AGENTS.md

This document provides stack-specific guidance for developers and AI agents working on the `gremlin-python` module. It 
supplements the root `AGENTS.md` file.

---

### 1. Build and Test Requirements

To build and run tests for `gremlin-python`, ensure the following:

*   **Python Version**: Python 3.9 or higher must be installed.
*   **Virtual Environment**: While a virtual environment is recommended for local development, the preferred way to 
    run tests is via Maven and Docker, which handles environment isolation automatically.
*   **Docker**: Docker and Docker Compose must be installed and running.
*   **Maven**: Maven must be installed.

### 2. Preferred Build Orchestration

The preferred way to run tests is via Maven from the repository root. This ensures an OS-agnostic execution environment
and handles all dependencies, including starting the Gremlin Server.

*   **Run all tests**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python
    ```

*   **Run only Unit Tests**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python -DpytestArgs="tests/unit"
    ```

*   **Run only Integration Tests**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python -DpytestArgs="tests/integration"
    ```

*   **Run only Feature Tests**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python -DradishArgs=" " 
    ```

### 3. Targeted Test Execution

You can pass arguments to `pytest` or `radish` via Maven properties to run specific tests.

*   **Run a specific Unit/Integration test**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python -DpytestArgs="-k test_name"
    ```

*   **Run Feature tests with specific tags**:
    ```bash
    mvn clean install -pl gremlin-python -Pglv-python -DradishArgs="-t @some_tag"
    ```
    
### 4. Evaluating Build Results

**DO NOT** use `grep`, `tail` or similar text-search tools on the Maven console output (or `.output.txt`) to determine 
if the tests passed or failed. The Maven output can be misleading due to the tests validating expected errors. 

To accurately evaluate the results, follow this strict hierarchy:

1.  **Check the Command Exit Code**: A successful build **must** exit with code `0`. Any non-zero exit code is a failure.
2.  **Verify via XML Reports**: If the build fails (non-zero exit) you **must** inspect the JUnit XML reports in `gremlin-python/target/python3/python-reports/`:
    *   `TEST-native-python.xml` (Unit/Integration tests)
    *   `feature-graphbinary-result.xml` (Feature tests - GraphBinary)
    *   `feature-graphson-result.xml` (Feature tests - GraphSON)

Feature test XML reports will not be present if the unit/integration tests fail.

**DO NOT** attempt to investigate a build failure beyond reporting what failed unless asked.

### 5. Manual Test Execution (Advanced)

If you must run tests manually outside Maven, follow these steps from the `gremlin-python/src/main/python/` directory.

#### 5.1 Environment Setup
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install .[test,kerberos]
```

#### 5.2 Gremlin Server Management

Manual integration and feature tests require a running Gremlin Server. Run these from `gremlin-python/`:
```bash
# Start/Restart server
docker compose down gremlin-server-test-python
docker compose up -d gremlin-server-test-python

# Check status (wait for healthy)
docker compose ps gremlin-server-test-python
```

#### 5.3 Running Tests Manually
*   **Unit Tests**: `pytest tests/unit/`
*   **Integration Tests**: `pytest tests/integration/`
*   **Feature Tests**: 
    ```bash
    radish -f dots -e -t -b ./tests/radish ../../../../gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features --user-data='serializer=application/vnd.gremlin-v3.0+json'
    ```