Skip to content

Feat/design - #26

Open
ummsehun wants to merge 58 commits into
mainfrom
feat/design
Open

Feat/design#26
ummsehun wants to merge 58 commits into
mainfrom
feat/design

Conversation

@ummsehun

Copy link
Copy Markdown
Contributor

Summary

  • What changed?
  • Why does this change exist?

Verification

  • pnpm -s typecheck
  • pnpm -s lint-all
  • pnpm -s qa:core
  • Additional targeted tests, if any:

State Ownership Review

  • Why is this state not local component state?
  • Why does this state belong in a shared/global store?
  • Which selectors are used, and why are they the minimum subscription surface?
  • Which fields are derived and intentionally not persisted?

Hook / Effect Review

  • Is this custom hook sharing logic only, or also state ownership?
  • Which effects synchronize with an external system?
  • Which effects were removed because they were only deriving state?

Persist / Rehydrate Review

  • Why is each persisted field necessary after restart?
  • What is the target persisted schema version, and how are older/newer payloads handled?
  • What resets or fallback paths exist for malformed persisted data?
  • Does persisted state include any sensitive or machine-specific values?

Observability Review

  • Which new failure paths emit structured logs?
  • Which domain / event / scope values should operators expect?
  • Are recovery actions logged separately from validation failures?

IPC / Electron Boundary Review

  • Which preload API surface changed, if any?
  • Where are the request and response/runtime schemas defined?
  • Is every IPC handler with input parameters guarded by argsSchema?
  • Is there any renderer code that assumes direct Electron/Node access?

AI Review Gate

  • Import paths and APIs were checked against the current installed codebase.
  • No selectorless useXStore() subscriptions were introduced.
  • No custom hook is claiming to share global state while actually using local state.
  • No effect is used only to derive state or handle a user event.
  • No renderer privileged API usage bypasses preload.
  • No IPC/persist boundary accepts unvalidated payloads.

References

  • Code:
  • Docs / contracts:

ummsehun and others added 30 commits June 26, 2026 16:29
Phase 0: add design-token violation guard (scripts/design/tokens-guard.mjs)
with renderer-wide baselines that only ratchet down.

Phase 1: codemod shadcn long-form utility classes to Luie short-form
(scripts/design/unify-token-vocab.mjs). 226 replacements across 50 files.
Every mapping resolves to the same CSS variable via the @theme bridge, so
zero visual change. shadcnVocab count: 226 -> 0.

  text-muted-foreground -> text-muted
  text-foreground       -> text-fg
  bg-background         -> bg-app
  *-accent-foreground   -> *-accent-fg
  *-destructive         -> *-danger  (excl. destructive-foreground)

