You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**[hensu-core](hensu-core/README.md)**| Pure Java execution engine. State transitions, rubric evaluation, agent interactions. Zero external dependencies. |
269
-
|**[hensu-dsl](hensu-dsl/README.md)**| Kotlin DSL that compiles `.kt` files into versioned Workflow Definitions (JSON). |
270
-
|**[hensu-cli](hensu-cli/README.md)**| Local execution via `hensu run`. Server lifecycle: `build`, `push`, `pull`, `delete`, `list`. |
|**[hensu-core](hensu-core/README.md)**| Pure Java execution engine. State transitions, rubric evaluation, agent interactions. Zero external dependencies. |
270
+
|**[hensu-dsl](hensu-dsl/README.md)**| Kotlin DSL that compiles `.kt` files into versioned Workflow Definitions (JSON). |
@@ -101,7 +101,7 @@ At deserialization time Jackson:
101
101
4. Calls each setter by name (via **reflection**)
102
102
5. Calls `builder.build()` (via **reflection**)
103
103
104
-
Because `hensu-core` builders have `private` constructors, all three reflection calls require native-image registration. This is handled in `NativeImageConfig` in `hensu-server` — never in `hensu-core` itself.
104
+
Because `hensu-core` builders have `private` constructors, all three reflection calls require native-image registration. This is handled in `CoreModelNativeConfig` in `hensu-server` — never in `hensu-core` itself.
**Case B — Native-image performance** where the mixin/builder pattern would require registering a private constructor and builder class for reflection, but the type is a single concrete class that can be deserialized more efficiently by direct field extraction:
129
130
@@ -186,9 +187,9 @@ if (root.has("reviewConfig")) {
186
187
187
188
### When `treeToValue` is acceptable
188
189
189
-
If the target class contains a `java.time.Duration`, deeply nested types, or other fields where manual extraction would be error-prone and brittle, `treeToValue` is acceptable. The class must then be registered in `NativeImageConfig` in `hensu-server`.
190
+
If the target class contains a `java.time.Duration`, deeply nested types, or other fields where manual extraction would be error-prone and brittle, `treeToValue` is acceptable. The class must then be registered in `CoreModelNativeConfig` in `hensu-server`.
190
191
191
-
Current exceptions (registered in `NativeImageConfig`):
192
+
Current exceptions (registered in `CoreModelNativeConfig`):
All three steps are required. Missing step 3 causes a silent runtime failure in native image: Jackson finds the builder class but cannot invoke the private constructor or `build()` method.
@@ -396,8 +397,8 @@ Any boolean field on a builder-pattern type must have a corresponding `@JsonProp
|`mixin/*Mixin.java`|`@JsonDeserialize` bridge for builder-pattern types |
421
423
|`mixin/*BuilderMixin.java`|`@JsonPOJOBuilder` configuration for builder inner classes |
422
424
423
425
> **See also**:
424
426
> -[hensu-core Developer Guide — GraalVM](developer-guide-core.md#graalvm-native-image-constraints) for foundational native-image rules
425
-
> -[hensu-server Developer Guide — NativeImageConfig](developer-guide-server.md#nativeimageconfig--jackson-reflection-registration) for registration patterns and the resource bundling rule
427
+
> -[hensu-server Developer Guide — CoreModelNativeConfig](developer-guide-server.md#coremodelnativeconfig--jackson-reflection-registration) for registration patterns and the resource bundling rule
0 commit comments