Skip to content
View jewoodev's full-sized avatar

Block or report jewoodev

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
jewoodev/README.md

I'm a backend engineer working with Java / Kotlin / Spring Boot, contributing to open source across the JVM ecosystem. My work focuses on query correctness, reliable LLM integrations, and observability.

📌 Representative upstreamed work, curated by impact. The project-header links show the full PR history, including active, documentation, and maintenance contributions.

🌱 Open Source Contributions

Fixed query-processing defects that rejected valid expressions or changed query constructs during rendering. Contributions cover JPQL / EQL / HQL round-trip correctness and query grammar compatibility, backed by regression tests.

Representative work: Query rendering · Collection membership · HQL LIKE REGEXP

Technical details and regression coverage

Query rendering — four round-trip defects

  • Problem: During the parse → render round trip, query renderers dropped or altered parsed constructs, and two-argument LOCATE(...) could throw a NullPointerException.
  • Change: Corrected visitor logic for TREAT(...), two-argument LOCATE(...), collection-member subqueries, and the HQL column(...) cast target across JpqlQueryRenderer, EqlQueryRenderer, and HqlQueryRenderer. These fixes required no ANTLR grammar changes.
  • Verification: Added round-trip regression coverage for all four defects. #4273 was integrated, polished by the maintainer, and backported.

Query grammar compatibility

  • Problem: JPQL / EQL rejected valid collection-membership expressions using single-character string literals or map KEY(...) / VALUE(...) operands. HQL rejected Hibernate's LIKE REGEXP and ILIKE REGEXP forms.
  • Change: Added CHARACTER support to the relevant JPQL / EQL literal rules, allowed map field identification variables as collection-membership operands, and added the HQL REGEXP modifier after LIKE / ILIKE.
  • Verification: Checked collection-membership forms against Jakarta Persistence semantics, Hibernate ORM, and EclipseLink. Added shared renderer TCK coverage, HQL single-character parity tests, and HQL round-trip cases for LIKE REGEXP, NOT LIKE REGEXP, and ILIKE REGEXP. Upstreamed through #4282, #4292, #4289, and #4295.

Additional upstreamed work includes @IdClass / @ManyToOne repository regression coverage (#4271), renderer cleanup (#4274), and documentation corrections (#4262, #4270).


Improved streaming tool calls and reasoning replay across LLM providers. Also preserved cumulative token usage through recursive advisor loops and fixed schema references for recursive tool parameters.

Representative work: Streaming tool calls · Reasoning replay · Usage accounting · Recursive schemas

Technical details and regression coverage

Streaming tool calls and reasoning replay

  • Problem: Provider differences in streaming deltas could fragment a logical tool call or discard reasoning state required for a valid tool-result replay.
  • Change: Merged OpenAI-compatible tool-call deltas by index, including omitted or empty IDs and parallel calls; preserved reasoning_content / reasoning during chunk merging and message aggregation; and replayed Bedrock signed or redacted reasoning and Anthropic thinking or redacted-thinking blocks before their corresponding tool-use blocks.
  • Verification: Added coverage for split and parallel calls, streamed reasoning aggregation, next-turn replay, and signed or redacted reasoning. The work spans OpenAI-compatible providers including DeepSeek and OpenRouter, Amazon Bedrock Converse, and Anthropic: #6373, #6381, #6414, and #6551.

Cumulative usage across recursive advisor loops

  • Problem: Recursive advisors reported only the final model call's token usage, omitting earlier tool-calling rounds or validation retries.
  • Change: Introduced reusable usage accumulation for ToolCallingAdvisor call and stream paths, returnDirect responses, and StructuredOutputValidationAdvisor retry loops.
  • Verification: Covered usage arithmetic, cache metrics, streaming subscriptions, tool-call recursion, direct returns, and exhausted validation retries. Merged upstream in #6424.

Recursive tool input schemas

  • Problem: Parameter schemas were nested under properties.<param>, while generated $refs still targeted root-level $defs, leaving recursive references unresolved.
  • Change: Hoisted $defs to the wrapper root, reused structurally equal definitions, renamed simple-name collisions, and rewrote peer references in both JsonSchemaGenerator and McpJsonSchemaGenerator.
  • Verification: Added regression coverage for transitive recursion, equal definitions, and name collisions with reference rewrites. Refined with the maintainer and integrated upstream through #6035.

Prevented misleading zero-valued cache metrics when statistics are disabled in JCache or in Hazelcast bindings supplied with configuration. Added actionable warnings and skipped statistics-dependent meters, while preserving existing Hazelcast API behavior.

Representative work: JCache statistics · Hazelcast statistics

Technical details and regression coverage

Cache metrics when statistics are disabled

  • Problem: Cache binders could register meters that silently reported zero when statistics collection was disabled, making missing measurements difficult to distinguish from actual zero activity.
  • Change: JCache checks CompleteConfiguration#isStatisticsEnabled(). New Hazelcast constructor and monitor overloads accept Config and resolve map settings through the public Config#findMapConfig(name) API. Both warn and skip statistics-dependent meters when statistics are disabled. Existing Hazelcast overloads retain their behavior; JCache assumes statistics are enabled if the provider cannot expose the configuration. The enabled state is captured at binder construction, so enabling statistics later requires creating and binding a new instance.
  • Verification: Added regression tests for warnings and omitted meters, plus coverage that existing Hazelcast overloads still register meters without Config. The Hazelcast change also includes OSGi package-import support. Both changes merged upstream: #7562, #7568.

Additional upstreamed documentation covers runtime statistics changes in JCache (#7837), shutdown responsibilities for closeable meter binders (#7549), and Prometheus LongTaskTimer output (#7546).

Pinned Loading

  1. spring-ai spring-ai Public

    Forked from spring-projects/spring-ai

    An Application Framework for AI Engineering

    Java 1

  2. spring-data-jpa spring-data-jpa Public

    Forked from spring-projects/spring-data-jpa

    Simplifies the development of creating a JPA-based data access layer.

    Java

  3. koog koog Public

    Forked from JetBrains/koog

    Koog is a JVM (Java and Kotlin) framework for building predictable, fault-tolerant and enterprise-ready AI agents across all platforms – from backend services to Android and iOS, JVM, and even in-b…

    Kotlin

  4. spring-data-redis spring-data-redis Public

    Forked from spring-projects/spring-data-redis

    Provides support to increase developer productivity in Java when using Redis, a key-value store. Uses familiar Spring concepts such as a template classes for core API usage and lightweight reposito…

    Java

  5. micrometer micrometer Public

    Forked from micrometer-metrics/micrometer

    An application observability facade for the most popular observability tools. Think SLF4J, but for observability.

    Java