This is the schema definitions used by kdeps. See the schema documentation.
Kdeps is an AI Agent framework for building self-hosted RAG AI Agents powered by open-source LLMs.
The PKL schema is comprehensively tested with 186+ automated tests across 12 modules. View the latest test results:
π PKL Function Test Report - Complete validation results with real-time test execution
Quick Test Commands:
make test # Run all tests and generate report
make build # Complete build with testing
Released: 2025-07-21
π¬ Validation Status:
β
Automated Testing Available - Run make test
for comprehensive validation
π Latest Test Report Available - View Results
π§ͺ PKL Test Suite - 11 test modules with comprehensive coverage
π¦ Updates
- Update release notes for v0.4.5 [skip ci] (
ce5c379
)
π Other Changes
- Pklres kv backend functions (#31) (
3a27142
)- add the pklres functions per each resource types and system resources
- **** (
* add the pklres functions per each resource types and system resources (gen)
)
Detailed changelog showing all changes from the beginning of the project
π¦ Updates
- Update release notes for v0.4.4 [skip ci] (
a8ccffb
)
π Other Changes
- pklres backend improvement to use sql-based pkl storage (#30) (
7033105
)- pklres backend improvement to use sql-based pkl storage
- **** (
* add compiled pkl-go libs
)
π Bug Fixes
- fix: APIServerRequest null safety with default values (
21f03cd
)- Add default values for core APIServerRequest fields:
π¦ Updates
- Update release notes for v0.4.3 [skip ci] (
5770390
)
π Other Changes
- hotfix: fix isBase64 method (
6967a67
) - **** (
- ID: String = "" (instead of undefined)
) - **** (
- IP: String = "" (instead of undefined)
) - **** (
- Path: String = "/" (instead of undefined)
) - **** (
- Method: String = "GET" (instead of undefined)
) - **** (
- Keep fields required (non-nullable) to maintain API contract
) - **** (
- Functions now return safe defaults instead of throwing undefined errors
) - **** (
- Updated both deps/pkl and assets/pkl versions for consistency
) - **** (
- Fixes runtime errors when accessing request.id(), ip(), path(), method()
) - **** (
This resolves: "Tried to read property
IDbut its value is undefined"
) - **** (
All APIServerRequest functions now work safely with default empty objects.
)
π¦ Updates
- Update release notes for v0.4.2 [skip ci] (
5a313bb
)
π Other Changes
- Base64utils fix (#29) (
08ac10a
)- obtain resource from pklres as first priority
- **** (
* add pklres + pkl eval for obtaining output
) - **** (
* add new changes to Data.pkl as well
) - **** (
* base64 utils fix
) - **** (
* updated readme
)
π¦ Updates
- Update release notes for v0.4.1 [skip ci] (
58142ea
)
π Other Changes
- Pklres pkleval (#28) (
60dc010
)- obtain resource from pklres as first priority
- **** (
* add pklres + pkl eval for obtaining output
) - **** (
* add new changes to Data.pkl as well
)
π¦ Updates
- Update release notes for v0.4.0 [skip ci] (
e755352
)
π Other Changes
- obtain resource from pklres as first priority (#27) (
4a46385
)
π¦ Updates
- Update release notes for v0.3.8 [skip ci] (
2ce3e26
)
π Other Changes
- PklResource - Reader to store PKL to SQLite instead of files (#26) (
9faca07
)- fix: APIServerRequest null safety with default values
- **** (
- Add default values for core APIServerRequest fields:
) - **** (
- ID: String = "" (instead of undefined)
) - **** (
- IP: String = "" (instead of undefined)
) - **** (
- Path: String = "/" (instead of undefined)
) - **** (
- Method: String = "GET" (instead of undefined)
) - **** (
- Keep fields required (non-nullable) to maintain API contract
) - **** (
- Functions now return safe defaults instead of throwing undefined errors
) - **** (
- Updated both deps/pkl and assets/pkl versions for consistency
) - **** (
- Fixes runtime errors when accessing request.id(), ip(), path(), method()
) - **** (
This resolves: "Tried to read property
IDbut its value is undefined"
) - **** (
All APIServerRequest functions now work safely with default empty objects.
) - **** (
* feat: new pklresource service that uses SQL backend to record PKL
) - **** (
- Add PklResource.pkl module for SQLite3-based PKL record storage
) - **** (
- Implement getPklRecord/setPklRecord functions for CRUD operations
) - **** (
- Add blank resource implementations to prevent null resources
) - **** (
- Update all resource modules (Exec, Python, HTTP, LLM, Data) to use pklres
) - **** (
- Add DataImpl class for Data resource structure
) - **** (
- Ensure all resource() functions return blank objects instead of null
) - **** (
- Add comprehensive pklres integration to both deps and assets PKL files
) - **** (
- Support request-scoped storage with proper error handling
) - **** (
* feat: complete pklres integration for all resource types
) - **** (
- Refactor Exec, Python, LLM, HTTP, and Data resources to use pklres backend
) - **** (
- Add hybrid retrieval: check local mapping first, fallback to pklres
) - **** (
- Add comprehensive mapping functions for storing values in pklres
) - **** (
- Maintain backward compatibility with existing mapping interfaces
) - **** (
- All resources now retrieve values entirely from SQLite backend via pklres
) - **** (
- Support for individual property mapping and full resource object storage
) - **** (
* feat: regenerate Go code with pklres integration
) - **** (
- Generated Go files reflect pklres integration from PKL schema
) - **** (
- Updated assets/pkl/ files with pklres changes
) - **** (
- Generated gen/ files include pklres-aware resource structures
) - **** (
- All resource types now have proper Go bindings for pklres backend
) - **** (
- Maintains backward compatibility with existing Go code patterns
) - **** (
* refactor: remove redundant map* functions from resource files
) - **** (
- Remove mapResource, mapStdout, mapExitCode, etc. functions from all resources
) - **** (
- Users can call pklres.setPklValue() directly for storage operations
) - **** (
- Simplifies the API and reduces code duplication
) - **** (
- Maintains all retrieval functions (resource, stdout, exitCode, etc.)
) - **** (
- Cleaner and more direct pklres integration
) - **** (
* fix: update test expectations for PklResource.pkl addition
) - **** (
- Update expected PKL file count from 22 to 23
) - **** (
- Add PklResource.pkl to expected files list
) - **** (
- Fix all test assertions to account for new file
) - **** (
- Go tests now pass with pklres integration
) - **** (
* removed map* functions
) - **** (
* added pklresource tests
) - **** (
* additional tests
) - **** (
* add more tests
) - **** (
* improvement
) - **** (
* updated tests
) - **** (
* Fix tests
)
π Features
- feat: comprehensive PKL test suite and validation system (#25) (
4027874
)- π§ͺ Complete PKL Function Test Suite (186+ tests, 100% success rate)
π¦ Updates
- Update release notes for v0.3.7 [skip ci] (
d1a4711
)
π Other Changes
- **** (
- Comprehensive function tests across 12 PKL modules
) - **** (
- Null safety validation with complete coverage
) - **** (
- State management tests for external integration
) - **** (
- Base64 edge case validation and API testing
) - **** (
- Fixed Utils.isBase64 logic and APIServerRequest error handling
) - **** (
- Resolved type consistency issues (List vs Listing, nullable defaults)
) - **** (
- π Unified Test System & Reporting
) - **** (
- Moved test report to test/TEST_REPORT.md (removed 'dynamic' terminology)
) - **** (
- Wildcard PKL test discovery with automatic execution
) - **** (
- Real-time test execution with accurate reporting
) - **** (
- Integrated Go asset tests for comprehensive validation
) - **** (
- Enhanced Makefile with unified 'make test' command
) - **** (
- π GitHub Actions Integration
) - **** (
- Updated build.yaml and release.yaml workflows
) - **** (
- Automated PKL test execution in CI/CD pipeline
) - **** (
- Test report artifacts uploaded for every build
) - **** (
- Cross-platform validation (Ubuntu, macOS)
) - **** (
- π Enhanced Documentation & Scripts
) - **** (
- Updated README.md with test validation section and direct links
) - **** (
- Enhanced release notes script with automatic test status detection
) - **** (
- Added continuous validation messaging and quality transparency
) - **** (
- Comprehensive validation status shown in all releases
) - **** (
- π‘οΈ Production Readiness
) - **** (
- 100% test success rate across all modules
) - **** (
- Complete null safety implementation
) - **** (
- Robust error handling and edge case coverage
) - **** (
- Automated validation ensures release quality
) - **** (
- Legacy compatibility with deprecation warnings
) - **** (
This establishes a production-ready PKL schema with comprehensive
) - **** (
testing, automation, and quality assurance systems.
)
π¦ Updates
- Update release notes for v0.3.6 [skip ci] (
9674ee4
)
π Other Changes
- import on amends upstream (#24) (
6881c26
)
π¦ Updates
- hotfix: upgrade docbuild step to use pkl 0.28.2 (
96212a0
) - Update release notes for v0.3.5 [skip ci] (
2ea6ed3
)
π¦ Updates
- Update release notes for v0.3.4 [skip ci] (
b29bdcb
)
π Other Changes
- Docgen fix (#23) (
9ded533
)- add the ability to call the resource directly, without the use of @(...) template convention
- **** (
* Fix GitHub release timing issue in workflow
) - **** (
- Add proactive URL availability check before pkldoc generation
) - **** (
- Improve retry mechanism with exponential backoff (60s, 120s, 180s, 240s)
) - **** (
- Increase retry attempts from 2 to 5 for better reliability
) - **** (
- Addresses issue where GitHub download URLs aren't immediately available after release creation
) - **** (
This fixes the 404 errors experienced during v0.3.4 release where pkldoc generation
) - **** (
failed because GitHub's download URLs weren't ready yet.
)
β¨ Enhancements
- add the ability to call the resource directly, without the use of @(...) template convention (#22) (
4a7fdd7
)
π¦ Updates
- Update release notes for v0.3.3 [skip ci] (
72e3482
)
π Other Changes
- hotfix: fix GHA PKL test errors (
afe0151
)
π¦ Updates
- Update release notes for v0.3.2 [skip ci] (
3b44595
)
π Other Changes
- use the SQLite based agent reader to return the agentID/actionID (#21) (
e419bfc
)
β¨ Enhancements
- added pklresource and add use sensible defaults to optional fields (#20) (
1496555
)
π¦ Updates
- Update release notes for v0.3.1 [skip ci] (
151b018
)
π¦ Updates
- upgrade deprecated gha plugin (
29f15fa
)
π Other Changes
- renamed Command->Script and CondaEnvironment->PythonEnvironment (
b7d3688
) - install pkl-gen-go in gha for running pkl tests (
aaadde8
) - install pkl-gen-go in gha for running pkl tests (
5317aa2
) - fix gha build (
650674f
) - enhance workflows to gen relnotes on gha trigger (
f088834
)
π Other Changes
- Uniform schema with Retry Logic and Docker Enhancements (#19) (
64f620e
)- use uniform schema naming conventions (attr as capitalized, func as pascalCased)
- **** (
* uniform schema
)
π Other Changes
- embed deps/pkl schema files via go:embed (
159f785
)
β¨ Enhancements
- add the pkl files in the output_dir for expose to tests (
72b3641
)
β¨ Enhancements
- add resource#itemValues function to obtain item iteration values (
9c48aa0
)
π¦ Updates
- update readme/relnotes (
7775ce8
)
β¨ Enhancements
- add pkl:json imports per each resource (
8b252f4
)
β¨ Enhancements
- added the itemValues per resource to obtain the iteration results (
59cadd4
)
π Other Changes
- null propagate the array obtained from dynamic reader for item values (
282f277
)
β¨ Enhancements
- add nullable defaults for item values listing (
ef3bfc8
)
β¨ Enhancements
- add return value listing type for item (
0b0f475
)
β¨ Enhancements
- return a new listing when item results is null (
e8a979b
)
π Other Changes
- values now require to pass the actionID (#18) (
1cc199d
)
π¦ Updates
- update readme/relnotes (
6fdaccb
)
π Other Changes
- removed id params on item operations (
c035c8a
)
π Other Changes
- change item function signature to not require an id params (#17) (
034ac3e
)- added ability to iterate through items
- **** (
* changed item.fetch -> item.current
) - **** (
* change item function signature to not require an id params
)
β¨ Enhancements
- added ability to iterate through items (#16) (
c46cc9c
)- added ability to iterate through items
π¦ Updates
- update readme/relnotes (
c277d2a
)
π Other Changes
- **** (
* changed item.fetch -> item.current
)
π¦ Updates
- updated relnote/readme (
37fc99a
)
π Other Changes
- hotfix: register tool into resources (
6d844d6
)
β¨ Enhancements
- hotfix: add path to the script or inline script to LLM tools (
f461f98
)
β¨ Enhancements
- add ability for LLM to use tools (akin to MCP) (#15) (
d49777f
)
π¦ Updates
- updated relnote/readme (
cb21d6a
)
π¦ Updates
- updated relnote/readme (
5848573
)
π Other Changes
- Session sqlite storage (#14) (
cf4b6b1
)- added deleteItem to memory storage
- **** (
* add Session ephemeral storage
)
π¦ Updates
- updated relnote/readme (
12ac9e5
)
π Other Changes
- Expr block (#13) (
864ae2e
)- removed unusued MemoryRecord class
- **** (
* add 'expr {...}' block to eval pkl expressions, i.e. memory.setItem('foo', 'bar')
)
β¨ Enhancements
- simplify memory operations (getItem/setItem), and add clear() (#12) (
187e6b9
)
β¨ Enhancements
- add the persistent sqlite memory record item read and update function (#11) (
0131739
)
π¦ Updates
- update readme/relnote (
6e92253
)
π¦ Updates
- updated schema readme/relnotes (
27d3e8f
)
π Other Changes
- remove specific LLM role types (#10) (
868bac5
)
π Other Changes
- Multi-prompt support (#9) (
cd4b60a
)- add role types on LLM action
- **** (
* add multiprompt support
)
β¨ Enhancements
- add role types on LLM action (#8) (
638e38d
)
β¨ Enhancements
- Add TrustedProxies to WebServer (#7) (
f9e658f
)- fix indentation on deps/pkl files
π Other Changes
- **** (
* add trustedproxy on webserver
) - **** (
* keep webserver name in parity with apiserver
)
β¨ Enhancements
- add webserver settings to project workflow settings (#6) (
01fa2e1
)
π Other Changes
- Create frontend serving settings (#5) (
c7f1374
)- upgrade default ollama version to 0.6.5
- **** (
* added CORS configuration to APIServer
) - **** (
* added webserver settings for serving static (html, htmx, etc.) or app (nodejs, streamlit, rails, etc.)
)
π¦ Updates
- updated release notes (
b6bc1bd
)
π Other Changes
- allow restricting http methods and params per resource (#4) (
329c08a
)
π¦ Updates
- updated release notes (
fcc686b
)
π Other Changes
- allow setting permitted HTTP values (headers, params, methods, routes) on resource (#3) (
011d1f4
)
β¨ Enhancements
- add ability to set tz identifier timezone (#2) (
9a6fa07
)
π¦ Updates
- upgrade lowest pkl version to 0.28.1 (
bb44da6
) - upgrade lowest pkl version to 0.28.1 (
b74f5a6
)
π¦ Updates
- updated relnotes / readme (
6cc68de
)
π Other Changes
- changed timestamp to duration from durationunit (
c4281eb
)
π Other Changes
- change timeoutDuration to Duration and use PKL semantics for duration seconds (
d4bb52a
)
π¦ Updates
- Use DurationUnit for Timestamps; Upgrade pkl-go to 0.9.0 (
d22127a
)
π Initial Release Statistics:
- Total commits: 154
- Project inception
π All Changes Since Project Start:
β¨ Enhancements
- added api response meta info for other additional information sent over the JSON response (
cf98a9d
) - added new schema documentation info (
c3fc856
) - added trustedProxies settings to API server (
d3ed25b
) - upgrade minimum pkl version to 0.26.3. added minor fixes on the relnote generator. (
c80d5ae
) - Added skip validation helper functions (
562775e
) - added README.md and relnote generator (
6c6987c
) - added document pkl module for parsing and creating json, yaml and xml docs (
ea3a56a
) - added Data resource helper for getting agent data file path (
efb337e
) - Added file attribute where each associated resource value was saved (
33eb094
) - added params mapping to http client resources (go gen code) (
3e93d76
) - added params mapping to http client resources (
bc81ebb
) - make the build args as mapping; added build env in docker settings (
ba8c725
) - Add parameters to docker settings; removed unused PKL configurations (
f8597d4
) - added heroImage and agentIcon (
008cef9
) - added ollamaImageTag property in workflow settings (
62fb8d4
) - added condaPackages section (
be8d611
) - added support for installing conda packages (
695532e
) - added python script resource (
d5325c1
) - added install Anaconda option (
bda10a4
) - added API documentation. Change request API files functions for clarity (
78b6229
) - added Ubuntu PPA support; add API for querying filetypes by index (
d45493c
) - added visionFiles to LLM (
aa2cdf5
) - added API server responseFile (
c548b8c
) - added request APIs for getting the list of files (
c717a96
) - added vision and image gen attributes to LLM (
82340b2
) - Added request file operations. Decode base64 request by default. include allowed HTTP methods. (
7c53a5d
) - added json response keys to LLM (
7d9f868
) - added security enforcement settings (
f0186d5
) - added schema to LLM (
bdc78d8
) - added extended functions for exec, http and llm modules (
4bf8fcb
) - added deferred response api (
fe55044
) - added llm timeout and kdeps dir settings (
422ea4e
) - add retry mechanism on failed create docs step (
a85a48d
) - added apiResponse to resource; rename run -> action (
12e2d39
) - Added API Server Request/Response templates (
dd71a18
) - added Tags, a globally referenceable token (
f669c46
) - added hostname and portnum settings to docker (
df28577
) - Added semantics for external workflows; Additional semantics for resource dependencies (
d9c1e3f
) - added optional params for default template fields on resource (
43405b5
) - added docker container init settings (
5db1d90
) - added dockerGPU and runMode to system config (
97a4c79
) - updated kdeps template with new fields (
24495ad
) - added default value for resource env read (
f4d1453
) - Updated kdeps.pkl to add global configs (
52cd266
) - Added docker image and llmsettings directive (
5beaefd
) - added template generation step (
9644e40
) - try adding prefixed 'v' for go mod tidy (
74b9fa3
) - added sleep timer to resolve new pkl version release (
6808149
) - add global settings for kdeps (
b8da2fd
) - Added API server mode (
199a52c
) - added project support files (
a805e3b
) - Added Makefile and gen-go code (
3acfb33
) - Added initial core schema (
a61fbf5
)
π¦ Updates
- updated release info (
2d17f13
) - updated release notes (
c085ef2
) - updated release notes (
0e6e41a
) - bump pkl to 0.27.2 (
e0683cb
) - updated .gitattributes (
e9ea189
) - updated README.md (
809d2c3
) - bump pkl to 0.27.1 (
8183a18
) - Revert "upgrade pkl to 0.27.0; register python resource to resource pkl" (
77fdf1a
) This reverts commit 86a334d697479e307513f759d2a7b0b06f9be35c. - Revert "Update Gradle to 8.10.2" (
95e60f9
) This reverts commit 45a93d3ebfa5aa2e795144984f0cde22bc1dc127. - Update Gradle to 8.10.2 (
45a93d3
) - upgrade pkl to 0.27.0; register python resource to resource pkl (
86a334d
) - upgrade cicd pkl to 0.26.1 (
ea9e7c9
) - updated gen sdk (
fa77c06
) - updated gen sdks (
bf7a441
) - updated gen code with dockerGPU and runMode setings (
2254e19
) - Update CNAME (
ae8b694
)
π Other Changes
- api response meta blocks can be optional (
6b4869f
) - allow sending headers to response (
12f3575
) - allow access to client IP and request ID (
34a6f34
) - Change resource ID to actionID, and Workflow action to targetActionID (
94a46c7
) - changed timeoutSeconds -> timeoutDuration (
f8ed8ed
) - Use uniform naming convention for {Http,Api,Id,Json} -> {HTTP,API,ID,JSON} (
d8841da
) - reprioritize request skip validations (
672a02a
) - removed all deprecated imports (
7cd9fbe
) - skip & validation is now a listing of any types (
89cf401
) - return stderr if not empty on stdout function (
4ae7fb9
) - change request function from param("..") -> params("..") (
541ab82
) - import upstream PKL modules and KDEPS PKL helpers in resource & api response (
ef98d66
) - document renderers respond with null rather than empty string (
1d78332
) - decode base64 strings by default on all Resource types (
80f093c
) - Make the API response errors block listing (array) (
7283cbe
) - register python resource to resource pkl (
c13adfa
) - reflect name changes to dockersettings go source (
4707bd5
) - changed ppa to repositories (
fc9ae43
) - Make workflow an open module (
71e4b35
) - deprecate postflightCheck (
f49439b
) - simplify usage of vision models and attachments (
a8366ea
) - fix typo for resolving filepath (
9e69fa3
) - renamed responseFile to file (
4183cfc
) - renamed responseFile to file (
5eab2ea
) - always return the first element, in case of a single file upload (
32eba99
) - support multiple file uploads (
0e325fa
) - make api serverr request extendable (
9408e44
) - fix isEmpty on class (
954d32c
) - simplify resource resolver methods (
7d9ff35
) - remove api server response type, focus on json response for now (
bae99a2
) - removed textproto from api response types (gen code) (
fad23ae
) - removed textproto from api response types (
6b41ca5
) - response keys gen code (
06de5e8
) - fix http response block (
8c1c31e
) - change schema to jsonResponse (bool) (
4e3c044
) - set empty defaults when calling a function (
733cfd2
) - increase build timeout to 1 minute (
56aa39c
) - use a unified api for accessing resource values (
7789db7
) - exec, chat and client are all blocks (
77f14c0
) - pre/post flights now a block that includes custom api error (
797a5b1
) - change resource action to be not a listing (
f7bb160
) - Revert "disable docs gha action until sorted this out" (
560985d
) This reverts commit 6bed01569525deb1c8fc803b788c9391b1540b01. - disable docs gha action until sorted this out (
6bed015
) - simplify api server request template by using Dynamic maps (
c62f4c2
) - workflow and api server has a single required action (
a974f74
) - non-optional fields and use listing boolean for prefligh & skip steps (
8e8a242
) - dockerSettings now becomes agentSettings since it has LLM models & hostIP/portNum was moved to apiSettings (
47bfc0b
) - GEN: move the hostIP and serverPort settings to API Server settings (
3d8340a
) - move the hostIP and serverPort settings to API Server settings (
6fcc08e
) - Changed docker hostIP portbinding settings (
bee501f
) - Changed docker settings for hostName and portNum; Fixed port default value (
226dc66
) - remove the placeholders for resource and workflow (
e06e1d7
) - remove the placeholders for resource and workflow (
8a2fef1
) - Removed llm-apis (for now) and make local LLM the default. (reinstate commercial and cloud llm-apis in future versions) (
5e46f85
) - Removed workflows array, all pkl files within resources/ folder will be a workflow. Make a resource not an array but a single entry (
800f898
) - fix workflow template validation (
646a755
) - removed RAG resource, and expect condition, renamed check to preflight, renamed api to httpclient (
b1b2b1c
) - removed modelfile, parameters, schema chat (
902ed91
) - removed interactive input for ENV (
40f8097
) - renamed ResourceAPI to ResourceHTTPClient (
3a04936
) - deprecate templates on build (
ce348d7
) - reinstate read resource (
48ea4fc
) - init llmapikeys on settings (
67825b2
) - removed read resource for now (
8f841d8
) - read llm api keys from env vars (
281af1f
) - regexp match for go version semantics - PklProject (
2b77fc9
) - regexp match for go version semantics - GHA (
f60f8f0
) - regexp match for go version semantics - GHA (
05a8838
) - regexp match for go version semantics (
201a555
) - init go.mod; move schema/pkg to schema/gen (
83c815a
) - initialize the default routes (
175c9f6
) - renamed Settings.pkl -> Project.pkl (
720a55f
) - fix indentation (
80a1347
) - move schema module path to deps/pkl (
4814b3b
) - specify the source url pattern in Pkl docs (
9a0864b
) - use pkl-docs env for deploying pages (
22c31db
) - Delete CNAME (
4c308c4
) - Create CNAME (
9d4b2d9
) - Fix resolution of pkl files (
e3d1588
) - Fix zip package resolution in PklProject; Use pkg as gen folder (
5355efe
) - fix version resolution (
c1401f0
) - Initial commit (
26d33e0
)
This PKL schema project maintains high quality through:
β
Automated Testing Available - Run make test
for comprehensive validation
π Latest Test Report Available - View Results
π§ͺ PKL Test Suite - 11 test modules with comprehensive coverage
- Real-time Testing: All PKL modules validated on every change
- Comprehensive Coverage: Functions, null safety, state management, and edge cases
- Production Ready: Automated validation ensures reliability
- CI/CD Integration: Tests run automatically in GitHub Actions
Quality Assurance: Every release is thoroughly tested before deployment.
Generated on 2025-07-22 10:01:21 by Enhanced Release Notes Generator