FreeBSD/ports c1fda74irc/halloy Makefile Makefile.crates

irc/halloy: Update 2026.7.2 => 2026.8

Changelog:
https://github.com/squidowl/halloy/releases/tag/2026.8

PR:             297158
Reported by:    Andie Bradley <pokeysquirrel at gmail.com> (maintainer)
Approved by:    osa, vvd (Mentors, implicit)
MFH:            2026Q3

(cherry picked from commit 114992f8ef5f09e44f2d52a13730701a6ce3d5e0)
DeltaFile
+194-210irc/halloy/distinfo
+96-104irc/halloy/Makefile.crates
+1-1irc/halloy/Makefile
+291-3153 files

FreeBSD/ports 114992firc/halloy Makefile Makefile.crates

irc/halloy: Update 2026.7.2 => 2026.8

Changelog:
https://github.com/squidowl/halloy/releases/tag/2026.8

PR:             297158
Reported by:    Andie Bradley <pokeysquirrel at gmail.com> (maintainer)
Approved by:    osa, vvd (Mentors, implicit)
MFH:            2026Q3
DeltaFile
+194-210irc/halloy/distinfo
+96-104irc/halloy/Makefile.crates
+1-2irc/halloy/Makefile
+291-3163 files

LLVM/project 09da485llvm/lib/Target/SPIRV SPIRVNonSemanticDebugHandler.cpp SPIRVAsmPrinter.cpp

Remove unused parameter.
DeltaFile
+1-2llvm/lib/Target/SPIRV/SPIRVNonSemanticDebugHandler.h
+1-1llvm/lib/Target/SPIRV/SPIRVNonSemanticDebugHandler.cpp
+1-1llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp
+3-43 files

LLVM/project 2a3f74fllvm/lib/Transforms/Vectorize VPlanTransforms.cpp

Update trunc combine, fix m_Not return position
DeltaFile
+4-4llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+4-41 files

LLVM/project e001308libcxx/src exception.cpp, libcxx/src/support/runtime exception_fallback.ipp

