This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/master by this push:
new 5927aeca31 Tighten the tinker-dev skill around a mandatory validation
gate
5927aeca31 is described below
commit 5927aeca319a5583041b8babbe02960aecdd719a
Author: Stephen Mallette <[email protected]>
AuthorDate: Wed Jun 17 17:43:54 2026 -0400
Tighten the tinker-dev skill around a mandatory validation gate
Establish a "Definition of Done" in SKILL.md and AGENTS.md: a change is not
done until a full Maven validation matched to the changeset has passed, run
before handing work off for review (incremental testing does not satisfy
it).
Give build/validate commands per module, with blast-radius rules for shared
modules — gremlin-server/driver/util require validating all GLVs, and
gremlin-core/gremlin-test ripple to the whole project including the OLAP
engines. Docs/comment-only changes are exempt.
Call out pitfalls that quietly invalidate a run: GLVs are skipped without
their
.glv sentinel; grammar (Gremlin.g4) and Gherkin feature changes need a
reactor
build to regenerate ANTLR parsers and per-language test code; and pass/fail
should be judged by the Maven exit code, not console text.
Reduce the skill to high-signal, non-derivable guidance:
- Remove the per-language build references and documentation.md; their
commands
now live in the Definition of Done table and the few non-obvious points
were
folded into SKILL.md.
- Collapse guardrails/conventions in SKILL.md that already live in
AGENTS.md.
- Trim gremlin-mcp.md (drop human client config) and the Repository
Structure
section to only what an agent cannot derive.
Drop the ASF license header from agent skill markdown to maximize signal and
broaden the RAT exclude to **/.skills/**/*.md.
Assisted-by: Claude Code:claude-opus-4-8
---
.skills/tinker-dev/SKILL.md | 203 +++++++++++----------
.skills/tinker-dev/references/beads-workflow.md | 19 --
.skills/tinker-dev/references/build-dotnet.md | 97 ----------
.skills/tinker-dev/references/build-go.md | 111 -----------
.skills/tinker-dev/references/build-java.md | 67 -------
.skills/tinker-dev/references/build-javascript.md | 171 -----------------
.skills/tinker-dev/references/build-python.md | 127 -------------
.../tinker-dev/references/dev-environment-setup.md | 24 +--
.skills/tinker-dev/references/documentation.md | 45 -----
.skills/tinker-dev/references/gremlin-mcp.md | 91 +--------
.skills/tinker-review/playbooks/bug-fix.md | 19 --
.skills/tinker-review/playbooks/driver-server.md | 19 --
.skills/tinker-review/playbooks/general.md | 19 --
.skills/tinker-review/playbooks/glv.md | 19 --
.skills/tinker-review/playbooks/grammar.md | 19 --
.skills/tinker-review/playbooks/new-step.md | 19 --
.skills/tinker-review/references/interfaces.md | 19 --
.skills/tinker-review/references/schema.md | 19 --
AGENTS.md | 28 ++-
pom.xml | 5 +-
20 files changed, 136 insertions(+), 1004 deletions(-)
diff --git a/.skills/tinker-dev/SKILL.md b/.skills/tinker-dev/SKILL.md
index 4336370bb2..1844425347 100644
--- a/.skills/tinker-dev/SKILL.md
+++ b/.skills/tinker-dev/SKILL.md
@@ -33,29 +33,82 @@ Canonical project documentation (prefer local files over
external URLs):
- Upgrade docs: `docs/src/upgrade/`
- Future plans: `docs/src/dev/future/`
-## Repository Structure
+## Definition of Done
+A change is **not done** until a full Maven validation has passed locally. Run
it before
+presenting work for review — even when your targeted or unit tests already
pass, and even if you
+judge a full run unnecessary. Incremental testing during development is
encouraged, but it does
+**not** satisfy this gate.
+
+Validation is two steps. First, rebuild and install the whole reactor so every
module picks up
+your changes:
+
+```bash
+mvn clean install -DskipTests
```
-tinkerpop/
-├── gremlin-core/ Core graph API and traversal engine (Java)
-├── gremlin-server/ Gremlin Server (Java)
-├── tinkergraph-gremlin/ In-memory reference graph (Java)
-├── gremlin-python/ Python GLV
-├── gremlin-js/ JavaScript/TypeScript workspace root
-│ ├── gremlin-javascript/ JS driver (npm: "gremlin")
-│ ├── gremlin-mcp/ Gremlin MCP server (npm: "gremlin-mcp")
-│ └── gremlint/ Gremlin query formatter (npm: "gremlint")
-├── gremlin-dotnet/ .NET GLV
-├── gremlin-go/ Go GLV
-├── gremlin-test/ Shared test resources and Gherkin features
-├── gremlin-tools/ Benchmarks, coverage, socket server
-├── docs/src/ AsciiDoc documentation
-├── docker/ Docker build scripts and configs
-├── bin/ Utility scripts
-└── CHANGELOG.asciidoc Changelog
-```
-Maven is the build orchestration tool for all modules, including non-JVM ones.
+Then run `verify` scoped to what you changed, using the **broadest** rule that
applies, and
+always list every module you touched.
+
+**Self-contained modules** — changing one of these only requires validating
that module:
+
+| Changed module | Validate command |
+|---|---|
+| Python GLV | `mvn verify -pl gremlin-python` |
+| JavaScript GLV | `mvn verify -pl :gremlin-javascript` |
+| .NET GLV | `mvn verify -pl
:gremlin-dotnet,:gremlin-dotnet-source,:gremlin-dotnet-tests` |
+| Go GLV | `mvn verify -pl :gremlin-go` |
+| `gremlint` | `mvn verify -pl :gremlint` |
+| `gremlin-mcp` | `mvn verify -pl :gremlin-mcp` |
+| Other single JVM module (e.g. `tinkergraph-gremlin`, `gremlin-console`) |
`mvn verify -pl <module> -DskipIntegrationTests=false` |
+
+**Shared modules** — depended on by others, so changing them means validating
the consumers too.
+Use the broadest rule that matches:
+
+- **`gremlin-server`, `gremlin-driver`, or `gremlin-util`** define the wire
protocol and
+ serialization that every GLV exercises → validate the changed module(s)
**plus all GLVs**:
+ `mvn verify -pl
<changed>,gremlin-python,:gremlin-javascript,:gremlin-dotnet,:gremlin-dotnet-source,:gremlin-dotnet-tests,:gremlin-go
-DskipIntegrationTests=false`
+- **`gremlin-core`, `gremlin-test`, or anything they depend on** ripple across
the whole project,
+ including the OLAP engines (`hadoop-gremlin`, `spark-gremlin`) → run
everything:
+ `mvn clean install -DskipIntegrationTests=false`
+- **Unsure?** Treat it as the `gremlin-core` case and run everything.
+
+**Docs or code comments only** — no validation gate; this gate is for changes
that affect behavior.
+
+### Things that quietly invalidate a run
+
+- **GLV tests are skipped unless activated.** A GLV is built and tested only
when its `.glv`
+ sentinel exists: `gremlin-python/.glv`, `gremlin-go/.glv`, and *both*
`gremlin-dotnet/src/.glv`
+ and `gremlin-dotnet/test/.glv` (JavaScript builds by default). Without the
sentinel the module
+ is silently skipped — a green run may have tested nothing of your change.
Create the sentinel
+ (or pass `-Pglv-python` / `-Pglv-go`) before validating a GLV change.
+- **Grammar and feature-test changes need a reactor build to take effect.**
The ANTLR grammar
+ (`gremlin-language/src/main/antlr4/Gremlin.g4`) and the Gherkin features
under `gremlin-test`
+ drive code generation during `mvn clean install` — ANTLR parsers, and
per-language test code
+ generated from the feature corpus (e.g.
`gremlin-python/build/generate.groovy`, with
+ equivalents for Go, .NET, and JavaScript). After changing either, run `mvn
clean install
+ -DskipTests` before relying on *any* test, including fast native ones, or
you will be testing
+ stale generated code.
+- **Judge pass/fail by the Maven exit code, not console text.** Do not
`grep`/`tail` the build
+ output — tests deliberately emit expected errors, so the log misleads. Exit
`0` = pass. For
+ Python, detailed per-suite results are in
`gremlin-python/target/python3/python-reports/*.xml`.
+
+If you cannot run the validation (for example, Docker is unavailable), say so
explicitly and
+report the change as **not validated** — do not present it as done.
+
+## Repository Structure
+
+Most module names map directly to their purpose (`gremlin-core`,
`gremlin-server`,
+`gremlin-go`, etc.). Two things that aren't obvious:
+
+- The **JavaScript workspace lives under `gremlin-js/`** — it contains
`gremlin-javascript/`
+ (the `gremlin` npm driver), `gremlin-mcp/`, and `gremlint/`. There is no
top-level
+ `gremlin-javascript/` directory.
+- **Maven orchestrates the build for every module, including the non-JVM
ones** (Python,
+ JavaScript, .NET, Go) — which is why the validation in the Definition of
Done runs through
+ Maven rather than each language's native test runner.
+
+Cross-language Gherkin feature tests live in `gremlin-test/`.
## Basic Build Commands
@@ -69,96 +122,46 @@ Build a specific module:
mvn clean install -pl <module-name>
```
-For GLV-specific builds, test execution, and advanced workflows, see the
appropriate
-reference file under `references/`.
-
-## Coding Conventions
-
-- All files must include the Apache Software Foundation license header.
Canonical text
- is at `bin/asf-license-header.txt`.
-- Do not use import wildcards (e.g., avoid `import
org.apache.tinkerpop.gremlin.structure.*`).
- Use explicit imports.
-- Define variables as `final` whenever possible, except for loop variables.
-- Respect existing naming patterns and package organization.
-- Use `@/` path aliases for JavaScript/TypeScript imports where the project
uses them.
-
-## Test Conventions
-
-- Prefer SLF4J `Logger` over `System.out.println` or `println` in tests.
-- Use `TestHelper` utilities for temporary directories and file structures
instead of
- hard-coding paths.
-- Always close `Graph` instances that are manually constructed in tests.
-- Tests using a `GraphProvider` with `AbstractGremlinTest` should be suffixed
`Check`,
- not `Test`.
-- Prefer Hamcrest matchers for boolean assertions (e.g., `assertThat(...,
is(true))`)
- instead of manually checking booleans.
-- Gremlin language tests use Gherkin features under:
- `gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/`
- See `docs/src/dev/developer/for-committers.asciidoc` for details.
-
-## Documentation Conventions
-
-- TinkerPop documentation is AsciiDoc-based under `docs/src/`. Do not use
Markdown in
- the main docs tree.
-- Place new content in the appropriate book (reference, dev, recipes, etc.).
-- Update the relevant `index.asciidoc` so new content is included in the build.
-- For detailed documentation generation instructions, see
`references/documentation.md`.
-
-## Changelog, License, and Checks
+For GLV-specific builds and the validation commands per module, see the
**Definition of Done**
+table above. For environment setup and GLV activation, see
`references/dev-environment-setup.md`.
-When changes affect behavior, APIs, or user-visible features:
+## Conventions
-- 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 third-party code or dependencies with incompatible licenses.
+The general Do/Don't rules and "when in doubt" guidance live in the root
`AGENTS.md` — the
+single source of truth, not repeated here. The conventions below are the
TinkerPop-specific
+ones that are easy to miss:
-## Agent Guardrails
-
-### Do
-
-- Make small, focused changes that are easy to review.
-- Run the relevant build and test commands before suggesting a change is
complete.
-- Update or add tests when behavior changes.
-- Update documentation and/or changelog when changing public behavior or APIs.
-- Follow existing patterns for code structure, documentation layout, and
naming.
-- Point maintainers to relevant documentation or issues when proposing
non-trivial changes.
-
-### Don't
+- **License header**: every new file needs the ASF header. Canonical text:
`bin/asf-license-header.txt`.
+- **Test naming**: a test using a `GraphProvider` with `AbstractGremlinTest`
is suffixed
+ `Check`, not `Test`.
+- **Gremlin language tests**: cross-language behavior is tested with Gherkin
features under
+ `gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/`
+ (see `docs/src/dev/developer/for-committers.asciidoc`).
+- **Docs are AsciiDoc** under `docs/src/` — never Markdown in the main docs
tree. Add new
+ content to the right book and update its `index.asciidoc`; generate with
`bin/process-docs.sh`
+ (Java 11).
+- **Changelog**: for user-visible or API changes, update `CHANGELOG.asciidoc`
in the correct
+ version section. Do not invent version numbers or release names.
-- Don't perform large, sweeping refactors unless explicitly requested.
-- Don't change public APIs, configuration formats, or network protocols
without explicit
- human approval and an associated design/issue.
-- Don't switch documentation formats (e.g., AsciiDoc to Markdown) in the main
docs tree.
-- Don't introduce new external dependencies, modules, or build plugins without
an
- associated discussion and issue.
-- Don't invent project policies, version numbers, or release names.
-- Don't remove or weaken tests to "fix" failures; adjust the implementation or
test
- data instead.
-- Don't run `bd dolt push` — pushing to DoltHub is a maintainer action
performed after
- PRs merge, not during active development.
-- Don't close a beads issue when a PR is submitted — close it only after the
PR merges
- to the target branch.
+Otherwise, match the existing code in neighboring files — explicit imports (no
wildcards),
+`final` where practical, SLF4J logging over `println`, Hamcrest matchers, and
closing any
+`Graph` you construct in a test.
-If uncertain about the impact of a change, prefer to make a minimal patch, add
comments
-for reviewers, and ask for clarification.
+## Beads Caveats
-## When In Doubt
+The general agent Do/Don't rules are in the root `AGENTS.md`. Two beads rules
are easy to get
+wrong and worth repeating here (full workflow in
`references/beads-workflow.md`):
-1. Check `CONTRIBUTING.md`, developer docs under `docs/src/dev/developer/`,
and reference docs.
-2. Prefer no change over an unsafe or speculative change.
-3. Surface the question to human maintainers.
+- Don't run `bd dolt push` — pushing to DoltHub is a maintainer action
performed after PRs
+ merge, not during active development.
+- Don't close a beads issue when a PR is submitted — close it only after the
PR merges to the
+ target branch.
## Reference Guides
-For deeper, task-specific guidance, see the reference files in this skill:
+Build and validate commands live in the **Definition of Done** table above.
For the remaining
+task-specific guidance, see:
-- [Development Environment Setup](references/dev-environment-setup.md) — fresh
clone to working environment
-- [Java / Core Builds](references/build-java.md) — Java modules,
gremlin-server, integration tests
-- [Python GLV](references/build-python.md) — build, test, result evaluation
-- [JavaScript GLV](references/build-javascript.md) — npm workspace, build,
test, evaluation
-- [.NET GLV](references/build-dotnet.md) — build, test, Docker setup
-- [Go GLV](references/build-go.md) — build, test, Docker setup
-- [Documentation](references/documentation.md) — AsciiDoc generation, website
+- [Development Environment Setup](references/dev-environment-setup.md) — fresh
clone to working environment, prerequisites, GLV activation
- [Gremlin MCP Server](references/gremlin-mcp.md) — translation, formatting,
querying via MCP
- [Beads Workflow](references/beads-workflow.md) — agent planning, persistent
memory, TinkerPop-specific conventions and DoltHub push policy
diff --git a/.skills/tinker-dev/references/beads-workflow.md
b/.skills/tinker-dev/references/beads-workflow.md
index c7e83f8982..ed03954946 100644
--- a/.skills/tinker-dev/references/beads-workflow.md
+++ b/.skills/tinker-dev/references/beads-workflow.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Beads Workflow for TinkerPop
TinkerPop uses [beads](https://github.com/steveyegge/beads) (`bd`) as the
agent planning,
diff --git a/.skills/tinker-dev/references/build-dotnet.md
b/.skills/tinker-dev/references/build-dotnet.md
deleted file mode 100644
index e7fd37a0ce..0000000000
--- a/.skills/tinker-dev/references/build-dotnet.md
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# .NET GLV Build and Test
-
-## Requirements
-
-- **.NET SDK 8.0+** — optional; Docker handles test execution via Maven.
-- **Docker and Docker Compose** — required for running tests through Maven.
-- **Maven** — preferred build orchestration.
-- **Mono** — only needed for packing the `Gremlin.Net.Template` project.
-
-## Module Structure
-
-```
-gremlin-dotnet/
-├── pom.xml Maven parent (packaging=pom)
-├── Gremlin.Net.sln .NET solution file
-├── src/ Source code (Gremlin.Net library + template)
-│ ├── .glv Sentinel file to activate build
-│ └── Gremlin.Net/ Main library
-├── test/ Test projects
-│ ├── .glv Sentinel file to activate tests
-│ ├── Gremlin.Net.UnitTest/
-│ ├── Gremlin.Net.IntegrationTest/
-│ ├── Gremlin.Net.Benchmarks/
-│ └── Gremlin.Net.Template.IntegrationTest/
-├── Examples/ Example projects
-└── docker-compose.yml Test infrastructure
-```
-
-## Activation
-
-Both `src` and `test` directories need `.glv` sentinel files:
-```bash
-touch gremlin-dotnet/src/.glv
-touch gremlin-dotnet/test/.glv
-```
-
-Without these files, TinkerPop still builds with Maven but .NET projects are
skipped.
-
-## Maven Build Commands
-
-Run from the repository root.
-
-Build and test (requires Docker):
-```bash
-mvn clean install -pl
:gremlin-dotnet,:gremlin-dotnet-source,:gremlin-dotnet-tests
-```
-
-The test execution uses Docker Compose to:
-1. Start a Gremlin Server test container (`gremlin-server-test-dotnet`)
-2. Run `dotnet test ./Gremlin.Net.sln -c Release` inside a .NET SDK 8.0
container
-3. Run example projects to verify they work
-4. Tear down containers
-
-## Docker Test Infrastructure
-
-The `docker-compose.yml` defines:
-- `gremlin-server-test-dotnet` — Gremlin Server on ports 45940-45942 and 4588
-- `gremlin-dotnet-integration-tests` — .NET SDK 8.0 container that runs
`dotnet test`
-
-The test container uses `dotnet-trx` for test result reporting.
-
-## Test Results
-
-Test results are written as `.trx` files inside the container. On failure,
check the
-Maven console output for the `dotnet test` exit code and error summary.
-
-## Template Packaging
-
-To pack the `Gremlin.Net.Template` NuGet package (requires Mono):
-```bash
-mvn clean install -Dnuget
-```
-
-## Evaluating Build Results
-
-Use the Maven exit code to determine pass/fail:
-- Exit `0` — success
-- Non-zero — failure; check the `dotnet test` output in the Maven console
diff --git a/.skills/tinker-dev/references/build-go.md
b/.skills/tinker-dev/references/build-go.md
deleted file mode 100644
index f44cc38aa7..0000000000
--- a/.skills/tinker-dev/references/build-go.md
+++ /dev/null
@@ -1,111 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Go GLV Build and Test
-
-## Requirements
-
-- **Go 1.25+** — optional for local development; Docker handles test execution
via Maven.
-- **Docker and Docker Compose** — required for running tests through Maven.
-- **Maven** — preferred build orchestration.
-
-## Module Structure
-
-```
-gremlin-go/
-├── pom.xml Maven module (no Java source; Maven wraps Go)
-├── go.mod Go module definition
-├── go.sum Go dependency checksums
-├── run.sh Convenience script for Docker-based testing
-├── driver/ Go driver source and tests
-│ ├── cucumber/ BDD feature test support
-│ ├── resources/ Test resources
-│ └── *.go / *_test.go Source and test files
-├── examples/ Example programs
-└── docker-compose.yml Test infrastructure
-```
-
-## Activation
-
-Create a `.glv` sentinel file to include Go in standard builds:
-```bash
-touch gremlin-go/.glv
-```
-
-Without this file, TinkerPop still builds with Maven but Go is skipped.
-
-## Maven Build Commands
-
-Run from the repository root.
-
-Build and test (requires Docker):
-```bash
-mvn clean install -Pglv-go -pl :gremlin-go
-```
-
-The Maven build uses Docker Compose to:
-1. Start a Gremlin Server test container
-2. Run `go test -v -json ./... -race -covermode=atomic` inside a Go container
-3. Run example programs
-4. Tear down containers and prune dangling images
-
-## Convenience Script
-
-From `gremlin-go/`:
-```bash
-./run.sh # Uses current project version
-./run.sh 4.0.0-SNAPSHOT # Specify server version
-./run.sh 3.8.0 # Use a released version
-```
-
-The default requires a SNAPSHOT server image built with:
-```bash
-mvn clean install -pl :gremlin-server -DskipTests -DskipIntegrationTests=true
-am
-mvn install -Pdocker-images -pl :gremlin-server
-```
-
-## Docker Test Infrastructure
-
-The `docker-compose.yml` defines:
-- `gremlin-server-test` — Gremlin Server on ports 45940-45942 and 4588
-- `gremlin-go-integration-tests` — Go 1.25 container that runs tests with race
- detection, coverage, and `gotestfmt` for formatted output
-
-Environment variables in the test container:
-- `CUCUMBER_FEATURE_FOLDER` — path to Gherkin feature files
-- `GREMLIN_SERVER_URL` — server endpoint for integration tests
-- `RUN_INTEGRATION_TESTS=true`
-- `RUN_BASIC_AUTH_INTEGRATION_TESTS=true`
-
-## Local Development
-
-After installing Go locally:
-```bash
-cd gremlin-go
-go build ./...
-go test ./driver/ -run TestName
-```
-
-For integration tests, a running Gremlin Server is required.
-
-## Evaluating Build Results
-
-Use the Maven exit code to determine pass/fail:
-- Exit `0` — success
-- Non-zero — failure; check the `go test` output in the Maven console
diff --git a/.skills/tinker-dev/references/build-java.md
b/.skills/tinker-dev/references/build-java.md
deleted file mode 100644
index 85c1bf9e7a..0000000000
--- a/.skills/tinker-dev/references/build-java.md
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Java / Core Module Builds
-
-## Full Build (skip tests)
-
-When modules have unresolved dependency ordering issues (e.g., shaded jars not
yet installed, branches changed, etc.),
-build the entire project first:
-
-```bash
-mvn clean install -DskipTests
-```
-
-## Building and Test Specific Modules
-
-Build and test a single module:
-```bash
-mvn clean install -pl <module-name>
-```
-
-Examples:
-```bash
-mvn clean install -pl :tinkergraph-gremlin
-mvn clean install -pl :gremlin-core
-mvn clean install -pl :gremlin-server
-```
-
-Build and test a module and its dependencies:
-```bash
-mvn clean install -pl :gremlin-server -am
-```
-
-## Gremlin Server
-
-Build gremlin-server (commonly needed before GLV testing):
-```bash
-mvn clean install -pl :gremlin-server -am -DskipTests
-```
-
-Run gremlin-server integration tests:
-```bash
-mvn clean install -pl :gremlin-server -DskipIntegrationTests=false
-```
-
-## Integration Tests
-
-Build and test with all integration tests across the project:
-```bash
-mvn clean install -DskipIntegrationTests=false
-```
diff --git a/.skills/tinker-dev/references/build-javascript.md
b/.skills/tinker-dev/references/build-javascript.md
deleted file mode 100644
index 7ccaddea63..0000000000
--- a/.skills/tinker-dev/references/build-javascript.md
+++ /dev/null
@@ -1,171 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# JavaScript / TypeScript GLV Build and Test
-
-## Architecture
-
-`gremlin-js/` serves two roles simultaneously:
-
-- **Maven parent module** (`packaging=pom`): declares `gremlin-javascript`,
`gremlin-mcp`,
- and `gremlint` as child modules; runs `npm ci` once at the workspace root.
-- **npm workspace root**: `package.json` and `package-lock.json` live here;
all three
- packages share a single hoisted `node_modules/`.
-
-```
-gremlin-js/
-├── pom.xml Maven parent — runs npm ci
-├── package.json npm workspace root
-├── package-lock.json single lockfile for all packages
-├── node_modules/ hoisted dependencies (gitignored)
-├── node/ Node.js runtime from frontend-maven-plugin
(gitignored)
-├── gremlin-javascript/ JS driver (npm: "gremlin")
-├── gremlin-mcp/ Gremlin MCP server (npm: "gremlin-mcp")
-└── gremlint/ Gremlin query formatter (npm: "gremlint")
-```
-
-## Requirements
-
-- **Node.js 22+** / **npm 10+** — optional; Maven downloads a local copy.
-- **Docker and Docker Compose** — required for integration and feature tests.
-- **Maven** — preferred orchestration.
-
-## Maven Build Commands
-
-Run from the repository root.
-
-Build all JS packages (parent + children must be listed explicitly):
-```bash
-mvn clean install -pl :gremlin-js,:gremlin-javascript,:gremlint,:gremlin-mcp
-DskipTests
-mvn clean install -pl :gremlin-js,:gremlin-javascript,:gremlint,:gremlin-mcp
# with tests
-```
-
-Build a single package:
-```bash
-mvn clean install -pl :gremlin-javascript -DskipTests
-mvn clean install -pl :gremlin-mcp -DskipTests
-mvn clean install -pl :gremlint -DskipTests
-```
-
-**`-DskipTests` behavior:**
-- Skips Docker-based integration, unit, and feature tests for
`gremlin-javascript`
-- Skips `npm run validate` (which includes `npm test`) for `gremlin-mcp`
-- Still runs `npm run build` and `npm run lint` for all modules
-
-Full build with tests (requires Docker):
-```bash
-mvn clean install -pl :gremlin-javascript
-```
-
-If building in isolation fails due to a missing parent:
-```bash
-mvn clean install -pl :gremlin-js -DskipTests
-```
-
-## npm Commands
-
-Run from `gremlin-js/gremlin-javascript/` after `npm ci` has been run from
`gremlin-js/`:
-
-| Command | Purpose |
-|----------------------------|--------------------------------------------|
-| `npm run unit-test` | Unit tests only — no server needed |
-| `npm run integration-test` | Integration tests — requires Gremlin Server|
-| `npm run features` | BDD feature tests — requires Gremlin Server|
-| `npm run build` | Compile TypeScript to `build/` (ESM + CJS) |
-| `npm run lint` | ESLint check |
-| `npm run generate` | Regenerate grammar from `Gremlin.g4` |
-
-**Do not run `npm test` directly** — it chains unit and integration tests and
will fail
-without a server. Use `npm run unit-test` for fast local feedback.
-
-For `gremlin-mcp`:
-
-| Command | Purpose |
-|----------------------|--------------------------------------------------|
-| `npm test` | Run unit tests |
-| `npm run test:it` | Integration tests (requires Gremlin Server) |
-| `npm run lint` | ESLint check |
-| `npm run build` | Compile TypeScript |
-| `npm run validate` | All checks (format, lint, type-check, test) |
-
-## npm Workspace Rules
-
-All npm commands that affect dependencies must be run from `gremlin-js/`, not
from
-child package directories:
-
-```bash
-cd gremlin-js/
-npm install
-```
-
-Scripts inside child packages must reference binaries by name (`mocha`, `tsc`,
`eslint`)
-rather than by relative path (`./node_modules/.bin/...`) because dependencies
are hoisted.
-
-## What Not to Change Without Care
-
-- **`package-lock.json`** — regenerated by `npm install` from `gremlin-js/`.
Do not edit
- manually. After any `package.json` change in any child, run `npm install`
from
- `gremlin-js/`.
-- **`gremlin-js/pom.xml`** — the `frontend-maven-plugin` block runs `npm ci`
with
- `<inherited>false</inherited>` so it executes only once at this level.
Removing or
- moving it will break partial `-pl` child builds.
-- **Workspace member paths in `package.json`** — must match subdirectory
names. Changing
- them requires regenerating the lockfile and updating the pom `<modules>`
list.
-
-## gremlin-javascript Directory Structure
-
-```
-gremlin-javascript/
-├── lib/ TypeScript source
-│ └── language/
-│ ├── grammar/ Generated from Gremlin.g4 — do not edit; gitignored
-│ └── translator/ Gremlin query translators (JS, Python, Go, .NET,
Java, Groovy)
-├── test/
-│ ├── unit/ Unit tests (mocha); no server needed
-│ ├── integration/ Requires running Gremlin Server
-│ └── cucumber/ BDD feature tests
-├── scripts/
-│ ├── patch-antlr4ng.js postinstall — patches antlr4ng for CJS
-│ └── groovy/
-│ └── generate.groovy Generates test/cucumber/gremlin.js from feature
corpus
-├── examples/ Standalone examples; excluded from ESLint
-└── build/ Compiled output (ESM + CJS); gitignored
-```
-
-## Docker Permissions
-
-The integration test container runs as the host user (`HOST_UID`/`HOST_GID`,
defaulting
-to `1000:1000`). If you see `EACCES` errors:
-
-```bash
-sudo chown -R $(whoami) /path/to/tinkerpop/gremlin-js/
-```
-
-If your UID is not 1000:
-```bash
-mvn clean install -Dhost.uid=$(id -u) -Dhost.gid=$(id -g) -pl
:gremlin-javascript
-```
-
-## Evaluating Build Results
-
-Do not use `grep` or `tail` on Maven output to judge pass/fail. Use the exit
code:
-- Exit `0` — success
-- Non-zero — failure; inspect Docker container logs or Maven `[ERROR]` lines
-
-Test failures surface directly in the Maven console via npm's exit code.
diff --git a/.skills/tinker-dev/references/build-python.md
b/.skills/tinker-dev/references/build-python.md
deleted file mode 100644
index 469dacc50e..0000000000
--- a/.skills/tinker-dev/references/build-python.md
+++ /dev/null
@@ -1,127 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Python GLV Build and Test
-
-## Requirements
-
-- **Python 3.9+** — optional for local development; Docker handles test
execution via Maven.
-- **Docker and Docker Compose** — required for running tests through Maven.
-- **Maven** — preferred build orchestration.
-
-## Activation
-
-Create a `.glv` sentinel file to include Python in standard builds:
-```bash
-touch gremlin-python/.glv
-```
-
-Or use the Maven profile explicitly:
-```bash
-mvn clean install -Pglv-python -pl gremlin-python
-```
-
-## Maven Build Commands
-
-Run from the repository root.
-
-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=" "
-```
-
-Run a specific test by name:
-```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"
-```
-
-## Evaluating Build Results
-
-**Do not** use `grep`, `tail`, or similar text-search tools on Maven console
output to
-determine pass/fail. Maven output can be misleading because tests validate
expected errors.
-
-Follow this hierarchy:
-
-1. **Check the exit code.** Exit `0` = success. Non-zero = failure.
-2. **Inspect XML reports** on failure. Reports are in
- `gremlin-python/target/python3/python-reports/`:
- - `TEST-native-python.xml` — unit/integration tests
- - `feature-graphbinary-result.xml` — GraphBinary feature tests
- - `feature-graphbinary-params-result.xml` — GraphBinary parameterized
- - `feature-graphbinary-bulked-result.xml` — GraphBinary bulked
- - `feature-graphson-result.xml` — GraphSON feature tests
- - `feature-graphson-params-result.xml` — GraphSON parameterized
-
-Feature test XML reports will not be present if unit/integration tests fail.
-
-**Do not** investigate a build failure beyond reporting what failed unless
asked.
-
-## Manual Test Execution
-
-If you must run tests outside Maven, work from
`gremlin-python/src/main/python/`:
-
-### Environment setup
-```bash
-python3 -m venv .venv
-source .venv/bin/activate
-pip install --upgrade pip
-pip install .[test,kerberos]
-```
-
-### Gremlin Server management
-
-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
-```
-
-### 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'
- ```
diff --git a/.skills/tinker-dev/references/dev-environment-setup.md
b/.skills/tinker-dev/references/dev-environment-setup.md
index 5ae0faa5c7..6e5ce1c880 100644
--- a/.skills/tinker-dev/references/dev-environment-setup.md
+++ b/.skills/tinker-dev/references/dev-environment-setup.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Development Environment Setup
This guide walks through setting up a TinkerPop development environment from a
fresh clone.
@@ -135,6 +116,5 @@ For AI coding agent configuration, see the "Using AI Coding
Agents" section in
## Next Steps
-- See `references/build-java.md` for Java module build details
-- See the GLV-specific reference files for language-specific workflows
-- See `references/documentation.md` for documentation instructions
+- See the **Definition of Done** table in `SKILL.md` for the build and
validate commands per
+ module / GLV.
diff --git a/.skills/tinker-dev/references/documentation.md
b/.skills/tinker-dev/references/documentation.md
deleted file mode 100644
index 9a9955e592..0000000000
--- a/.skills/tinker-dev/references/documentation.md
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Documentation
-
-## Format and Location
-
-TinkerPop documentation is AsciiDoc-based and lives under `docs/src/`:
-
-```
-docs/src/
-├── reference/ Main reference documentation
-├── dev/
-│ ├── developer/ Developer guides (environment, contributing, releases)
-│ ├── provider/ Graph provider documentation, Gremlin semantics
-│ ├── io/ IO and serialization formats
-│ └── future/ Future plans
-├── recipes/ Gremlin recipes and patterns
-├── tutorials/ Getting started tutorials
-└── upgrade/ Version upgrade guides
-```
-
-Do not use Markdown in the main docs tree. Use AsciiDoc.
-
-## Adding or Updating Documentation
-
-1. Place new content in the appropriate book (reference, dev, recipes, etc.).
-2. Update the relevant `index.asciidoc` so the new content is included in the
build.
-3. Follow existing patterns for section structure and formatting.
diff --git a/.skills/tinker-dev/references/gremlin-mcp.md
b/.skills/tinker-dev/references/gremlin-mcp.md
index 680fc9bff5..25598f96f4 100644
--- a/.skills/tinker-dev/references/gremlin-mcp.md
+++ b/.skills/tinker-dev/references/gremlin-mcp.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Gremlin MCP Server
The Gremlin MCP server (`gremlin-mcp`) is an MCP (Model Context Protocol)
server that
@@ -49,76 +30,6 @@ When `GREMLIN_MCP_ENDPOINT` is not set, graph tools are not
registered but
`translate_gremlin_query` and `format_gremlin_query` remain fully available.
This is
useful for query translation and formatting without a running database.
-## Configuration
-
-### MCP Client Configuration (e.g., Claude Desktop, Cursor, Windsurf, Kiro)
-
-Using the published package:
-```json
-{
- "mcpServers": {
- "gremlin": {
- "command": "npx",
- "args": ["gremlin-mcp"],
- "env": {
- "GREMLIN_MCP_ENDPOINT": "localhost:8182",
- "GREMLIN_MCP_LOG_LEVEL": "info"
- }
- }
- }
-}
-```
-
-From source (after building):
-```json
-{
- "mcpServers": {
- "gremlin": {
- "command": "node",
- "args": ["gremlin-js/gremlin-mcp/dist/server.js"],
- "env": {
- "GREMLIN_MCP_ENDPOINT": "localhost:8182",
- "GREMLIN_MCP_LOG_LEVEL": "info"
- }
- }
- }
-}
-```
-
-For offline mode (translation and formatting only), omit
`GREMLIN_MCP_ENDPOINT`.
-
-### With Authentication
-```json
-{
- "mcpServers": {
- "gremlin": {
- "command": "npx",
- "args": ["gremlin-mcp"],
- "env": {
- "GREMLIN_MCP_ENDPOINT": "your-server.com:8182/g",
- "GREMLIN_MCP_USERNAME": "your-username",
- "GREMLIN_MCP_PASSWORD": "your-password",
- "GREMLIN_MCP_USE_SSL": "true"
- }
- }
- }
-}
-```
-
-### Environment Variables
-
-| Variable | Required | Default | Purpose
|
-|---------------------------------------|----------|---------|----------------------------------|
-| `GREMLIN_MCP_ENDPOINT` | No | — | Server endpoint
(host:port[/g]) |
-| `GREMLIN_MCP_USE_SSL` | No | false | Enable SSL/TLS
|
-| `GREMLIN_MCP_USERNAME` | No | — | Authentication
username |
-| `GREMLIN_MCP_PASSWORD` | No | — | Authentication
password |
-| `GREMLIN_MCP_IDLE_TIMEOUT` | No | 300 | Connection
timeout (seconds) |
-| `GREMLIN_MCP_LOG_LEVEL` | No | info | Logging: error,
warn, info, debug|
-| `GREMLIN_MCP_ENUM_DISCOVERY_ENABLED` | No | true | Smart enum
detection |
-| `GREMLIN_MCP_ENUM_CARDINALITY_THRESHOLD` | No | 10 | Max distinct
values for enum |
-| `GREMLIN_MCP_ENUM_PROPERTY_DENYLIST` | No | — | Properties to
exclude from enums |
-
## Translation
The `translate_gremlin_query` tool supports these targets:
@@ -142,7 +53,7 @@ This starts the MCP server and opens a browser-based tool
for interacting with i
## Building gremlin-mcp
-See `references/build-javascript.md` for full build instructions. Quick
reference:
+Quick reference (validate per the **Definition of Done** table in `SKILL.md`):
```bash
# Build only
diff --git a/.skills/tinker-review/playbooks/bug-fix.md
b/.skills/tinker-review/playbooks/bug-fix.md
index df634511ed..20be16eb98 100644
--- a/.skills/tinker-review/playbooks/bug-fix.md
+++ b/.skills/tinker-review/playbooks/bug-fix.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: Bug Fix
## Context
diff --git a/.skills/tinker-review/playbooks/driver-server.md
b/.skills/tinker-review/playbooks/driver-server.md
index 3a599dc23d..177fbfdf5e 100644
--- a/.skills/tinker-review/playbooks/driver-server.md
+++ b/.skills/tinker-review/playbooks/driver-server.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: Driver / Server / Serialization
## Context
diff --git a/.skills/tinker-review/playbooks/general.md
b/.skills/tinker-review/playbooks/general.md
index d8c41abf5f..91ea97253c 100644
--- a/.skills/tinker-review/playbooks/general.md
+++ b/.skills/tinker-review/playbooks/general.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: General (applies to all PRs)
## Context
diff --git a/.skills/tinker-review/playbooks/glv.md
b/.skills/tinker-review/playbooks/glv.md
index 9bac8c8ee8..8c862a7ddc 100644
--- a/.skills/tinker-review/playbooks/glv.md
+++ b/.skills/tinker-review/playbooks/glv.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: GLV Implementation
## Context
diff --git a/.skills/tinker-review/playbooks/grammar.md
b/.skills/tinker-review/playbooks/grammar.md
index 3909b26c78..dd8bb704b0 100644
--- a/.skills/tinker-review/playbooks/grammar.md
+++ b/.skills/tinker-review/playbooks/grammar.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: Grammar Change
## Context
diff --git a/.skills/tinker-review/playbooks/new-step.md
b/.skills/tinker-review/playbooks/new-step.md
index 4669bbd3f9..eb66769fb9 100644
--- a/.skills/tinker-review/playbooks/new-step.md
+++ b/.skills/tinker-review/playbooks/new-step.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Playbook: New Step
## Context
diff --git a/.skills/tinker-review/references/interfaces.md
b/.skills/tinker-review/references/interfaces.md
index f4d3031259..33df7fd202 100644
--- a/.skills/tinker-review/references/interfaces.md
+++ b/.skills/tinker-review/references/interfaces.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# Graph Review Skill — Module Interfaces
Module contracts for the Phase 1 vertical slice. Each module is independently
diff --git a/.skills/tinker-review/references/schema.md
b/.skills/tinker-review/references/schema.md
index 9cf903da55..03b833c3fb 100644
--- a/.skills/tinker-review/references/schema.md
+++ b/.skills/tinker-review/references/schema.md
@@ -1,22 +1,3 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
# PR Knowledge Graph Schema
## Vertices (9 labels)
diff --git a/AGENTS.md b/AGENTS.md
index 88e0decf99..f4952c7666 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -41,6 +41,31 @@ provenance tracking.
* *The contributor remains responsible for what they submit.* Review generated
output for licensing, correctness, and
style before committing.
+## Definition of Done
+
+A change is **not done** until a full Maven validation has passed locally. Run
it before
+presenting work for review — even when your targeted or unit tests already
pass, and even if you
+judge a full run unnecessary. Incremental testing during development is
encouraged, but it does
+**not** satisfy this gate.
+
+Match the validation to your changeset using a two-step pattern:
+
+1. Rebuild and install the whole reactor without tests, so every module picks
up your changes:
+ `mvn clean install -DskipTests`
+2. Run `verify` on the modules you changed, enabling integration tests where
the change warrants
+ them: `mvn verify -pl <changed-modules> [-DskipIntegrationTests=false]`
+
+Examples:
+
+- Python GLV → `mvn clean install -DskipTests` then `mvn verify -pl
gremlin-python`
+- `gremlin-server` + `gremlin-driver` → `mvn clean install -DskipTests` then
+ `mvn verify -pl gremlin-driver,gremlin-server -DskipIntegrationTests=false`
+- Broad or core changes, or when unsure → `mvn clean install
-DskipIntegrationTests=false`
+
+See the `tinker-dev` skill (and its `references/build-*.md`) for the full
changeset-to-command
+mapping and per-GLV details. If you cannot run the validation (for example,
Docker is
+unavailable), say so explicitly and report the change as **not validated**.
+
## Essential Rules
These rules apply to any AI/IDE assistant operating on this repository.
@@ -48,7 +73,8 @@ These rules apply to any AI/IDE assistant operating on this
repository.
### Do
- Make small, focused changes that are easy to review.
-- Run the relevant build and test commands before suggesting that a change is
complete.
+- Before presenting any change as complete, satisfy the **Definition of Done**
above — a full
+ Maven validation matched to your changeset, not just targeted or unit tests.
- Update or add tests when behavior changes.
- Update documentation and/or changelog when you change public behavior or
APIs.
- Follow existing patterns for code structure, documentation layout, and
naming.
diff --git a/pom.xml b/pom.xml
index 68e88295bc..e755c0a95d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -570,8 +570,9 @@ limitations under the License.
<exclude>**/go.sum</exclude>
<exclude>**/coverage.out</exclude>
<exclude>**/gremlinconsoletest.egg-info/**</exclude>
- <!-- SKILL.md requires frontmatter at very start of
file so that precludes use of the license header -->
- <exclude>**/.skills/**/SKILL.md</exclude>
+ <!-- Agent skill markdown is guidance for AI agents,
kept header-free to maximize signal;
+ SKILL.md additionally requires frontmatter at the
very start of the file -->
+ <exclude>**/.skills/**/*.md</exclude>
</excludes>
<licenses>
<license
implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>