This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 02bcc949bd Add CLAUDE.md file for AI assistant. (#13669)
02bcc949bd is described below

commit 02bcc949bd007d33ca5cdfaeda2e01397623a014
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Thu Jan 15 21:01:45 2026 +0800

    Add CLAUDE.md file for AI assistant. (#13669)
---
 CLAUDE.md                  | 280 +++++++++++++++++++++++++++++++++++++++++++++
 docs/en/changes/changes.md |   1 +
 2 files changed, 281 insertions(+)

diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000000..7ccc0dab15
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,280 @@
+# CLAUDE.md - AI Assistant Guide for Apache SkyWalking
+
+This file provides guidance for AI assistants working with the Apache 
SkyWalking codebase.
+
+## Project Overview
+
+Apache SkyWalking is an open-source APM (Application Performance Monitoring) 
system designed for microservices, cloud-native, and container-based 
architectures. It provides distributed tracing, service mesh telemetry 
analysis, metrics aggregation, alerting, and observability capabilities.
+
+## Repository Structure
+
+```
+skywalking/
+├── oap-server/                    # OAP (Observability Analysis Platform) 
backend server
+│   ├── server-core/               # Core module with fundamental services
+│   ├── server-library/            # Shared libraries (module system, util, 
etc.)
+│   ├── server-receiver-plugin/    # Data receivers (gRPC, HTTP, Kafka, etc.)
+│   ├── server-storage-plugin/     # Storage implementations (BanyanDB, 
Elasticsearch, etc.)
+│   ├── server-cluster-plugin/     # Cluster coordination (Zookeeper, K8s, 
etc.)
+│   ├── server-query-plugin/       # Query interfaces (GraphQL)
+│   ├── server-alarm-plugin/       # Alerting system
+│   ├── server-fetcher-plugin/     # Data fetchers
+│   ├── server-configuration/      # Dynamic configuration providers
+│   ├── oal-grammar/               # OAL (Observability Analysis Language) 
grammar
+│   ├── oal-rt/                    # OAL runtime
+│   ├── mqe-grammar/               # MQE (Metrics Query Engine) grammar
+│   ├── mqe-rt/                    # MQE runtime
+│   ├── analyzer/                  # Log and trace analyzers
+│   ├── ai-pipeline/               # AI/ML pipeline components
+│   └── exporter/                  # Data export functionality
+├── apm-protocol/                  # Protocol definitions (submodule)
+│   └── apm-network/               # gRPC/Protobuf network protocols
+├── skywalking-ui/                 # Web UI (submodule - skywalking-booster-ui)
+├── apm-webapp/                    # Web application packaging
+├── apm-dist/                      # Distribution packaging
+├── docs/                          # Documentation
+├── docker/                        # Docker build files
+├── test/                          # E2E and integration tests
+└── tools/                         # Development tools
+```
+
+## Build System
+
+### Prerequisites
+- JDK 11, 17, or 21 (LTS versions)
+- Maven 3.6+
+- Git (with submodule support)
+
+### Common Build Commands
+
+```bash
+# Clone with submodules
+git clone --recurse-submodules https://github.com/apache/skywalking.git
+
+# Or initialize submodules after clone
+git submodule init && git submodule update
+
+# Full build (skip tests)
+./mvnw clean package -Dmaven.test.skip
+
+# Build backend only
+./mvnw package -Pbackend,dist
+# or: make build.backend
+
+# Build UI only
+./mvnw package -Pui,dist
+# or: make build.ui
+
+# Run tests
+./mvnw test
+
+# Run integration tests
+./mvnw integration-test
+
+# Build with all profiles
+./mvnw clean package -Pall -Dmaven.test.skip
+```
+
+### Maven Profiles
+- `backend` (default): Builds OAP server modules
+- `ui` (default): Builds web application
+- `dist` (default): Creates distribution packages
+- `all`: Builds everything including submodule initialization
+
+## Architecture & Key Concepts
+
+### Module System
+SkyWalking uses a custom module/provider architecture based on Java SPI:
+
+- **ModuleDefine**: Declares a module and its required services
+- **ModuleProvider**: Implements a module with specific technology/approach
+- **Service**: Interface that modules expose to other modules
+
+Key pattern:
+```java
+public class XxxModule extends ModuleDefine {
+    public Class[] services() {
+        return new Class[] { XxxService.class };
+    }
+}
+
+public class XxxModuleProvider extends ModuleProvider {
+    public void prepare() { /* initialize */ }
+    public void start() { /* start services */ }
+}
+```
+
+### Core Concepts
+- **OAL (Observability Analysis Language)**: DSL for defining metrics 
aggregation rules
+- **MQE (Metrics Query Engine)**: DSL for querying metrics
+- **LAL (Log Analysis Language)**: DSL for log processing
+- **MAL (Meter Analysis Language)**: DSL for meter data processing
+- **Source/Scope**: Data model definitions for telemetry data
+- **Stream Processing**: Metrics, Records, and TopN processing pipelines
+
+### Data Flow
+1. Agents/Collectors send data via gRPC/HTTP/Kafka
+2. Receiver plugins parse and validate data
+3. Analysis engine processes data using OAL/LAL/MAL
+4. Storage plugins persist aggregated data
+5. Query plugins serve data to UI/API
+
+## Code Style & Conventions
+
+### Checkstyle Rules (enforced via `apm-checkstyle/checkStyle.xml`)
+
+**Prohibited patterns:**
+- No `System.out.println` - use proper logging (SLF4J)
+- No `@author` tags - ASF projects don't use author annotations
+- No Chinese characters in source files
+- No tab characters (use 4 spaces)
+- No star imports (`import xxx.*`)
+- No unused or redundant imports
+- No empty statements (standalone `;`)
+
+**Required patterns:**
+- `@Override` annotation required for overridden methods
+- `equals()` and `hashCode()` must be overridden together
+- Javadoc `@param`, `@return`, `@throws` must have descriptions
+- Long constants must use uppercase `L` (e.g., `100L` not `100l`)
+- `default` case must come last in switch statements
+- One statement per line
+
+**Naming conventions:**
+- Constants/static variables: `UPPER_CASE_WITH_UNDERSCORES`
+- Type parameters: `UPPER_CASE` (e.g., `TYPE`, `KEY`, `VALUE`)
+- Package names: `org.apache.skywalking.*` or `test.apache.skywalking.*`
+- Type names: `PascalCase` or `UPPER_CASE_WITH_UNDERSCORES`
+- Local variables/parameters/members: `camelCase`
+
+**File limits:**
+- Max file length: 3000 lines
+
+**Whitespace:**
+- Whitespace required after commas, semicolons, type casts
+- Whitespace required around operators
+- No multiple consecutive blank lines
+- Empty line separators between class members (fields can be grouped)
+
+### Code Style (via `codeStyle.xml` for IntelliJ IDEA)
+
+**Indentation:**
+- 4-space indentation
+- 4-space continuation indent
+
+**Imports:**
+- No star imports (threshold set to 999)
+- Import order: regular imports, blank line, static imports
+
+**Formatting:**
+- `while` in do-while on new line
+- Align multiline chained method calls
+- Align multiline parameters in calls
+- Array initializer braces on new lines
+- Wrap long method call chains
+
+**General:**
+- Use `final` for local variables and parameters
+- Use Lombok annotations (`@Getter`, `@Setter`, `@Builder`, `@Data`, `@Slf4j`, 
etc.)
+- Follow existing patterns in similar files
+
+### License Header
+Java, XML, and YAML/YML files must include the Apache 2.0 license header (see 
`HEADER` file).
+JSON and Markdown files are excluded (JSON doesn't support comments, see 
`.licenserc.yaml`).
+
+## Testing
+
+### Test Frameworks
+- JUnit 5 (`org.junit.jupiter`)
+- Mockito for mocking
+- AssertJ for assertions
+- PowerMock for reflection utilities
+
+### Test Naming
+- Unit tests: `*Test.java`
+- Integration tests: `IT*.java` or `*IT.java`
+
+### Running Tests
+```bash
+# Unit tests only
+./mvnw test
+
+# Integration tests
+./mvnw integration-test
+
+# Skip tests during build
+./mvnw package -Dmaven.test.skip
+```
+
+## Git Submodules
+
+The project uses submodules for protocol definitions and UI:
+- `apm-protocol/apm-network/src/main/proto` - skywalking-data-collect-protocol
+- `oap-server/server-query-plugin/.../query-protocol` - 
skywalking-query-protocol
+- `skywalking-ui` - skywalking-booster-ui
+- `oap-server/server-library/library-banyandb-client/src/main/proto` - 
banyandb-client-proto
+
+Always use `--recurse-submodules` when cloning or update submodules manually.
+
+## IDE Setup (IntelliJ IDEA)
+
+1. Import as Maven project
+2. Run `./mvnw compile -Dmaven.test.skip=true` to generate protobuf sources
+3. Mark generated source folders:
+   - `*/target/generated-sources/protobuf/java`
+   - `*/target/generated-sources/protobuf/grpc-java`
+   - `*/target/generated-sources/antlr4`
+4. Import `codeStyle.xml` for consistent formatting
+
+## Key Files for Understanding the Codebase
+
+- `oap-server/server-core/src/main/java/.../CoreModule.java` - Core module 
definition
+- 
`oap-server/server-library/library-module/src/main/java/.../ModuleDefine.java` 
- Module system base
+- `oap-server/oal-grammar/src/main/antlr4/.../OALParser.g4` - OAL grammar 
definition
+- `oap-server/server-starter/` - Application entry point
+- `docs/en/concepts-and-designs/` - Architecture documentation
+
+## Common Development Tasks
+
+### Adding a New Receiver Plugin
+1. Create module in `server-receiver-plugin/`
+2. Implement `ModuleDefine` and `ModuleProvider`
+3. Register via SPI in `META-INF/services/`
+4. Add configuration to `application.yml`
+
+### Adding a New Storage Plugin
+1. Create module in `server-storage-plugin/`
+2. Implement storage DAOs for each data type
+3. Follow existing plugin patterns (e.g., BanyanDB, elasticsearch)
+
+### Modifying OAL Metrics
+1. Edit `.oal` files in `oap-server/server-starter/src/main/resources/oal/`
+2. Regenerate by building the project
+3. Update storage schema if needed
+
+### MAL Scripts (in `oap-server/server-starter/src/main/resources/`)
+- `otel-rules/` - OpenTelemetry metrics (Prometheus, etc.)
+- `meter-analyzer-config/` - SkyWalking native meter protocol
+
+### LAL Scripts (in `oap-server/server-starter/src/main/resources/`)
+- `lal/` - Log processing rules
+- `log-mal-rules/` - Metrics extracted from logs
+
+## Important Links
+
+- Documentation: `docs/en/` folder (source for all published docs, structure 
defined in `docs/menu.yml`)
+- Change Logs: `docs/en/changes/changes.md` (update this file when making 
changes)
+- GitHub Issues: https://github.com/apache/skywalking/issues
+- Mailing List: [email protected]
+- Slack: #skywalking channel at Apache Slack
+
+## Tips for AI Assistants
+
+1. **Always check submodules**: Protocol changes may require submodule updates
+2. **Generate sources first**: Run `mvnw compile` before analyzing generated 
code
+3. **Respect checkstyle**: No System.out, no @author, no Chinese characters
+4. **Follow module patterns**: Use existing modules as templates
+5. **Check multiple storage implementations**: Logic may vary by storage type
+6. **OAL generates code**: Don't manually edit generated metrics classes
+7. **Use Lombok**: Prefer annotations over boilerplate code
+8. **Test both unit and integration**: Different test patterns for different 
scopes
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index bbc2483dce..b8db97022b 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -2,6 +2,7 @@
 
 #### Project
 * Fix E2E test metrics verify: make it failure if the metric values all null.
+* Add `CLAUDE.md` as AI assistant guide for the project.
 
 #### OAP Server
 

Reply via email to