[libc++] Fix exception_fallback.ipp not compiling (#212961)
DeltaFile
+0-1libcxx/src/exception.cpp
+1-0libcxx/src/support/runtime/exception_fallback.ipp
+1-12 files

FreeNAS/freenas 35f5165src/middlewared/middlewared/pytest/unit/utils test_license_utils.py test_license_legacy_utils.py, src/middlewared/middlewared/utils/license __init__.py constants.py

Format license utils package

This commit fixes an issue where the files added when license retrieval moved into a shared utils package were never run through ruff format, so the formatter check fails on them. Reformatting only reflows multi-line collection literals and parametrize arguments to match line length; no logic changes.
DeltaFile
+106-64src/middlewared/middlewared/pytest/unit/utils/test_license_legacy_utils.py
+38-24src/middlewared/middlewared/utils/license/legacy.py
+17-15src/middlewared/middlewared/utils/license/constants.py
+8-6src/middlewared/middlewared/utils/license/__init__.py
+9-3src/middlewared/middlewared/pytest/unit/utils/test_license_utils.py
+178-1125 files

FreeNAS/freenas d62f4a9src/middlewared/middlewared/api/v26_0_0 nfs.py, src/middlewared/middlewared/plugins nfs.py

Add missing coverage for NFS snapshot entitlement

This commit adds changes to register the bespoke NFS snapshot denial message for all three deny reasons rather than just the two currently reachable, so editing a matrix cell later cannot silently drop the wording back to the generic template.

It also covers the feature against the live policy instead of only the matrix fixture, and reworks the unentitled integration fixture to mock the license rather than the entitlement check, so the negative path exercises the real engine instead of asserting a string the test itself handed in.
DeltaFile
+42-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+8-10tests/sharing_protocols/nfs/test_nfs_snapdir.py
+2-3src/middlewared/middlewared/plugins/nfs.py
+2-2src/middlewared/middlewared/api/v26_0_0/nfs.py
+1-2src/middlewared/middlewared/utils/entitlements/engine.py
+55-195 files

FreeNAS/freenas c87d1c4src/middlewared/middlewared/plugins smb.py, src/middlewared/middlewared/plugins/smb_ util_smbconf.py

Gate SMB fast path and Veeam shares through the entitlement engine

This commit adds changes to gate the SMB ZFS fastpath parameters and Veeam repository shares through the entitlement engine instead of a bare is_enterprise read. Both stay separate flags with their own matrix vectors and remain in the enterprise-only legacy injection bucket, so existing licensed systems keep both features and only unlicensed HA-capable boxes lose them.
DeltaFile
+42-0src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+8-4tests/api2/test_smb_veeam_repo.py
+6-4src/middlewared/middlewared/plugins/smb.py
+7-0src/middlewared/middlewared/utils/entitlements/engine.py
+3-3src/middlewared/middlewared/plugins/smb_/util_smbconf.py
+5-0src/middlewared/middlewared/plugins/truenas/entitlements.py
+71-112 files not shown
+74-128 files

FreeNAS/freenas 65fbfacsrc/middlewared/middlewared/plugins/nvmet global.py, src/middlewared/middlewared/plugins/truenas license_legacy_utils.py

Flip NVMe-oF SPDK onto its matrix vector

This commit adds changes to move NVMEOF_SPDK off its transitional legacy rule and onto its matrix vector, which drops the is_ha_capable disjunct. That was a licensing proxy inherited from product_type rather than a physical prerequisite, so HA capable systems holding no feature key no longer get SPDK without a license.

The key is now injected into every legacy license instead of only enterprise models, so existing legacy holders keep SPDK on upgrade.
DeltaFile
+22-20src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+0-18src/middlewared/middlewared/utils/entitlements/legacy.py
+5-2src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+1-1src/middlewared/middlewared/utils/entitlements/policy.py
+1-1src/middlewared/middlewared/pytest/unit/plugins/truenas/test_license_legacy_utils.py
+1-1src/middlewared/middlewared/plugins/nvmet/global.py
+30-436 files

FreeNAS/freenas 96600dfsrc/middlewared/middlewared/plugins truesearch.py, src/middlewared/middlewared/pytest/unit/plugins test_truesearch.py

Gate TrueSearch through the entitlement engine

This commit adds changes to route the TrueSearch gate through the entitlement engine and drop the TrueNAS Connect disjunct, since a system that connects to TNC is issued a license carrying the key rather than being entitled by the connection itself. This also tightens the check from mere license presence to the feature key, which is what the feature matrix asks for, and the denial reason now comes from the entitlement instead of a hardcoded string naming TNC as an alternative.
DeltaFile
+66-0src/middlewared/middlewared/pytest/unit/plugins/test_truesearch.py
+5-5src/middlewared/middlewared/plugins/truesearch.py
+5-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+1-0src/middlewared/middlewared/utils/entitlements/policy.py
+1-0src/middlewared/middlewared/utils/entitlements/engine.py
+78-75 files

FreeNAS/freenas c3887e9src/middlewared/middlewared/plugins/truenas entitlements.py, src/middlewared/middlewared/pytest/unit/utils test_entitlements.py

Rename check func
DeltaFile
+28-28src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+2-2src/middlewared/middlewared/utils/entitlements/__init__.py
+1-1src/middlewared/middlewared/utils/entitlements/policy.py
+1-1src/middlewared/middlewared/plugins/truenas/entitlements.py
+32-324 files

FreeNAS/freenas 04ff3f6src/middlewared/middlewared/plugins/webshare sharing.py, src/middlewared/middlewared/pytest/unit/utils test_license_legacy_utils.py test_entitlements.py

Gate Webshare through the entitlement engine

This commit adds changes to gate Webshare through the entitlement engine. Webshare had no license check at all until now, so the key is injected into every legacy license to make sure no existing licensee loses their shares on upgrade.

Enforcement is set-time only, on share creation and on the service config. An update that leaves a share disabled is let through without the entitlement, so a system that has lost it can still turn a share off rather than having to delete it. Existing shares keep serving, since nothing re-reads the entitlement after the fact.

Note the WebUI currently hides Webshare from Enterprise systems and shows it to Community Edition, which is the inverse of this gate. That needs a matching change on the UI side before the two agree.
DeltaFile
+15-2tests/api2/test_sharing_path_resolution_hooks.py
+13-1tests/api2/test_webshare_homedir.py
+10-0src/middlewared/middlewared/plugins/webshare/sharing.py
+6-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+5-0src/middlewared/middlewared/utils/license/legacy.py
+5-0src/middlewared/middlewared/pytest/unit/utils/test_license_legacy_utils.py
+54-53 files not shown
+58-59 files

FreeNAS/freenas a4d6019src/middlewared/middlewared/pytest/unit/utils test_entitlements.py, src/middlewared/middlewared/utils/license legacy.py

Gate directory services authentication through the entitlement engine

This commit adds changes to gate ds_auth, which controls whether directory services accounts may authenticate to the UI and API, through the entitlement engine instead of a bare is_enterprise read. Directory services themselves stay completely ungated on every product including Community Edition, so AD, LDAP and IPA are unaffected and only the UI and API login path is licensed. DIRECTORY_SERVICES also moves into the unconditional legacy injection bucket so every legacy licensee keeps it regardless of model.
DeltaFile
+36-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+16-8tests/directory_services/test_activedirectory_basic.py
+9-5tests/directory_services/test_ipa_join.py
+9-3tests/directory_services/test_ldap_basic.py
+8-3tests/api2/test_twofactor_auth.py
+8-3src/middlewared/middlewared/utils/license/legacy.py
+86-244 files not shown
+103-3010 files

FreeNAS/freenas b6b862fsrc/middlewared/middlewared/plugins/security info.py, src/middlewared/middlewared/pytest/unit/plugins test_security_info.py

Gate STIG and FIPS mode through the entitlement engine

This commit adds changes to route the security config gate through the entitlement engine instead of checking for the mere presence of a license. FIPS has no key of its own so the STIG entitlement governs every enterprise security option, matching the single STIG row in the feature matrix. The check stays on the write path only, since consuming it on the read path would silently unharden PAM on the next login.
DeltaFile
+38-0src/middlewared/middlewared/pytest/unit/plugins/test_security_info.py
+19-6src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+6-2src/middlewared/middlewared/plugins/security/info.py
+1-0src/middlewared/middlewared/utils/entitlements/policy.py
+1-0src/middlewared/middlewared/utils/entitlements/engine.py
+65-85 files

FreeNAS/freenas 6b5f321src/middlewared/middlewared/plugins support.py, src/middlewared/middlewared/plugins/nvmet global.py

Gate feature checks through the entitlement engine

This commit adds changes to route the dedup, SED, NVMe-oF SPDK, ZFS tiering and proactive support gates through truenas.entitlements.check instead of hand-composed license predicates scattered across plugins. It also fixes a crash in product_type when a license carries no hardware model, which now classifies as Community Edition.
DeltaFile
+12-18src/middlewared/middlewared/plugins/pool_/utils.py
+5-5src/middlewared/middlewared/plugins/nvmet/global.py
+5-4src/middlewared/middlewared/plugins/system/product.py
+4-3src/middlewared/middlewared/plugins/zfs/tier.py
+2-4src/middlewared/middlewared/plugins/support.py
+28-345 files

FreeNAS/freenas 908cf9csrc/middlewared/middlewared/plugins/kmip update.py, src/middlewared/middlewared/pytest/unit/utils test_entitlements.py test_license_legacy_utils.py

Gate KMIP through the entitlement engine

This commit adds changes to gate KMIP key management through the entitlement engine. KMIP had no license check at all until now, so the key is injected into every legacy license to make sure no existing licensee loses key management on upgrade.

Only the enable transition is gated. Disabling KMIP is how escrowed ZFS and SED keys are pulled back to the local database, so a system that loses the entitlement must still be able to turn it off and recover its keys.
DeltaFile
+9-0src/middlewared/middlewared/plugins/kmip/update.py
+5-0src/middlewared/middlewared/utils/license/legacy.py
+5-0src/middlewared/middlewared/pytest/unit/utils/test_license_legacy_utils.py
+4-0src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+2-0src/middlewared/middlewared/utils/entitlements/policy.py
+1-0src/middlewared/middlewared/utils/entitlements/engine.py
+26-01 files not shown
+27-07 files

FreeNAS/freenas c66a27esrc/middlewared/middlewared/plugins/container container.py, src/middlewared/middlewared/plugins/truenas license_legacy_utils.py

Gate apps, containers and VMs through the entitlement engine

This commit adds changes to route the apps, containers and VMs gates through the entitlement engine rather than raw feature flag reads, and injects those keys into legacy licenses so existing licensees keep both capabilities after upgrade. Note this means an injected key now overrides the legacy jails/vm bits on HA capable hardware, which is called out in a TODO next to the injection bucket.
DeltaFile
+42-0src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+11-12src/middlewared/middlewared/pytest/unit/plugins/truenas/test_license_legacy_utils.py
+15-8src/middlewared/middlewared/pytest/unit/plugins/test_vm.py
+9-9src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+3-10src/middlewared/middlewared/plugins/container/container.py
+3-7src/middlewared/middlewared/plugins/vm/info.py
+83-463 files not shown
+94-539 files

FreeNAS/freenas f630d3fsrc/middlewared/middlewared/plugins/truenas license_legacy_utils.py, src/middlewared/middlewared/pytest/unit/plugins/truenas test_license_legacy_utils.py

Inject feature keys when translating legacy licenses

This commit adds changes to normalize legacy licenses at the translation layer by injecting the feature keys a legacy holder is entitled to today: capabilities gated on any valid license go to every legacy license, is_enterprise-gated capabilities go to enterprise models only, and CONTAINERS rides along with the legacy jails bit. This keeps backwards compatibility in one place so gates can evaluate the new key vocabulary uniformly.
DeltaFile
+52-8src/middlewared/middlewared/pytest/unit/plugins/truenas/test_license_legacy_utils.py
+48-3src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+100-112 files

FreeNAS/freenas 5040590src/middlewared/middlewared/plugins/truenas license_utils.py, src/middlewared/middlewared/pytest/unit/plugins/truenas test_license_utils.py

Expose per-feature source and tier on license info

This commit adds changes to carry each licensed feature's source and tier qualifier on FeatureInfo, so entitlement rules can consume per-feature tiers (e.g. the SUPPORT contract tier) without reaching into raw license payloads.
DeltaFile
+7-1src/middlewared/middlewared/plugins/truenas/license_utils.py
+5-2src/middlewared/middlewared/pytest/unit/plugins/truenas/test_license_utils.py
+12-32 files

FreeNAS/freenas 2e30ce0src/middlewared/middlewared/plugins network.py, src/middlewared/middlewared/plugins/truenas license_legacy_utils.py

Gate FEC mode configuration through the entitlement engine

This commit adds changes to gate FEC mode configuration on the entitlement engine instead of system.is_enterprise. The physical interface check and the ethtool capability probe stay where they are, since those are hardware facts the engine does not model.

NETWORK_FEC is now injected into every legacy license rather than only enterprise models, so HA capable systems whose license carries no model or a freenas prefixed one keep being able to configure it.
DeltaFile
+33-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+4-2src/middlewared/middlewared/plugins/network.py
+5-1src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+6-0src/middlewared/middlewared/utils/entitlements/engine.py
+3-1src/middlewared/middlewared/pytest/unit/plugins/truenas/test_license_legacy_utils.py
+1-0src/middlewared/middlewared/utils/entitlements/policy.py
+52-66 files

FreeNAS/freenas 206ec98src/middlewared/middlewared/plugins nfs.py, src/middlewared/middlewared/plugins/truenas license_legacy_utils.py

Gate NFS snapshot exposure through the entitlement engine

This commit adds changes to gate NFS snapshot exposure on the entitlement engine instead of system.is_enterprise, keeping the existing validation wording via a per-feature message override.

NFS_SNAPSHOT is now injected into every legacy license rather than only enterprise models. Its matrix vector is key-only on both hardware sides, so a legacy holder whose model is freenas-prefixed would otherwise lose the export on upgrade. The trade-off is that freenas certified systems, which are denied today, gain the feature.
DeltaFile
+64-22src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+18-4tests/sharing_protocols/nfs/test_nfs_snapdir.py
+5-5src/middlewared/middlewared/plugins/nfs.py
+6-2src/middlewared/middlewared/utils/entitlements/policy.py
+7-0src/middlewared/middlewared/utils/entitlements/engine.py
+4-2src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+104-351 files not shown
+105-367 files

FreeNAS/freenas d541a50src/middlewared/middlewared/pytest/unit/utils test_entitlements.py, src/middlewared/middlewared/utils/entitlements legacy.py matrix.py

Add license entitlement engine

This commit adds a pure entitlement engine that resolves whether a feature is available from hardware class and license facts, using per-feature policy rules: product-matrix vectors, a support-tier rule, a license-type rule for HA, and transitional legacy rules that reproduce current gate behavior until each feature is flipped onto its matrix vector. The full product matrix ships as reference data, and completeness tests keep the policy, matrix, display names and API vocabulary in sync so a new feature flag cannot silently skip a site.
DeltaFile
+400-0src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+185-0src/middlewared/middlewared/utils/entitlements/engine.py
+66-0src/middlewared/middlewared/utils/entitlements/policy.py
+56-0src/middlewared/middlewared/utils/entitlements/__init__.py
+45-0src/middlewared/middlewared/utils/entitlements/matrix.py
+40-0src/middlewared/middlewared/utils/entitlements/legacy.py
+792-01 files not shown
+826-07 files

FreeNAS/freenas 7844ff0src/middlewared/middlewared/plugins/jbof crud.py, src/middlewared/middlewared/pytest/unit/utils test_entitlements.py test_license_legacy_utils.py

Gate NVMe expansion shelves through the entitlement engine

This commit adds changes to gate JBOF expansion shelves through the entitlement engine rather than a bare enclosure count, keeping the shelf count itself as a conjunct and dropping the system serial check, which is a license to machine binding the license layer already owns. Legacy licenses have no way to carry a JBOF key since shelf ownership lives only in the additional hardware list, so the key is injected from the ES24N enclosure entry and licenses without a shelf are left untouched.
DeltaFile
+71-0src/middlewared/middlewared/pytest/unit/utils/test_license_legacy_utils.py
+62-2tests/api2/test_jbof.py
+43-2src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+12-5src/middlewared/middlewared/plugins/jbof/crud.py
+14-3src/middlewared/middlewared/utils/license/legacy.py
+9-0src/middlewared/middlewared/utils/entitlements/policy.py
+211-121 files not shown
+212-127 files

FreeNAS/freenas ca6f2c2src/middlewared/middlewared/plugins/truenas license_legacy_utils.py license_utils.py, src/middlewared/middlewared/pytest/unit/utils test_license_info_wire.py test_license_utils.py

Move license retrieval into a shared utils package

This commit adds changes to move license retrieval and legacy license normalization out of plugins/truenas and into middlewared.utils.license, so there is a single get_license() that every consumer reads and one normalized shape it returns regardless of whether the answer came from the license daemon or the legacy on-disk blob. is_licensed_for_ha had quietly grown its own composition of the same two normalizers with a different fallback rule, which is what this collapses.

There is one behaviour change worth calling out: a v2 license that exists but fails verification is now authoritative and no longer falls back to the legacy blob, while a wedged or erroring daemon does now fall back instead of reporting the system unlicensed. LicenseInfo also splits its conflated expires_at into separate support and license expiry fields and keys features by name rather than flattening them into a list. The public truenas.license.info payload is unchanged and is now pinned byte for byte by an explicit projection and a golden test, since it is still an untyped dict and nothing else held its shape.
DeltaFile
+0-254src/middlewared/middlewared/plugins/truenas/license_utils.py
+185-0src/middlewared/middlewared/utils/license/daemon.py
+157-0src/middlewared/middlewared/pytest/unit/utils/test_license_utils.py
+0-140src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+138-0src/middlewared/middlewared/pytest/unit/utils/test_license_info_wire.py
+132-0src/middlewared/middlewared/utils/license/legacy.py
+612-39416 files not shown
+1,092-61822 files

FreeNAS/freenas c3eb4c2src/middlewared/middlewared/plugins nfs.py, src/middlewared/middlewared/plugins/iscsi_ iscsi_global.py

Gate RDMA through the entitlement engine

This commit adds changes to make rdma.capable_protocols the single place RDMA availability is decided, so it consults the entitlement engine instead of system.is_enterprise. The chassis check that refused RDMA to Minis is dropped, since the matrix entitles a Mini whose license carries the key, and the NIC probe stays because that is a hardware fact the engine does not model.

Every other RDMA decision site now routes through that chokepoint via a per module capability helper, so a validator and its runtime mask can no longer drift apart. That drift is how NFS ended up masking on is_enterprise while its own validator checked for a capable NIC. The LIO renderer also stops reading the raw iser bit and consumes the gated method instead, which it never did.

RDMA is injected into every legacy license rather than only enterprise models, so existing licensees keep it.
DeltaFile
+14-10tests/api2/test_300_nfs.py
+12-6src/middlewared/middlewared/plugins/nfs.py
+12-5src/middlewared/middlewared/plugins/nvmet/global.py
+11-5src/middlewared/middlewared/plugins/iscsi_/iscsi_global.py
+8-2src/middlewared/middlewared/plugins/truenas/license_legacy_utils.py
+6-3src/middlewared/middlewared/plugins/rdma/rdma.py
+63-317 files not shown
+77-4213 files

FreeNAS/freenas 6e24984src/middlewared/middlewared/pytest/unit/plugins test_security_info.py test_fc.py

Fix formatting in entitlement plugin unit tests

This commit makes some changes where ruff formatting had not been applied to the plugin unit tests added earlier on this branch, so the suite now passes ruff format cleanly.
DeltaFile
+18-20src/middlewared/middlewared/pytest/unit/plugins/test_iscsi_target.py
+16-13src/middlewared/middlewared/pytest/unit/plugins/test_fc.py
+10-7src/middlewared/middlewared/pytest/unit/plugins/test_security_info.py
+44-403 files

FreeNAS/freenas eaa1b14src/middlewared/middlewared/plugins/fc fc.py, src/middlewared/middlewared/plugins/iscsi_ targets.py

Gate Fibre Channel through the entitlement engine

This commit adds changes to route both Fibre Channel gates through the entitlement engine instead of raw feature flag reads, and drops the is_enterprise conjunct from fc.capable since the feature matrix already denies the community edition columns and was the only thing blocking a CE system that holds the key. HBA presence stays at the call site as it is a hardware fact the entitlement does not model.
DeltaFile
+76-0src/middlewared/middlewared/pytest/unit/plugins/test_iscsi_target.py
+68-0src/middlewared/middlewared/pytest/unit/plugins/test_fc.py
+32-0src/middlewared/middlewared/pytest/unit/utils/test_entitlements.py
+7-4src/middlewared/middlewared/plugins/fc/fc.py
+6-1tests/sharing_protocols/fibre_channel/test_fibre_channel.py
+4-1src/middlewared/middlewared/plugins/iscsi_/targets.py
+193-62 files not shown
+195-68 files

FreeNAS/freenas 443dc14src/middlewared/middlewared/utils/entitlements policy.py

Add todos
DeltaFile
+6-6src/middlewared/middlewared/utils/entitlements/policy.py
+6-61 files

FreeNAS/freenas 8e27153src/middlewared/middlewared/plugins/truenas __init__.py entitlements.py

Add truenas.entitlements service

This commit adds a private service that gathers hardware and license facts and evaluates feature entitlements through the entitlement engine, giving gates a single typed call to answer whether a feature is available.
DeltaFile
+28-0src/middlewared/middlewared/plugins/truenas/entitlements.py
+2-0src/middlewared/middlewared/plugins/truenas/__init__.py
+30-02 files

FreeNAS/freenas 87342d1src/middlewared/middlewared/api/v26_0_0 system_product.py

Widen system.feature_enabled to the full feature vocabulary

This commit adds changes to accept every known license feature key in system.feature_enabled now that the license vocabulary covers all gated features.
DeltaFile
+6-1src/middlewared/middlewared/api/v26_0_0/system_product.py
+6-11 files