diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md
index 1c6fc82245..e86319b85e 100644
--- a/COMPATIBILITY.md
+++ b/COMPATIBILITY.md
@@ -81,12 +81,13 @@ template configuration retains its explicit `VERSION_2_3_0` compatibility
setting. This dependency update does not change API, database schema, or
template configuration.
-Engine `0.183.324` includes `projectTemplate.isPublic` in non-admin v1 API
+Engine `0.183.325` includes `projectTemplate.isPublic` in non-admin v1 API
responses as a read-only field. The admin create and update permission remains
unchanged. Public templates still have no owning `accountId`; their `remove`
action link is omitted for non-admin callers, while private template owners
and admins retain it. Direct update and delete authorization remains enforced
by the existing policy. There is no database migration.
+The `v0.183.324` tag is source-only and has no published release artifact.
## External identity type upgrades
diff --git a/README.md b/README.md
index 03ab4a1d23..a68389b368 100644
--- a/README.md
+++ b/README.md
@@ -23,10 +23,11 @@ tests, and compatibility details. Previous release notes remain in
[GitHub release history](https://github.com/PastureStack/orchestration-engine/releases)
records published artifacts.
-The next Engine candidate is `0.183.324`. It exposes the public state of
+The next Engine candidate is `0.183.325`. It exposes the public state of
project templates to non-admin readers and omits the unavailable remove action
on templates they do not own. See the
-[candidate release note](docs/releases/orchestration-engine-0.183.324.md).
+[candidate release note](docs/releases/orchestration-engine-0.183.325.md).
+The `v0.183.324` tag is source-only and has no published release artifact.
The build retains Java 25, Ubuntu 26.04, Maven, Liquibase, MariaDB/MySQL,
WebSocket, concurrency, and runtime maintenance. It consumes the exact
@@ -48,7 +49,7 @@ bash scripts/check-cattle-jdk25-full-package
After the gate passes, package and check the release artifact:
```sh
-ENGINE_VERSION=0.183.324 bash scripts/build --release
+ENGINE_VERSION=0.183.325 bash scripts/build --release
bash scripts/check-release-artifact dist/artifacts/cattle.jar
```
diff --git a/code/framework/api-pub-sub-jetty/pom.xml b/code/framework/api-pub-sub-jetty/pom.xml
index 23085efec2..99615d4589 100644
--- a/code/framework/api-pub-sub-jetty/pom.xml
+++ b/code/framework/api-pub-sub-jetty/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/api-pub-sub/pom.xml b/code/framework/api-pub-sub/pom.xml
index 3fb1203e96..e6710dc8ee 100644
--- a/code/framework/api-pub-sub/pom.xml
+++ b/code/framework/api-pub-sub/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/api/pom.xml b/code/framework/api/pom.xml
index c9a71212c3..5f144d2cf2 100644
--- a/code/framework/api/pom.xml
+++ b/code/framework/api/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/archaius/pom.xml b/code/framework/archaius/pom.xml
index a98cc066de..c5095675cd 100644
--- a/code/framework/archaius/pom.xml
+++ b/code/framework/archaius/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-meta-parent
- 0.183.324
+ 0.183.325
../../meta-parent/pom.xml
diff --git a/code/framework/async/pom.xml b/code/framework/async/pom.xml
index 111aa8e0db..4975a49151 100644
--- a/code/framework/async/pom.xml
+++ b/code/framework/async/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/auditing/pom.xml b/code/framework/auditing/pom.xml
index 771960efea..1beea81f10 100644
--- a/code/framework/auditing/pom.xml
+++ b/code/framework/auditing/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/db-loader/pom.xml b/code/framework/db-loader/pom.xml
index 30eab23684..1e06adf7ed 100644
--- a/code/framework/db-loader/pom.xml
+++ b/code/framework/db-loader/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/deferred/pom.xml b/code/framework/deferred/pom.xml
index 66fcd09129..9261ff6c29 100644
--- a/code/framework/deferred/pom.xml
+++ b/code/framework/deferred/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/encryption/pom.xml b/code/framework/encryption/pom.xml
index da8b133fca..8f42bd8fd5 100644
--- a/code/framework/encryption/pom.xml
+++ b/code/framework/encryption/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/engine/pom.xml b/code/framework/engine/pom.xml
index bce959a6eb..20bb1eb4cc 100644
--- a/code/framework/engine/pom.xml
+++ b/code/framework/engine/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/eventing/pom.xml b/code/framework/eventing/pom.xml
index d7a10310d7..3525e12172 100644
--- a/code/framework/eventing/pom.xml
+++ b/code/framework/eventing/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/events/pom.xml b/code/framework/events/pom.xml
index b2faccd604..c091b1b9db 100644
--- a/code/framework/events/pom.xml
+++ b/code/framework/events/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/extension-spring/pom.xml b/code/framework/extension-spring/pom.xml
index b3bde9ba1e..0fa5093c91 100644
--- a/code/framework/extension-spring/pom.xml
+++ b/code/framework/extension-spring/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/extension/pom.xml b/code/framework/extension/pom.xml
index 419b623851..4a8f764fae 100644
--- a/code/framework/extension/pom.xml
+++ b/code/framework/extension/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/java-server/pom.xml b/code/framework/java-server/pom.xml
index 946294f3f3..04a3e7be46 100644
--- a/code/framework/java-server/pom.xml
+++ b/code/framework/java-server/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/jmx/pom.xml b/code/framework/jmx/pom.xml
index e6b1c6d4b7..f291b90b02 100644
--- a/code/framework/jmx/pom.xml
+++ b/code/framework/jmx/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/jooq/pom.xml b/code/framework/jooq/pom.xml
index a73b40dd27..bb82d29392 100644
--- a/code/framework/jooq/pom.xml
+++ b/code/framework/jooq/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/json/pom.xml b/code/framework/json/pom.xml
index 85507e24d7..192a97dda3 100644
--- a/code/framework/json/pom.xml
+++ b/code/framework/json/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/launcher/pom.xml b/code/framework/launcher/pom.xml
index 0c881ced7e..5eb74a9fd3 100644
--- a/code/framework/launcher/pom.xml
+++ b/code/framework/launcher/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/lock/pom.xml b/code/framework/lock/pom.xml
index 9f3809de79..022994f2a6 100644
--- a/code/framework/lock/pom.xml
+++ b/code/framework/lock/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/logback/pom.xml b/code/framework/logback/pom.xml
index cc791d3f0c..e6fa2a22c9 100644
--- a/code/framework/logback/pom.xml
+++ b/code/framework/logback/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-meta-parent
- 0.183.324
+ 0.183.325
../../meta-parent/pom.xml
diff --git a/code/framework/managed-context/pom.xml b/code/framework/managed-context/pom.xml
index e0d4506f90..ed04e897de 100644
--- a/code/framework/managed-context/pom.xml
+++ b/code/framework/managed-context/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/metrics/pom.xml b/code/framework/metrics/pom.xml
index b2366cc74c..4497a0681b 100644
--- a/code/framework/metrics/pom.xml
+++ b/code/framework/metrics/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/module/pom.xml b/code/framework/module/pom.xml
index e1ce4a0743..3a85aa5818 100644
--- a/code/framework/module/pom.xml
+++ b/code/framework/module/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/object/pom.xml b/code/framework/object/pom.xml
index 4f47bf37d7..15f3ca5d94 100644
--- a/code/framework/object/pom.xml
+++ b/code/framework/object/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/pool/pom.xml b/code/framework/pool/pom.xml
index ba3034bd85..35a2b1990e 100644
--- a/code/framework/pool/pom.xml
+++ b/code/framework/pool/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/resource-monitor/pom.xml b/code/framework/resource-monitor/pom.xml
index 4e980e2e2d..c9f63cd877 100644
--- a/code/framework/resource-monitor/pom.xml
+++ b/code/framework/resource-monitor/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/schema/pom.xml b/code/framework/schema/pom.xml
index 27d9ee902e..bd6496280c 100644
--- a/code/framework/schema/pom.xml
+++ b/code/framework/schema/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/server/pom.xml b/code/framework/server/pom.xml
index 9b631154fd..3d848d9816 100644
--- a/code/framework/server/pom.xml
+++ b/code/framework/server/pom.xml
@@ -4,7 +4,7 @@
cattle-meta-parent
io.cattle
- 0.183.324
+ 0.183.325
../../meta-parent/pom.xml
diff --git a/code/framework/spring/pom.xml b/code/framework/spring/pom.xml
index 0ed2b0dc31..9a10a3e522 100644
--- a/code/framework/spring/pom.xml
+++ b/code/framework/spring/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/system-task/pom.xml b/code/framework/system-task/pom.xml
index 8308912ec7..8b45675e7e 100644
--- a/code/framework/system-task/pom.xml
+++ b/code/framework/system-task/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/token/pom.xml b/code/framework/token/pom.xml
index 84afb417fd..99c650bda1 100644
--- a/code/framework/token/pom.xml
+++ b/code/framework/token/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/framework/utils/pom.xml b/code/framework/utils/pom.xml
index d25a2832ee..fb62bab719 100644
--- a/code/framework/utils/pom.xml
+++ b/code/framework/utils/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/agent-instance/pom.xml b/code/iaas/agent-instance/pom.xml
index 33238ddc4a..7a3e990d8c 100644
--- a/code/iaas/agent-instance/pom.xml
+++ b/code/iaas/agent-instance/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/agent-server/pom.xml b/code/iaas/agent-server/pom.xml
index 83ec4a4ba9..01dfcddc96 100644
--- a/code/iaas/agent-server/pom.xml
+++ b/code/iaas/agent-server/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/agent/pom.xml b/code/iaas/agent/pom.xml
index accd03d0c0..059a3739db 100644
--- a/code/iaas/agent/pom.xml
+++ b/code/iaas/agent/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/allocator/pom.xml b/code/iaas/allocator/pom.xml
index 0837d646fd..261e64e705 100644
--- a/code/iaas/allocator/pom.xml
+++ b/code/iaas/allocator/pom.xml
@@ -4,7 +4,7 @@
io.cattle
cattle-parent
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/api-logic/pom.xml b/code/iaas/api-logic/pom.xml
index a640d7a811..3b875e17ed 100644
--- a/code/iaas/api-logic/pom.xml
+++ b/code/iaas/api-logic/pom.xml
@@ -4,7 +4,7 @@
cattle-parent
io.cattle
- 0.183.324
+ 0.183.325
../../parent/pom.xml
diff --git a/code/iaas/api-logic/src/test/java/io/cattle/platform/api/resource/jooq/ProjectTemplateMutationAuthorizationTest.java b/code/iaas/api-logic/src/test/java/io/cattle/platform/api/resource/jooq/ProjectTemplateMutationAuthorizationTest.java
new file mode 100644
index 0000000000..e4a14ba39b
--- /dev/null
+++ b/code/iaas/api-logic/src/test/java/io/cattle/platform/api/resource/jooq/ProjectTemplateMutationAuthorizationTest.java
@@ -0,0 +1,103 @@
+package io.cattle.platform.api.resource.jooq;
+
+import static io.cattle.platform.core.model.tables.ProjectTemplateTable.PROJECT_TEMPLATE;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import io.cattle.platform.api.auth.Identity;
+import io.cattle.platform.api.auth.Policy;
+import io.cattle.platform.api.auth.impl.DefaultPolicy;
+import io.cattle.platform.api.auth.impl.NoPolicyOptions;
+import io.cattle.platform.object.meta.ObjectMetaDataManager;
+import io.github.ibuildthecloud.gdapi.context.ApiContext;
+import io.github.ibuildthecloud.gdapi.request.ApiRequest;
+
+import java.lang.reflect.Proxy;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jooq.Condition;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ProjectTemplateMutationAuthorizationTest {
+
+ private final DefaultJooqResourceManager manager = new DefaultJooqResourceManager();
+ private final Policy user = new DefaultPolicy(42L, 42L, "user42",
+ Collections.emptySet(), new NoPolicyOptions());
+ private ApiRequest request;
+
+ @Before
+ public void setUp() {
+ request = new ApiRequest(null, null);
+ ApiContext.newContext().setApiRequest(request);
+ manager.setMetaDataManager(ObjectMetaDataManager.class.cast(Proxy.newProxyInstance(
+ getClass().getClassLoader(), new Class>[] { ObjectMetaDataManager.class },
+ (proxy, method, args) -> {
+ if (!"convertFieldNameFor".equals(method.getName())) {
+ throw new UnsupportedOperationException(method.getName());
+ }
+ if (ObjectMetaDataManager.ACCOUNT_FIELD.equals(args[1])) {
+ return PROJECT_TEMPLATE.ACCOUNT_ID;
+ }
+ if (ObjectMetaDataManager.PUBLIC_FIELD.equals(args[1])) {
+ return PROJECT_TEMPLATE.IS_PUBLIC;
+ }
+ return null;
+ })));
+ }
+
+ @After
+ public void tearDown() {
+ ApiContext.remove();
+ }
+
+ @Test
+ public void publicReadMayUsePublicOrOwnerCondition() {
+ request.setMethod("GET");
+ Map