fix(magic): send MDM enqueue commands as plist XML to NanoMDM; inline lock profile

This commit is contained in:
chahinebrini 2026-06-18 08:13:33 +02:00
parent 4064b8d975
commit ee5f71a8df
8 changed files with 1256 additions and 1163 deletions

@ -0,0 +1 @@
Subproject commit b7e3af80f6e331f6fb456667b82b12cade7c9d35

View File

@ -1,15 +1,10 @@
<template> <template>
<div <div
class="relative overflow-hidden rounded-2xl bg-white dark:bg-gray-900 shadow-sm ring-1 ring-gray-100 dark:ring-gray-800 p-5" class="relative overflow-hidden rounded-2xl bg-white dark:bg-gray-900 shadow-sm ring-1 ring-gray-100 dark:ring-gray-800 p-5">
>
<div class="flex items-start gap-4"> <div class="flex items-start gap-4">
<div <div
class="shrink-0 w-12 h-12 rounded-xl bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-800 dark:to-gray-700 flex items-center justify-center" class="shrink-0 w-12 h-12 rounded-xl bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-800 dark:to-gray-700 flex items-center justify-center">
> <UIcon name="i-heroicons-device-phone-mobile" class="w-6 h-6 text-[var(--rebreak-primary)]" />
<UIcon
name="i-heroicons-device-phone-mobile"
class="w-6 h-6 text-[var(--rebreak-primary)]"
/>
</div> </div>
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
@ -24,25 +19,16 @@
</p> </p>
</div> </div>
<UBadge <UBadge :color="topBadge.color" :variant="topBadge.variant" size="sm" class="font-bold shrink-0">
:color="topBadge.color"
:variant="topBadge.variant"
size="sm"
class="font-bold shrink-0"
>
{{ topBadge.label }} {{ topBadge.label }}
</UBadge> </UBadge>
</div> </div>
<!-- Incomplete-protection hint --> <!-- Incomplete-protection hint -->
<div <div v-if="showIncompleteHint"
v-if="showIncompleteHint" class="mt-3 rounded-xl bg-amber-50 dark:bg-amber-900/20 border border-amber-100 dark:border-amber-800 p-3 flex items-start gap-2.5">
class="mt-3 rounded-xl bg-amber-50 dark:bg-amber-900/20 border border-amber-100 dark:border-amber-800 p-3 flex items-start gap-2.5" <UIcon name="i-heroicons-exclamation-triangle"
> class="w-5 h-5 text-amber-600 dark:text-amber-400 shrink-0 mt-0.5" />
<UIcon
name="i-heroicons-exclamation-triangle"
class="w-5 h-5 text-amber-600 dark:text-amber-400 shrink-0 mt-0.5"
/>
<div> <div>
<p class="text-sm font-bold text-amber-800 dark:text-amber-300"> <p class="text-sm font-bold text-amber-800 dark:text-amber-300">
Schutz unvollständig Schutz unvollständig
@ -54,31 +40,18 @@
</div> </div>
<!-- USB connection hint --> <!-- USB connection hint -->
<div <div v-if="!isConnected" class="mt-3 text-sm text-gray-600 dark:text-gray-300 flex items-start gap-2">
v-if="!isConnected" <UIcon :name="isSearching ? 'i-heroicons-arrow-path' : 'i-heroicons-information-circle'"
class="mt-3 text-sm text-gray-600 dark:text-gray-300 flex items-start gap-2" :class="isSearching ? 'animate-spin' : ''" class="w-5 h-5 text-[var(--rebreak-primary)] shrink-0 mt-0.5" />
>
<UIcon
:name="isSearching ? 'i-heroicons-arrow-path' : 'i-heroicons-information-circle'"
:class="isSearching ? 'animate-spin' : ''"
class="w-5 h-5 text-[var(--rebreak-primary)] shrink-0 mt-0.5"
/>
<span>{{ isSearching ? "Suche nach verbundenem iPhone…" : "Verbinde dein iPhone mit USB, um den Schutz zu vervollständigen." }}</span> <span>{{ isSearching ? "Suche nach verbundenem iPhone…" : "Verbinde dein iPhone mit USB, um den Schutz zu vervollständigen." }}</span>
</div> </div>
<!-- Backend-MDM always visible; local USB only when connected --> <!-- Backend-MDM always visible; local USB only when connected -->
<div <div class="mt-4 grid grid-cols-1 md:grid-cols-2 gap-4 relative">
class="mt-4 grid grid-cols-1 md:grid-cols-2 gap-4 relative"
>
<!-- Animated sync overlay --> <!-- Animated sync overlay -->
<div <div v-if="autoSyncing"
v-if="autoSyncing" class="absolute inset-0 z-10 rounded-2xl bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm flex flex-col items-center justify-center">
class="absolute inset-0 z-10 rounded-2xl bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm flex flex-col items-center justify-center" <UIcon name="i-heroicons-arrow-path" class="w-8 h-8 animate-spin text-[var(--rebreak-primary)]" />
>
<UIcon
name="i-heroicons-arrow-path"
class="w-8 h-8 animate-spin text-[var(--rebreak-primary)]"
/>
<p class="mt-2 text-sm font-bold text-gray-900 dark:text-white"> <p class="mt-2 text-sm font-bold text-gray-900 dark:text-white">
Schutz wird geprüft Schutz wird geprüft
</p> </p>
@ -93,38 +66,19 @@
<span class="text-xs font-bold uppercase tracking-wide text-gray-500 dark:text-gray-400"> <span class="text-xs font-bold uppercase tracking-wide text-gray-500 dark:text-gray-400">
Backend-MDM Backend-MDM
</span> </span>
<UBadge <UBadge v-if="mdmState.loading" color="neutral" variant="subtle" size="xs">
v-if="mdmState.loading"
color="neutral"
variant="subtle"
size="xs"
>
Lädt Lädt
</UBadge> </UBadge>
<UBadge <UBadge v-else-if="mdmState.data?.enrolled" color="success" variant="subtle" size="xs">
v-else-if="mdmState.data?.enrolled"
color="success"
variant="subtle"
size="xs"
>
Enrolled Enrolled
</UBadge> </UBadge>
<UBadge <UBadge v-else color="warning" variant="subtle" size="xs">
v-else
color="warning"
variant="subtle"
size="xs"
>
Nicht enrolled Nicht enrolled
</UBadge> </UBadge>
</div> </div>
<ul class="space-y-2 text-sm text-gray-700 dark:text-gray-200"> <ul class="space-y-2 text-sm text-gray-700 dark:text-gray-200">
<li <li v-for="row in backendRows" :key="row.label" class="flex items-center justify-between">
v-for="row in backendRows"
:key="row.label"
class="flex items-center justify-between"
>
<span class="text-gray-500 dark:text-gray-400">{{ row.label }}</span> <span class="text-gray-500 dark:text-gray-400">{{ row.label }}</span>
<span :class="row.valueClass">{{ row.value }}</span> <span :class="row.valueClass">{{ row.value }}</span>
</li> </li>
@ -132,29 +86,18 @@
</div> </div>
<!-- Local USB device card --> <!-- Local USB device card -->
<div <div v-if="isConnected" class="rounded-xl bg-gray-50 dark:bg-gray-800/50 p-4">
v-if="isConnected"
class="rounded-xl bg-gray-50 dark:bg-gray-800/50 p-4"
>
<div class="flex items-center justify-between mb-3"> <div class="flex items-center justify-between mb-3">
<span class="text-xs font-bold uppercase tracking-wide text-gray-500 dark:text-gray-400"> <span class="text-xs font-bold uppercase tracking-wide text-gray-500 dark:text-gray-400">
Lokales USB-Gerät Lokales USB-Gerät
</span> </span>
<UBadge <UBadge color="success" variant="subtle" size="xs">
color="success"
variant="subtle"
size="xs"
>
Verbunden Verbunden
</UBadge> </UBadge>
</div> </div>
<ul class="space-y-2 text-sm text-gray-700 dark:text-gray-200"> <ul class="space-y-2 text-sm text-gray-700 dark:text-gray-200">
<li <li v-for="row in localRows" :key="row.label" class="flex items-center justify-between">
v-for="row in localRows"
:key="row.label"
class="flex items-center justify-between"
>
<span class="text-gray-500 dark:text-gray-400">{{ row.label }}</span> <span class="text-gray-500 dark:text-gray-400">{{ row.label }}</span>
<span :class="row.valueClass">{{ row.value }}</span> <span :class="row.valueClass">{{ row.value }}</span>
</li> </li>
@ -163,10 +106,8 @@
</div> </div>
<!-- Mismatch summary after sync --> <!-- Mismatch summary after sync -->
<div <div v-if="isConnected && autoSyncComplete && mismatches.length > 0"
v-if="isConnected && autoSyncComplete && mismatches.length > 0" class="mt-4 rounded-xl bg-red-50 dark:bg-red-900/20 border border-red-100 dark:border-red-800 p-3">
class="mt-4 rounded-xl bg-red-50 dark:bg-red-900/20 border border-red-100 dark:border-red-800 p-3"
>
<p class="text-sm font-bold text-red-800 dark:text-red-300"> <p class="text-sm font-bold text-red-800 dark:text-red-300">
{{ mismatches.length }} Unterschied(e) erkannt {{ mismatches.length }} Unterschied(e) erkannt
</p> </p>
@ -178,16 +119,11 @@
</div> </div>
<!-- Inline enrollment panel --> <!-- Inline enrollment panel -->
<div <div v-if="enrollmentPhase !== 'idle'"
v-if="enrollmentPhase !== 'idle'" class="mt-4 rounded-xl bg-indigo-50 dark:bg-indigo-900/20 border border-indigo-100 dark:border-indigo-800 p-4">
class="mt-4 rounded-xl bg-indigo-50 dark:bg-indigo-900/20 border border-indigo-100 dark:border-indigo-800 p-4"
>
<div class="flex items-center gap-2 mb-3"> <div class="flex items-center gap-2 mb-3">
<UIcon <UIcon name="i-heroicons-arrow-path" class="w-5 h-5 text-indigo-600 dark:text-indigo-400"
name="i-heroicons-arrow-path" :class="{ 'animate-spin': enrollmentPhase === 'loading' || enrollmentPhase === 'checking' }" />
class="w-5 h-5 text-indigo-600 dark:text-indigo-400"
:class="{ 'animate-spin': enrollmentPhase === 'loading' || enrollmentPhase === 'checking' }"
/>
<p class="text-sm font-bold text-indigo-900 dark:text-indigo-200"> <p class="text-sm font-bold text-indigo-900 dark:text-indigo-200">
MDM-Enrollment MDM-Enrollment
</p> </p>
@ -195,24 +131,18 @@
<!-- Progress steps --> <!-- Progress steps -->
<div class="flex items-center gap-2 text-xs mb-4"> <div class="flex items-center gap-2 text-xs mb-4">
<span <span class="px-2 py-1 rounded-full"
class="px-2 py-1 rounded-full" :class="enrollmentPhase === 'loading' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'">
:class="enrollmentPhase === 'loading' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'"
>
1. Profil laden 1. Profil laden
</span> </span>
<span class="text-gray-400"></span> <span class="text-gray-400"></span>
<span <span class="px-2 py-1 rounded-full"
class="px-2 py-1 rounded-full" :class="enrollmentPhase === 'waiting' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : (enrollmentPhase === 'checking' || enrollmentPhase === 'success' || enrollmentPhase === 'error') ? 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300' : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'">
:class="enrollmentPhase === 'waiting' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : (enrollmentPhase === 'checking' || enrollmentPhase === 'success' || enrollmentPhase === 'error') ? 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300' : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'"
>
2. QR-Code scannen 2. QR-Code scannen
</span> </span>
<span class="text-gray-400"></span> <span class="text-gray-400"></span>
<span <span class="px-2 py-1 rounded-full"
class="px-2 py-1 rounded-full" :class="enrollmentPhase === 'checking' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : enrollmentPhase === 'success' ? 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300' : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'">
:class="enrollmentPhase === 'checking' ? 'bg-indigo-200 text-indigo-800 dark:bg-indigo-700 dark:text-indigo-100' : enrollmentPhase === 'success' ? 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300' : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'"
>
3. Prüfen 3. Prüfen
</span> </span>
</div> </div>
@ -225,12 +155,7 @@
<p class="text-xs text-indigo-700 dark:text-indigo-300"> <p class="text-xs text-indigo-700 dark:text-indigo-300">
Scanne den Code mit der iPhone-Kamera und installiere das Profil. Scanne den Code mit der iPhone-Kamera und installiere das Profil.
</p> </p>
<UButton <UButton size="sm" color="primary" :loading="enrollmentPhase === 'checking'" @click="checkInlineEnrollment">
size="sm"
color="primary"
:loading="enrollmentPhase === 'checking'"
@click="checkInlineEnrollment"
>
Installation prüfen Installation prüfen
</UButton> </UButton>
</div> </div>
@ -240,13 +165,8 @@
<div class="text-sm text-green-700 dark:text-green-300"> <div class="text-sm text-green-700 dark:text-green-300">
Enrollment abgeschlossen. Das Gerät synchronisiert sich jetzt mit dem Backend. Enrollment abgeschlossen. Das Gerät synchronisiert sich jetzt mit dem Backend.
</div> </div>
<UButton <UButton size="sm" color="primary" icon="i-heroicons-lock-closed" @click="startInlineLockProfile">
size="sm" Lock-Profil installieren
color="primary"
icon="i-heroicons-lock-closed"
@click="router.push('/sideload')"
>
Weiter zum Lock-Profil
</UButton> </UButton>
</div> </div>
<div v-if="enrollmentPhase === 'error'" class="text-sm text-red-700 dark:text-red-300"> <div v-if="enrollmentPhase === 'error'" class="text-sm text-red-700 dark:text-red-300">
@ -254,53 +174,68 @@
</div> </div>
<!-- Logs --> <!-- Logs -->
<div v-if="enrollmentLogs.length > 0" class="mt-3 text-xs bg-white/60 dark:bg-black/20 p-2 rounded overflow-auto max-h-32"> <div v-if="enrollmentLogs.length > 0"
class="mt-3 text-xs bg-white/60 dark:bg-black/20 p-2 rounded overflow-auto max-h-32">
<pre class="whitespace-pre-wrap">{{ enrollmentLogs.join('\n') }}</pre> <pre class="whitespace-pre-wrap">{{ enrollmentLogs.join('\n') }}</pre>
</div> </div>
<div class="mt-3 flex justify-end"> <div class="mt-3 flex justify-end">
<UButton <UButton size="xs" color="neutral" variant="ghost" @click="closeInlineEnrollment">
size="xs" Schließen
color="neutral" </UButton>
variant="ghost" </div>
@click="closeInlineEnrollment" </div>
>
<!-- Inline lock profile panel -->
<div
v-if="lockPhase !== 'idle'"
class="mt-4 rounded-xl bg-purple-50 dark:bg-purple-900/20 border border-purple-100 dark:border-purple-800 p-4"
>
<div class="flex items-center gap-2 mb-3">
<UIcon
name="i-heroicons-lock-closed"
class="w-5 h-5 text-purple-600 dark:text-purple-400"
:class="{ 'animate-spin': lockPhase === 'loading' }"
/>
<p class="text-sm font-bold text-purple-900 dark:text-purple-200">
Lock-Profil
</p>
</div>
<div v-if="lockPhase === 'loading'" class="text-sm text-purple-700 dark:text-purple-300">
Lock-Profil wird per MDM auf das iPhone gepusht
</div>
<div v-if="lockPhase === 'success'" class="text-sm text-green-700 dark:text-green-300">
Lock-Profil-Installation initiiert. Das Gerät aktualisiert den Schutz in Kürze.
</div>
<div v-if="lockPhase === 'error'" class="text-sm text-red-700 dark:text-red-300">
{{ lockError || "Lock-Profil-Installation fehlgeschlagen" }}
</div>
<div v-if="lockLogs.length > 0" class="mt-3 text-xs bg-white/60 dark:bg-black/20 p-2 rounded overflow-auto max-h-32">
<pre class="whitespace-pre-wrap">{{ lockLogs.join('\n') }}</pre>
</div>
<div class="mt-3 flex justify-end">
<UButton size="xs" color="neutral" variant="ghost" @click="closeInlineLockProfile">
Schließen Schließen
</UButton> </UButton>
</div> </div>
</div> </div>
<div class="mt-4 flex items-center gap-3"> <div class="mt-4 flex items-center gap-3">
<UButton <UButton v-if="action.to" :color="action.color" :variant="action.variant" size="sm" :icon="action.icon"
v-if="action.to" :to="action.to">
:color="action.color"
:variant="action.variant"
size="sm"
:icon="action.icon"
:to="action.to"
>
{{ action.label }} {{ action.label }}
</UButton> </UButton>
<UButton <UButton v-else :color="action.color" :variant="action.variant" size="sm" :icon="action.icon"
v-else :loading="manualSyncing || autoSyncing || isSearching" :disabled="autoSyncing || isSearching"
:color="action.color" @click="onActionClick">
:variant="action.variant"
size="sm"
:icon="action.icon"
:loading="manualSyncing || autoSyncing || isSearching"
:disabled="autoSyncing || isSearching"
@click="onActionClick"
>
{{ action.label }} {{ action.label }}
</UButton> </UButton>
<UButton <UButton color="neutral" variant="ghost" size="sm" trailing-icon="i-heroicons-chevron-right"
color="neutral" @click="emit('open', device)">
variant="ghost"
size="sm"
trailing-icon="i-heroicons-chevron-right"
@click="emit('open', device)"
>
Details Details
</UButton> </UButton>
</div> </div>
@ -311,7 +246,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, ref, watch } from "vue"; import { computed, onMounted, ref, watch } from "vue";
import { useRouter } from "vue-router";
import QRCode from "qrcode"; import QRCode from "qrcode";
import type { ComputedDevice, DeviceStatus } from "~/composables/useDeviceStatus"; import type { ComputedDevice, DeviceStatus } from "~/composables/useDeviceStatus";
import { useMdmStatus } from "~/composables/useMdmStatus"; import { useMdmStatus } from "~/composables/useMdmStatus";
@ -327,7 +261,6 @@ const props = defineProps<{
const deviceIdRef = computed(() => props.device.deviceId); const deviceIdRef = computed(() => props.device.deviceId);
const { state: mdmState, refresh: refreshMdmStatus } = useMdmStatus(deviceIdRef); const { state: mdmState, refresh: refreshMdmStatus } = useMdmStatus(deviceIdRef);
const router = useRouter();
const emit = defineEmits<{ const emit = defineEmits<{
(e: "sync", device: ComputedDevice): void; (e: "sync", device: ComputedDevice): void;
@ -350,6 +283,7 @@ const {
stopLocalProfileServer, stopLocalProfileServer,
getInstalledProfiles, getInstalledProfiles,
mdmPush, mdmPush,
mdmInstallLockProfile,
} = useTauri(); } = useTauri();
const enrollmentPhase = ref<"idle" | "loading" | "waiting" | "checking" | "success" | "error">("idle"); const enrollmentPhase = ref<"idle" | "loading" | "waiting" | "checking" | "success" | "error">("idle");
@ -358,6 +292,12 @@ const enrollmentQrUrl = ref<string>("");
const enrollmentError = ref<string | null>(null); const enrollmentError = ref<string | null>(null);
const enrollmentLogs = ref<string[]>([]); const enrollmentLogs = ref<string[]>([]);
const lockPhase = ref<"idle" | "loading" | "success" | "error">("idle");
const lockError = ref<string | null>(null);
const lockLogs = ref<string[]>([]);
const LOCK_PROFILE_PATH = "/Users/chahinebrini/mono/rebreak-monorepo/ops/mdm/profiles/rebreak-content-filter-sideload.mobileconfig";
const localEnrollment = computed(() => const localEnrollment = computed(() =>
props.iphone?.installedProfileIDs?.includes(ENROLLMENT_PROFILE_ID) ?? false, props.iphone?.installedProfileIDs?.includes(ENROLLMENT_PROFILE_ID) ?? false,
); );
@ -373,7 +313,7 @@ const backendRows = computed(() => {
return [ return [
{ {
label: "Enrollment", label: "Enrollment",
value: data?.enrolled ? "Ja" : "Nein", value: data?.enrolled ? "Ja" : "Nein",
valueClass: data?.enrolled valueClass: data?.enrolled
? "text-green-600 dark:text-green-400 font-medium" ? "text-green-600 dark:text-green-400 font-medium"
: "text-red-600 dark:text-red-400 font-medium", : "text-red-600 dark:text-red-400 font-medium",
@ -598,6 +538,15 @@ const action = computed<IosAction>(() => {
}; };
} }
if (lockPhase.value !== "idle") {
return {
label: "Lock-Profil wird installiert…",
icon: "i-heroicons-arrow-path",
color: "neutral",
variant: "soft",
};
}
if (!props.isConnected || !props.iphone) { if (!props.isConnected || !props.iphone) {
return { return {
label: "iPhone verbinden, um ReBreak Cloud zu synchronisieren", label: "iPhone verbinden, um ReBreak Cloud zu synchronisieren",
@ -654,7 +603,6 @@ const action = computed<IosAction>(() => {
icon: "i-heroicons-lock-closed", icon: "i-heroicons-lock-closed",
color: "warning", color: "warning",
variant: "solid", variant: "solid",
to: "/sideload",
}; };
} }
@ -760,6 +708,11 @@ function onActionClick() {
return; return;
} }
if (localEnrollment.value && !localLock.value) {
startInlineLockProfile();
return;
}
manualSyncing.value = true; manualSyncing.value = true;
emit("sync", props.device); emit("sync", props.device);
setTimeout(() => { setTimeout(() => {
@ -842,4 +795,31 @@ function closeInlineEnrollment() {
enrollmentQrUrl.value = ""; enrollmentQrUrl.value = "";
enrollmentError.value = null; enrollmentError.value = null;
} }
async function startInlineLockProfile() {
if (!props.iphone?.udid) return;
lockPhase.value = "loading";
lockError.value = null;
lockLogs.value = [];
try {
lockLogs.value.push("→ Installiere Lock-Profil per MDM …");
const result = await mdmInstallLockProfile(props.iphone.udid, LOCK_PROFILE_PATH);
lockLogs.value.push(`✓ Command UUID: ${result.command_uuid}`);
await refreshMdmStatus();
lockPhase.value = "success";
} catch (e: any) {
lockError.value = e?.message ?? "Lock-Profil-Installation fehlgeschlagen";
lockLogs.value.push(`${lockError.value}`);
lockPhase.value = "error";
}
}
function closeInlineLockProfile() {
lockPhase.value = "idle";
lockError.value = null;
lockLogs.value = [];
}
</script> </script>

View File

@ -2846,6 +2846,7 @@ dependencies = [
"dirs 5.0.1", "dirs 5.0.1",
"keyring", "keyring",
"local-ip-address", "local-ip-address",
"plist",
"reqwest 0.12.28", "reqwest 0.12.28",
"serde", "serde",
"serde_json", "serde_json",

View File

@ -28,6 +28,7 @@ uuid = { version = "1", features = ["v4"] }
base64 = "0.22" base64 = "0.22"
dirs = "5" dirs = "5"
tiny_http = "0.12" tiny_http = "0.12"
plist = "1"
local-ip-address = "0.6" local-ip-address = "0.6"
# Pin brotli family to avoid alloc-no-stdlib version conflict # Pin brotli family to avoid alloc-no-stdlib version conflict
brotli-decompressor = "=5.0.1" brotli-decompressor = "=5.0.1"

View File

@ -113,13 +113,13 @@ impl MdmClient {
"Command": command, "Command": command,
}); });
// NanoMDM expects plist, but also accepts JSON in newer versions. // NanoMDM expects plist XML, not JSON. Serialize to plist XML.
// For maximum compatibility we send JSON here; if it fails, the caller let plist_body = json_to_plist_xml(&envelope)?;
// will see the error.
let resp = self let resp = self
.request(reqwest::Method::PUT, &format!("/v1/enqueue/{}?push=1", udid))? .request(reqwest::Method::PUT, &format!("/v1/enqueue/{}?push=1", udid))?
.header("Content-Type", "application/json") .header("Content-Type", "application/xml")
.json(&envelope) .body(plist_body)
.send() .send()
.await .await
.map_err(|e| AppError::new(format!("MDM enqueue failed: {}", e)))?; .map_err(|e| AppError::new(format!("MDM enqueue failed: {}", e)))?;
@ -140,3 +140,44 @@ impl MdmClient {
}) })
} }
} }
fn json_to_plist_xml(value: &serde_json::Value) -> AppResult<String> {
let plist_value = json_value_to_plist(value)?;
let mut buf = Vec::new();
plist::Value::from(plist_value)
.to_writer_xml(&mut buf)
.map_err(|e| AppError::new(format!("plist serialize failed: {}", e)))?;
String::from_utf8(buf).map_err(|e| AppError::new(format!("plist utf8 failed: {}", e)))
}
fn json_value_to_plist(value: &serde_json::Value) -> AppResult<plist::Value> {
use plist::Value as Pv;
match value {
serde_json::Value::Null => Ok(Pv::String(String::new())),
serde_json::Value::Bool(b) => Ok(Pv::Boolean(*b)),
serde_json::Value::Number(n) => {
if let Some(i) = n.as_i64() {
Ok(Pv::Integer(i.into()))
} else if let Some(f) = n.as_f64() {
Ok(Pv::Real(f))
} else {
Err(AppError::new("unsupported json number".to_string()))
}
}
serde_json::Value::String(s) => Ok(Pv::String(s.clone())),
serde_json::Value::Array(arr) => {
let mut out = Vec::new();
for item in arr {
out.push(json_value_to_plist(item)?);
}
Ok(Pv::Array(out.into()))
}
serde_json::Value::Object(map) => {
let mut out = plist::Dictionary::new();
for (k, v) in map {
out.insert(k.clone(), json_value_to_plist(v)?);
}
Ok(Pv::Dictionary(out))
}
}
}

View File

@ -1,16 +1,16 @@
# Graph Report - rebreak-monorepo (2026-06-18) # Graph Report - rebreak-monorepo (2026-06-18)
## Corpus Check ## Corpus Check
- 1524 files · ~1,868,449 words - 1494 files · ~1,764,972 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## Summary
- 18223 nodes · 25853 edges · 1317 communities (1252 shown, 65 thin omitted) - 18224 nodes · 25854 edges · 1327 communities (1262 shown, 65 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 200 edges (avg confidence: 0.81) - Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 200 edges (avg confidence: 0.81)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `da4a94da` - Built from commit: `681356f0`
- Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost). - Run `graphify update .` after code changes (no API cost).
@ -1131,17 +1131,25 @@
- [[_COMMUNITY_Community 1240|Community 1240]] - [[_COMMUNITY_Community 1240|Community 1240]]
- [[_COMMUNITY_Community 1241|Community 1241]] - [[_COMMUNITY_Community 1241|Community 1241]]
- [[_COMMUNITY_Community 1242|Community 1242]] - [[_COMMUNITY_Community 1242|Community 1242]]
- [[_COMMUNITY_Community 1243|Community 1243]]
- [[_COMMUNITY_Community 1244|Community 1244]] - [[_COMMUNITY_Community 1244|Community 1244]]
- [[_COMMUNITY_Community 1245|Community 1245]] - [[_COMMUNITY_Community 1245|Community 1245]]
- [[_COMMUNITY_Community 1246|Community 1246]]
- [[_COMMUNITY_Community 1247|Community 1247]] - [[_COMMUNITY_Community 1247|Community 1247]]
- [[_COMMUNITY_Community 1248|Community 1248]] - [[_COMMUNITY_Community 1248|Community 1248]]
- [[_COMMUNITY_Community 1249|Community 1249]] - [[_COMMUNITY_Community 1249|Community 1249]]
- [[_COMMUNITY_Community 1250|Community 1250]] - [[_COMMUNITY_Community 1250|Community 1250]]
- [[_COMMUNITY_Community 1251|Community 1251]] - [[_COMMUNITY_Community 1251|Community 1251]]
- [[_COMMUNITY_Community 1252|Community 1252]]
- [[_COMMUNITY_Community 1253|Community 1253]] - [[_COMMUNITY_Community 1253|Community 1253]]
- [[_COMMUNITY_Community 1254|Community 1254]] - [[_COMMUNITY_Community 1254|Community 1254]]
- [[_COMMUNITY_Community 1255|Community 1255]] - [[_COMMUNITY_Community 1255|Community 1255]]
- [[_COMMUNITY_Community 1256|Community 1256]]
- [[_COMMUNITY_Community 1257|Community 1257]]
- [[_COMMUNITY_Community 1258|Community 1258]]
- [[_COMMUNITY_Community 1259|Community 1259]]
- [[_COMMUNITY_Community 1260|Community 1260]] - [[_COMMUNITY_Community 1260|Community 1260]]
- [[_COMMUNITY_Community 1261|Community 1261]]
- [[_COMMUNITY_Community 1262|Community 1262]] - [[_COMMUNITY_Community 1262|Community 1262]]
- [[_COMMUNITY_Community 1263|Community 1263]] - [[_COMMUNITY_Community 1263|Community 1263]]
- [[_COMMUNITY_Community 1264|Community 1264]] - [[_COMMUNITY_Community 1264|Community 1264]]
@ -1152,6 +1160,7 @@
- [[_COMMUNITY_Community 1269|Community 1269]] - [[_COMMUNITY_Community 1269|Community 1269]]
- [[_COMMUNITY_Community 1270|Community 1270]] - [[_COMMUNITY_Community 1270|Community 1270]]
- [[_COMMUNITY_Community 1271|Community 1271]] - [[_COMMUNITY_Community 1271|Community 1271]]
- [[_COMMUNITY_Community 1272|Community 1272]]
- [[_COMMUNITY_Community 1273|Community 1273]] - [[_COMMUNITY_Community 1273|Community 1273]]
- [[_COMMUNITY_Community 1274|Community 1274]] - [[_COMMUNITY_Community 1274|Community 1274]]
- [[_COMMUNITY_Community 1275|Community 1275]] - [[_COMMUNITY_Community 1275|Community 1275]]
@ -1169,6 +1178,7 @@
- [[_COMMUNITY_Community 1287|Community 1287]] - [[_COMMUNITY_Community 1287|Community 1287]]
- [[_COMMUNITY_Community 1288|Community 1288]] - [[_COMMUNITY_Community 1288|Community 1288]]
- [[_COMMUNITY_Community 1289|Community 1289]] - [[_COMMUNITY_Community 1289|Community 1289]]
- [[_COMMUNITY_Community 1290|Community 1290]]
- [[_COMMUNITY_Community 1291|Community 1291]] - [[_COMMUNITY_Community 1291|Community 1291]]
- [[_COMMUNITY_Community 1293|Community 1293]] - [[_COMMUNITY_Community 1293|Community 1293]]
- [[_COMMUNITY_Community 1294|Community 1294]] - [[_COMMUNITY_Community 1294|Community 1294]]
@ -1202,14 +1212,14 @@
## Surprising Connections (you probably didn't know these) ## Surprising Connections (you probably didn't know these)
- `Lyra Modi (SOS-Crisis-Mode / Coach-Casual-Mode)` --semantically_similar_to--> `REQ-LYRA Lyra KI-Coach & Krisen-Behandlung (höchste Sicherheitsrelevanz)` [INFERRED] [semantically similar] - `Lyra Modi (SOS-Crisis-Mode / Coach-Casual-Mode)` --semantically_similar_to--> `REQ-LYRA Lyra KI-Coach & Krisen-Behandlung (höchste Sicherheitsrelevanz)` [INFERRED] [semantically similar]
ops/LYRA_PERSONA.md → docs/specs/diga/03-requirements-v0.md ops/LYRA_PERSONA.md → docs/specs/diga/03-requirements-v0.md
- `getCrisisFallback()` --implements--> `SAFETY-REQ-LLM-001 Krisenreferenz-Pflicht (Recall 100%)` [INFERRED]
backend/server/utils/crisis-filter.ts → docs/specs/diga/05c-lyra-eval-v0.md
- `findActiveDeviceLock()` --implements--> `REQ-MAGIC Selbstbindung (RebreakMagic Lock-Modus, 24h-Cooldown)` [INFERRED] - `findActiveDeviceLock()` --implements--> `REQ-MAGIC Selbstbindung (RebreakMagic Lock-Modus, 24h-Cooldown)` [INFERRED]
backend/server/db/devices.ts → docs/specs/diga/03-requirements-v0.md backend/server/db/devices.ts → docs/specs/diga/03-requirements-v0.md
- `requestDeviceRelease()` --references--> `R-BYP-03 Selbstbindung wird zur Falle (legitimer Ausstieg scheitert)` [INFERRED] - `requestDeviceRelease()` --references--> `R-BYP-03 Selbstbindung wird zur Falle (legitimer Ausstieg scheitert)` [INFERRED]
backend/server/db/devices.ts → docs/specs/diga/04-risiko-akte-v0.md backend/server/db/devices.ts → docs/specs/diga/04-risiko-akte-v0.md
- `addStreakEvent()` --implements--> `protection_state_log (append-only Schutz-Transitions-Log)` [INFERRED] - `addStreakEvent()` --implements--> `protection_state_log (append-only Schutz-Transitions-Log)` [INFERRED]
backend/server/db/streak.ts → docs/specs/protection-coverage-streak.md backend/server/db/streak.ts → docs/specs/protection-coverage-streak.md
- `CoachScreen()` --implements--> `REQ-LYRA Lyra KI-Coach & Krisen-Behandlung (höchste Sicherheitsrelevanz)` [INFERRED]
apps/rebreak-native/app/lyra.tsx → docs/specs/diga/03-requirements-v0.md
## Import Cycles ## Import Cycles
- 1-file cycle: `apps/rebreak-magic/src-tauri/src/backend/api.rs -> apps/rebreak-magic/src-tauri/src/backend/api.rs` - 1-file cycle: `apps/rebreak-magic/src-tauri/src/backend/api.rs -> apps/rebreak-magic/src-tauri/src/backend/api.rs`
@ -1236,7 +1246,7 @@
- **IEC-62304-Traceability (Anforderung→Risikomaßnahme→Test→Lyra-Eval)** — diga_03_req_lyra, diga_04_risk_lyra_01_verpasste_krise, diga_05b_test_verifikation, diga_05c_crisis_detection_recall [EXTRACTED 0.95] - **IEC-62304-Traceability (Anforderung→Risikomaßnahme→Test→Lyra-Eval)** — diga_03_req_lyra, diga_04_risk_lyra_01_verpasste_krise, diga_05b_test_verifikation, diga_05c_crisis_detection_recall [EXTRACTED 0.95]
- **FAGS/NLS Förder- & Partnerschafts-Strategie (Träger, Forschung, Geldgeber)** — entity_fags, entity_nls, entity_nbank, entity_uni_bremen, entity_step_lukaswerk, entity_bfarm [EXTRACTED 0.85] - **FAGS/NLS Förder- & Partnerschafts-Strategie (Träger, Forschung, Geldgeber)** — entity_fags, entity_nls, entity_nbank, entity_uni_bremen, entity_step_lukaswerk, entity_bfarm [EXTRACTED 0.85]
## Communities (1317 total, 65 thin omitted) ## Communities (1327 total, 65 thin omitted)
### Community 0 - "i18n: Blocker/Activation Strings" ### Community 0 - "i18n: Blocker/Activation Strings"
Cohesion: 0.01 Cohesion: 0.01
@ -1255,8 +1265,8 @@ Cohesion: 0.01
Nodes (206): blocker, activate_app_lock_failed_msg, activate_app_lock_failed_title, activate_settings_btn, activate_url_failed_msg, activate_url_failed_title, activation_failed_title, add_domain (+198 more) Nodes (206): blocker, activate_app_lock_failed_msg, activate_app_lock_failed_title, activate_settings_btn, activate_url_failed_msg, activate_url_failed_title, activation_failed_title, add_domain (+198 more)
### Community 4 - "Debug & Dev Tools" ### Community 4 - "Debug & Dev Tools"
Cohesion: 0.04 Cohesion: 0.06
Nodes (56): DmConversation, ALLOWED_EMOJIS, createChatMessage(), DmConversationRow, getChatMessages(), getDmConversations(), getDmHistory(), markDmsAsRead() (+48 more) Nodes (32): countPostLikes(), createComment(), createCommentLike(), deleteCommentLike(), deletePostLike(), getCommentLike(), getCommentLikeCount(), getCommentsByPost() (+24 more)
### Community 5 - "Backend API Routes" ### Community 5 - "Backend API Routes"
Cohesion: 0.07 Cohesion: 0.07
@ -1264,19 +1274,19 @@ Nodes (27): ScoreProgressBar(), ScoreProgressBarProps, useSnakeSounds(), checkWi
### Community 6 - "Backend Tests & Auth Routes" ### Community 6 - "Backend Tests & Auth Routes"
Cohesion: 0.04 Cohesion: 0.04
Nodes (77): getConsentLogsByUser(), getMailConnectionWithConsent(), setMailConnectionConsent(), writeConsentGrant(), writeConsentRevoke(), getBlocklistedDomainsSet(), consumeOauthPendingState(), countMailConnections() (+69 more) Nodes (77): getConsentLogsByUser(), getMailConnectionWithConsent(), setMailConnectionConsent(), writeConsentGrant(), getBlocklistedDomainsSet(), getCustomMailDisplayNames(), getMailDisplayNamePatterns(), consumeOauthPendingState() (+69 more)
### Community 7 - "Consent & Magic API Routes" ### Community 7 - "Consent & Magic API Routes"
Cohesion: 0.05 Cohesion: 0.04
Nodes (58): CooldownTestModeToggle(), DebugScreen(), DebugStub(), LogLine(), LyraEmotionPreviewCard(), ONBOARDING_STEPS, OnboardingStepValue, pad() (+50 more) Nodes (86): DevicesScreen(), formatCountdown(), formatLastSeen(), formatSince(), MobileDeviceRow(), mobileIcon(), SectionCard(), SectionLabel() (+78 more)
### Community 8 - "i18n: Pricing Strings" ### Community 8 - "i18n: Pricing Strings"
Cohesion: 0.04 Cohesion: 0.09
Nodes (84): ChatScreen(), DmItem(), formatTime(), makeStyles(), FilterChip, HomeScreen(), PickerOption, PLAN_ACCENT (+76 more) Nodes (41): ChatScreen(), DmItem(), formatTime(), makeStyles(), FilterChip, HomeScreen(), ComposeCard(), Props (+33 more)
### Community 9 - "Android DNS Filter (Kotlin)" ### Community 9 - "Android DNS Filter (Kotlin)"
Cohesion: 0.12 Cohesion: 0.23
Nodes (25): cancelCooldown(), createCooldown(), getActiveCooldown(), resolveCooldown(), appendProtectionEvent(), appendProtectionEventDeduped(), computeProtectionCoverage(), getLastProtectionEvent() (+17 more) Nodes (14): appendProtectionEvent(), appendProtectionEventDeduped(), computeProtectionCoverage(), getLastProtectionEvent(), ProtectionCoverage, ProtectionSource, utcDayStart(), Server-time-authoritativer Cooldown (Uhr-Manipulation-Schutz) (+6 more)
### Community 10 - "i18n: Pricing Strings" ### Community 10 - "i18n: Pricing Strings"
Cohesion: 0.16 Cohesion: 0.16
@ -1299,36 +1309,36 @@ Cohesion: 0.02
Nodes (88): landing, blocker_badge, blocker_desc, blocker_feat_cooldown, blocker_feat_custom, blocker_feat_platforms, blocker_feat_updated, blocker_title_activated (+80 more) Nodes (88): landing, blocker_badge, blocker_desc, blocker_feat_cooldown, blocker_feat_custom, blocker_feat_platforms, blocker_feat_updated, blocker_title_activated (+80 more)
### Community 15 - "Mail Protection Screen" ### Community 15 - "Mail Protection Screen"
Cohesion: 0.06 Cohesion: 0.08
Nodes (106): core, core:app, default_permission, global_scope_schema, permission_sets, default_permission, default_permission, global_scope_schema (+98 more) Nodes (87): allow, deny, core, core:app, default_permission, core:event, global_scope_schema, core:image (+79 more)
### Community 16 - "Devices Management Screen" ### Community 16 - "Devices Management Screen"
Cohesion: 0.02 Cohesion: 0.02
Nodes (87): landing, blocker_badge, blocker_desc, blocker_feat_cooldown, blocker_feat_custom, blocker_feat_platforms, blocker_feat_updated, blocker_title_activated (+79 more) Nodes (87): landing, blocker_badge, blocker_desc, blocker_feat_cooldown, blocker_feat_custom, blocker_feat_platforms, blocker_feat_updated, blocker_title_activated (+79 more)
### Community 17 - "App Root Layout & Shell" ### Community 17 - "App Root Layout & Shell"
Cohesion: 0.05 Cohesion: 0.07
Nodes (52): DmData, DmHistoryResponse, DmScreen(), makeStyles(), MediaLibraryModule, CoachScreen(), LoadingPulse(), MessageWithMeta (+44 more) Nodes (42): DmData, DmHistoryResponse, DmScreen(), makeStyles(), MediaLibraryModule, CoachScreen(), formatTimestamp(), LoadingPulse() (+34 more)
### Community 18 - "Community 18" ### Community 18 - "Community 18"
Cohesion: 0.08 Cohesion: 0.08
Nodes (50): LayerSwitchCard(), Props, AndroidSetupFlow(), IosUnsupervisedSetupFlow(), Emotion, invalidateMe(), OnboardingStep, apiUrl (+42 more) Nodes (49): LayerSwitchCard(), Props, AndroidSetupFlow(), IosUnsupervisedSetupFlow(), invalidateMe(), listeners, Me, OnboardingStep (+41 more)
### Community 19 - "Community 19" ### Community 19 - "Community 19"
Cohesion: 0.02 Cohesion: 0.02
Nodes (82): auth, acceptTerms, acceptTermsSuffix, alreadyRegistered, appleSignin, appleSignup, backToLogin, backToLoginPlain (+74 more) Nodes (82): auth, acceptTerms, acceptTermsSuffix, alreadyRegistered, appleSignin, appleSignup, backToLogin, backToLoginPlain (+74 more)
### Community 20 - "Community 20" ### Community 20 - "Community 20"
Cohesion: 0.03 Cohesion: 0.05
Nodes (86): CallScreen(), fmtDuration(), EASE_OUT, LandingScreen(), queryClient, RootLayoutInner(), SettingsScreen(), AuthCallback() (+78 more) Nodes (62): EASE_OUT, LandingScreen(), queryClient, RootLayoutInner(), SettingsScreen(), ConfirmOtpScreen(), OTP_INPUT_STYLE, OTP_INPUT_STYLE (+54 more)
### Community 21 - "Community 21" ### Community 21 - "Community 21"
Cohesion: 0.05 Cohesion: 0.07
Nodes (79): MailScreen(), PLAN_LABEL, SuggestResult, SuggestState, useCuratedSuggest(), ping(), useLastSeenHeartbeat(), useMailDisconnect() (+71 more) Nodes (49): MailScreen(), PLAN_LABEL, useMailDisconnect(), UseMailDisconnectReturn, MailBlockedItem, MailResultsResponse, useMailResults(), aggregateToMonths() (+41 more)
### Community 22 - "Community 22" ### Community 22 - "Community 22"
Cohesion: 0.05 Cohesion: 0.07
Nodes (75): BlockerScreen(), AddDomainSheet(), detectKind(), mailDomain(), PreviewCard(), Props, CooldownBanner(), Props (+67 more) Nodes (61): BlockerScreen(), AddDomainSheet(), detectKind(), mailDomain(), PreviewCard(), Props, CooldownBanner(), Props (+53 more)
### Community 23 - "Community 23" ### Community 23 - "Community 23"
Cohesion: 0.03 Cohesion: 0.03
@ -1367,16 +1377,16 @@ Cohesion: 0.18
Nodes (16): Config: AdGuard DoH Vars (ADGUARD_BASE_URL/USER/PASSWORD), Config: ENCRYPTION_KEY (AES-256 for DB fields incl mdmDnsToken), Config: GROQ_API_KEY LLM Provider Var, Config: Infisical Secret Injection (no .env files), Backend Environment Variables Doc, RebreakMagic Device-Binding API Documentation, AdGuard Integration: /control/clients/add Persistent Client, Endpoint: POST /api/magic/devices/:deviceId/cancel-release (+8 more) Nodes (16): Config: AdGuard DoH Vars (ADGUARD_BASE_URL/USER/PASSWORD), Config: ENCRYPTION_KEY (AES-256 for DB fields incl mdmDnsToken), Config: GROQ_API_KEY LLM Provider Var, Config: Infisical Secret Injection (no .env files), Backend Environment Variables Doc, RebreakMagic Device-Binding API Documentation, AdGuard Integration: /control/clients/add Persistent Client, Endpoint: POST /api/magic/devices/:deviceId/cancel-release (+8 more)
### Community 32 - "Community 32" ### Community 32 - "Community 32"
Cohesion: 0.09 Cohesion: 0.06
Nodes (26): autoReleaseInactiveDevices(), bindDeviceToUser(), cancelDeviceRelease(), cleanupStaleDevices(), deleteUserDevice(), DEVICE_SELECT, DeviceRecord, ensureMagicRemovalPassword() (+18 more) Nodes (39): autoReleaseInactiveDevices(), bindDeviceToUser(), cancelDeviceRelease(), countActiveMagicBindings(), deleteUserDevice(), DEVICE_SELECT, DeviceRecord, ensureMagicRemovalPassword() (+31 more)
### Community 33 - "Community 33" ### Community 33 - "Community 33"
Cohesion: 0.05 Cohesion: 0.05
Nodes (45): prismaMock, requireUserMock, isAdminUser(), touchDevice(), ALLOWED_LYRA_VOICE_IDS, DemographicsFields, DemographicsPatch, dismissDigaBanner() (+37 more) Nodes (47): prismaMock, requireUserMock, isAdminUser(), findUserDevice(), registerDevice(), touchDevice(), ALLOWED_LYRA_VOICE_IDS, DemographicsFields (+39 more)
### Community 34 - "Community 34" ### Community 34 - "Community 34"
Cohesion: 0.05 Cohesion: 0.06
Nodes (79): arcPath(), HalfDonut(), HalfDonutSegment, polar(), Props, DemographicsResp, DiGaMilestoneModal(), MILESTONES (+71 more) Nodes (62): DemographicsResp, DiGaMilestoneModal(), MILESTONES, storageKey(), ApprovedDomainsData, BackendCooldownEntry, CooldownHistoryData, Demographics (+54 more)
### Community 35 - "Community 35" ### Community 35 - "Community 35"
Cohesion: 0.06 Cohesion: 0.06
@ -1387,16 +1397,16 @@ Cohesion: 0.08
Nodes (44): Option, PathBuf, Result, String, Duration, Error, Option, ProtectionState (+36 more) Nodes (44): Option, PathBuf, Result, String, Duration, Error, Option, ProtectionState (+36 more)
### Community 37 - "Community 37" ### Community 37 - "Community 37"
Cohesion: 0.08 Cohesion: 0.05
Nodes (35): DevicesScreen(), formatCountdown(), formatLastSeen(), formatSince(), MobileDeviceRow(), mobileIcon(), protectedDeviceIcon(), SectionCard() (+27 more) Nodes (45): CallScreen(), fmtDuration(), makeModalStyles(), makeStyles(), RoomDetail, RoomScreen(), RoomSettingsModal(), AuthCallback() (+37 more)
### Community 38 - "Community 38" ### Community 38 - "Community 38"
Cohesion: 0.05 Cohesion: 0.05
Nodes (46): commands, description, identifier, commands, description, identifier, commands, description (+38 more) Nodes (46): commands, description, identifier, commands, description, identifier, commands, description (+38 more)
### Community 39 - "Community 39" ### Community 39 - "Community 39"
Cohesion: 0.06 Cohesion: 0.08
Nodes (32): prismaMock, ResolveResult, CustomDomainType, countUnreadDms(), addUserCustomDomain(), adminApproveSubmission(), adminRejectSubmission(), castDomainVote() (+24 more) Nodes (23): prismaMock, adminApproveSubmission(), adminRejectSubmission(), castDomainVote(), countActiveCustomDomains(), countActiveCustomDomainsSplit(), deleteUserCustomDomain(), getActiveBlocklistCount() (+15 more)
### Community 40 - "Community 40" ### Community 40 - "Community 40"
Cohesion: 0.08 Cohesion: 0.08
@ -1416,7 +1426,7 @@ Nodes (26): appHeader, appName, editProfile, signOut, sosLabel, sosSubtitle, sos
### Community 44 - "Community 44" ### Community 44 - "Community 44"
Cohesion: 0.05 Cohesion: 0.05
Nodes (46): commands, description, identifier, commands, description, identifier, commands, description (+38 more) Nodes (40): commands, description, identifier, commands, description, identifier, commands, description (+32 more)
### Community 45 - "Community 45" ### Community 45 - "Community 45"
Cohesion: 0.08 Cohesion: 0.08
@ -1427,8 +1437,8 @@ Cohesion: 0.08
Nodes (33): Any, Bool, ExpoReactNativeFactoryDelegate, NSUserActivity, RCTBridge, RCTReactNativeFactory, String, UIApplication (+25 more) Nodes (33): Any, Bool, ExpoReactNativeFactoryDelegate, NSUserActivity, RCTBridge, RCTReactNativeFactory, String, UIApplication (+25 more)
### Community 47 - "Community 47" ### Community 47 - "Community 47"
Cohesion: 0.06 Cohesion: 0.04
Nodes (34): deleteUserPosts(), listMagicRemovalCredentials(), MagicRemovalCredential, deleteAllUserCustomDomains(), deleteUserMailClassificationSamples(), deleteProfile(), createSosSession(), deleteUserSosSessions() (+26 more) Nodes (49): deleteUserPosts(), writeConsentRevoke(), cancelCooldown(), createCooldown(), getActiveCooldown(), resolveCooldown(), redeemDigaCode(), RedeemResult (+41 more)
### Community 48 - "Community 48" ### Community 48 - "Community 48"
Cohesion: 0.27 Cohesion: 0.27
@ -1439,8 +1449,8 @@ Cohesion: 0.04
Nodes (45): commands, description, identifier, commands, description, identifier, commands, description (+37 more) Nodes (45): commands, description, identifier, commands, description, identifier, commands, description (+37 more)
### Community 50 - "Community 50" ### Community 50 - "Community 50"
Cohesion: 0.07 Cohesion: 0.11
Nodes (19): ContentView, Bool, String, String, Binding, Bool, String, DeviceState (+11 more) Nodes (13): ContentView, Bool, String, String, Binding, Bool, String, ContentView (+5 more)
### Community 51 - "Community 51" ### Community 51 - "Community 51"
Cohesion: 0.05 Cohesion: 0.05
@ -1451,8 +1461,8 @@ Cohesion: 0.07
Nodes (38): pnpm-workspace.yaml (apps/*, backend), DiGA-Listung (BfArM) Pfad, Landesfachstelle Glücksspielsucht Niedersachsen (LSG-Nds), MHH AG Verhaltenssüchte (Prof. Astrid Müller), NBank LOI förderstrategie, FAGS-Outreach-Paket Rebreak Beta + NBank-LOIs, Fachverband Glücksspielsucht e.V. (FAGS), Bielefeld, MDM-Lock Add-On (3-5€ on top auf Pro/Legend) (+30 more) Nodes (38): pnpm-workspace.yaml (apps/*, backend), DiGA-Listung (BfArM) Pfad, Landesfachstelle Glücksspielsucht Niedersachsen (LSG-Nds), MHH AG Verhaltenssüchte (Prof. Astrid Müller), NBank LOI förderstrategie, FAGS-Outreach-Paket Rebreak Beta + NBank-LOIs, Fachverband Glücksspielsucht e.V. (FAGS), Bielefeld, MDM-Lock Add-On (3-5€ on top auf Pro/Legend) (+30 more)
### Community 53 - "Community 53" ### Community 53 - "Community 53"
Cohesion: 0.05 Cohesion: 0.04
Nodes (66): CoachTabRedirect(), MailOAuthCallback(), formatCount(), Props, ProtectionLockedCard(), Stat(), CreateRoomSheet(), makeStyles() (+58 more) Nodes (80): CoachTabRedirect(), CooldownTestModeToggle(), DebugScreen(), DebugStub(), LogLine(), LyraEmotionPreviewCard(), ONBOARDING_STEPS, OnboardingStepValue (+72 more)
### Community 54 - "Community 54" ### Community 54 - "Community 54"
Cohesion: 0.19 Cohesion: 0.19
@ -1479,8 +1489,8 @@ Cohesion: 0.29
Nodes (6): buildFiles, buildTargetsCommandComponents, cFileExtensions, cleanCommandsComponents, cppFileExtensions, toolchains Nodes (6): buildFiles, buildTargetsCommandComponents, cFileExtensions, cleanCommandsComponents, cppFileExtensions, toolchains
### Community 60 - "Community 60" ### Community 60 - "Community 60"
Cohesion: 0.13 Cohesion: 0.23
Nodes (26): DiGA/MDR Dossier-Plan & Arbeitsteilung, Kostenlose BfArM-Hersteller-Beratung (Klasse I/IIa-Hebel), Zweckbestimmung / Intended Use v0 (Dok 01), Indikation Glücksspielstörung (ICD-10 F63.0 / ICD-11 6C50), Intended-Use-Claim (Begleitung, kein Therapie-/Diagnose-Ersatz), MDR Rule 11 Klassifizierung (I/IIa, größter Kostenhebel), REQ-MAIL Mail-Schutz (deterministische Trigger-Mail-Entfernung), REQ-SOS Werkzeuge (4-7-8-Atemübung, Ablenkungs-Spiele) (+18 more) Nodes (12): DiGA/MDR Dossier-Plan & Arbeitsteilung, Kostenlose BfArM-Hersteller-Beratung (Klasse I/IIa-Hebel), Zweckbestimmung / Intended Use v0 (Dok 01), Indikation Glücksspielstörung (ICD-10 F63.0 / ICD-11 6C50), Intended-Use-Claim (Begleitung, kein Therapie-/Diagnose-Ersatz), MDR Rule 11 Klassifizierung (I/IIa, größter Kostenhebel), DSFA-Pflicht (Art. 35, auch BfArM-Antrags-Anhang), BfArM (DiGA-Verzeichnis §139e SGB V) (+4 more)
### Community 61 - "Community 61" ### Community 61 - "Community 61"
Cohesion: 0.29 Cohesion: 0.29
@ -1507,16 +1517,16 @@ Cohesion: 0.13
Nodes (4): RebreakProtectionModule, Module, RebreakProtectionModule, RebreakProtectionModuleWeb Nodes (4): RebreakProtectionModule, Module, RebreakProtectionModule, RebreakProtectionModuleWeb
### Community 67 - "Community 67" ### Community 67 - "Community 67"
Cohesion: 0.16 Cohesion: 0.26
Nodes (24): Bool, Date, String, URL, Codable, MagicAPIClient.swift (/api/magic/*), Config, MagicAPIClient (+16 more) Nodes (9): URL, MagicAPIClient, MagicError, configMissing, decodingError, httpError, limitReached, networkError (+1 more)
### Community 68 - "Community 68" ### Community 68 - "Community 68"
Cohesion: 0.15 Cohesion: 0.14
Nodes (31): refreshAndSaveTokens(), assertEnv(), clearConnectionError(), coalescePending, decrypt(), encrypt(), getCredentialsForConnection(), getKey() (+23 more) Nodes (30): assertEnv(), clearConnectionError(), coalescePending, decrypt(), encrypt(), getCredentialsForConnection(), getKey(), IMAP_SOCKET_ERROR_CODES (+22 more)
### Community 69 - "Community 69" ### Community 69 - "Community 69"
Cohesion: 0.05 Cohesion: 0.08
Nodes (47): Candidate, detectAndSaveFeedback(), PROVIDER_CONFIG, SosCandidate, speakCartesia(), speakElevenLabs(), speakGoogle(), resolveTypeAndValue() (+39 more) Nodes (31): speakCartesia(), speakElevenLabs(), speakGoogle(), resolveTypeAndValue(), TestResolveResult, cleanupStaleDevices(), listUserDevices(), consumeVoiceQuota() (+23 more)
### Community 70 - "Community 70" ### Community 70 - "Community 70"
Cohesion: 0.06 Cohesion: 0.06
@ -1531,12 +1541,12 @@ Cohesion: 0.09
Nodes (28): MDM ARCHITECTURE.md (NanoMDM server stack), bootstrap-tool README.md (rebreak-supervise.sh), AdGuard Home (DoH resolver + QueryLog), Apple Push Cert Flow (mdmcert.download signing), Backup-Sandwich (backup→wipe→supervise→restore), DoH ClientID Handshake (/dns-query/<token> → CP field), macOS has no Supervision (UAMDM + RemovalPassword instead), NanoMDM Server (rebreak-mdm, 178.105.101.137) (+20 more) Nodes (28): MDM ARCHITECTURE.md (NanoMDM server stack), bootstrap-tool README.md (rebreak-supervise.sh), AdGuard Home (DoH resolver + QueryLog), Apple Push Cert Flow (mdmcert.download signing), Backup-Sandwich (backup→wipe→supervise→restore), DoH ClientID Handshake (/dns-query/<token> → CP field), macOS has no Supervision (UAMDM + RemovalPassword instead), NanoMDM Server (rebreak-mdm, 178.105.101.137) (+20 more)
### Community 73 - "Community 73" ### Community 73 - "Community 73"
Cohesion: 0.11 Cohesion: 0.18
Nodes (23): Bool, MagicDevice, String, Timer, Void, Date, MagicDevice, String (+15 more) Nodes (12): Bool, MagicDevice, String, Timer, Void, HubDeviceAction, MagicUserProfile, DeviceHubView (+4 more)
### Community 74 - "Community 74" ### Community 74 - "Community 74"
Cohesion: 0.11 Cohesion: 0.12
Nodes (29): String, Any, Binding, Bool, Configuration, ErrorDetails, Self, String (+21 more) Nodes (26): Any, Binding, Bool, Configuration, ErrorDetails, Self, String, CaseIterable (+18 more)
### Community 75 - "Community 75" ### Community 75 - "Community 75"
Cohesion: 0.14 Cohesion: 0.14
@ -1555,12 +1565,12 @@ Cohesion: 0.08
Nodes (67): AppHandle, AppConfig, AppResult, Option, String, Value, Vec, AppHandle (+59 more) Nodes (67): AppHandle, AppConfig, AppResult, Option, String, Value, Vec, AppHandle (+59 more)
### Community 79 - "Community 79" ### Community 79 - "Community 79"
Cohesion: 0.10 Cohesion: 0.11
Nodes (22): crisisPrompts, EvalPrompt, EXPECTED_CRISIS_MATCHES, harmlessPrompts, PROMPTS_DIR, REQ-LYRA Lyra KI-Coach & Krisen-Behandlung (höchste Sicherheitsrelevanz), Deterministischer Krisen-Keyword-Pre-Filter (crisis-filter.ts), R-LYRA-01 verpasste Krise/Suizidalität (S4, Top-Risiko) (+14 more) Nodes (15): crisisPrompts, EvalPrompt, EXPECTED_CRISIS_MATCHES, harmlessPrompts, PROMPTS_DIR, CrisisChip, CrisisDetectionResult, CrisisFallbackPayload (+7 more)
### Community 80 - "Community 80" ### Community 80 - "Community 80"
Cohesion: 0.10 Cohesion: 0.13
Nodes (27): ProtectedDeviceRow(), countActiveMagicBindings(), listMagicDevices(), confirmProtectedDeviceInstalled(), countActiveProtectedDevices(), createProtectedDevice(), DEVICE_SELECT, DEVICE_SELECT_WITH_TOKEN (+19 more) Nodes (21): protectedDeviceIcon(), ProtectedDeviceRow(), confirmProtectedDeviceInstalled(), countActiveProtectedDevices(), createProtectedDevice(), DEVICE_SELECT, DEVICE_SELECT_WITH_TOKEN, getDeviceBlocklistMode() (+13 more)
### Community 81 - "Community 81" ### Community 81 - "Community 81"
Cohesion: 0.13 Cohesion: 0.13
@ -1611,16 +1621,16 @@ Cohesion: 0.32
Nodes (23): abi, artifactName, output, runtimeFiles, libraries, appmodules::@6890427a1f51a3e7e1df, core::@1b9a7d546b295b7d0867, react_codegen_lottiereactnative::@0fa4dc904d7e359a99fb (+15 more) Nodes (23): abi, artifactName, output, runtimeFiles, libraries, appmodules::@6890427a1f51a3e7e1df, core::@1b9a7d546b295b7d0867, react_codegen_lottiereactnative::@0fa4dc904d7e359a99fb (+15 more)
### Community 93 - "Community 93" ### Community 93 - "Community 93"
Cohesion: 0.07 Cohesion: 0.06
Nodes (34): AppLayout(), DmConvUnreadSlice, iconForType(), NotificationRow(), NotificationsScreen(), EmptyState(), Props, HeroShieldCheck() (+26 more) Nodes (52): AppLayout(), DmConvUnreadSlice, iconForType(), NotificationRow(), NotificationsScreen(), AppHeader(), Props, EmptyState() (+44 more)
### Community 94 - "Community 94" ### Community 94 - "Community 94"
Cohesion: 0.10 Cohesion: 0.10
Nodes (34): autoIncrement, buildType, serviceAccountKeyPath, track, build, development, preview, production (+26 more) Nodes (34): autoIncrement, buildType, serviceAccountKeyPath, track, build, development, preview, production (+26 more)
### Community 95 - "Community 95" ### Community 95 - "Community 95"
Cohesion: 0.13 Cohesion: 0.06
Nodes (27): ConnectBody, ConnectResult, detectProvider(), MailProvider, PROVIDER_DOMAIN_MAP, useMailConnect(), UseMailConnectReturn, classifyMailError() (+19 more) Nodes (52): BulletRow(), DeactivationExplainerSheet(), Props, CreateRoomSheet(), makeStyles(), Props, FormSheet(), FormSheetProps (+44 more)
### Community 96 - "Community 96" ### Community 96 - "Community 96"
Cohesion: 0.08 Cohesion: 0.08
@ -1675,8 +1685,8 @@ Cohesion: 0.09
Nodes (24): backtraceGraph, commands, files, nodes, installers, paths, build, source (+16 more) Nodes (24): backtraceGraph, commands, files, nodes, installers, paths, build, source (+16 more)
### Community 109 - "Community 109" ### Community 109 - "Community 109"
Cohesion: 0.08 Cohesion: 0.15
Nodes (28): Bool, String, Bool, DeviceState, String, Bool, Date, Int (+20 more) Nodes (13): Bool, DeviceState, String, DetectorError, cfgutilMissing, deviceLocked, ideviceinfoMissing, noDevice (+5 more)
### Community 110 - "Community 110" ### Community 110 - "Community 110"
Cohesion: 0.21 Cohesion: 0.21
@ -1687,7 +1697,7 @@ Cohesion: 0.08
Nodes (34): bool, int, ansi_ljust(), DesignSystemGenerator, _detect_page_type(), format_ascii_box(), format_markdown(), format_master_md() (+26 more) Nodes (34): bool, int, ansi_ljust(), DesignSystemGenerator, _detect_page_type(), format_ascii_box(), format_markdown(), format_master_md() (+26 more)
### Community 112 - "Community 112" ### Community 112 - "Community 112"
Cohesion: 0.14 Cohesion: 0.15
Nodes (10): Long, String, Long, String, DomainHasher, DomainHasherTest, buildHashListBinary(), etagFor() (+2 more) Nodes (10): Long, String, Long, String, DomainHasher, DomainHasherTest, buildHashListBinary(), etagFor() (+2 more)
### Community 113 - "Community 113" ### Community 113 - "Community 113"
@ -1700,7 +1710,7 @@ Nodes (41): commands, description, identifier, commands, description, identifier
### Community 115 - "Community 115" ### Community 115 - "Community 115"
Cohesion: 0.05 Cohesion: 0.05
Nodes (37): commands, description, identifier, commands, description, identifier, commands, description (+29 more) Nodes (41): commands, description, identifier, commands, description, identifier, commands, description (+33 more)
### Community 116 - "Community 116" ### Community 116 - "Community 116"
Cohesion: 0.05 Cohesion: 0.05
@ -1716,7 +1726,7 @@ Nodes (38): commands, description, identifier, commands, description, identifier
### Community 119 - "Community 119" ### Community 119 - "Community 119"
Cohesion: 0.06 Cohesion: 0.06
Nodes (36): commands, description, identifier, commands, description, identifier, commands, description (+28 more) Nodes (38): commands, description, identifier, commands, description, identifier, commands, description (+30 more)
### Community 120 - "Community 120" ### Community 120 - "Community 120"
Cohesion: 0.06 Cohesion: 0.06
@ -1951,14 +1961,14 @@ Cohesion: 0.07
Nodes (28): 1. Status-Recherche: Microsoft Basic-Auth-Deprecation, 2.1 Azure-App-Registrierung, 2.2 OAuth-Flow: BFF-Pattern (Backend-mediated), 2.3 Token-Storage: Schema-Aenderung (Eskalation an rebreak-backend), 2.4 IMAP-Connect-Logik: XOAUTH2 in ImapFlow, 2.5 Token-Refresh-Flow, 2. Architektur-Plan, 3. ConnectMailSheet UX-Plan (fuer rebreak-native-ui-Agent) (+20 more) Nodes (28): 1. Status-Recherche: Microsoft Basic-Auth-Deprecation, 2.1 Azure-App-Registrierung, 2.2 OAuth-Flow: BFF-Pattern (Backend-mediated), 2.3 Token-Storage: Schema-Aenderung (Eskalation an rebreak-backend), 2.4 IMAP-Connect-Logik: XOAUTH2 in ImapFlow, 2.5 Token-Refresh-Flow, 2. Architektur-Plan, 3. ConnectMailSheet UX-Plan (fuer rebreak-native-ui-Agent) (+20 more)
### Community 178 - "Community 178" ### Community 178 - "Community 178"
Cohesion: 0.09 Cohesion: 0.08
Nodes (20): autoSyncComplete, autoSyncing, backendRows, deviceIdRef, deviceName, { Nodes (21): autoSyncComplete, autoSyncing, backendRows, deviceIdRef, deviceName, {
downloadAndPatchEnrollmentProfile, downloadAndPatchEnrollmentProfile,
startLocalProfileServer, startLocalProfileServer,
stopLocalProfileServer, stopLocalProfileServer,
getInstalledProfiles, getInstalledProfiles,
mdmPush, mdmPush,
}, incompleteMessage, isProtectionIncomplete (+12 more) }, incompleteMessage, isProtectionIncomplete (+13 more)
### Community 179 - "Community 179" ### Community 179 - "Community 179"
Cohesion: 0.07 Cohesion: 0.07
@ -2145,8 +2155,8 @@ Cohesion: 0.09
Nodes (21): artifacts, backtrace, backtraceGraph, commands, files, nodes, compileGroups, id (+13 more) Nodes (21): artifacts, backtrace, backtraceGraph, commands, files, nodes, compileGroups, id (+13 more)
### Community 225 - "Community 225" ### Community 225 - "Community 225"
Cohesion: 0.22 Cohesion: 0.11
Nodes (9): bundle, active, externalBin, icon, macOS, targets, entitlements, frameworks (+1 more) Nodes (15): Candidate, detectAndSaveFeedback(), PROVIDER_CONFIG, SosCandidate, deleteMemoryById(), enforceMaxMemories(), getMemoriesForUser(), LyraMemoryRow (+7 more)
### Community 226 - "Community 226" ### Community 226 - "Community 226"
Cohesion: 0.08 Cohesion: 0.08
@ -2262,7 +2272,7 @@ Nodes (21): artifacts, backtrace, backtraceGraph, commands, files, nodes, compil
### Community 254 - "Community 254" ### Community 254 - "Community 254"
Cohesion: 0.16 Cohesion: 0.16
Nodes (17): String, Void, Bool, String, Void, Int32, ProcessRunner, LineBuffer (+9 more) Nodes (18): String, Void, Bool, String, Void, Int32, LocalizedError, ProcessRunner (+10 more)
### Community 255 - "Community 255" ### Community 255 - "Community 255"
Cohesion: 0.21 Cohesion: 0.21
@ -2297,8 +2307,8 @@ Cohesion: 0.16
Nodes (9): Any, Bool, Int, String, URL, SharedLogStore, ModuleDefinition, NETunnelProviderManager (+1 more) Nodes (9): Any, Bool, Int, String, URL, SharedLogStore, ModuleDefinition, NETunnelProviderManager (+1 more)
### Community 263 - "Community 263" ### Community 263 - "Community 263"
Cohesion: 0.13 Cohesion: 0.12
Nodes (26): Bool, Data, Double, Int, String, UInt32, Bool, Data (+18 more) Nodes (29): Bool, Data, Double, Int, String, UInt32, Bool, Data (+21 more)
### Community 264 - "Community 264" ### Community 264 - "Community 264"
Cohesion: 0.16 Cohesion: 0.16
@ -2361,8 +2371,8 @@ Cohesion: 0.18
Nodes (10): Bool, ConfigurationModel, ErrorDetails, String, TimeInterval, View, ContentViewModel, ActivationButtonAction (+2 more) Nodes (10): Bool, ConfigurationModel, ErrorDetails, String, TimeInterval, View, ContentViewModel, ActivationButtonAction (+2 more)
### Community 279 - "Community 279" ### Community 279 - "Community 279"
Cohesion: 0.13 Cohesion: 0.11
Nodes (17): identifier, productName, $schema, version, app, security, build, beforeBuildCommand (+9 more) Nodes (21): app, security, windows, identifier, productName, $schema, csp, version (+13 more)
### Community 280 - "Community 280" ### Community 280 - "Community 280"
Cohesion: 0.11 Cohesion: 0.11
@ -2397,8 +2407,8 @@ Cohesion: 0.22
Nodes (8): Bool, Int, Never, String, Task, Void, EnrollView, TransferAnimationView Nodes (8): Bool, Int, Never, String, Task, Void, EnrollView, TransferAnimationView
### Community 288 - "Community 288" ### Community 288 - "Community 288"
Cohesion: 0.19 Cohesion: 0.11
Nodes (10): VALID_COUNTRIES, SUPPORTED_COUNTRIES, SupportedCountry, CuratedDomainStatus, decideCuratedDomain(), getCuratedDomains(), suggestCuratedDomain(), PUBLIC_EMAIL_DOMAINS (+2 more) Nodes (15): VALID_COUNTRIES, ResolveResult, CustomDomainType, SUPPORTED_COUNTRIES, SupportedCountry, CuratedDomainStatus, decideCuratedDomain(), getCuratedDomains() (+7 more)
### Community 289 - "Community 289" ### Community 289 - "Community 289"
Cohesion: 0.13 Cohesion: 0.13
@ -2809,8 +2819,8 @@ Cohesion: 0.12
Nodes (16): blocked, back_to_app, clean, day, days, lyra, message, quote_1 (+8 more) Nodes (16): blocked, back_to_app, clean, day, days, lyra, message, quote_1 (+8 more)
### Community 391 - "Community 391" ### Community 391 - "Community 391"
Cohesion: 0.14 Cohesion: 0.22
Nodes (12): MainApplication, Application, Configuration, Bool, String, TimeInterval, URL, Hasher (+4 more) Nodes (6): MainApplication, Application, Configuration, ReactApplication, ReactHost, ReactNativeHost
### Community 392 - "Community 392" ### Community 392 - "Community 392"
Cohesion: 0.12 Cohesion: 0.12
@ -2829,8 +2839,8 @@ Cohesion: 0.12
Nodes (16): description, displayName, folderStructure, filename, root, skillPath, frontmatter, description (+8 more) Nodes (16): description, displayName, folderStructure, filename, root, skillPath, frontmatter, description (+8 more)
### Community 396 - "Community 396" ### Community 396 - "Community 396"
Cohesion: 0.13 Cohesion: 0.29
Nodes (16): Self, String, Double, String, URL, AsyncParsableCommand, BloomFilterTool, BloomFilterToolDefaults (+8 more) Nodes (8): Double, String, URL, AsyncParsableCommand, BloomFilterTool, BloomFilterToolDefaults, RuntimeError, Error
### Community 397 - "Community 397" ### Community 397 - "Community 397"
Cohesion: 0.12 Cohesion: 0.12
@ -2921,20 +2931,20 @@ Cohesion: 0.17
Nodes (12): Apple_SwiftHomomorphicEncryption_Pir_V1_KeywordDatabaseRow, Bool, Data, String, _2, Apple_SwiftHomomorphicEncryption_Pir_V1_KeywordDatabase, _GeneratedWithProtocGenSwiftVersion, D (+4 more) Nodes (12): Apple_SwiftHomomorphicEncryption_Pir_V1_KeywordDatabaseRow, Bool, Data, String, _2, Apple_SwiftHomomorphicEncryption_Pir_V1_KeywordDatabase, _GeneratedWithProtocGenSwiftVersion, D (+4 more)
### Community 419 - "Community 419" ### Community 419 - "Community 419"
Cohesion: 0.20 Cohesion: 0.22
Nodes (9): BloomFilter, NEProviderStopReason, NEURLFilterPrefilter, String, NEURLFilterControlProvider, ExtLog, ProviderFilterError, loadError (+1 more) Nodes (8): BloomFilter, NEProviderStopReason, NEURLFilterPrefilter, String, ExtLog, ProviderFilterError, loadError, RebreakURLFilterControlProvider
### Community 420 - "Community 420" ### Community 420 - "Community 420"
Cohesion: 0.24 Cohesion: 0.24
Nodes (8): Bool, Int, Never, String, Task, UInt64, Void, ConfigureView Nodes (8): Bool, Int, Never, String, Task, UInt64, Void, ConfigureView
### Community 421 - "Community 421" ### Community 421 - "Community 421"
Cohesion: 0.18 Cohesion: 0.13
Nodes (10): String, Int, WizardStep, configure, done, enroll, macRegistration, preflight (+2 more) Nodes (13): String, String, Identifiable, Int, WizardStep, configure, done, enroll (+5 more)
### Community 422 - "Community 422" ### Community 422 - "Community 422"
Cohesion: 0.13 Cohesion: 0.21
Nodes (17): Country-Curated Layer-2 Blocklist (50-cap), Pro=10/Legend=20 Custom-Domain Slots (refillable), Layer1/Layer2 Decoupling (Custom vs Country-Curated), Layer-2 Country-Pivot Plan, Travel-Detection via Cellular-MCC, REQ-MAGIC Selbstbindung (RebreakMagic Lock-Modus, 24h-Cooldown), R-BYP-03 Selbstbindung wird zur Falle (legitimer Ausstieg scheitert), SAFETY-REQ-LLM-002 Sicherheits-Grenzen (Rollen-Integrität, Refusal) (+9 more) Nodes (12): Country-Curated Layer-2 Blocklist (50-cap), Pro=10/Legend=20 Custom-Domain Slots (refillable), Layer1/Layer2 Decoupling (Custom vs Country-Curated), Layer-2 Country-Pivot Plan, Travel-Detection via Cellular-MCC, Rive Animator Brief — Lyra Avatar, Lyra Avatar Rive Emotion-State Animation, Timeline-Name Code-Contract (no-rename) (+4 more)
### Community 423 - "Community 423" ### Community 423 - "Community 423"
Cohesion: 0.14 Cohesion: 0.14
@ -3002,8 +3012,8 @@ Cohesion: 0.14
Nodes (17): ChipSpec, detectEmotion(), LyraEmotion, parseLyraResponse(), BREATH_PHASES, BreathPhase, BreathState, Chip (+9 more) Nodes (17): ChipSpec, detectEmotion(), LyraEmotion, parseLyraResponse(), BREATH_PHASES, BreathPhase, BreathState, Chip (+9 more)
### Community 438 - "Community 438" ### Community 438 - "Community 438"
Cohesion: 0.22 Cohesion: 0.24
Nodes (10): Bool, String, LocalizedError, MagicRegistration, InstallerError, downloadFailed, installFailed, noRegistration (+2 more) Nodes (9): Bool, String, MagicRegistration, InstallerError, downloadFailed, installFailed, noRegistration, MacProfileInstaller (+1 more)
### Community 439 - "Community 439" ### Community 439 - "Community 439"
Cohesion: 0.17 Cohesion: 0.17
@ -3034,8 +3044,8 @@ Cohesion: 0.18
Nodes (10): extTargetUuid, fs, hasDepToExt, mainTarget, newPhase, path, PBXPROJ, project (+2 more) Nodes (10): extTargetUuid, fs, hasDepToExt, mainTarget, newPhase, path, PBXPROJ, project (+2 more)
### Community 446 - "Community 446" ### Community 446 - "Community 446"
Cohesion: 0.22 Cohesion: 0.32
Nodes (11): FilteringTrafficByURL LICENSE (Apple, MIT-style), Filtering Traffic by URL (Apple SimpleURLFilter sample), Setting up a PIR Server for URL Filtering, blocklist.bin SHA-256 prefix hash pipeline (cross-platform), DNS-Sinkhole NXDOMAIN Filter Design (Android parity), iOS VPN/DNS Tunnel Gambling-Filter Research & Proposal, iOS webContent 50-Domain Cap (Apple-documented), Layer-2 not built as Always-On Fallback (too weak) (+3 more) Nodes (8): blocklist.bin SHA-256 prefix hash pipeline (cross-platform), DNS-Sinkhole NXDOMAIN Filter Design (Android parity), iOS VPN/DNS Tunnel Gambling-Filter Research & Proposal, iOS webContent 50-Domain Cap (Apple-documented), Layer-2 not built as Always-On Fallback (too weak), NEPacketTunnelProvider chosen over NEDNSProxyProvider/NEAppProxyProvider, WebContent Layer-2 ManagedSettings Filter Research, Spike Domains List (gambling domains)
### Community 447 - "Community 447" ### Community 447 - "Community 447"
Cohesion: 0.24 Cohesion: 0.24
@ -3959,7 +3969,7 @@ Nodes (3): info, author, version
### Community 686 - "Community 686" ### Community 686 - "Community 686"
Cohesion: 0.18 Cohesion: 0.18
Nodes (13): formatTimestamp(), MessageRow(), Props, st, CardType, GameHeader(), MessageRow(), MessageRowProps (+5 more) Nodes (13): MessageRow(), Emotion, Props, st, CardType, GameHeader(), MessageRow(), MessageRowProps (+5 more)
### Community 687 - "Community 687" ### Community 687 - "Community 687"
Cohesion: 0.12 Cohesion: 0.12
@ -4006,16 +4016,16 @@ Cohesion: 1.00
Nodes (3): Deploy Pipeline (deploy.sh, atomic .output-staging swap, pm2), WEBHOOK_MIGRATION_PLAN.md (standalone→Nitro endpoint), GitHub Webhook as Nitro API Endpoint (Trucko pattern) Nodes (3): Deploy Pipeline (deploy.sh, atomic .output-staging swap, pm2), WEBHOOK_MIGRATION_PLAN.md (standalone→Nitro endpoint), GitHub Webhook as Nitro API Endpoint (Trucko pattern)
### Community 750 - "Community 750" ### Community 750 - "Community 750"
Cohesion: 0.15 Cohesion: 0.07
Nodes (24): ChatHeaderStatus(), formatLastSeen(), Props, OnlinePresenceProvider(), PresenceContextExtended, PresenceVisibilityContext, Props, usePresenceVisibility() (+16 more) Nodes (42): DeviceLimitScreen(), ChatHeaderStatus(), formatLastSeen(), Props, DeviceApprovalIncomingSheet(), platformIcon(), UserDevice, DeviceApprovalPendingSheet() (+34 more)
### Community 759 - "Community 759" ### Community 759 - "Community 759"
Cohesion: 0.13 Cohesion: 0.13
Nodes (14): Abhaengigkeiten, Bekannte Provider-Quirks, Datei-Übersicht, Kontext, MAIL_DAEMON_DEPLOYMENT — Backyard Handoff, Rollback-Plan, Schritt 1 — GH-Actions: imap-idle ins Artifact einschließen, Schritt 2 — npm install auf Server (+6 more) Nodes (14): Abhaengigkeiten, Bekannte Provider-Quirks, Datei-Übersicht, Kontext, MAIL_DAEMON_DEPLOYMENT — Backyard Handoff, Rollback-Plan, Schritt 1 — GH-Actions: imap-idle ins Artifact einschließen, Schritt 2 — npm install auf Server (+6 more)
### Community 863 - "Community 863" ### Community 863 - "Community 863"
Cohesion: 0.50 Cohesion: 0.10
Nodes (4): commands, description, identifier, allow-prepend Nodes (21): commands, description, identifier, commands, description, identifier, commands, description (+13 more)
### Community 864 - "Community 864" ### Community 864 - "Community 864"
Cohesion: 0.13 Cohesion: 0.13
@ -4046,8 +4056,8 @@ Cohesion: 0.13
Nodes (14): description, displayName, folderStructure, filename, root, skillPath, frontmatter, installType (+6 more) Nodes (14): description, displayName, folderStructure, filename, root, skillPath, frontmatter, installType (+6 more)
### Community 871 - "Community 871" ### Community 871 - "Community 871"
Cohesion: 0.10 Cohesion: 0.18
Nodes (22): POST /api/magic/register Endpoint, GET /api/magic/status Endpoint, NanoMDM Server (mdm.rebreak.org), supervise-magic Go-CLI Binary, ReBreak Magic Mac App, AuthService.swift (Supabase + Keychain), ReBreak Magic Mac Phase 2 Summary, MacProfileInstaller.swift (DNS-Filter Profile) (+14 more) Nodes (12): POST /api/magic/register Endpoint, GET /api/magic/status Endpoint, MacProfileInstaller.swift (DNS-Filter Profile), 24h-Cooldown Server-Timed Deactivation, ReBreak Magic Windows App (Tauri 2), Eigene DoH-Infra (dns.rebreak.org, AdGuard), ReBreak Magic Windows index.html, ReBreak Magic Windows README (+4 more)
### Community 872 - "Community 872" ### Community 872 - "Community 872"
Cohesion: 0.26 Cohesion: 0.26
@ -4066,8 +4076,8 @@ Cohesion: 0.14
Nodes (14): 3.1 Produkt-Überblick, 3.2 Geräteschutz (Layer 1), 3.3 Mail-Schutz (Layer 2), 3.4 Lyra — KI-Coach (Layer 3), 3.5 Streak, Community, Onboarding, 3.6 Rebreak Magic — Selbstbindungs-Modus (optional), 3.7 Multi-Device, 3.8 Tech-Stack (Kurzfassung) (+6 more) Nodes (14): 3.1 Produkt-Überblick, 3.2 Geräteschutz (Layer 1), 3.3 Mail-Schutz (Layer 2), 3.4 Lyra — KI-Coach (Layer 3), 3.5 Streak, Community, Onboarding, 3.6 Rebreak Magic — Selbstbindungs-Modus (optional), 3.7 Multi-Device, 3.8 Tech-Stack (Kurzfassung) (+6 more)
### Community 876 - "Community 876" ### Community 876 - "Community 876"
Cohesion: 0.21 Cohesion: 0.19
Nodes (8): BloomFilter, NEProviderStopReason, NEURLFilterPrefilter, String, NEProviderStopReason, ProviderFilterError, loadError, URLFilterControlProvider Nodes (9): BloomFilter, NEProviderStopReason, NEURLFilterPrefilter, String, NEURLFilterControlProvider, NEProviderStopReason, ProviderFilterError, loadError (+1 more)
### Community 877 - "Community 877" ### Community 877 - "Community 877"
Cohesion: 0.18 Cohesion: 0.18
@ -4238,8 +4248,8 @@ Cohesion: 0.70
Nodes (3): WizardStep, Color, StepIndicator Nodes (3): WizardStep, Color, StepIndicator
### Community 928 - "Community 928" ### Community 928 - "Community 928"
Cohesion: 0.50 Cohesion: 0.14
Nodes (4): commands, description, identifier, allow-set-accelerator Nodes (25): AnimatedCounter(), DeltaBadge(), FaqItem(), KpiCard(), LegendItem(), Props, ProtectionDetailsSheet(), StatsResponse (+17 more)
### Community 930 - "Community 930" ### Community 930 - "Community 930"
Cohesion: 0.14 Cohesion: 0.14
@ -4338,8 +4348,8 @@ Cohesion: 0.17
Nodes (11): author, description, displayName, homepage, install, keywords, license, name (+3 more) Nodes (11): author, description, displayName, homepage, install, keywords, license, name (+3 more)
### Community 954 - "Community 954" ### Community 954 - "Community 954"
Cohesion: 0.50 Cohesion: 0.14
Nodes (4): commands, description, identifier, allow-set-enabled Nodes (12): DmConversation, ALLOWED_EMOJIS, countUnreadDms(), createChatMessage(), DmConversationRow, getChatMessages(), getDmConversations(), getDmHistory() (+4 more)
### Community 955 - "Community 955" ### Community 955 - "Community 955"
Cohesion: 0.47 Cohesion: 0.47
@ -4450,8 +4460,8 @@ Cohesion: 0.22
Nodes (8): Architektur, Backend-Änderungen (in diesem Repo, additiv), Bekannte Limitationen (v1), Bewusste Abweichungen vom ursprünglichen Prompt-Dokument, Build (Windows-Maschine), Entwicklung (macOS), Flow, ReBreak Magic für Windows Nodes (8): Architektur, Backend-Änderungen (in diesem Repo, additiv), Bekannte Limitationen (v1), Bewusste Abweichungen vom ursprünglichen Prompt-Dokument, Build (Windows-Maschine), Entwicklung (macOS), Flow, ReBreak Magic für Windows
### Community 982 - "Community 982" ### Community 982 - "Community 982"
Cohesion: 0.20 Cohesion: 0.11
Nodes (10): bundle, active, externalBin, icon, targets, windows, windows, installMode (+2 more) Nodes (19): bundle, active, externalBin, icon, targets, windows, bundle, active (+11 more)
### Community 983 - "Community 983" ### Community 983 - "Community 983"
Cohesion: 0.22 Cohesion: 0.22
@ -4486,8 +4496,8 @@ Cohesion: 0.22
Nodes (9): artifactName, react_codegen_rngesturehandler_codegen::@39f233abcd2c728bc6ec, react_codegen_RNMenuViewSpec::@8c49e93dd4e1930e04c8, abi, artifactName, runtimeFiles, abi, artifactName (+1 more) Nodes (9): artifactName, react_codegen_rngesturehandler_codegen::@39f233abcd2c728bc6ec, react_codegen_RNMenuViewSpec::@8c49e93dd4e1930e04c8, abi, artifactName, runtimeFiles, abi, artifactName (+1 more)
### Community 991 - "Community 991" ### Community 991 - "Community 991"
Cohesion: 0.50 Cohesion: 0.17
Nodes (4): commands, description, identifier, allow-supports-multiple-windows Nodes (15): Bool, String, Bool, Date, Int, String, EnrollmentStatus, Equatable (+7 more)
### Community 992 - "Community 992" ### Community 992 - "Community 992"
Cohesion: 0.22 Cohesion: 0.22
@ -4518,8 +4528,8 @@ Cohesion: 0.22
Nodes (9): abi, react_codegen_lottiereactnative::@0fa4dc904d7e359a99fb, react_codegen_RNCTabView::@54948b52a0aeebf4e5a8, abi, artifactName, toolchain, abi, artifactName (+1 more) Nodes (9): abi, react_codegen_lottiereactnative::@0fa4dc904d7e359a99fb, react_codegen_RNCTabView::@54948b52a0aeebf4e5a8, abi, artifactName, toolchain, abi, artifactName (+1 more)
### Community 999 - "Community 999" ### Community 999 - "Community 999"
Cohesion: 0.50 Cohesion: 0.15
Nodes (4): commands, description, identifier, deny-identifier Nodes (19): core, core:app, default_permission, global_scope_schema, permission_sets, default_permission, core:event, default_permission (+11 more)
### Community 1000 - "Community 1000" ### Community 1000 - "Community 1000"
Cohesion: 0.22 Cohesion: 0.22
@ -4650,8 +4660,8 @@ Cohesion: 0.29
Nodes (6): default, description, identifier, local, permissions, windows Nodes (6): default, description, identifier, local, permissions, windows
### Community 1032 - "Community 1032" ### Community 1032 - "Community 1032"
Cohesion: 0.25 Cohesion: 0.12
Nodes (8): Anonymitäts-Invariante (kein PII in API/Realtime/Push/Log), R-DATA-07 Anonymitätsbruch (Klarname-Leak), Art. 9 DSGVO besondere Kategorien (höchste Schutzstufe), Keine OASIS-Datenbank-Kopplung (Art. 9 DSGVO Vermeidung), CallKit + VoIP Setup für ReBreak, includesCallsInRecents:false (DiGA-Privacy, kein iCloud-Sync), Voice-Calls coturn TURN-Server Runbook, coturn force-relay (kein IP-Austausch, Anonymität) Nodes (26): Anonymitäts-Invariante (kein PII in API/Realtime/Push/Log), REQ-LYRA Lyra KI-Coach & Krisen-Behandlung (höchste Sicherheitsrelevanz), REQ-MAGIC Selbstbindung (RebreakMagic Lock-Modus, 24h-Cooldown), REQ-MAIL Mail-Schutz (deterministische Trigger-Mail-Entfernung), REQ-SOS Werkzeuge (4-7-8-Atemübung, Ablenkungs-Spiele), Anforderungen / Requirements v0 (Dok 03, 57 REQ-IDs), Deterministischer Krisen-Keyword-Pre-Filter (crisis-filter.ts), Risikomanagement-Akte v0 (Dok 04, ISO 14971) (+18 more)
### Community 1033 - "Community 1033" ### Community 1033 - "Community 1033"
Cohesion: 0.29 Cohesion: 0.29
@ -4998,8 +5008,8 @@ Cohesion: 0.50
Nodes (3): canContinue, checkEnrollment(), refreshProfileList() Nodes (3): canContinue, checkEnrollment(), refreshProfileList()
### Community 1119 - "Community 1119" ### Community 1119 - "Community 1119"
Cohesion: 0.50 Cohesion: 0.30
Nodes (4): app, security, windows, csp Nodes (15): Bool, Date, String, Codable, MagicAPIClient.swift (/api/magic/*), Config, MagicDevice, MagicDeviceSource (+7 more)
### Community 1120 - "Community 1120" ### Community 1120 - "Community 1120"
Cohesion: 0.40 Cohesion: 0.40
@ -5418,32 +5428,32 @@ Cohesion: 0.50
Nodes (4): default, description, type, local Nodes (4): default, description, type, local
### Community 1225 - "Community 1225" ### Community 1225 - "Community 1225"
Cohesion: 0.50 Cohesion: 0.23
Nodes (4): commands, description, identifier, deny-is-checked Nodes (11): Date, MagicDevice, String, Timer, Void, DeviceAction, DeviceAction, cancelRelease (+3 more)
### Community 1226 - "Community 1226" ### Community 1226 - "Community 1226"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-items Nodes (4): commands, description, identifier, deny-items
### Community 1227 - "Community 1227" ### Community 1227 - "Community 1227"
Cohesion: 0.50 Cohesion: 0.21
Nodes (4): commands, description, identifier, allow-default-window-icon Nodes (8): Self, String, Display, Formatter, From, Into, Result, AppError
### Community 1228 - "Community 1228" ### Community 1228 - "Community 1228"
Cohesion: 0.50 Cohesion: 0.22
Nodes (4): commands, description, identifier, allow-fetch-data-store-identifiers Nodes (6): DeviceState, Never, String, Task, Void, WelcomeView
### Community 1229 - "Community 1229" ### Community 1229 - "Community 1229"
Cohesion: 0.50 Cohesion: 0.24
Nodes (4): commands, description, identifier, allow-get Nodes (10): NanoMDM Server (mdm.rebreak.org), supervise-magic Go-CLI Binary, ReBreak Magic Mac App, AuthService.swift (Supabase + Keychain), ReBreak Magic Mac Phase 2 Summary, rebreak-magic-mac XcodeGen project.yml, ReBreak Magic Mac README, Rebreak Magic Mac (Self-Bind Wizard) (+2 more)
### Community 1230 - "Community 1230" ### Community 1230 - "Community 1230"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-identifier Nodes (4): commands, description, identifier, allow-identifier
### Community 1231 - "Community 1231" ### Community 1231 - "Community 1231"
Cohesion: 0.50 Cohesion: 0.33
Nodes (4): commands, description, identifier, deny-name Nodes (6): Bool, String, TimeInterval, URL, Hasher, Configuration
### Community 1232 - "Community 1232" ### Community 1232 - "Community 1232"
Cohesion: 0.50 Cohesion: 0.50
@ -5454,12 +5464,12 @@ Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-is-enabled Nodes (4): commands, description, identifier, allow-is-enabled
### Community 1234 - "Community 1234" ### Community 1234 - "Community 1234"
Cohesion: 0.50 Cohesion: 0.25
Nodes (4): commands, description, identifier, deny-register-listener Nodes (8): Maestro E2E Test-Schicht (Mobile App, ~20 Flows), Software-Verifikation Test-Nachweis v0 (Dok 05b, IEC 62304), Fehlende Traceability-Matrix (Tests↔Anforderungen↔Risiken), Vitest Unit-/Integrationstests (Backend, 21 Dateien), Crisis-Detection-Recall (Haupt-Metrik, Ziel 100%, DiGA-Blocker), Lyra LLM-Evaluierungssuite v0 (Dok 05c), SAFETY-REQ-LLM-002 Sicherheits-Grenzen (Rollen-Integrität, Refusal), Verbotenes Pathologisierungs-Vokabular (Sucht/süchtig/Therapie)
### Community 1235 - "Community 1235" ### Community 1235 - "Community 1235"
Cohesion: 0.12 Cohesion: 0.50
Nodes (17): commands, description, identifier, commands, description, identifier, deny, commands (+9 more) Nodes (4): commands, description, identifier, allow-popup
### Community 1236 - "Community 1236" ### Community 1236 - "Community 1236"
Cohesion: 0.50 Cohesion: 0.50
@ -5470,8 +5480,8 @@ Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-version Nodes (4): commands, description, identifier, deny-version
### Community 1238 - "Community 1238" ### Community 1238 - "Community 1238"
Cohesion: 0.50 Cohesion: 0.40
Nodes (4): commands, description, identifier, allow-remove Nodes (6): ReBreak Magic RE-Hardening Assessment & Plan, Admin-User kann alles aufheben (echter Schutz = Cooldown+Psychologie), Server-seitige Token-Revocation (Kern-Sicherheit im Backend), DNS-Token DPAPI-Verschlüsselung (Windows), Windows protection.json ACL-Härtung (DNS-Token-Schutz), Windows Service-Name-Bypass (sc.exe stop RebreakProtection)
### Community 1239 - "Community 1239" ### Community 1239 - "Community 1239"
Cohesion: 0.50 Cohesion: 0.50
@ -5485,6 +5495,10 @@ Nodes (4): commands, description, identifier, allow-set-app-theme
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-set-as-windows-menu-for-nsapp Nodes (4): commands, description, identifier, allow-set-as-windows-menu-for-nsapp
### Community 1243 - "Community 1243"
Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-append
### Community 1244 - "Community 1244" ### Community 1244 - "Community 1244"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-set-icon Nodes (4): commands, description, identifier, allow-set-icon
@ -5493,6 +5507,10 @@ Nodes (4): commands, description, identifier, allow-set-icon
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-set-text Nodes (4): commands, description, identifier, allow-set-text
### Community 1246 - "Community 1246"
Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-create-default
### Community 1247 - "Community 1247" ### Community 1247 - "Community 1247"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-text Nodes (4): commands, description, identifier, allow-text
@ -5511,7 +5529,11 @@ Nodes (4): commands, description, identifier, deny-bundle-type
### Community 1251 - "Community 1251" ### Community 1251 - "Community 1251"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-fetch-data-store-identifiers Nodes (4): commands, description, identifier, allow-items
### Community 1252 - "Community 1252"
Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-new
### Community 1253 - "Community 1253" ### Community 1253 - "Community 1253"
Cohesion: 0.50 Cohesion: 0.50
@ -5523,11 +5545,31 @@ Nodes (4): react_codegen_RNMenuViewSpec::@8c49e93dd4e1930e04c8, abi, artifactNam
### Community 1255 - "Community 1255" ### Community 1255 - "Community 1255"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-is-enabled Nodes (4): commands, description, identifier, allow-remove-data-store
### Community 1256 - "Community 1256"
Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-remove-listener
### Community 1257 - "Community 1257"
Cohesion: 0.50
Nodes (4): commands, description, identifier, allow-set-as-window-menu
### Community 1258 - "Community 1258"
Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-app-hide
### Community 1259 - "Community 1259"
Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-create-default
### Community 1260 - "Community 1260" ### Community 1260 - "Community 1260"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-supports-multiple-windows Nodes (4): commands, description, identifier, deny-default-window-icon
### Community 1261 - "Community 1261"
Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-remove-data-store
### Community 1262 - "Community 1262" ### Community 1262 - "Community 1262"
Cohesion: 0.50 Cohesion: 0.50
@ -5569,6 +5611,10 @@ Nodes (4): react_codegen_rnworklets::@68f58d84d4754f193387, abi, artifactName, r
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): react_codegen_RNCTabView::@54948b52a0aeebf4e5a8, abi, artifactName, toolchain Nodes (4): react_codegen_RNCTabView::@54948b52a0aeebf4e5a8, abi, artifactName, toolchain
### Community 1272 - "Community 1272"
Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-set-dock-visibility
### Community 1273 - "Community 1273" ### Community 1273 - "Community 1273"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): react_codegen_rngesturehandler_codegen::@39f233abcd2c728bc6ec, abi, artifactName, runtimeFiles Nodes (4): react_codegen_rngesturehandler_codegen::@39f233abcd2c728bc6ec, abi, artifactName, runtimeFiles
@ -5637,6 +5683,10 @@ Nodes (4): react_codegen_RNCTabView::@54948b52a0aeebf4e5a8, abi, artifactName, r
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): react_codegen_RNMenuViewSpec::@8c49e93dd4e1930e04c8, abi, artifactName, runtimeFiles Nodes (4): react_codegen_RNMenuViewSpec::@8c49e93dd4e1930e04c8, abi, artifactName, runtimeFiles
### Community 1290 - "Community 1290"
Cohesion: 0.50
Nodes (4): commands, description, identifier, deny-tauri-version
### Community 1291 - "Community 1291" ### Community 1291 - "Community 1291"
Cohesion: 0.50 Cohesion: 0.50
Nodes (4): react_codegen_rnreanimated::@8afabad14bfffa3f8b9a, abi, artifactName, runtimeFiles Nodes (4): react_codegen_rnreanimated::@8afabad14bfffa3f8b9a, abi, artifactName, runtimeFiles
@ -5674,23 +5724,23 @@ Cohesion: 0.67
Nodes (3): ShellScopeEntryAllowedArgs, anyOf, description Nodes (3): ShellScopeEntryAllowedArgs, anyOf, description
## Knowledge Gaps ## Knowledge Gaps
- **10530 isolated node(s):** `deviceIdRef`, `{ state: mdmState, refresh: refreshMdmStatus }`, `manualSyncing`, `autoSyncing`, `autoSyncComplete` (+10525 more) - **10531 isolated node(s):** `deviceIdRef`, `{ state: mdmState, refresh: refreshMdmStatus }`, `router`, `manualSyncing`, `autoSyncing` (+10526 more)
These have ≤1 connection - possible missing edges or undocumented components. These have ≤1 connection - possible missing edges or undocumented components.
- **65 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - **65 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions ## Suggested Questions
_Questions this graph is uniquely positioned to answer:_ _Questions this graph is uniquely positioned to answer:_
- **Why does `Notification` connect `Community 39` to `Community 53`, `Debug & Dev Tools`, `Community 93`, `Community 181`?** - **Why does `useColors()` connect `Community 53` to `Backend API Routes`, `Community 1030`, `Consent & Magic API Routes`, `i18n: Pricing Strings`, `App Root Layout & Shell`, `Community 18`, `Community 20`, `Community 21`, `Community 22`, `Community 27`, `Community 413`, `Community 928`, `Community 34`, `Community 37`, `Community 39`, `Community 426`, `Community 686`, `Community 437`, `Community 449`, `Community 80`, `Community 93`, `Community 95`, `Community 865`, `Community 872`, `Community 750`?**
_High betweenness centrality (0.035) - this node is a cross-community bridge._
- **Why does `Notification` connect `Community 39` to `Debug & Dev Tools`, `Community 47`, `Community 53`, `Community 181`, `Community 954`, `Community 93`?**
_High betweenness centrality (0.034) - this node is a cross-community bridge._ _High betweenness centrality (0.034) - this node is a cross-community bridge._
- **Why does `useColors()` connect `Community 53` to `Backend API Routes`, `Community 1030`, `Consent & Magic API Routes`, `i18n: Pricing Strings`, `App Root Layout & Shell`, `Community 18`, `Community 20`, `Community 21`, `Community 22`, `Community 27`, `Community 413`, `Community 34`, `Community 37`, `Community 39`, `Community 426`, `Community 686`, `Community 437`, `Community 449`, `Community 80`, `Community 93`, `Community 95`, `Community 865`, `Community 872`?** - **Why does `Error` connect `Community 396` to `Community 263`, `Community 290`, `Community 419`, `Community 438`, `Community 67`, `Community 74`, `Community 1227`, `Community 81`, `Community 212`, `Community 213`, `Community 991`, `Community 607`, `Community 355`, `Community 876`, `Community 109`, `Community 883`, `Community 117`, `Community 122`, `Community 254`?**
_High betweenness centrality (0.033) - this node is a cross-community bridge._ _High betweenness centrality (0.027) - this node is a cross-community bridge._
- **Why does `Error` connect `Community 396` to `Community 290`, `Community 355`, `Community 419`, `Community 67`, `Community 263`, `Community 74`, `Community 876`, `Community 109`, `Community 81`, `Community 883`, `Community 212`, `Community 213`, `Community 117`, `Community 438`, `Community 122`, `Community 254`, `Community 607`?**
_High betweenness centrality (0.031) - this node is a cross-community bridge._
- **Are the 2 inferred relationships involving `usePrisma()` (e.g. with `runRevoke()` and `requireUser()`) actually correct?** - **Are the 2 inferred relationships involving `usePrisma()` (e.g. with `runRevoke()` and `requireUser()`) actually correct?**
_`usePrisma()` has 2 INFERRED edges - model-reasoned connections that need verification._ _`usePrisma()` has 2 INFERRED edges - model-reasoned connections that need verification._
- **What connects `deviceIdRef`, `{ state: mdmState, refresh: refreshMdmStatus }`, `manualSyncing` to the rest of the system?** - **What connects `deviceIdRef`, `{ state: mdmState, refresh: refreshMdmStatus }`, `router` to the rest of the system?**
_10632 weakly-connected nodes found - possible documentation gaps or missing edges._ _10633 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `i18n: Blocker/Activation Strings` be split into smaller, more focused modules?** - **Should `i18n: Blocker/Activation Strings` be split into smaller, more focused modules?**
_Cohesion score 0.006644518272425249 - nodes in this community are weakly interconnected._ _Cohesion score 0.006644518272425249 - nodes in this community are weakly interconnected._
- **Should `i18n: Blocker/Activation Strings` be split into smaller, more focused modules?** - **Should `i18n: Blocker/Activation Strings` be split into smaller, more focused modules?**

File diff suppressed because it is too large Load Diff

View File

@ -8470,8 +8470,8 @@
"semantic_hash": "" "semantic_hash": ""
}, },
"/Users/chahinebrini/mono/rebreak-monorepo/apps/rebreak-magic/app/components/IosDeviceCard.vue": { "/Users/chahinebrini/mono/rebreak-monorepo/apps/rebreak-magic/app/components/IosDeviceCard.vue": {
"mtime": 1781761966.7144916, "mtime": 1781762800.771557,
"ast_hash": "9d496e8bd4ab158d208bd99b502d72e1", "ast_hash": "df6d74de8613c2691b24b9364e3b1aec",
"semantic_hash": "" "semantic_hash": ""
}, },
"/Users/chahinebrini/mono/rebreak-monorepo/apps/rebreak-magic/app/components/IosDeviceSection.vue": { "/Users/chahinebrini/mono/rebreak-monorepo/apps/rebreak-magic/app/components/IosDeviceSection.vue": {
@ -9330,8 +9330,8 @@
"semantic_hash": "" "semantic_hash": ""
}, },
"/Users/chahinebrini/mono/rebreak-monorepo/.woodpecker.yml": { "/Users/chahinebrini/mono/rebreak-monorepo/.woodpecker.yml": {
"mtime": 1781761963.5429966, "mtime": 1781762915.404928,
"ast_hash": "98b12c1882f695586f627d67619c14a9", "ast_hash": "db4af617a79ef4824d4b2e061088b0ec",
"semantic_hash": "" "semantic_hash": ""
} }
} }