Excluded: components/ui/* (shadcn primitives) and surface/card/popover
(@theme vs tailwind.config double-definition — handled in Phase 2).

Verified: tsc --noEmit passes; guard green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Alias all --namu-* wiki tokens to core tokens (accent-bg / text-accent /
border-default / bg-sidebar / bg-surface-hover / text-on-accent), defined
once in :root so they cascade per [data-theme]. Delete the per-theme
(dark/sepia) namu overrides.

Removes the second accent blue (#00a2e8 / #38bdf8 / #0ea5e9) so the wiki
shares Luie's single accent. rawHex 352 -> 332. Zero component changes
(var names preserved). Guard ratcheted.

Note: investigation found the suspected surface "double-definition conflict"
does not exist — this is Tailwind v4 with no @config, so tailwind.config.js
is dead and @theme is the sole source. Real bug found instead: config-only
classes (rounded-control x28, shadow-panel, z-dropdown ...) are dead/no-op.
Tracked as Phase 2b in docs/design-redesign-plan.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… tokens

Tailwind v4 here has no @config, so tailwind.config.js was never loaded —
its radius/shadow/spacing classes emitted no CSS and its darkMode setting
was inert. Fix:

- Migrate the *used* tokens into @theme (global.tokens.css):
  --radius-control/-panel, --shadow-panel,
  --spacing-control-x/-y/-panel-pad/-panel-gap.
  Revives rounded-control (x28), shadow-panel, p-panel-pad, etc.
- Named z-index tokens have no v4 theme namespace -> convert usages:
  z-overlay->z-20, z-dropdown->z-50, z-modal->z-[9000] (6 files).
- Restore darkMode intent via @custom-variant in global.css so `dark:`
  utilities (x72) follow [data-theme="dark"] instead of OS preference
  (was a latent bug).
- Delete tailwind.config.js.

Verified: pnpm build exit 0; tsc --noEmit clean; built CSS emits
rounded-control / shadow-panel / spacing tokens and compiles `dark:` to
[data-theme=dark]; guard green.

Visible deltas (intended restoration): rounded-control elements gain their
10px radius; dark: utilities now track the in-app theme.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the warm/cool color-temperature and paper-texture options that
multiplied visual permutations and diluted product identity.

Scope corrected during investigation:
- uiMode is the 4-layout selector (default/docs/editor/scrivener/focus),
  not a cosmetic axis — kept.
- themeContrast soft|high is an accessibility (high-contrast) feature — kept.

Removed from the product:
- AppearanceTab: atmosphere (temp) + texture sections.
- Apply layer: data-temp / data-texture attributes in setup.ts,
  useThemeAttributes.ts, App.tsx.
- Dead CSS: [data-temp] (6 blocks) and [data-texture] (2 blocks).

Kept inert (zod schema is z.strictObject, so removing the keys would fail
validation on existing users' saved settings): the themeTemp/themeTexture
fields in types, schema, defaults and store. Full field deletion needs a
settings migration — tracked as follow-up.

Verified: pnpm build exit 0; tsc clean; built CSS drops data-temp/
data-texture, keeps data-contrast; guard ratcheted (rawHex 332->313,
rawColor 201->197, roundedBig 175->170).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Follow-up cleanup to D2: delete the now-inert temperature/texture settings
fields everywhere, with a backward-compat shim.

- schema: wrap editorSettingsSchema in z.preprocess that strips the legacy
  themeTemp/themeTexture keys before the strictObject runs, so existing
  users' stored settings keep parsing (the renderer safeParses loaded
  settings and falls back to defaults on failure — without the shim, the
  removed keys would reset ALL settings). Strict validation otherwise kept.
- remove fields/types/defaults from shared types, index re-export,
  constants, main settingsDefaults, editorStore (state + normalizer),
  and uiModeIntegrity snapshot.
- i18n: drop appearance.texture / appearance.atmosphere from ko/en/ja.

Verified: tsx runtime test (legacy parses, keys stripped, kept fields
preserved, unknown keys still rejected); tsc clean; pnpm build exit 0;
guard green; no new i18n parity diffs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Establish the role->background convention (inspector = bg-panel) and apply
it to the inspector trio as a reviewable pilot.

InspectorPanel and GraphNodeInspector already own bg-panel at their roots.
CanvasNodeInspector had a transparent root, so it inherited bg-panel from
ContextPanel but bg-surface from the binder sidebar's canvas tab — the same
inspector looked different per host. Give its root branches their own
bg-panel so it presents consistently everywhere.

Methodology note (see plan): raw per-role bg grep counts overstate the
inconsistency because they include legitimate nested card surfaces. The fix
touches root containers only, not inner cards — and structural bg changes
need visual review, so this is scoped as a small pilot before expanding to
sidebar/binder/panel.

Verified: tsc clean; pnpm build exit 0; guard green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ebar

The structured-mode left navigation shells used different role colors:
ScrivenerLayout and EditorLayout sidebar wrappers and the BinderSidebar
shell were bg-panel, while MainLayout and ScrivenerSidebar were already
bg-sidebar. Align the three outliers to bg-sidebar (root containers only;
inner lists/cards untouched).

Held back for visual review: GoogleDocsLayout / DocsSidebar keep their
intentional docs-mode white (bg-app); BinderSidebar's shadow-xl (SaaS-ish
shadow) noted separately.

Verified: tsc clean; pnpm build exit 0; guard green. Visible change:
structured-mode left column shifts from panel to sidebar tone.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
In dark theme --bg-sidebar was #09090b, identical to --bg-app, so the
left binder/sidebar had no visual separation from the editor canvas
(only a 1px border). Confirmed by running the app. Lift dark --bg-sidebar
to #121214 so the binder/sidebar reads as structure across all layouts
(Main/Scrivener/Editor). Light/sepia already had separation; unchanged.

Verified: pnpm build exit 0; guard green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bring marketing-scale corner radii and shadows down to a writer-tool tone:
- rounded-3xl -> rounded-xl (1)
- rounded-2xl -> rounded-lg (13)
- shadow-2xl  -> shadow-xl (9)

Left alone: rounded-full (circular avatars/dots/toggles), rounded-xl/lg,
and components/ui shadcn primitives.

Verified: pnpm build exit 0; guard green (roundedBig 170->157).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s tokens, accent 5→1, graph flatten

Mechanical, value-preserving design-system cleanup from design-audit-2026-06:

- B4: unify left-nav surfaces (DocsSidebar/BinderSidebarTabs/FocusHoverSidebar)
  to bg-sidebar; ScrivenerSidebar was already the reference.
- B1-shadow: 17 overlay shadow-xl (modals/popovers/dropdowns/drawers/tooltips)
  → shadow-panel token (tokenizes + downtunes elevation).
- B1-zindex: new z-index layer (z-dropdown/banner/toast/modal via @Utility,
  sourced from --z-index-* vars) replaces ad-hoc z-[9999]/z-[9000]/z-[10000].
- B1-radius: rounded-md→rounded-control, rounded-lg/xl→rounded-panel across
  renderer (273 occurrences); 1 directional rounded-t-xl left as-is.
- B3 (safe subset): merge value-identical aliases bg-canvas/bg-bg-primary into
  bg-app (identical in all themes) + drop their dead @theme aliases. Genuine
  elevation surfaces (surface/panel/element) preserved.
- B6: converge accent to single blue brand; remove violet/green/amber/rose/slate
  swatches, AppearanceTab picker, and orphaned i18n keys. themeAccent plumbing
  kept (stored non-blue degrades gracefully to base blue).
- B7: flatten remaining graph decoration (node focus scale, legend neon glow,
  hovercard tag scale).

Verified: pnpm typecheck + pnpm build pass; z-* utilities confirmed in built CSS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n prefix

No visual change. Lifts the CharacterWikiAttrs coupling and hardcoded
character.* i18n namespace so event/faction can reuse the same TOC +
sections + add-section block.

Co-Authored-By: Claude <noreply@anthropic.com>
…mes wrapper

Moves PropertyRow / MarkdownDocumentEditor / decomposeBody out of
CharacterDocumentView into shared/NotionDocumentView so event/faction can
reuse the same Notion-style surface. No visual change for characters.

Co-Authored-By: Claude <noreply@anthropic.com>
Event/faction document mode now uses the shared NotionDocumentView with
property rows (classification/description/custom fields) and a markdown
body synced 1:1 with wiki sections — same model as characters.

BREAKING-ish: the legacy attributes.document HTML field is no longer read
or written; it becomes inert. No migration is provided (accepted per spec);
existing document HTML content on events/factions will not surface.

Co-Authored-By: Claude <noreply@anthropic.com>
Drops the last --namu-border/table-bg/table-label/hover-bg references in
Infobox in favor of border-border / bg-surface-hover / text-muted. Phase
2a already aliased these to the same values, so this is a no-op visually
and removes the dead alias dependency. Header tone intentionally kept.

Co-Authored-By: Claude <noreply@anthropic.com>
Unused after event/faction migrated to the shared NotionDocumentView.

Co-Authored-By: Claude <noreply@anthropic.com>
크롬(sideBar/ToolBar/footer) 색은 통일됐으나 border가 같은 색 영역을
다시 조각내 "레고 이음새"로 읽히던 문제 + 토글 행/툴바 이중 띠 + 순수
검정 에디터의 차가운 색감을 정리.

- MainLayout: 사이드바 border-r 제거, 리사이즈 핸들 hover 시만 표시,
  별도 h-12 토글 행 삭제 → 패널 토글을 에디터 코너 고스트 버튼으로 통일.
  툴바가 사이드바와 이음새 없는 최상단 단일 크롬 바가 됨.
- EditorToolbar border-b / StatusFooter border-t 제거 → 어두운 에디터
  우물은 색 단차로만 정의(이중 경계 제거).
- 다크 토큰 완화: bg-app #09090b→#0d0d0f, editor-bg 정합, bg-sidebar
  #121214→#161619(panel #18181b 아래 유지), text-primary #fff→#f4f4f5.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 709 files, which is 609 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e38c2b8a-d8c0-4076-95fb-e76b690ad69f

📥 Commits

Reviewing files that changed from the base of the PR and between 399109c and ccecdb6.

⛔ Files ignored due to path filters (13)
  • docs/임세훈.pdf is excluded by !**/*.pdf
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • tmp/pdfs/imsehun-page-01.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-02.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-03.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-04.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-05.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-06.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-07.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-08.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-09.png is excluded by !**/*.png
  • tmp/pdfs/imsehun-page-10.png is excluded by !**/*.png
  • 임세훈.pdf is excluded by !**/*.pdf
📒 Files selected for processing (750)
  • .claude/settings.local.json
  • .clinerules/ponytail.md
  • .gitignore
  • DESIGN.md
  • bencium-claude-code-design-skill
  • docs/architecture/current-main.md
  • docs/backup/design-audit-2026-06.md
  • docs/backup/design-audit-report.md
  • docs/backup/design-competitor-contrast-2026-06.md
  • docs/backup/design-redesign-plan.md
  • docs/backup/design-ui-ux-research-prompt.md
  • docs/backup/memory-eval-pain-point-taxonomy.md
  • docs/design-redesign-plan.md
  • docs/memory_phase/00-overview.md
  • docs/memory_phase/completion-criteria.md
  • docs/memory_phase/phase-1-eval-cases.md
  • docs/memory_phase/phase-2-answer-judge.md
  • docs/memory_phase/phase-3-memory-policy.md
  • docs/memory_phase/phase-4-performance-jobs.md
  • docs/memory_phase/phase-5-writer-ui.md
  • docs/memory_phase/phase-5-writer-workflow-coverage.md
  • docs/memory_phase/phase-6-package-durability.md
  • docs/memory_phase/phase-7-beta-validation.md
  • docs/memory_phase/progress-log.md
  • docs/memory_phase/review-notes.md
  • docs/phase/novel/ai-quality-external-patterns-2026-06-30.md
  • docs/phase/novel/ai-quality-risk-priorities-2026-06-30.md
  • docs/phase/novel/memory_engine_product_definition.md
  • docs/phase/novel/memory_enjine_expand.md
  • docs/phase/novel/mvp_answer_mode_eval.md
  • docs/phase/novel/mvp_ui_memory_engine_audit.md
  • docs/phase/novel/shadow-beta-15ch-expansion-research-2026-06-30.md
  • docs/phase/novel/shadow-beta-15ch-qa-2026-06-30.md
  • docs/phase/novel/shadow-beta-bubble-breaker-priorities-2026-06-30.md
  • docs/phase/novel/shadow-beta-expanded-220-nohint-report-2026-06-30.md
  • docs/phase/novel/shadow-beta-expansion-20-eval-report-2026-06-30.md
  • docs/phase/novel/shadow-beta-gemini-faithfulness-report-2026-06-30.md
  • docs/phase/novel/shadow-beta-genre-scope-and-llm-rules-2026-06-30.md
  • docs/phase/novel/shadow-beta-genre-scope-gemini-sample-2026-06-30.md
  • docs/phase/novel/shadow-beta-grounding-report-2026-06-30.md
  • docs/phase/novel/shadow-beta-hard-v1-results-2026-06-30.md
  • docs/phase/novel/shadow-beta-novel-pack.md
  • docs/phase/novel/shadow-beta-qa-feedback-2026-06-30.md
  • docs/plans/settings-ui-redesign.md
  • docs/quality/frontend-css-agents.md
  • docs/quality/ipc-contract-map.json
  • docs/quality/release-readiness.md
  • docs/quality/state-management-policy.md
  • docs/superpowers/plans/2026-06-27-research-wiki-document-ui-unify.md
  • docs/superpowers/plans/2026-06-30-main-architecture-alignment.md
  • novel/modern_fantasy/eval/answer_mode_v1.jsonl
  • novel/modern_fantasy/eval/author_questions_raw.jsonl
  • novel/modern_fantasy/eval/benchmark_manifest.json
  • novel/modern_fantasy/eval/chapter_06_15_eval_expansion.jsonl
  • novel/modern_fantasy/eval/dataset_quality_report.json
  • novel/modern_fantasy/eval/feedback_seed.jsonl
  • novel/modern_fantasy/eval/gold_answers.jsonl
  • novel/modern_fantasy/eval/gold_evidence.jsonl
  • novel/modern_fantasy/eval/hard_set_v1.jsonl
  • novel/modern_fantasy/eval/hard_set_v1_extra.jsonl
  • novel/modern_fantasy/eval/rejected_answer_cases.jsonl
  • novel/modern_fantasy/eval/writer_questions.jsonl
  • novel/modern_fantasy/manuscript/modern_fantasy_001.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_002.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_003.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_004.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_005.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_006.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_007.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_008.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_009.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_010.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_011.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_012.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_013.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_014.txt
  • novel/modern_fantasy/manuscript/modern_fantasy_015.txt
  • novel/modern_fantasy/writer_room/author_decision_log.md
  • novel/modern_fantasy/writer_room/canon_bible.md
  • novel/modern_fantasy/writer_room/character_sheet.md
  • novel/modern_fantasy/writer_room/discarded_settings.md
  • novel/modern_fantasy/writer_room/draft_notes.md
  • novel/modern_fantasy/writer_room/foreshadowing_ledger.md
  • novel/modern_fantasy/writer_room/relationship_sheet.md
  • novel/modern_fantasy/writer_room/revision_log.md
  • novel/modern_fantasy/writer_room/session_logs/session_001_planning.md
  • novel/modern_fantasy/writer_room/session_logs/session_002_after_chapter_002.md
  • novel/modern_fantasy/writer_room/session_logs/session_003_revision_after_chapter_004.md
  • novel/modern_fantasy/writer_room/timeline.md
  • novel/modern_fantasy/writer_room/uncertainty_log.md
  • novel/murim/eval/answer_mode_v1.jsonl
  • novel/murim/eval/author_questions_raw.jsonl
  • novel/murim/eval/benchmark_manifest.json
  • novel/murim/eval/chapter_06_15_eval_expansion.jsonl
  • novel/murim/eval/dataset_quality_report.json
  • novel/murim/eval/feedback_seed.jsonl
  • novel/murim/eval/gold_answers.jsonl
  • novel/murim/eval/gold_evidence.jsonl
  • novel/murim/eval/hard_set_v1.jsonl
  • novel/murim/eval/hard_set_v1_extra.jsonl
  • novel/murim/eval/rejected_answer_cases.jsonl
  • novel/murim/eval/writer_questions.jsonl
  • novel/murim/manuscript/murim_001.txt
  • novel/murim/manuscript/murim_002.txt
  • novel/murim/manuscript/murim_003.txt
  • novel/murim/manuscript/murim_004.txt
  • novel/murim/manuscript/murim_005.txt
  • novel/murim/manuscript/murim_006.txt
  • novel/murim/manuscript/murim_007.txt
  • novel/murim/manuscript/murim_008.txt
  • novel/murim/manuscript/murim_009.txt
  • novel/murim/manuscript/murim_010.txt
  • novel/murim/manuscript/murim_011.txt
  • novel/murim/manuscript/murim_012.txt
  • novel/murim/manuscript/murim_013.txt
  • novel/murim/manuscript/murim_014.txt
  • novel/murim/manuscript/murim_015.txt
  • novel/murim/writer_room/author_decision_log.md
  • novel/murim/writer_room/canon_bible.md
  • novel/murim/writer_room/character_sheet.md
  • novel/murim/writer_room/discarded_settings.md
  • novel/murim/writer_room/draft_notes.md
  • novel/murim/writer_room/foreshadowing_ledger.md
  • novel/murim/writer_room/relationship_sheet.md
  • novel/murim/writer_room/revision_log.md
  • novel/murim/writer_room/session_logs/session_001_planning.md
  • novel/murim/writer_room/session_logs/session_002_after_chapter_002.md
  • novel/murim/writer_room/session_logs/session_003_revision_after_chapter_004.md
  • novel/murim/writer_room/timeline.md
  • novel/murim/writer_room/uncertainty_log.md
  • novel/occult_mystery/eval/answer_mode_v1.jsonl
  • novel/occult_mystery/eval/author_questions_raw.jsonl
  • novel/occult_mystery/eval/benchmark_manifest.json
  • novel/occult_mystery/eval/chapter_06_15_eval_expansion.jsonl
  • novel/occult_mystery/eval/dataset_quality_report.json
  • novel/occult_mystery/eval/feedback_seed.jsonl
  • novel/occult_mystery/eval/gold_answers.jsonl
  • novel/occult_mystery/eval/gold_evidence.jsonl
  • novel/occult_mystery/eval/hard_set_v1.jsonl
  • novel/occult_mystery/eval/hard_set_v1_extra.jsonl
  • novel/occult_mystery/eval/rejected_answer_cases.jsonl
  • novel/occult_mystery/eval/writer_questions.jsonl
  • novel/occult_mystery/manuscript/occult_mystery_001.txt
  • novel/occult_mystery/manuscript/occult_mystery_002.txt
  • novel/occult_mystery/manuscript/occult_mystery_003.txt
  • novel/occult_mystery/manuscript/occult_mystery_004.txt
  • novel/occult_mystery/manuscript/occult_mystery_005.txt
  • novel/occult_mystery/manuscript/occult_mystery_006.txt
  • novel/occult_mystery/manuscript/occult_mystery_007.txt
  • novel/occult_mystery/manuscript/occult_mystery_008.txt
  • novel/occult_mystery/manuscript/occult_mystery_009.txt
  • novel/occult_mystery/manuscript/occult_mystery_010.txt
  • novel/occult_mystery/manuscript/occult_mystery_011.txt
  • novel/occult_mystery/manuscript/occult_mystery_012.txt
  • novel/occult_mystery/manuscript/occult_mystery_013.txt
  • novel/occult_mystery/manuscript/occult_mystery_014.txt
  • novel/occult_mystery/manuscript/occult_mystery_015.txt
  • novel/occult_mystery/writer_room/author_decision_log.md
  • novel/occult_mystery/writer_room/canon_bible.md
  • novel/occult_mystery/writer_room/character_sheet.md
  • novel/occult_mystery/writer_room/discarded_settings.md
  • novel/occult_mystery/writer_room/draft_notes.md
  • novel/occult_mystery/writer_room/foreshadowing_ledger.md
  • novel/occult_mystery/writer_room/relationship_sheet.md
  • novel/occult_mystery/writer_room/revision_log.md
  • novel/occult_mystery/writer_room/session_logs/session_001_planning.md
  • novel/occult_mystery/writer_room/session_logs/session_002_after_chapter_002.md
  • novel/occult_mystery/writer_room/session_logs/session_003_revision_after_chapter_004.md
  • novel/occult_mystery/writer_room/timeline.md
  • novel/occult_mystery/writer_room/uncertainty_log.md
  • novel/romance_fantasy/eval/answer_mode_v1.jsonl
  • novel/romance_fantasy/eval/author_questions_raw.jsonl
  • novel/romance_fantasy/eval/benchmark_manifest.json
  • novel/romance_fantasy/eval/chapter_06_15_eval_expansion.jsonl
  • novel/romance_fantasy/eval/dataset_quality_report.json
  • novel/romance_fantasy/eval/feedback_seed.jsonl
  • novel/romance_fantasy/eval/gold_answers.jsonl
  • novel/romance_fantasy/eval/gold_evidence.jsonl
  • novel/romance_fantasy/eval/hard_set_v1.jsonl
  • novel/romance_fantasy/eval/hard_set_v1_extra.jsonl
  • novel/romance_fantasy/eval/rejected_answer_cases.jsonl
  • novel/romance_fantasy/eval/writer_questions.jsonl
  • novel/romance_fantasy/manuscript/romance_fantasy_001.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_002.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_003.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_004.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_005.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_006.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_007.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_008.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_009.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_010.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_011.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_012.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_013.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_014.txt
  • novel/romance_fantasy/manuscript/romance_fantasy_015.txt
  • novel/romance_fantasy/writer_room/author_decision_log.md
  • novel/romance_fantasy/writer_room/canon_bible.md
  • novel/romance_fantasy/writer_room/character_sheet.md
  • novel/romance_fantasy/writer_room/discarded_settings.md
  • novel/romance_fantasy/writer_room/draft_notes.md
  • novel/romance_fantasy/writer_room/foreshadowing_ledger.md
  • novel/romance_fantasy/writer_room/relationship_sheet.md
  • novel/romance_fantasy/writer_room/revision_log.md
  • novel/romance_fantasy/writer_room/session_logs/session_001_planning.md
  • novel/romance_fantasy/writer_room/session_logs/session_002_after_chapter_002.md
  • novel/romance_fantasy/writer_room/session_logs/session_003_revision_after_chapter_004.md
  • novel/romance_fantasy/writer_room/timeline.md
  • novel/romance_fantasy/writer_room/uncertainty_log.md
  • package.json
  • scripts/apply-memory-review-decisions.ts
  • scripts/assess-memory-writer-benchmark-thresholds.ts
  • scripts/audit-memory-canonical-export.ts
  • scripts/check-core-complexity.mjs
  • scripts/check-ipc-contract-map.mjs
  • scripts/check-main-service-boundaries.mjs
  • scripts/check-persist-contracts.mjs
  • scripts/check-utility-process-boundary.mjs
  • scripts/design/tokens-guard.mjs
  • scripts/design/unify-token-vocab.mjs
  • scripts/generate-memory-benchmark-seed.ts
  • scripts/generate-memory-review-template.ts
  • scripts/import-shadow-beta-novel-eval-cases.ts
  • scripts/materialize-memory-eval-cases.ts
  • scripts/memory-phase-status.ts
  • scripts/memory-review-backlog.ts
  • scripts/process-memory-entities.ts
  • scripts/process-memory-episode-jobs.ts
  • scripts/process-memory-narrative-summaries.ts
  • scripts/process-memory-temporal-facts.ts
  • scripts/rebuild-electron-if-needed.mjs
  • scripts/repair-memory-evidence-links.ts
  • scripts/run-answer-mode-eval.ts
  • scripts/run-memory-benchmark-latency.ts
  • scripts/run-memory-eval-suite.ts
  • scripts/run-memory-production-calibration.ts
  • scripts/run-shadow-beta-gemini-faithfulness.ts
  • scripts/seed-shadow-beta-novel-project.ts
  • scripts/sync-i18n.mjs
  • scripts/validate-shadow-beta-novel-pack.mjs
  • scripts/verify-memory-canonical-package-sync.ts
  • src/main/domains/analysis/index.ts
  • src/main/domains/manuscript/index.ts
  • src/main/domains/project/index.ts
  • src/main/domains/settings/llm.ts
  • src/main/domains/world/index.ts
  • src/main/handler/index.ts
  • src/main/handler/memory/index.ts
  • src/main/handler/memory/ipcMemoryHandlers.ts
  • src/main/handler/memory/types.ts
  • src/main/handler/project/ipcProjectHandlers.ts
  • src/main/handler/system/fs/fsPathApproval.ts
  • src/main/handler/system/fs/ipcFsHandlers.registry.ts
  • src/main/handler/system/window/ipcWindowHandlers.ts
  • src/main/handler/world/ipcWorldStorageHandlers.ts
  • src/main/infra/llm/index.ts
  • src/main/infra/llm/llmfitConstants.ts
  • src/main/infra/llm/llmfitInstaller.ts
  • src/main/infra/llm/llmfitService.ts
  • src/main/infra/llm/modelDownloader.ts
  • src/main/infra/llm/sidecarConstants.ts
  • src/main/infra/llm/sidecarManager.ts
  • src/main/lifecycle/app-ready/appReady.ts
  • src/main/manager/settings/settingsDefaults.ts
  • src/main/services/core/chapter/chapterContentValidation.ts
  • src/main/services/core/chapter/chapterWriteOperations.ts
  • src/main/services/core/project/exportEngine/worldPayload.ts
  • src/main/services/core/project/importOpen/collections.ts
  • src/main/services/core/project/projectExportEngine.ts
  • src/main/services/core/project/projectExportMapper.ts
  • src/main/services/core/project/projectExportPayload.ts
  • src/main/services/core/project/projectImportTransaction.ts
  • src/main/services/core/project/projectLuieSchemas.ts
  • src/main/services/core/project/projectRemoval.ts
  • src/main/services/features/autoExtract/autoExtractService.ts
  • src/main/services/features/dbMaintenance/dbMaintenanceService.ts
  • src/main/services/features/graphPlugin/apply.ts
  • src/main/services/features/index.ts
  • src/main/services/features/llm/embeddingModelConstants.ts
  • src/main/services/features/llm/embeddingModelService.ts
  • src/main/services/features/llm/index.ts
  • src/main/services/features/llm/modelRuntimeClient.ts
  • src/main/services/features/llm/modelRuntimeFactory.ts
  • src/main/services/features/llm/providers/deterministicProvider.ts
  • src/main/services/features/llm/providers/externalApiProvider.ts
  • src/main/services/features/llm/providers/geminiProvider.ts
  • src/main/services/features/llm/runtimeProxyConfig.ts
  • src/main/services/features/llm/runtimeRoutePlanner.ts
  • src/main/services/features/manuscript/chapterKeywords.ts
  • src/main/services/features/manuscript/chapterService.ts
  • src/main/services/features/manuscript/index.ts
  • src/main/services/features/memory/benchmark/index.ts
  • src/main/services/features/memory/benchmark/memoryBenchmarkLatencyRunner.ts
  • src/main/services/features/memory/benchmark/memoryWriterTaskBenchmark.ts
  • src/main/services/features/memory/embeddingProjector.ts
  • src/main/services/features/memory/entity/index.ts
  • src/main/services/features/memory/episode/index.ts
  • src/main/services/features/memory/eval/index.ts
  • src/main/services/features/memory/eval/memoryEvalRunner.ts
  • src/main/services/features/memory/index.ts
  • src/main/services/features/memory/job/index.ts
  • src/main/services/features/memory/memoryProjectionService.ts
  • src/main/services/features/memory/persistence/index.ts
  • src/main/services/features/memory/persistence/internal/index.ts
  • src/main/services/features/memory/persistence/memoryCanonicalPackage.ts
  • src/main/services/features/memory/projection/chunking.ts
  • src/main/services/features/memory/projection/index.ts
  • src/main/services/features/memory/projection/jobPolicy.ts
  • src/main/services/features/memory/projection/sourceRows.ts
  • src/main/services/features/memory/query/index.ts
  • src/main/services/features/memory/query/internal/formatter.ts
  • src/main/services/features/memory/query/internal/summaries.ts
  • src/main/services/features/memory/query/internal/temporal.ts
  • src/main/services/features/memory/query/narrativeMemoryApplicationFacades.ts
  • src/main/services/features/memory/query/narrativeMemoryQueryService.ts
  • src/main/services/features/memory/repair/index.ts
  • src/main/services/features/memory/review/index.ts
  • src/main/services/features/memory/status/index.ts
  • src/main/services/features/memory/status/memoryPhaseStatusReport.ts
  • src/main/services/features/memory/summary/index.ts
  • src/main/services/features/memory/temporal/index.ts
  • src/main/services/features/project/index.ts
  • src/main/services/features/project/projectService.ts
  • src/main/services/features/rag/contextAssembler.ts
  • src/main/services/features/rag/grounding.ts
  • src/main/services/features/rag/internal/contextAssembler.layer3.ts
  • src/main/services/features/rag/internal/contextAssembler.layers.ts
  • src/main/services/features/rag/internal/contextAssembler.search.ts
  • src/main/services/features/search/chunkOperations.ts
  • src/main/services/features/search/chunkSearch.ts
  • src/main/services/features/search/index.ts
  • src/main/services/features/search/searchService.ts
  • src/main/services/features/search/tokenNormalization.ts
  • src/main/services/features/snapshot/snapshotService.ts
  • src/main/services/features/sync/localApply/worldState.ts
  • src/main/services/features/sync/syncBundleApplier.ts
  • src/main/services/features/sync/syncPackagePersistence.ts
  • src/main/services/features/sync/syncWorldDocNormalizer.ts
  • src/main/services/features/utility/utilityProcessBridge/internal/core.ts
  • src/main/services/features/utility/utilityProcessBridge/internal/eventHandlers.ts
  • src/main/services/features/world/cache/appearanceCacheService.ts
  • src/main/services/features/world/constants.ts
  • src/main/services/features/world/documents/noteService.ts
  • src/main/services/features/world/documents/plotService.ts
  • src/main/services/features/world/documents/sceneService.ts
  • src/main/services/features/world/documents/scrapMemoService.ts
  • src/main/services/features/world/documents/synopsisService.ts
  • src/main/services/features/world/entities/characterService.ts
  • src/main/services/features/world/entities/eventService.ts
  • src/main/services/features/world/entities/factionService.ts
  • src/main/services/features/world/entities/termService.ts
  • src/main/services/features/world/entities/worldEntityService.ts
  • src/main/services/features/world/graph/entityRelationGraph.ts
  • src/main/services/features/world/graph/entityRelationMaintenance.ts
  • src/main/services/features/world/graph/entityRelationMapper.ts
  • src/main/services/features/world/graph/entityRelationPointers.ts
  • src/main/services/features/world/graph/entityRelationService.ts
  • src/main/services/features/world/graph/worldMentionService.ts
  • src/main/services/features/world/index.ts
  • src/main/services/features/worldReplica/worldReplicaService.ts
  • src/main/services/index.ts
  • src/main/utility/llm/runtimeMaterializer.ts
  • src/main/utility/rag/ragQaWorker.ts
  • src/preload/api/projectApi.ts
  • src/preload/api/types.ts
  • src/preload/index.ts
  • src/renderer/AGENTS.md
  • src/renderer/src/app/App.tsx
  • src/renderer/src/app/setup.ts
  • src/renderer/src/app/shell/BootstrapGate.tsx
  • src/renderer/src/app/shell/QuitOverlay.tsx
  • src/renderer/src/app/shell/useThemeAttributes.ts
  • src/renderer/src/components/ui/button.tsx
  • src/renderer/src/features/canvas/__fixtures__/mockExplorerData.ts
  • src/renderer/src/features/canvas/components/binder/CanvasNodeInspector.tsx
  • src/renderer/src/features/canvas/components/binder/GraphNodeInspector.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/ChapterInspectorView.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/ChapterSummarySection.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/CharacterInspectorView.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/ConnectedCharactersSection.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/ConnectedMemosSection.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/EventInspectorView.tsx
  • src/renderer/src/features/canvas/components/binder/inspectors/GenericEntityView.tsx
  • src/renderer/src/features/canvas/components/graph/GraphSurface.tsx
  • src/renderer/src/features/canvas/components/graph/GraphWorkspace.tsx
  • src/renderer/src/features/canvas/components/graph/PensiveNode.tsx
  • src/renderer/src/features/canvas/components/graph/graphSurfaceParts/GraphHoverCard.tsx
  • src/renderer/src/features/canvas/components/graph/graphSurfaceParts/GraphLegendModal.tsx
  • src/renderer/src/features/canvas/components/graph/graphSurfaceParts/index.ts
  • src/renderer/src/features/canvas/components/graph/graphSurfaceParts/useFocusSync.ts
  • src/renderer/src/features/canvas/components/graph/graphSurfaceParts/useGraphDataFiltering.ts
  • src/renderer/src/features/canvas/components/shell/CanvasActivityShell.tsx
  • src/renderer/src/features/canvas/components/shell/CanvasDocumentView.tsx
  • src/renderer/src/features/canvas/components/shell/CanvasEntityPreview.tsx
  • src/renderer/src/features/canvas/components/shell/CanvasPane.tsx
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/GraphFilterSidebar.tsx
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/TreeNode.tsx
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/explorerTree.ts
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/index.ts
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/useCanvasFileActions.ts
  • src/renderer/src/features/canvas/components/shell/canvasActivityShellParts/useExplorerData.ts
  • src/renderer/src/features/canvas/components/shell/document/CanvasDocumentChrome.tsx
  • src/renderer/src/features/canvas/components/shell/document/CanvasMarkdownEditor.tsx
  • src/renderer/src/features/canvas/components/shell/document/canvasDocumentModel.ts
  • src/renderer/src/features/canvas/components/shell/document/useCanvasEntity.ts
  • src/renderer/src/features/canvas/components/viewport/BaseCanvasViewport.tsx
  • src/renderer/src/features/canvas/components/viewport/BottomInteractiveToolbar.tsx
  • src/renderer/src/features/canvas/components/viewport/CanvasStatusBar.tsx
  • src/renderer/src/features/canvas/components/viewport/StaticCanvasViewport.tsx
  • src/renderer/src/features/canvas/components/viewport/edges/EdgeLabel.tsx
  • src/renderer/src/features/canvas/components/viewport/edges/RelationEdge.tsx
  • src/renderer/src/features/canvas/components/viewport/nodes/EntityNode.tsx
  • src/renderer/src/features/canvas/constants/edge.ts
  • src/renderer/src/features/canvas/constants/graphMockData.ts
  • src/renderer/src/features/canvas/constants/node.ts
  • src/renderer/src/features/canvas/constants/panel.ts
  • src/renderer/src/features/canvas/hooks/useCanvasLayoutPersist.ts
  • src/renderer/src/features/canvas/hooks/useStaticProjection.ts
  • src/renderer/src/features/canvas/stores/canvasViewStore.ts
  • src/renderer/src/features/canvas/stores/graph/graphStore.ts
  • src/renderer/src/features/canvas/types/canvas.types.ts
  • src/renderer/src/features/canvas/types/canvasTokens.ts
  • src/renderer/src/features/canvas/types/reactFlow.types.ts
  • src/renderer/src/features/canvas/utils/canvasFlowAdapter.ts
  • src/renderer/src/features/canvas/utils/canvasProjectionAdapter.ts
  • src/renderer/src/features/canvas/utils/graphLayout.ts
  • src/renderer/src/features/canvas/utils/graphSurfaceData.ts
  • src/renderer/src/features/canvas/utils/index.ts
  • src/renderer/src/features/canvas/utils/nodeStyles.ts
  • src/renderer/src/features/editor/components/Editor.tsx
  • src/renderer/src/features/editor/components/EditorBubbleMenu.tsx
  • src/renderer/src/features/editor/components/EditorRuler.tsx
  • src/renderer/src/features/editor/components/EditorToolbar.tsx
  • src/renderer/src/features/editor/components/FontSelector.tsx
  • src/renderer/src/features/editor/components/InspectorPanel.tsx
  • src/renderer/src/features/editor/components/SlashMenu.tsx
  • src/renderer/src/features/editor/components/SmartLinkTooltip.tsx
  • src/renderer/src/features/editor/components/hooks/useEditorExtensions.ts
  • src/renderer/src/features/editor/components/toolbar/MoreMenu.tsx
  • src/renderer/src/features/editor/components/toolbar/menus.tsx
  • src/renderer/src/features/editor/components/toolbar/primitives.tsx
  • src/renderer/src/features/editor/components/toolbar/types.ts
  • src/renderer/src/features/editor/hooks/useEditorConfig.ts
  • src/renderer/src/features/editor/stores/editorStore.ts
  • src/renderer/src/features/export/components/ExportPreview.tsx
  • src/renderer/src/features/export/components/ExportPreviewPanel.tsx
  • src/renderer/src/features/export/components/ExportSidebar.tsx
  • src/renderer/src/features/export/components/ExportWindow.tsx
  • src/renderer/src/features/manuscript/components/BinderSidebar.tsx
  • src/renderer/src/features/manuscript/components/BinderSidebarTabs.tsx
  • src/renderer/src/features/manuscript/components/BinderTabButton.tsx
  • src/renderer/src/features/manuscript/components/DocsSidebar.tsx
  • src/renderer/src/features/manuscript/components/FocusHoverSidebar.tsx
  • src/renderer/src/features/manuscript/components/ScrivenerSidebar.tsx
  • src/renderer/src/features/manuscript/components/Sidebar.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarChapterList.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarCharacterList.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarEventList.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarFactionList.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarMemoList.tsx
  • src/renderer/src/features/manuscript/components/sections/SidebarWorldList.tsx
  • src/renderer/src/features/research/components/AnalysisSection.tsx
  • src/renderer/src/features/research/components/MemoSection.tsx
  • src/renderer/src/features/research/components/ResearchPanel.tsx
  • src/renderer/src/features/research/components/SynopsisSection.tsx
  • src/renderer/src/features/research/components/WorldPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/chat/MessageList.tsx
  • src/renderer/src/features/research/components/analysisSection/chat/PromptComposer.tsx
  • src/renderer/src/features/research/components/analysisSection/chat/useRagChat.ts
  • src/renderer/src/features/research/components/analysisSection/review/evaluation/MemoryEvalReportPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/ConflictQueuePanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/EntityAliasReviewPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/EntityReviewPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/EpisodeReviewPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/FactReviewPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/StaleEvidenceReviewPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/queue/useMemoryReviewQueues.ts
  • src/renderer/src/features/research/components/analysisSection/review/summary/NarrativeSummaryStatusPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/review/summary/SummaryDrawer.tsx
  • src/renderer/src/features/research/components/analysisSection/runtime/RuntimeStatusDot.tsx
  • src/renderer/src/features/research/components/analysisSection/runtime/RuntimeStatusPanel.tsx
  • src/renderer/src/features/research/components/analysisSection/shared/types.ts
  • src/renderer/src/features/research/components/character/CharacterSidebarList.tsx
  • src/renderer/src/features/research/components/event/EventDetailView.tsx
  • src/renderer/src/features/research/components/event/EventSidebarList.tsx
  • src/renderer/src/features/research/components/faction/FactionDetailView.tsx
  • src/renderer/src/features/research/components/faction/FactionSidebarList.tsx
  • src/renderer/src/features/research/components/memo/MemoMainView.tsx
  • src/renderer/src/features/research/components/memo/MemoSidebarList.tsx
  • src/renderer/src/features/research/components/shared/EntitySidebarList.tsx
  • src/renderer/src/features/research/components/shared/NotionDocumentView.tsx
  • src/renderer/src/features/research/components/wiki/CharacterDocumentView.tsx
  • src/renderer/src/features/research/components/wiki/CharacterVisualPanel.tsx
  • src/renderer/src/features/research/components/wiki/EntityDetailView.tsx
  • src/renderer/src/features/research/components/wiki/EntityManagerShell.tsx
  • src/renderer/src/features/research/components/wiki/Infobox.tsx
  • src/renderer/src/features/research/components/wiki/RadarChart.tsx
  • src/renderer/src/features/research/components/wiki/WikiContentPanel.tsx
  • src/renderer/src/features/research/components/wiki/WikiDetailView.tsx
  • src/renderer/src/features/research/components/wiki/WikiSection.tsx
  • src/renderer/src/features/research/components/wiki/hooks/useCharacterWikiAttrs.ts
  • src/renderer/src/features/research/components/wiki/hooks/useEffectiveCharacterSections.ts
  • src/renderer/src/features/research/components/wiki/types.ts
  • src/renderer/src/features/research/components/wiki/visual/EntityNode.tsx
  • src/renderer/src/features/research/components/wiki/visual/EntityVisualPanel.tsx
  • src/renderer/src/features/research/components/wiki/visual/IdentityCard.tsx
  • src/renderer/src/features/research/components/wiki/visual/RelatedEntities.tsx
  • src/renderer/src/features/research/components/wiki/visual/RelationGraph.tsx
  • src/renderer/src/features/research/components/world/DrawingCanvas.tsx
  • src/renderer/src/features/research/components/world/MindMapBoard.tsx
  • src/renderer/src/features/research/components/world/PlotBoard.tsx
  • src/renderer/src/features/research/components/world/SynopsisEditor.tsx
  • src/renderer/src/features/research/components/world/TermCard.tsx
  • src/renderer/src/features/research/components/world/TermManager.tsx
  • src/renderer/src/features/research/components/world/index.tsx
  • src/renderer/src/features/research/services/worldPackageStorageHelpers/replicaStorage.ts
  • src/renderer/src/features/research/stores/analysis/actions/conflictQueueActions.ts
  • src/renderer/src/features/research/stores/analysis/actions/memoryReviewActions.ts
  • src/renderer/src/features/research/stores/analysis/actions/ragChatActions.ts
  • src/renderer/src/features/research/stores/analysis/actions/staleEvidenceActions.ts
  • src/renderer/src/features/research/stores/analysis/analysisStore.actions.ts
  • src/renderer/src/features/research/stores/analysis/analysisStore.ts
  • src/renderer/src/features/research/stores/analysis/analysisStore.types.ts
  • src/renderer/src/features/research/stores/memo/memoStore.ts
  • src/renderer/src/features/research/stores/worldBuilding/worldBuildingActions/types.ts
  • src/renderer/src/features/research/stores/worldBuilding/worldBuildingStore.actions.ts
  • src/renderer/src/features/research/stores/worldBuilding/worldBuildingStore.graph.ts
  • src/renderer/src/features/research/stores/worldBuilding/worldBuildingStore.types.ts
  • src/renderer/src/features/settings/components/SettingsModal.tsx
  • src/renderer/src/features/settings/components/SettingsModalConfig.ts
  • src/renderer/src/features/settings/components/SyncConflictResolverModal.tsx
  • src/renderer/src/features/settings/components/tabs/AppearanceTab.tsx
  • src/renderer/src/features/settings/components/tabs/EditorTab.tsx
  • src/renderer/src/features/settings/components/tabs/LanguageTab.tsx
  • src/renderer/src/features/settings/components/tabs/ModelTab.tsx
  • src/renderer/src/features/settings/components/tabs/RecoveryTab.tsx
  • src/renderer/src/features/settings/components/tabs/ShortcutsTab.tsx
  • src/renderer/src/features/settings/components/tabs/SyncTab.tsx
  • src/renderer/src/features/settings/components/tabs/modelTabSections/LlmfitCard.tsx
  • src/renderer/src/features/settings/components/tabs/modelTabSections/OllamaEndpointCard.tsx
  • src/renderer/src/features/settings/components/tabs/modelTabSections/RebuildMemoryCard.tsx
  • src/renderer/src/features/settings/components/tabs/modelTabSections/index.ts
  • src/renderer/src/features/settings/components/tabs/modelTabSections/types.ts
  • src/renderer/src/features/settings/hooks/useSettingsModel.ts
  • src/renderer/src/features/snapshot/components/SnapshotDiffModal.tsx
  • src/renderer/src/features/snapshot/components/SnapshotViewer.tsx
  • src/renderer/src/features/startup/components/StartupWizard.tsx
  • src/renderer/src/features/workspace/components/ProjectTemplateSelector.tsx
  • src/renderer/src/features/workspace/components/SidebarCollapseStrip.tsx
  • src/renderer/src/features/workspace/components/UpdaterNotification.tsx
  • src/renderer/src/features/workspace/components/banner/DataRecoveryBanner.tsx
  • src/renderer/src/features/workspace/components/banner/OfflineBanner.tsx
  • src/renderer/src/features/workspace/components/layout/EditorLayout.tsx
  • src/renderer/src/features/workspace/components/layout/EditorRoot.tsx
  • src/renderer/src/features/workspace/components/layout/FloatingAnalysisPanel.tsx
  • src/renderer/src/features/workspace/components/layout/FocusLayout.tsx
  • src/renderer/src/features/workspace/components/layout/GoogleDocsEditorColumn.tsx
  • src/renderer/src/features/workspace/components/layout/GoogleDocsHeader.tsx
  • src/renderer/src/features/workspace/components/layout/GoogleDocsLayout.tsx
  • src/renderer/src/features/workspace/components/layout/GoogleDocsPanelRail.tsx
  • src/renderer/src/features/workspace/components/layout/GoogleDocsRightPanel.tsx
  • src/renderer/src/features/workspace/components/layout/MainLayout.tsx
  • src/renderer/src/features/workspace/components/layout/ScrivenerLayout.tsx
  • src/renderer/src/features/workspace/components/layout/useGoogleDocsLayoutState.ts
  • src/renderer/src/features/workspace/components/panels/ContextPanel.tsx
  • src/renderer/src/features/workspace/components/panels/WorkspacePanels.tsx
  • src/renderer/src/features/workspace/components/project-selector/ProjectActionDialogs.tsx
  • src/renderer/src/features/workspace/components/project-selector/ProjectCategorySidebar.tsx
  • src/renderer/src/features/workspace/components/project-selector/ProjectContextMenu.tsx
  • src/renderer/src/features/workspace/components/project-selector/RecentProjectsSection.tsx
  • src/renderer/src/features/workspace/components/project-selector/RestoreBackupDialog.tsx
  • src/renderer/src/features/workspace/components/project-selector/TemplateGrid.tsx
  • src/renderer/src/features/workspace/hooks/useCollapsibleSidebar.ts
  • src/renderer/src/features/workspace/hooks/useFixedPixelPanelGroupLayout.ts
  • src/renderer/src/features/workspace/hooks/useLayoutPersist.ts
  • src/renderer/src/features/workspace/hooks/useProjectLayoutPersistence.ts
  • src/renderer/src/features/workspace/hooks/useResizablePanelPresence.ts
  • src/renderer/src/features/workspace/hooks/useSidebarResizeCommit.ts
  • src/renderer/src/features/workspace/services/uiModeIntegrity.ts
  • src/renderer/src/features/workspace/stores/projectLayoutStore.ts
  • src/renderer/src/features/workspace/stores/uiStore.persist.ts
  • src/renderer/src/features/workspace/stores/uiStore.state.ts
  • src/renderer/src/features/workspace/utils/docsLayoutModel.ts
  • src/renderer/src/features/workspace/utils/googleDocsPanelResize.ts
  • src/renderer/src/features/workspace/utils/mainLayoutResize.ts
  • src/renderer/src/features/workspace/utils/scrivenerLayoutResize.ts
  • src/renderer/src/i18n/index.ts
  • src/renderer/src/i18n/locales/deepMerge.ts
  • src/renderer/src/i18n/locales/en.ts
  • src/renderer/src/i18n/locales/en/base/Analysis.ts
  • src/renderer/src/i18n/locales/en/base/Editor.ts
  • src/renderer/src/i18n/locales/en/base/Research.ts
  • src/renderer/src/i18n/locales/en/base/Settings.ts
  • src/renderer/src/i18n/locales/en/base/core.ts
  • src/renderer/src/i18n/locales/en/base/settingsAdvanced.ts
  • src/renderer/src/i18n/locales/en/export.ts
  • src/renderer/src/i18n/locales/en/missing.ts
  • src/renderer/src/i18n/locales/en/modules/canvas.ts
  • src/renderer/src/i18n/locales/en/scrivener.ts
  • src/renderer/src/i18n/locales/en/snapshot.ts
  • src/renderer/src/i18n/locales/en/trash.ts
  • src/renderer/src/i18n/locales/en/workspace/World.ts
  • src/renderer/src/i18n/locales/en/workspace/writing.ts
  • src/renderer/src/i18n/locales/ja.ts
  • src/renderer/src/i18n/locales/ja/base/Analysis.ts
  • src/renderer/src/i18n/locales/ja/base/Editor.ts
  • src/renderer/src/i18n/locales/ja/base/Research.ts
  • src/renderer/src/i18n/locales/ja/base/Settings.ts
  • src/renderer/src/i18n/locales/ja/base/core.ts
  • src/renderer/src/i18n/locales/ja/base/settingsAdvanced.ts
  • src/renderer/src/i18n/locales/ja/export.ts
  • src/renderer/src/i18n/locales/ja/missing.ts
  • src/renderer/src/i18n/locales/ja/modules/canvas.ts
  • src/renderer/src/i18n/locales/ja/scrivener.ts
  • src/renderer/src/i18n/locales/ja/snapshot.ts
  • src/renderer/src/i18n/locales/ja/trash.ts
  • src/renderer/src/i18n/locales/ja/workspace/World.ts
  • src/renderer/src/i18n/locales/ja/workspace/writing.ts
  • src/renderer/src/i18n/locales/ko.ts
  • src/renderer/src/i18n/locales/ko/base/Analysis.ts
  • src/renderer/src/i18n/locales/ko/base/Settings.ts
  • src/renderer/src/i18n/locales/ko/base/settingsAdvanced.ts
  • src/renderer/src/i18n/locales/ko/missing.ts
  • src/renderer/src/i18n/locales/ko/modules/canvas.ts
  • src/renderer/src/i18n/locales/ko/workspace/writing.ts
  • src/renderer/src/shared/constants/canvasSizing.ts
  • src/renderer/src/shared/constants/layoutSizing.ts
  • src/renderer/src/shared/constants/sidebarSizing.ts
  • src/renderer/src/shared/error-boundaries/FeatureErrorBoundary.tsx
  • src/renderer/src/shared/error-boundaries/GlobalErrorBoundary.tsx
  • src/renderer/src/shared/store/createCRUDStore.ts
  • src/renderer/src/shared/store/createWorldEntityCRUDStore.ts
  • src/renderer/src/styles/components/canvas.css
  • src/renderer/src/styles/components/editor.css
  • src/renderer/src/styles/global.behaviors.css
  • src/renderer/src/styles/global.css
  • src/renderer/src/styles/global.tokens.css
  • src/shared/api/io.contract.ts
  • src/shared/constants/editor/defaults.ts
  • src/shared/ipc/channels.ts
  • src/shared/schemas/common.ts
  • src/shared/schemas/manuscript.ts
  • src/shared/schemas/project.ts
  • src/shared/schemas/search.ts
  • src/shared/schemas/settings.ts
  • src/shared/schemas/world.ts
  • src/shared/types/index.ts
  • src/shared/types/memoryEval.ts
  • src/shared/types/search/narrative.ts
  • src/shared/types/search/rag.ts
  • src/shared/types/settings.ts
  • src/shared/types/world.ts
  • src/shared/ui/StatusFooter.tsx
  • src/shared/world/worldGraphDocument.ts
  • tailwind.config.js
  • task.md
  • tests/dom/analysisMessageSafety.test.tsx
  • tests/dom/analysisViewMode.test.tsx
  • tests/dom/conflictQueuePanelWriterFlow.test.tsx
  • tests/dom/promptComposerTimelineScope.test.tsx
  • tests/dom/staleEvidenceReviewPanel.test.tsx
  • tests/fixtures/writerFlowSyntheticNovel.ts
  • tests/main/handler/ipcInputValidation.memory.test.ts
  • tests/main/handler/ipcInputValidation.shared.ts
  • tests/main/handler/projectIpcPathApproval.test.ts
  • tests/main/lifecycle/appReadyDeferredWorker.test.ts
  • tests/main/services/appearanceCacheIsolation.test.ts
  • tests/main/services/autoSaveManager.runtimeStats.test.ts
  • tests/main/services/chapterService.test.ts
  • tests/main/services/chapterSummaryProjector.test.ts
  • tests/main/services/dbMaintenanceService.test.ts
  • tests/main/services/embeddingModelConstants.test.ts
  • tests/main/services/embeddingProjector.test.ts
  • tests/main/services/entityRelationService.test.ts
  • tests/main/services/llmfitInstaller.test.ts
  • tests/main/services/llmfitService.test.ts
  • tests/main/services/luieDbLossRecovery.test.ts
  • tests/main/services/mainEmbeddingBoundary.test.ts
  • tests/main/services/memory/benchmark/memoryBenchmarkLatencyRunner.test.ts
  • tests/main/services/memory/benchmark/memoryWriterTaskBenchmark.test.ts
  • tests/main/services/memory/eval/memoryEvalRunner.test.ts
  • tests/main/services/memory/persistence/memoryCanonicalPackage.test.ts
  • tests/main/services/memory/query/narrativeMemoryTemporalScope.test.ts
  • tests/main/services/memory/status/memoryPhaseStatusReport.test.ts
  • tests/main/services/memoryProjectionService.test.ts
  • tests/main/services/modelDownloader.test.ts
  • tests/main/services/modelRuntimeFactory.sidecar.test.ts
  • tests/main/services/modelRuntimeFactory.utilityBoundary.test.ts
  • tests/main/services/projectDeletionPolicy.security.test.ts
  • tests/main/services/projectExportEngine.test.ts
  • tests/main/services/projectImportCollections.test.ts
  • tests/main/services/projectRemoval.deleteOrder.test.ts
  • tests/main/services/projectService.immediateDurability.test.ts
  • tests/main/services/projectService.packageAttachment.test.ts
  • tests/main/services/projectService.pathSafety.test.ts
  • tests/main/services/projectService.test.ts
  • tests/main/services/projectService.validation.test.ts
  • tests/main/services/providerClientBoundary.test.ts
  • tests/main/services/rag/contextAssemblerSearch.test.ts
  • tests/main/services/ragContextAssemblerSource.test.ts
  • tests/main/services/ragGrounding.test.ts
  • tests/main/services/ragRejectedAnswerGuard.test.ts
  • tests/main/services/ragShadowBetaChapterScope.test.ts
  • tests/main/services/runtimeRoutePlanner.test.ts
  • tests/main/services/search/chunkSearchTokens.test.ts
  • tests/main/services/searchService.test.ts
  • tests/main/services/searchServiceEmbeddingBoundary.test.ts
  • tests/main/services/searchServiceFallback.test.ts
  • tests/main/services/sidecarManager.test.ts
  • tests/main/services/snapshotResilience.test.ts
  • tests/main/services/snapshotService.packageBehavior.unit.test.ts
  • tests/main/services/snapshotService.test.ts
  • tests/main/services/syncBundleApplier.commitOrder.test.ts
  • tests/main/services/syncLocalApply.test.ts
  • tests/main/services/syncPackagePersistence.retry.test.ts
  • tests/main/services/syncPackagePersistence.test.ts
  • tests/main/services/syncService.test.ts
  • tests/main/services/syncWorldDocNormalizer.test.ts
  • tests/main/services/utilityRuntimeMaterializer.test.ts
  • tests/main/services/worldEntityService.test.ts
  • tests/main/services/worldReplicaService.test.ts
  • tests/renderer/analysisConflictResolution.test.ts
  • tests/renderer/analysisEntityAliasReview.test.ts
  • tests/renderer/analysisEpisodeReview.test.ts
  • tests/renderer/analysisFactReview.test.ts
  • tests/renderer/analysisMemoryReviewWorkflow.test.ts
  • tests/renderer/services/worldPackageStorage.test.ts
  • tests/renderer/stores/canvasViewStore.test.ts
  • tests/renderer/stores/createCRUDStore.test.ts
  • tests/renderer/utils/sidebarSizing.scoping.test.ts
  • tests/renderer/workspace/docsLayoutModel.test.ts
  • tests/renderer/workspace/googleDocsPanelResize.test.ts
  • tests/renderer/workspace/layoutPersist.test.ts
  • tests/renderer/workspace/mainLayoutResize.test.ts
  • tests/renderer/workspace/mainLayoutStructure.test.ts
  • tests/renderer/workspace/scrivenerLayoutResize.test.ts
  • tests/renderer/workspace/scrivenerLayoutStructure.test.ts
  • tests/scripts/answerModeEvalRunner.test.ts
  • tests/scripts/buildWarningNormalization.test.ts
  • tests/scripts/mainServiceBoundaries.test.ts
  • tests/scripts/memoryRunEvalSuiteRunner.test.ts
  • tests/scripts/packageDurabilityBoundary.test.ts
  • tests/scripts/phase5WriterWorkflowCoverage.test.ts
  • tests/scripts/utilityProcessBoundary.test.ts
  • tests/shared/luieImportedIdSchemas.test.ts
  • tests/shared/worldGraphDocument.test.ts
  • tests/shared/worldReplicaDocumentSchema.test.ts
  • tmp/pdfs/imsehun.txt
  • vitest.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/design

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codacy-production

codacy-production Bot commented Jun 29, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 39 critical · 19 medium

Alerts:
⚠ 58 issues (≤ 0 issues of at least minor severity)

Results:
58 new issues

Category Results
UnusedCode 2 medium
BestPractice 17 medium
Security 39 critical

View in Codacy

🟢 Metrics 1584 complexity · 52 duplication

Metric Results
Complexity 1584
Duplication 52

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dd65a57908

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +55 to +58
const [initialBody] = useState(() =>
sections
.map((s) => `# ${s.label}\n\n${getSectionContent(s.id)}`.trim())
.join("\n\n"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 엔티티 전환 시 문서 본문을 재초기화하세요

문서 뷰가 열린 상태에서 다른 캐릭터/이벤트/팩션을 선택하면 이 state는 최초 마운트 때의 sections만 유지합니다. 부모들은 NotionDocumentView를 entity id로 key하지 않으므로 TipTap에는 이전 엔티티 본문이 남고, 다음 debounce/언마운트 저장이 새 엔티티의 setter로 실행되어 위키 섹션을 덮어쓸 수 있습니다. entity id/key를 전달해 remount하거나 sections/content 변경 시 editor content를 갱신해야 합니다.

Useful? React with 👍 / 👎.

Comment on lines +22 to +23
if (!graphData?.nodes.length) {
return { sourceNodes: MOCK_GRAPH_NODES, sourceEdges: MOCK_GRAPH_EDGES };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 빈 그래프에서 목업 노드를 반환하지 마세요

새 프로젝트처럼 graphData가 로드 전이거나 노드가 0개인 경우 이 fallback 때문에 실제 데이터 대신 진서/세린 등 샘플 그래프가 렌더되고 필터/inspector 후보에도 섞입니다. 사용자가 비어 있는 프로젝트를 열었을 때 허구의 관계가 실제 세계관처럼 보이므로, 데모 모드가 아니라면 빈 배열을 반환해야 합니다.

Useful? React with 👍 / 👎.

Comment on lines +26 to +30
export const getProjectLayoutPersistenceMode = (
uiMode: EditorUiMode,
mainViewType: MainView["type"],
): ProjectLayoutPersistenceMode =>
mainViewType === "canvas" ? "canvas" : uiMode;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge canvas 모드를 지원 모드에 포함하세요

캔버스를 열면 EditorRoot가 이 함수 결과를 useProjectLayoutPersistence에 넘기는데, hook 내부 isSupportedModedefault/docs/editor/scrivener만 허용합니다. 따라서 mainViewTypecanvas인 동안 restore/persist effect가 전부 return되어 이번 변경에서 추가한 canvas.activity/canvas.binder 비율과 열림 상태가 프로젝트별로 저장되지 않습니다. canvas를 switch 처리하거나 기존 uiMode로 유지해야 합니다.

Useful? React with 👍 / 👎.

panelRef={sidebarPanelRef}
collapsible
collapsedSize={0}
defaultSize={isSidebarOpen ? sidebarDefaultSize : 0}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 애니메이션 비활성화 시 패널을 실제로 접으세요

enableAnimations=false 상태에서 사이드바를 닫으면 useResizablePanelPresenceshouldRender만 false로 바꾸고 panel.collapse()를 호출하지 않습니다. 이 변경으로 Panel은 항상 마운트되어 있고 defaultSize는 이미 등록된 패널 크기를 제어하지 않으므로, 콘텐츠만 사라진 빈 사이드바 폭이 남습니다. 비애니메이션 경로에서도 collapse/resize(0)를 호출하거나 닫힌 패널을 다시 언마운트해야 합니다.

Useful? React with 👍 / 👎.

Comment thread package.json
"jszip": "3.10.1",
"sanitize-filename": "1.6.4",
"sqlite-vec": "0.1.9",
"tiptap-markdown": "^0.9.0",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 새 의존성 버전을 정확히 고정하세요

이 저장소의 scripts/check-version-pins.mjs는 dependency range를 금지하고, 직접 실행해 보니 이 추가분에 대해 dependencies.tiptap-markdown uses non-pinned range "^0.9.0"를 보고합니다. .npmrc의 save-exact 정책과도 어긋나므로 새 품질 게이트 위반을 추가하지 않도록 0.9.0처럼 정확한 버전으로 고정해야 합니다.

Useful? React with 👍 / 👎.

ummsehun added 25 commits June 29, 2026 17:06
- Replace rounded-[18px/24px/28px] with rounded-panel / rounded-full / rounded-3xl
- Remove hardcoded inset shadows and rgba shadows; use shadow-panel / shadow-sm
- Replace hardcoded neutral-* / emerald-* / white/5 colors with semantic tokens
- Unify glassmorphism: bg-panel/surface with backdrop-blur + border-border/30
- Replace transition-all with explicit transition-[colors,transform,box-shadow]

Relates to ORIGINAL_REQUEST glassmorphism + liquid UI requirements
- Add role=tablist/tab + aria-selected to chat/review tabs
- Add aria-label to icon-only buttons (plus, minimize, dock, view toggle)
- Add aria-label to PromptComposer textarea
- Add aria-haspopup/aria-expanded/aria-controls to RuntimeStatusDot popover
- Add role=alert to review panel error messages
- Add aria-hidden to decorative MessageList icons
- Add role=separator + tabIndex to floating resize handles
- Add resizeHandle i18n key
…id accent to liquid glass (bg-panel/80, border-border/30, backdrop-blur-xl, shadow-panel)\n- Add aria-label/aria-hidden to FAB button and icon; switch div -> button\n- Reset isMinimized=false when docking or switching to floating view\n- Use i18n title for FAB tooltip
- Remove 6 review queue panels from AnalysisSection review tab
- Remove MemoryEvalReportPanel from review tab rendering
- Keep NarrativeSummaryStatusPanel and SummaryDrawer via analysis store state
- Connect PromptComposer summary toggle to analysis store
- Show safety chrome for memory-intent questions with effective safety labels
- Update analysisViewMode DOM tests for summary-only review tab
- Update analysisMessageSafety DOM tests to match current safety label behavior
- Verify typecheck and analysis DOM tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant