shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:8:class PermissionTest {
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:12:    Permission p = Permission.parse("worklog:close");
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:21:    Permission p = Permission.parse("worklog:write");
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:23:    assertThat(Permission.parse(p.value())).isEqualTo(p);
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:30:    Permission p = Permission.parse("WorkLog:Close");
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:34:    assertThat(p).isEqualTo(Permission.parse("worklog:close"));
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:39:    Permission p = Permission.parse("  worklog:read  ");
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:41:    assertThat(p).isEqualTo(Permission.parse("worklog:read"));
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:46:    assertThatThrownBy(() -> new Permission("worklog", " "))
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:48:    assertThatThrownBy(() -> new Permission(" ", "read"))
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:54:    assertThatThrownBy(() -> Permission.parse(null)).isInstanceOf(IllegalArgumentException.class);
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:55:    assertThatThrownBy(() -> Permission.parse("  ")).isInstanceOf(IllegalArgumentException.class);
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:62:    assertThatThrownBy(() -> Permission.parse("worklog"))
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:64:    assertThatThrownBy(() -> Permission.parse("svc:worklog:close"))
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:66:    assertThatThrownBy(() -> Permission.parse("worklog:"))
shared-contract/src/test/java/dev/caskeleton/shared/security/PermissionTest.java:68:    assertThatThrownBy(() -> Permission.parse(":read"))
shared-contract/src/main/java/dev/caskeleton/shared/security/Permission.java:14:public record Permission(String resource, String action) {
shared-contract/src/main/java/dev/caskeleton/shared/security/Permission.java:18:  public Permission {
shared-contract/src/main/java/dev/caskeleton/shared/security/Permission.java:24:   * Parses a {@code resource:action} token into a {@link Permission}. Surrounding whitespace is
shared-contract/src/main/java/dev/caskeleton/shared/security/Permission.java:31:  public static Permission parse(String token) {
shared-contract/src/main/java/dev/caskeleton/shared/security/Permission.java:42:    return new Permission(trimmed.substring(0, firstColon), trimmed.substring(firstColon + 1));
