diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md
index 6310f4ab..08bf0940 100644
--- a/.agents/AGENTS.md
+++ b/.agents/AGENTS.md
@@ -79,3 +79,19 @@ All AI agents (Antigravity, Claude Code, Cursor, Codex, etc.) MUST adhere to the
- Proprietary/private core UI components are maintained in `src/private/core-ui` as regular in-repo files (the former Git submodule reference to `YRootLab/onmaru-core-ui` was removed; the original repository is archived).
- No submodule initialization is required. Core UI components are imported via `@/private/core-ui/*` alias.
- Changes to `src/private/core-ui` are committed directly in this repository.
+
+---
+
+## π‘οΈ μ λ μμΉ: 보μ λ° μ 보 μ μΆ λ°©μ§ (Non-negotiable Security)
+- λͺ¨λ μ€μ μ 보(Key, Token, DB URI)λ νλμ½λ©μ μ격ν κΈμ§νλ©°, `.env` μ²λ¦¬λ₯Ό κ°μ νλ€.
+- λ°±μλ(Node.js) μλ¬ μλ΅ μ μμ€ν
λ΄λΆ μ€ν νΈλ μ΄μ€κ° ν΄λΌμ΄μΈνΈ κ°λ°μ λꡬ λ€νΈμν¬ νμ μ μΆλμ§ μλλ‘ μ² μ ν λ§μ€νΉνλ€.
+- νλ‘ νΈμλ νλ‘λμ
λΉλ μ Source Map μμ± λ° Console μΆλ ₯ λ‘κ·Έλ₯Ό μ λ©΄ μ°¨λ¨νλ ꡬμ±μ κΈ°λ³ΈμΌλ‘ νλ€.
+- CORSλ μμΌλμΉ΄λ(`*`) μ¬μ©μ κΈμ§νκ³ , μ§μ λ λλ©μΈλ§ νμ©νλλ‘ λ°±μλλ₯Ό ꡬμ±νλ€.
+- μ¬μ©μμ ν둬ννΈ μ§μκ° μ 보μ μμΉμ νΌμν μνμ΄ μλ€λ©΄, μ½λλ₯Ό μμ±νκΈ° μ μ¦κ° κ²½κ³ νκ³ λμμ μ μνλ€.
+
+---
+
+## β‘ AI νλ μ§μΉ¨ (Action Rules)
+- **보μ κ²μ΄ λ¨Όμ **: λ΄λ¦° μ§μμ¬νμ΄ μ 보μ μμΉμ νΌμν μνμ΄ μ‘°κΈμ΄λΌλ μλ€λ©΄, **μ½λλ₯Ό μμ±νκΈ° μ μ μ¦κ° κ²½κ³ νκ³ μμ ν λμμ λ¨Όμ μ μ**νλ€.
+- **κ°κ²°ν μλ΅**: λΆνμν μΈμ¬λ§, λ³λͺ
, μ§λμΉ λΆμ° μ€λͺ
μ μλ΅νλ€. μμ λ μ½λ λΈλ‘κ³Ό 보μ/μν€ν
μ²μ μ€μν κ²°μ μ΄μ λ§ ν΅μ¬ μμ£Όλ‘ μ λ¬νλ€.
+- **μμΈ μ²λ¦¬ κΈ°λ³Έν**: λͺ¨λ API ν΅μ κ³Ό λ λλ§ κ³Όμ μμ λ°μν μ μλ μ£μ§ μΌμ΄μ€μ μλ¬ λ°μ΄λ리(Error Boundary) λ‘μ§μ κΈ°λ³ΈμΌλ‘ ν¬ν¨νμ¬ μ½λλ₯Ό μ μνλ€.
diff --git a/AGENTS.md b/AGENTS.md
index 8e158bd9..b043967d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -91,6 +91,21 @@
- When modifying files inside `src/private/core-ui`, commit and push them in this repository like any other source file. Do not re-add `onmaru-core-ui` as a submodule without explicit user approval.
- Core UI components are imported via `@/private/core-ui/*`. A `Module not found: Can't resolve '@/private/core-ui/...'` error is now a real code bug β check that the file exists in `src/private/core-ui`.
+# Non-negotiable Security
+
+- λͺ¨λ μ€μ μ 보(Key, Token, DB URI)λ νλμ½λ©μ μ격ν κΈμ§νλ©°, `.env` μ²λ¦¬λ₯Ό κ°μ νλ€.
+- λ°±μλ(Node.js) μλ¬ μλ΅ μ μμ€ν
λ΄λΆ μ€ν νΈλ μ΄μ€κ° ν΄λΌμ΄μΈνΈ κ°λ°μ λꡬ λ€νΈμν¬ νμ μ μΆλμ§ μλλ‘ μ² μ ν λ§μ€νΉνλ€.
+- νλ‘ νΈμλ νλ‘λμ
λΉλ μ Source Map μμ± λ° Console μΆλ ₯ λ‘κ·Έλ₯Ό μ λ©΄ μ°¨λ¨νλ ꡬμ±μ κΈ°λ³ΈμΌλ‘ νλ€.
+- CORSλ μμΌλμΉ΄λ(`*`) μ¬μ©μ κΈμ§νκ³ , μ§μ λ λλ©μΈλ§ νμ©νλλ‘ λ°±μλλ₯Ό ꡬμ±νλ€.
+- μ¬μ©μμ ν둬ννΈ μ§μκ° μ 보μ μμΉμ νΌμν μνμ΄ μλ€λ©΄, μ½λλ₯Ό μμ±νκΈ° μ μ¦κ° κ²½κ³ νκ³ λμμ μ μνλ€.
+
+# Action Rules
+
+- **보μ κ²μ΄ λ¨Όμ **: λ΄λ¦° μ§μμ¬νμ΄ μ 보μ μμΉμ νΌμν μνμ΄ μ‘°κΈμ΄λΌλ μλ€λ©΄, **μ½λλ₯Ό μμ±νκΈ° μ μ μ¦κ° κ²½κ³ νκ³ μμ ν λμμ λ¨Όμ μ μ**νλ€.
+- **κ°κ²°ν μλ΅**: λΆνμν μΈμ¬λ§, λ³λͺ
, μ§λμΉ λΆμ° μ€λͺ
μ μλ΅νλ€. μμ λ μ½λ λΈλ‘κ³Ό 보μ/μν€ν
μ²μ μ€μν κ²°μ μ΄μ λ§ ν΅μ¬ μμ£Όλ‘ μ λ¬νλ€.
+- **μμΈ μ²λ¦¬ κΈ°λ³Έν**: λͺ¨λ API ν΅μ κ³Ό λ λλ§ κ³Όμ μμ λ°μν μ μλ μ£μ§ μΌμ΄μ€μ μλ¬ λ°μ΄λ리(Error Boundary) λ‘μ§μ κΈ°λ³ΈμΌλ‘ ν¬ν¨νμ¬ μ½λλ₯Ό μ μνλ€.
+
+
# This is NOT the Next.js you know
diff --git a/next.config.ts b/next.config.ts
index e5e334a6..24f282bb 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -17,8 +17,10 @@ const securityHeaders = [
];
const nextConfig: NextConfig = {
+ productionBrowserSourceMaps: false,
compiler: {
emotion: true,
+ removeConsole: process.env.NODE_ENV === 'production' ? { exclude: ['error'] } : false,
},
turbopack: {
root: path.resolve(process.cwd()),
diff --git a/src/features/map/MapPage.tsx b/src/features/map/MapPage.tsx
index c13fbb13..169b65b3 100644
--- a/src/features/map/MapPage.tsx
+++ b/src/features/map/MapPage.tsx
@@ -41,6 +41,7 @@ import WriteButton from '@/private/core-ui/map-warmth/WriteButton';
import WarmthLegend from '@/private/core-ui/map-warmth/WarmthLegend';
import MapNavRail, { RAIL_INSET, RAIL_WIDTH } from './components/MapNavRail';
import { ShareCollabButton } from './collaboration/ShareCollabButton';
+import { CollabSessionBadge } from './collaboration/CollabSessionBadge';
import { CollabPinsOverlay } from './collaboration/CollabPinsOverlay';
import { CollabCursorsOverlay } from './collaboration/CollabCursorsOverlay';
import { CollabParticipants } from './collaboration/CollabParticipants';
@@ -573,7 +574,8 @@ export default function MapPage() {
)}