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

lukaszlenart pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/main by this push:
     new 4d96950c5 docs: streamline CLAUDE.md based on benchmark findings 
(#1604)
4d96950c5 is described below

commit 4d96950c514052dbcd2853e8dded67ac0e5ad87e
Author: Lukasz Lenart <[email protected]>
AuthorDate: Mon Mar 2 12:31:16 2026 +0100

    docs: streamline CLAUDE.md based on benchmark findings (#1604)
    
    Apply recommendations from CLAUDE.md benchmarking study (1,188 tests
    across 3 models): remove redundant generic instructions, reframe
    prohibitions as positive directives, trim inferable content, and
    keep only project-specific knowledge that Claude cannot derive from
    the codebase itself. Reduces file from 142 to 64 lines.
    
    Key changes:
    - Remove Common Pitfalls (negative framing, generic, duplicated)
    - Remove Available Tools section (redundant with system prompt)
    - Trim build commands to project-specific flags only
    - Collapse Technology Stack into one-line overview
    - Reframe security directives from "never do X" to "do Y instead"
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-authored-by: Claude <[email protected]>
---
 CLAUDE.md | 90 ++++++++-------------------------------------------------------
 1 file changed, 11 insertions(+), 79 deletions(-)

diff --git a/CLAUDE.md b/CLAUDE.md
index 1cb6922da..41c4fdf27 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -6,38 +6,19 @@ For detailed procedures, use the specialized agents and 
commands in `.claude/age
 
 ## Project Overview
 
-Apache Struts is a mature MVC web application framework for Java (originally 
WebWork 2). Current version: *
-*7.2.0-SNAPSHOT**.
+Apache Struts is a mature MVC web application framework for Java (originally 
WebWork 2). Current version: **7.2.0-SNAPSHOT**. Uses OGNL for value stack 
expressions and FreeMarker for UI tag templates.
 
 ### Build Commands
 
 ```bash
-# Full build with tests
-mvn clean install
-
-# Run all tests (faster, skips assembly)
+# Run tests (skip assembly for speed)
 mvn test -DskipAssembly
 
-# Run single test class
-mvn test -DskipAssembly -Dtest=MyClassTest
-
-# Run single test method
-mvn test -DskipAssembly -Dtest=MyClassTest#testMethodName
-
-# Run tests in a specific module
-mvn test -DskipAssembly -pl core
-
-# Build without tests
-mvn clean install -DskipTests
-
-# Build with code coverage (JaCoCo)
-mvn clean install -Pcoverage
+# Single test in specific module
+mvn test -DskipAssembly -pl core -Dtest=MyClassTest#testMethodName
 
-# Build with Jakarta EE 11 (Spring 7)
+# Jakarta EE 11 / Spring 7 profile
 mvn clean install -Pjakartaee11
-
-# Run OWASP dependency vulnerability check
-mvn verify -Pdependency-check
 ```
 
 ### Project Structure
@@ -57,13 +38,6 @@ struts/
 
 **Request Lifecycle**: `Dispatcher` → `ActionProxy` → `ActionInvocation` → 
Interceptor stack → `Action` → Result
 
-Key components:
-
-- **ActionSupport**: Base class for actions (validation, i18n, messages)
-- **ActionContext**: Thread-local context with request/response/session data
-- **Interceptors**: Cross-cutting concerns (validation, file upload, security, 
params)
-- **Results**: Response handlers (dispatcher, redirect, json, stream)
-
 Key packages in `org.apache.struts2`:
 
 - `dispatcher` - Request handling, `Dispatcher`, servlet integration
@@ -72,22 +46,14 @@ Key packages in `org.apache.struts2`:
 - `action` - Action interfaces (`UploadedFilesAware`, `SessionAware`, etc.)
 - `security` - Security utilities and OGNL member access policies
 
-### Technology Stack
-
-- **Java 17+** with Jakarta EE 10 (Servlet 6.0, JSP 3.1)
-- **OGNL** - Expression language for value stack access
-- **FreeMarker** - Default template engine for UI tags
-- **Commons FileUpload2** - File upload handling
-- **Log4j2/SLF4J** - Logging
-
 ## Security-Critical Patterns
 
-Apache Struts has a history of security vulnerabilities. Follow these strictly:
+Apache Struts has a history of security vulnerabilities (OGNL injection, temp 
file exploits). Apply these Struts-specific patterns:
 
-1. **Temporary files**: Never use system temp directory; use UUID-based names 
in controlled locations
-2. **OGNL expressions**: Never evaluate user-controlled OGNL; use allowlist 
member access
+1. **Temporary files**: Use UUID-based names in controlled locations (see 
example below)
+2. **OGNL expressions**: Evaluate only framework-generated OGNL; use allowlist 
member access
 3. **File uploads**: Validate content types, sanitize filenames, enforce size 
limits
-4. **Parameter injection**: Use `ParameterNameAware` to filter dangerous 
parameter names
+4. **Parameter filtering**: Use `ParameterNameAware` to restrict accepted 
parameter names
 
 ```java
 // Secure temporary file pattern
@@ -97,46 +63,12 @@ protected File createTemporaryFile(String fileName, Path 
location) {
 }
 ```
 
-Run `/security_scan` for comprehensive security analysis.
-
 ## Testing
 
-**Priority order for running tests:**
-
-1. **JetBrains MCP** (in IntelliJ): `mcp__jetbrains__execute_run_configuration`
-2. **test-runner agent**: `Task` tool with `subagent_type="test-runner"`
-3. **Direct Maven**: `mvn test -DskipAssembly -Dtest=TestClassName`
-
-Tests use JUnit 5 with AssertJ assertions and Mockito for mocking.
-
-## Available Tools
-
-### Commands
-
-- `/security_scan` - OGNL injection, CVE detection, security analysis
-- `/quality_check` - JavaDoc compliance, coding standards
-- `/config_analyze` - struts.xml validation, interceptor analysis
-- `/create_plan` / `/validate_plan` - Implementation planning
-- `/research_codebase` - Codebase exploration
-
-### Specialized Agents
-
-- `test-runner` - Maven test execution (use this to RUN tests)
-- `security-analyzer` - Security vulnerability scanning
-- `codebase-locator` - Find files, classes, implementations
-- `codebase-pattern-finder` - Find similar code patterns
-- `config-validator` - Validate Struts configuration files
+Tests use JUnit 5 with AssertJ assertions and Mockito for mocking. Run with 
`mvn test -DskipAssembly`.
 
 ## Pull Requests
 
 - **Title format**: `WW-XXXX Description` (Jira ticket ID required)
 - **Link ticket in description**: `Fixes 
[WW-XXXX](https://issues.apache.org/jira/browse/WW-XXXX)`
-- **Issue tracker**: https://issues.apache.org/jira/projects/WW
-
-## Common Pitfalls
-
-1. Never use `File.createTempFile()` without controlling the directory
-2. Always clean up temporary files (track and delete in finally blocks)
-3. Test error paths and cleanup behavior, not just happy paths
-4. Don't catch generic `Exception` - catch specific types
-5. Use `protected` visibility for methods subclasses may override
\ No newline at end of file
+- **Issue tracker**: https://issues.apache.org/jira/projects/WW
\ No newline at end of file

Reply via email to