blob: 70e696e54d8d8d42216e84f7188fade67e638479 [file] [log] [blame] [view]
# AGENTS.md
You are a TinkerPop developer working across the entire monorepocode, tests, docs, and website to implement,
maintain, and validate Apache TinkerPops graph computing framework and its multi-language Gremlin ecosystem.
- `README.md`
- `CONTRIBUTING.md`
- Developer documentation at `docs/src/dev/**`
This file must not contradict those documents. If it appears to, treat them as canonical and update this file
accordingly.
***
## 1. Project overview
Key project docs (prefer these local files over external URLs):
- Reference docs: `docs/src/reference/**`
- Recipes: `docs/src/recipes/**`
- Upgrade docs: `docs/src/upgrade/**`
- IO and Serialization docs: `docs/src/dev/io/**`
- Provider docs and Gremlin Semantics: `docs/src/dev/provider/**`
- Developer docs: `docs/src/dev/developer/**`
- Future plans: `docs/src/dev/future/**`
The project website mirrors these for released versions; use local files for branchaccurate information.
***
## 2. Repository structure (high level)
Use these as anchors when exploring the repo:
- Core code and modules: Maven multimodule layout under the repo root, though modules may not contain JVM-relevant code
(i.e. Maven is simply the build orchestration tool wrapping other environments like Python or Go)
- Docs: `docs/src/**` (AsciiDoc books”, reference, dev docs, recipes, etc.)
- Changelog: `CHANGELOG.asciidoc`
- Website: `docs/site/**`
- Scripts:
- Docker scripts: `docker/*.sh`
- Docs/site scripts: `bin/process-docs.sh`, `bin/generate-home.sh`
When adding or modifying files, follow the existing structure and conventions in the surrounding directory.
***
## 3. Nested AGENTS.md files
This repository uses additional `AGENTS.md` files in certain subdirectories (for example,
`gremlin-python/AGENTS.md`, `gremlin-dotnet/AGENTS.md`, etc.) to provide stackspecific guidance.
Agents should:
- Always read this root `AGENTS.md` for global rules.
- When working in a subdirectory, also look for the closest `AGENTS.md` in the current or parent
directories and apply its instructions for that area.
- Treat more specific `AGENTS.md` files (deeper in the tree) as overriding or refining the generic
guidance here when there is a conflict.
## 4. Build and test recipes
### 4.1 Basic build and test
- Build everything:
```bash
mvn clean install
```
- Build a specific module:
```bash
mvn clean install -pl <module-name>
```
Example:
```bash
mvn clean install -pl tinkergraph-gremlin
```
### 4.2 Integration and specialized builds
- Enable integration tests:
```bash
mvn clean install -DskipIntegrationTests=false
```
- Include Neo4j tests:
```bash
mvn clean install -DincludeNeo4j
```
### 4.3 Gremlin Language Variant (GLV) builds
Build Gremlin Server first:
```bash
mvn clean install -pl :gremlin-server -am -DskipTests
```
Each GLV has its own module structure:
- Python:
```bash
mvn clean install -Pglv-python -pl gremlin-python
```
- .NET:
```bash
mvn clean install -pl gremlin-dotnet,gremlin-dotnet-source,gremlin-dotnet-tests
```
- JavaScript:
```bash
mvn clean install -Pglv-js -pl gremlin-javascript
```
- Go:
```bash
mvn clean install -Pglv-go -pl gremlin-go
```
***
## 5. Documentation
TinkerPops documentation is AsciiDocbased and lives under `docs/src/**`.
When adding or updating docs:
- Use AsciiDoc (not Markdown) in the main docs tree.
- Place new content in the appropriate book (reference, dev, recipes, etc.).
- Update the relevant `index.asciidoc` so the new content is included in the build.
***
## 6. Coding and testing conventions
Agents should follow these conventions when generating or editing code and tests.
### 6.1 Code style
- All files should include the Apache Software Foundation license header.
- Do **not** use import wildcards (for example, avoid `import org.apache.tinkerpop.gremlin.structure.*`); prefer explicit imports.
- Respect existing naming patterns and package organization.
- Define variables as `final` whenever possible, except for loop variables.
### 6.2 Test guidelines
- Prefer SLF4J `Logger` for output instead of `System.out.println` or `println` in tests.
- Use `TestHelper` utilities to create temporary directories and file structures for filebased tests, instead of hardcoding paths.
- Always close `Graph` instances that are manually constructed in tests.
- Tests using a `GraphProvider` implementation with `AbstractGremlinTest` should be suffixed with `Check` instead of `Test`.
- Prefer Hamcrest matchers for booleanstyle assertions (for example, `assertThat(..., is(true))`) instead of manually checking booleans.
- For Gremlin language tests, see the "Gremlin Language Test Cases" section of `docs/src/dev/developer/for-committers.asciidoc`
for more details and use Gherkin tests under:
```text
gremlin-tests/src/main/resources/org/apache/tinkerpop/gremlin/test/features
```
***
## 7. Changelog, license, and checks
When changes affect behavior, APIs, or uservisible features:
- Add or update entries in `CHANGELOG.asciidoc` in the correct version section.
- Do not invent new version numbers or release names; follow the existing pattern.
- Preserve and respect license headers and notices in all files.
- Avoid adding thirdparty code or dependencies with incompatible licenses.
***
## 8. Do and don’t for agents
These rules apply to any AI/IDE assistant operating on this repository.
### 8.1 Do
- **Do** make small, focused changes that are easy to review.
- **Do** run the relevant build and test commands before suggesting that a change is complete.
- **Do** update or add tests when behavior changes.
- **Do** update documentation and/or changelog when you change public behavior or APIs.
- **Do** follow existing patterns for code structure, documentation layout, and naming.
- **Do** point maintainers to relevant documentation or issues when proposing nontrivial changes.
### 8.2 Don’t
- **Dont** perform large, sweeping refactors (across many modules or files) unless explicitly requested.
- **Dont** change public APIs, configuration formats, or network protocols without explicit human approval and associated design/issue.
- **Dont** switch documentation formats (e.g., AsciiDoc to Markdown) in the main docs tree.
- **Dont** introduce new external dependencies, modules, or build plugins without an associated discussion and issue.
- **Dont** invent project policies, version numbers, or release names.
- **Dont** remove or weaken tests to fix failures; adjust the implementation or the test data instead.
If you are uncertain about the impact of a change, prefer to:
- Make a minimal patch.
- Add comments or notes for reviewers.
- Ask for clarification.
***
## 9. When in doubt
If AGENTS.md does not clearly cover a situation:
1. Look for relevant information in:
- `CONTRIBUTING.md`
- Developer docs under `docs/src/dev/developer/**`
- Reference docs and recipes
2. Prefer **no change** over an unsafe or speculative change.
3. Surface the question to human maintainers (for example, by leaving a comment, or drafting a minimal PR that asks for guidance).
This file is intended to help tools act like a careful, wellinformed contributor. When in doubt, defer to human
judgment and the canonical project documentation.