Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions components/settings/PrivacySection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,6 @@ export const PrivacySection: FC = () => {
handleSettingChange('privacy', { ...settings.privacy, analyticsEnabled: v })
}
/>
<ToggleSwitch
label={t('settings.privacy.crashReporting')}
checked={settings.privacy.crashReporting}
onChange={(v) =>
handleSettingChange('privacy', { ...settings.privacy, crashReporting: v })
}
/>
<ToggleSwitch
label={t('settings.privacy.dataEncryption')}
checked={featureFlags.enableIdbAtRestEncryption && encryptionReady}
Expand All @@ -74,13 +67,6 @@ export const PrivacySection: FC = () => {
handleSettingChange('privacy', { ...settings.privacy, localStorageOnly: v })
}
/>
<ToggleSwitch
label={t('settings.privacy.shareUsageData')}
checked={settings.privacy.shareUsageData}
onChange={(v) =>
handleSettingChange('privacy', { ...settings.privacy, shareUsageData: v })
}
/>
<ToggleSwitch
label={t('settings.privacy.euDataResidency')}
hint={t('settings.privacy.euDataResidencyHint')}
Expand Down
3 changes: 0 additions & 3 deletions features/settings/settingsSlice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,9 @@ const defaultSettings: Settings = {
// QNBS-v3: SEC — analytics default ON because the data is local-only metadata (no manuscript
// prose, never leaves the device) and the analytics dashboard relies on it. The toggle is now a
// functional opt-out (gates DuckDB writes + inference telemetry via isAnalyticsPersistenceAllowed).
// Outward-facing privacy switches (crashReporting / shareUsageData) stay opt-in.
analyticsEnabled: true,
crashReporting: false,
dataEncryption: true,
localStorageOnly: true,
shareUsageData: false,
euDataResidency: true,
// QNBS-v3: SEC — fresh installs are born post-migration so the normalizer respects this default.
analyticsGateMigrated: true,
Expand Down
114 changes: 57 additions & 57 deletions graphify-out/GRAPH_REPORT.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Graph Report - StoryCraft-Studio (2026-06-24)

## Corpus Check
- 1166 files · ~1,311,879 words
- 1167 files · ~1,312,050 words
- Verdict: corpus is large enough that graph structure adds value.

## Summary
- 5049 nodes · 8851 edges · 87 communities detected
- 5050 nodes · 8851 edges · 87 communities detected
- Extraction: 76% EXTRACTED · 24% INFERRED · 0% AMBIGUOUS · INFERRED: 2165 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output

Expand Down Expand Up @@ -72,7 +72,6 @@
- [[_COMMUNITY_Community 232|Community 232]]
- [[_COMMUNITY_Community 274|Community 274]]
- [[_COMMUNITY_Community 279|Community 279]]
- [[_COMMUNITY_Community 750|Community 750]]
- [[_COMMUNITY_Community 751|Community 751]]
- [[_COMMUNITY_Community 752|Community 752]]
- [[_COMMUNITY_Community 753|Community 753]]
Expand All @@ -97,6 +96,7 @@
- [[_COMMUNITY_Community 772|Community 772]]
- [[_COMMUNITY_Community 773|Community 773]]
- [[_COMMUNITY_Community 774|Community 774]]
- [[_COMMUNITY_Community 775|Community 775]]

## God Nodes (most connected - your core abstractions)
1. `mt()` - 104 edges
Expand Down Expand Up @@ -372,103 +372,103 @@ Nodes (1): FileSystemService
Cohesion: 1.0
Nodes (1): IndexedDBService

### Community 750 - "Community 750"
### Community 751 - "Community 751"
Cohesion: 1.0
Nodes (1): Remove ANSI escape codes from text.

### Community 751 - "Community 751"
### Community 752 - "Community 752"
Cohesion: 1.0
Nodes (1): Remove timestamp strings from text.

### Community 752 - "Community 752"
### Community 753 - "Community 753"
Cohesion: 1.0
Nodes (1): Replace long base64 strings with placeholder.

### Community 753 - "Community 753"
### Community 754 - "Community 754"
Cohesion: 1.0
Nodes (1): Remove NPM/pnpm warning lines.

### Community 754 - "Community 754"
### Community 755 - "Community 755"
Cohesion: 1.0
Nodes (1): Remove redundant success messages.

### Community 755 - "Community 755"
### Community 756 - "Community 756"
Cohesion: 1.0
Nodes (1): Apply all preprocessing steps to reduce token payload.

### Community 756 - "Community 756"
### Community 757 - "Community 757"
Cohesion: 1.0
Nodes (1): Extract only error-related sections from log.

### Community 757 - "Community 757"
### Community 758 - "Community 758"
Cohesion: 1.0
Nodes (1): Pydantic models for CI Analyzer structured output. QNBS-v3: These models enforce

### Community 758 - "Community 758"
### Community 759 - "Community 759"
Cohesion: 1.0
Nodes (1): Structured CI error for VS Code problem matcher integration.

### Community 759 - "Community 759"
### Community 760 - "Community 760"
Cohesion: 1.0
Nodes (1): Vitest JSON test result structure.

### Community 760 - "Community 760"
### Community 761 - "Community 761"
Cohesion: 1.0
Nodes (1): Full Vitest JSON report structure.

### Community 761 - "Community 761"
### Community 762 - "Community 762"
Cohesion: 1.0
Nodes (1): Stryker per-file mutation report.

### Community 762 - "Community 762"
### Community 763 - "Community 763"
Cohesion: 1.0
Nodes (1): Full Stryker JSON report structure.

### Community 763 - "Community 763"
### Community 764 - "Community 764"
Cohesion: 1.0
Nodes (1): Initialize OpenRouter client for Poolside Laguna model.

### Community 764 - "Community 764"
### Community 765 - "Community 765"
Cohesion: 1.0
Nodes (1): Analyze Vitest JSON report and raw logs for errors.

### Community 765 - "Community 765"
### Community 766 - "Community 766"
Cohesion: 1.0
Nodes (1): Analyze Stryker JSON report for surviving mutants.

### Community 766 - "Community 766"
### Community 767 - "Community 767"
Cohesion: 1.0
Nodes (1): Send preprocessed errors to LLM for analysis.

### Community 767 - "Community 767"
### Community 768 - "Community 768"
Cohesion: 1.0
Nodes (1): Format errors for VS Code problem matcher.

### Community 768 - "Community 768"
### Community 769 - "Community 769"
Cohesion: 1.0
Nodes (1): Main entry point for CI analyzer.

### Community 769 - "Community 769"
### Community 770 - "Community 770"
Cohesion: 1.0
Nodes (1): Execute gh CLI command and return parsed JSON output.

### Community 770 - "Community 770"
### Community 771 - "Community 771"
Cohesion: 1.0
Nodes (1): Get the ID of the most recent failed CI run.

### Community 771 - "Community 771"
### Community 772 - "Community 772"
Cohesion: 1.0
Nodes (1): Download a specific artifact from a workflow run.

### Community 772 - "Community 772"
### Community 773 - "Community 773"
Cohesion: 1.0
Nodes (1): Get raw logs from a failed workflow run.

### Community 773 - "Community 773"
### Community 774 - "Community 774"
Cohesion: 1.0
Nodes (1): Parse Vitest JSON report for failing tests.

### Community 774 - "Community 774"
### Community 775 - "Community 775"
Cohesion: 1.0
Nodes (1): Parse Stryker JSON report for surviving mutants.

Expand Down Expand Up @@ -519,66 +519,66 @@ Nodes (1): Parse Stryker JSON report for surviving mutants.
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 279`** (2 nodes): `IndexedDBService`, `index.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 750`** (1 nodes): `Remove ANSI escape codes from text.`
- **Thin community `Community 751`** (1 nodes): `Remove ANSI escape codes from text.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 751`** (1 nodes): `Remove timestamp strings from text.`
- **Thin community `Community 752`** (1 nodes): `Remove timestamp strings from text.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 752`** (1 nodes): `Replace long base64 strings with placeholder.`
- **Thin community `Community 753`** (1 nodes): `Replace long base64 strings with placeholder.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 753`** (1 nodes): `Remove NPM/pnpm warning lines.`
- **Thin community `Community 754`** (1 nodes): `Remove NPM/pnpm warning lines.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 754`** (1 nodes): `Remove redundant success messages.`
- **Thin community `Community 755`** (1 nodes): `Remove redundant success messages.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 755`** (1 nodes): `Apply all preprocessing steps to reduce token payload.`
- **Thin community `Community 756`** (1 nodes): `Apply all preprocessing steps to reduce token payload.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 756`** (1 nodes): `Extract only error-related sections from log.`
- **Thin community `Community 757`** (1 nodes): `Extract only error-related sections from log.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 757`** (1 nodes): `Pydantic models for CI Analyzer structured output. QNBS-v3: These models enforce`
- **Thin community `Community 758`** (1 nodes): `Pydantic models for CI Analyzer structured output. QNBS-v3: These models enforce`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 758`** (1 nodes): `Structured CI error for VS Code problem matcher integration.`
- **Thin community `Community 759`** (1 nodes): `Structured CI error for VS Code problem matcher integration.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 759`** (1 nodes): `Vitest JSON test result structure.`
- **Thin community `Community 760`** (1 nodes): `Vitest JSON test result structure.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 760`** (1 nodes): `Full Vitest JSON report structure.`
- **Thin community `Community 761`** (1 nodes): `Full Vitest JSON report structure.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 761`** (1 nodes): `Stryker per-file mutation report.`
- **Thin community `Community 762`** (1 nodes): `Stryker per-file mutation report.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 762`** (1 nodes): `Full Stryker JSON report structure.`
- **Thin community `Community 763`** (1 nodes): `Full Stryker JSON report structure.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 763`** (1 nodes): `Initialize OpenRouter client for Poolside Laguna model.`
- **Thin community `Community 764`** (1 nodes): `Initialize OpenRouter client for Poolside Laguna model.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 764`** (1 nodes): `Analyze Vitest JSON report and raw logs for errors.`
- **Thin community `Community 765`** (1 nodes): `Analyze Vitest JSON report and raw logs for errors.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 765`** (1 nodes): `Analyze Stryker JSON report for surviving mutants.`
- **Thin community `Community 766`** (1 nodes): `Analyze Stryker JSON report for surviving mutants.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 766`** (1 nodes): `Send preprocessed errors to LLM for analysis.`
- **Thin community `Community 767`** (1 nodes): `Send preprocessed errors to LLM for analysis.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 767`** (1 nodes): `Format errors for VS Code problem matcher.`
- **Thin community `Community 768`** (1 nodes): `Format errors for VS Code problem matcher.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 768`** (1 nodes): `Main entry point for CI analyzer.`
- **Thin community `Community 769`** (1 nodes): `Main entry point for CI analyzer.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 769`** (1 nodes): `Execute gh CLI command and return parsed JSON output.`
- **Thin community `Community 770`** (1 nodes): `Execute gh CLI command and return parsed JSON output.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 770`** (1 nodes): `Get the ID of the most recent failed CI run.`
- **Thin community `Community 771`** (1 nodes): `Get the ID of the most recent failed CI run.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 771`** (1 nodes): `Download a specific artifact from a workflow run.`
- **Thin community `Community 772`** (1 nodes): `Download a specific artifact from a workflow run.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 772`** (1 nodes): `Get raw logs from a failed workflow run.`
- **Thin community `Community 773`** (1 nodes): `Get raw logs from a failed workflow run.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 773`** (1 nodes): `Parse Vitest JSON report for failing tests.`
- **Thin community `Community 774`** (1 nodes): `Parse Vitest JSON report for failing tests.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 774`** (1 nodes): `Parse Stryker JSON report for surviving mutants.`
- **Thin community `Community 775`** (1 nodes): `Parse Stryker JSON report for surviving mutants.`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.

## Suggested Questions
_Questions this graph is uniquely positioned to answer:_

- **Why does `mt()` connect `Community 2` to `Community 0`, `Community 1`, `Community 4`, `Community 5`, `Community 6`, `Community 10`, `Community 13`, `Community 14`, `Community 17`, `Community 20`, `Community 21`, `Community 22`?**
_High betweenness centrality (0.085) - this node is a cross-community bridge._
_High betweenness centrality (0.081) - this node is a cross-community bridge._
- **Why does `fn()` connect `Community 7` to `Community 1`, `Community 3`, `Community 8`, `Community 13`, `Community 14`, `Community 21`, `Community 22`?**
_High betweenness centrality (0.056) - this node is a cross-community bridge._
- **Why does `wx()` connect `Community 0` to `Community 2`, `Community 4`, `Community 8`, `Community 10`, `Community 19`?**
_High betweenness centrality (0.042) - this node is a cross-community bridge._
_High betweenness centrality (0.053) - this node is a cross-community bridge._
- **Why does `t()` connect `Community 4` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `Community 5`, `Community 7`, `Community 9`, `Community 11`, `Community 12`, `Community 18`, `Community 21`, `Community 25`?**
_High betweenness centrality (0.052) - this node is a cross-community bridge._
- **Are the 87 inferred relationships involving `mt()` (e.g. with `pE()` and `xE()`) actually correct?**
_`mt()` has 87 INFERRED edges - model-reasoned connections that need verification._
- **Are the 62 inferred relationships involving `fn()` (e.g. with `makeMediaQuery()` and `MockSpeechRecognition()`) actually correct?**
Expand Down
6 changes: 2 additions & 4 deletions locales/ar/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -670,8 +670,7 @@
"settings.plugins.title": "الإضافات",
"settings.plugins.uninstallBtn": "إلغاء التثبيت",
"settings.privacy.analyticsEnabled": "تفعيل التحليلات",
"settings.privacy.analyticsHint": "تحليلات محلية فقط — لا تغادر جهازك أبدًا. أوقف التشغيل لإيقاف جمع كل التحليلات.",
"settings.privacy.crashReporting": "الإبلاغ عن الأعطال",
"settings.privacy.analyticsHint": "تحليلات محلية فقط — لا تغادر البيانات الوصفية جهازك أبدًا. يؤدي إيقاف هذا إلى إيقاف كل تخزين للتحليلات، بما في ذلك بيانات لوحة المعلومات وقياسات الذكاء الاصطناعي.",
"settings.privacy.dataEncryption": "تشفير البيانات",
"settings.privacy.encryptionActiveStatus": "التشفير نشط — البيانات محمية لهذه الجلسة",
"settings.privacy.encryptionChangeAction": "تغيير عبارة المرور",
Expand Down Expand Up @@ -708,7 +707,6 @@
"settings.privacy.localStorageOnly": "التخزين المحلي فقط",
"settings.privacy.migrationComplete": "تم تشفير جميع البيانات بنجاح",
"settings.privacy.migrationProgress": "جارٍ تشفير البيانات الحالية…",
"settings.privacy.shareUsageData": "مشاركة بيانات الاستخدام",
"settings.privacy.title": "الخصوصية والأمان",
"settings.projectAi.activeIndicator": "ذكاء اصطناعي للمشروع نشط",
"settings.projectAi.category": "ذكاء اصطناعي للمشروع",
Expand Down Expand Up @@ -805,7 +803,7 @@
"settings.voice.privacy.revokeConsentHint": "Removes your Web Speech consent. Voice will fall back to local WASM or be disabled.",
"settings.voice.privacy.statusExternal": "خارجي",
"settings.voice.privacy.statusLocal": "محلي",
"settings.voice.privacyNotice": "تُعالَج بيانات الصوت محليًا على جهازك. لا يُرسَل أي صوت إلى السحابة ما لم تفعّل الاحتياطي السحابي أدناه صراحة.",
"settings.voice.privacyNotice": "افتراضيًا، يرسل محرك Web Speech صوتك إلى Google أو Microsoft لتحويله إلى نص. بدّل إلى المحرك على الجهاز (WASM) للاحتفاظ بكل الصوت على جهازك.",
"settings.voice.pttHint": "Push-to-Talk shortcut: Ctrl+Shift+V (Windows/Linux) or ⌘+Shift+V (Mac). Hold to record.",
"settings.voice.speechRate": "Speech Rate",
"settings.voice.speechRateHint": "How fast the text-to-speech voice speaks. 1.0 = normal speed.",
Expand Down
Loading
Loading