KOS Release Notes are official documents published with each new version of the KOS platform and its tools, including KOS Studio. They provide a clear summary of all changes delivered in a specific release.
Release Notes are essential for anyone working with the KOS ecosystem—developers, integrators, partners, and business stakeholders—because they help users quickly understand:
- New Features: Highlights of new capabilities or tools added to the platform.
- Enhancements: Enhancements to existing features, performance optimizations, or user experience updates.
- Resolved Issues: Issues resolved from previous versions, helping teams track reliability improvements.
- Breaking Changes: Changes that may affect backward compatibility or require adjustments to existing projects.
- Known Issues: Current limitations or defects that users should be aware of, often with workarounds or planned fixes.
For developers and technical teams, KOS Release Notes are an essential guide for planning upgrades, testing new features, and ensuring ongoing compatibility in projects built on the KOS smart dispense operating system.
Java Docs
KOS Release v1.9.0
New Features
- Added JsonDescriptorBean which allows a KAB to be added to a context with a handle and then accessed via the standard descriptor endpoints. This is used by the ddk to externalize the ncui descriptor, allowing it to be shared between system apps without needing to copy it into the system app descriptor.
- Support for logging from embedded systems. Any blink connection that implements the kos.logger iface can log events directly to java over the network, which are then written to the embedded log file. This also includes the ability to apply log level overrides which are persisted in java and passed to embedded on each connection.
- Added UiPluginService to provide standardized UI plugin infrastructure for discovering and loading UI plugins from KAB files.
- Every Application now contains a UiPluginContext that can be used to add UI plugins relative to the application. This will automatically unload the context when the application unloads.
- Enabling CAN simulator will create a CANSimulatorRunningTrouble to improve visibility that the simulator is running as mixing the simulator with real hardware can result in mixed results.
- Rfid scanner now checks if the antenna is paused after all reads, but before processing the results. This addresses a possible race condition where pausing reads mid-cycle can result in inconsistent RSSI processing.
- Support for legacy Freestyle hardware including 7100, 8100 and 9100.
- Support for dumping the BeanContext graph via endpoints. This allows the structure of the entire context graph to be examined. This also include bean level information, including the ability to see the ready state of beans that implement Ready, along with information about why a bean is not ready.
- If no regions are installed by the system application, KOS will install a default factory region.
- Revised the Assembly pattern. Objects that need to be added to the assembly now take the assembly as a constructor argument and add themselves to the assembly automatically. This eliminates the burden on the developer to know where to add various types of components to the assembly.
- Support for internal updates which allows a release to be copied to /mnt/datafs/update and be installed via endpoint. This follows the same logical process as usb update but without the need for a usb drive and is designed for remote processes with shell access.
- Support for rapid firmware development, allowing firmware developers to copy updated firmware KAB’s directly to a device and trigger an update without pushing a new release or rebooting.
- Support for api versions in extensions, apps and core. This allows applications to determine compatibility by api version numbers rather than artifact version numbers.
Enhancements
- FutureWork will automatically call success() if the associated FutureRunnable completes without throwing an exception, eliminating the need to call success() manually in most cases. For futures that extend beyond the end of the runnable, it will be required to call future.extend() to indicate that the future should not auto-complete.
- Freestyle extension now allows sanitizer to be installed in multiple slots without restrictions.
- CriticalDataService no longer uses autowiring to pick up CriticalDataSource beans from the context. This avoids accidentally picking up sources that were not intended to be used.
- CriticalDataSource interface now supports setWeight(), allowing the weight of the source to be adjusted to better align with the needs of the device.
- CriticalDataService now allows the weight of a CriticalDataSource to be set while adding it to the service.
- Support for loading system configuration settings from a kab on startup. The kab must have a type of kos.system.config, contain a single file called config.xml, and be placed into the kos.system context. This allows a single system app to be used in multiple ways by simply changing the config via another kab file.
- AdjustableCallback now has a recurring delay that is independent of the initial delay for a timer. This tends to align better with most common use cases.
- Changed method signature for Pump.getIntent() to remove the pump argument.
- SequencedFuture now supports independent fail and abort policies.
- Removed FixedPourAware interface.
- Refactored BeveragePourBuilder to include more support for numeric volume pouring as well as max volume pours. Switched naming conventions from FixedVolume to NamedVolume to better convey the concept of name looking for volumes. All existing fixed volume api’s are deprecated but are still functional.
- BeveragePipelineDelegate now uses NamedVolume conventions for consistency, but remains backward compatible.
- Beverage pouring endpoints have been refactored to contain many more pour options including the ability to pour an entire beverage sequence via endpoints. The old endpoints have been deprecated but continue to work. Split pouring will no longer be a standard option via endpoints going forward as it can be accomplished via the sequence endpoint or can be performed via a custom application endpoint that better factors in minimum pour volumes.
- CtxEventListener callbacks now take an argument of BeanContext to identify which context the event is for.
- Agitation trackers now clear InsufficientAgitationTroubles during transitions to any state other than mandatory which protects against future bugs similar to the agitation filter bug resolved.
- Cartridge agitator state bean now tracks when agitation is requested, which provides an event that can be used for agitation / rfid interlocks.
- RFID iface now tracks read errors and will restart the rfid adapter after a configured number of errors as a means of resetting the RFID hardware.
- Java log output now includes appId to more easily identify which log entries originate from which application. The appId is determined the the classloader that loaded the class.
- Refactored blink integration within java. Introduction of IfaceClient eliminates the need to manually manage iface lifecycles and provides wrapper methods to protect against disconnected hardware, exceptions and so on.
- Boot log now includes warnings about any non-ready beans after loading the system app. This provides an early notification that there may be loops in the dependency graph that prevent beans from becoming ready.
- FutureWork is now ClientAttributeAware, allowing multiple independent client payloads to be attached to a single future.
- The following objects now take Assembly in the constructor. This automatically adds the objects to the assembly, so the associated StandardFreestyleAssembly set/add methods have been removed.
- IceAgitator
- CarbTank
- CartridgeAgitator
- Trouble id’s are now uuid’s to simplify data analysis as id’s will no longer overlap across reboots.
- Trouble.getInfo() and TroubleInfoFactory have been removed. Troubles are now ClientAttributeAware allowing multiple named data fragments to be attached to a trouble. Freestyle trouble meta data is now attached to the “flex” attribute of troubles.
- Freestyle extension now provides loadTroubleAttributes() to allow developers to add additional trouble meta data for custom developed troubles.
- AssemblyListener has been segmented into more granular interfaces: AssemblyInstallListener, AssemblyPrePostInstallListener. AssemblyListener no longer contains any methods so one of the new interfaces needs to be used instead.
- ReadyIndicator now supports reset. This allows an indicator to toggle between ready and not ready multiple times.
- RegionService and associated classes were moved into commons for use in KOS Studio.
Resolved Issues
- Fixed bug in AdjustableCallback that can prevent recurring callbacks when using day relative times.
- Fixed issue with agitation filter creating an InsufficientAgitationTrouble when an insertion occurs during advisory or maintenance agitation cycles.
Breaking Changes
- All package names changed from com.tccc to com.kosdev in order to align all documentation, maven artifacts, javadocs and the dev portal. This is a breaking change that requires code to be rebuilt but aligns all resources going forward.
- DispenseAssembly, FreestyleAssembly and StandardFreestyleAssembly constructors no longer support optional descriptor. The Assembly class supports setDescriptor() if a descriptor is needed, but this is generally unused and is considered deprecated functionality.
