blacktrigram 0.7.52 → 0.7.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ARCHITECTURE.md CHANGED
@@ -1220,34 +1220,34 @@ sequenceDiagram
1220
1220
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
1221
1221
  graph TD
1222
1222
  subgraph PM["🔍 Performance Monitoring (Q1 2026)"]
1223
- PerfMon[📈 Performance Monitor]
1224
- FPS[📊 FPS Tracking - PerformanceOverlay3D]
1225
- Memory[💾 Memory Usage - Chrome DevTools]
1226
- GC[🗑️ GC Observations - Three.js Object Disposal]
1227
- AssetTiming[⏱️ Asset Load Times - Three.js Models & Textures]
1228
- ThreeRenderer[🎨 Three.js Renderer Stats - Draw Calls]
1223
+ PerfMon["📈 Performance Monitor"]
1224
+ FPS["📊 FPS Tracking - PerformanceOverlay3D"]
1225
+ Memory["💾 Memory Usage - Chrome DevTools"]
1226
+ GC["🗑️ GC Observations - Three.js Object Disposal"]
1227
+ AssetTiming["⏱️ Asset Load Times - Three.js Models & Textures"]
1228
+ ThreeRenderer["🎨 Three.js Renderer Stats - Draw Calls"]
1229
1229
  end
1230
1230
 
1231
1231
  subgraph OT["🚀 Optimization Techniques (Three.js)"]
1232
- OptEngine[⚙️ Optimization Engine]
1233
- Instancing[📦 Three.js Instancing - 1000+ Particles]
1234
- LOD[🎭 Level of Detail - Character Models]
1235
- ObjectPooling[🔄 Object Pooling - Three.js Objects]
1236
- GeometryReuse[🔺 Geometry Reuse - Shared Meshes]
1237
- CodeSplitting[📂 Dynamic import - Three.js Chunks]
1238
- AudioCompression[🎵 OGG/WebM Streaming - Web Audio API]
1239
- Debounce[⏳ Debounce/Throttle - useFrame Optimization]
1240
- Memoization[🧠 React.memo / useMemo - Component Optimization]
1241
- FrustumCulling[👁️ Frustum Culling - Auto Off-screen Culling]
1242
- MaterialReuse[🎨 Material Caching - Shared Materials]
1232
+ OptEngine["⚙️ Optimization Engine"]
1233
+ Instancing["📦 Three.js Instancing - 1000+ Particles"]
1234
+ LOD["🎭 Level of Detail - Character Models"]
1235
+ ObjectPooling["🔄 Object Pooling - Three.js Objects"]
1236
+ GeometryReuse["🔺 Geometry Reuse - Shared Meshes"]
1237
+ CodeSplitting["📂 Dynamic import - Three.js Chunks"]
1238
+ AudioCompression["🎵 OGG/WebM Streaming - Web Audio API"]
1239
+ Debounce["⏳ Debounce/Throttle - useFrame Optimization"]
1240
+ Memoization["🧠 React.memo / useMemo - Component Optimization"]
1241
+ FrustumCulling["👁️ Frustum Culling - Auto Off-screen Culling"]
1242
+ MaterialReuse["🎨 Material Caching - Shared Materials"]
1243
1243
  end
1244
1244
 
1245
1245
  subgraph FS["🛡️ Fallback Systems"]
1246
- FallbackMgr[⚠️ Fallback Manager]
1247
- LowQualityMode[📉 Reduced Polygon Count]
1248
- ReducedEffects[❌ Disable Shadows & Post-Processing]
1249
- ProceduralAudio[🎹 Procedural SFX Fallback]
1250
- WebGLFallback[🖼️ Fallback to WebGL 1.0]
1246
+ FallbackMgr["⚠️ Fallback Manager"]
1247
+ LowQualityMode["📉 Reduced Polygon Count"]
1248
+ ReducedEffects["❌ Disable Shadows & Post-Processing"]
1249
+ ProceduralAudio["🎹 Procedural SFX Fallback"]
1250
+ WebGLFallback["🖼️ Fallback to WebGL 1.0"]
1251
1251
  end
1252
1252
 
1253
1253
  PerfMon --> FPS
@@ -1699,7 +1699,7 @@ mindmap
1699
1699
  id3.3[Established martial arts franchises]
1700
1700
  id4(📉 Technical Debt)
1701
1701
  id4.1[Three.js object disposal complexity]
1702
- id4.2[Combat realism systems 100% complete (13/13)]
1702
+ id4.2[Combat realism systems 100% complete 13 of 13]
1703
1703
  id4.3[State management complexity growing]
1704
1704
  id4.4[73.73% test coverage below 80% target]
1705
1705
  id5(🔒 CDN Security Risks)
@@ -1908,20 +1908,20 @@ mindmap
1908
1908
  ```mermaid
1909
1909
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
1910
1910
  flowchart TD
1911
- Start([🎮 Game Load]) --> Loading[⏳ Loading Assets]
1912
- Loading --> Intro[🏮 Intro Screen]
1911
+ Start(["🎮 Game Load"]) --> Loading["⏳ Loading Assets"]
1912
+ Loading --> Intro["🏮 Intro Screen"]
1913
1913
 
1914
- Intro --> |New Game| CharSelect[👤 Archetype Selection]
1915
- Intro --> |Training| Training[🎯 Training Mode]
1916
- Intro --> |Settings| Settings[⚙️ Settings Menu]
1914
+ Intro --> |New Game| CharSelect["👤 Archetype Selection"]
1915
+ Intro --> |Training| Training["🎯 Training Mode"]
1916
+ Intro --> |Settings| Settings["⚙️ Settings Menu"]
1917
1917
 
1918
- CharSelect --> Combat[⚔️ Combat Arena]
1919
- Training --> VitalPractice[🎯 Vital Point Practice]
1920
- Training --> StancePractice[☯️ Stance Training]
1918
+ CharSelect --> Combat["⚔️ Combat Arena"]
1919
+ Training --> VitalPractice["🎯 Vital Point Practice"]
1920
+ Training --> StancePractice["☯️ Stance Training"]
1921
1921
 
1922
- Combat --> |Victory| Victory[🏆 Victory Screen]
1923
- Combat --> |Defeat| Defeat[💀 Defeat Screen]
1924
- Combat --> |Pause| PauseMenu[⏸️ Pause Menu]
1922
+ Combat --> |Victory| Victory["🏆 Victory Screen"]
1923
+ Combat --> |Defeat| Defeat["💀 Defeat Screen"]
1924
+ Combat --> |Pause| PauseMenu["⏸️ Pause Menu"]
1925
1925
 
1926
1926
  Victory --> Intro
1927
1927
  Defeat --> Intro
@@ -2015,14 +2015,14 @@ graph TB
2015
2015
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
2016
2016
  graph LR
2017
2017
  subgraph "☯️ Trigram Relationships"
2018
- G[☰ 깴 Geon]
2019
- T[☱ 태 Tae]
2020
- L[☲ 댏 Li]
2021
- J[☳ 진 Jin]
2022
- S[☴ 손 Son]
2023
- GM[☾ 감 Gam]
2024
- GN[☶ 간 Gan]
2025
- K[☡ 곤 Gon]
2018
+ G["☰ 깴 Geon"]
2019
+ T["☱ 태 Tae"]
2020
+ L["☲ 댏 Li"]
2021
+ J["☳ 진 Jin"]
2022
+ S["☴ 손 Son"]
2023
+ GM["☾ 감 Gam"]
2024
+ GN["☶ 간 Gan"]
2025
+ K["☡ 곤 Gon"]
2026
2026
  end
2027
2027
 
2028
2028
  %% Advantage relationships (→ means "has advantage over")
@@ -160,14 +160,14 @@ graph TB
160
160
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
161
161
  graph LR
162
162
  subgraph "Eight Trigram Stances (팔괘)"
163
- G[☰ 깴 Geon<br/>Heaven]:::geon
164
- T[☱ 태 Tae<br/>Lake]:::tae
165
- L[☲ 댏 Li<br/>Fire]:::li
166
- J[☳ 진 Jin<br/>Thunder]:::jin
167
- S[☴ 손 Son<br/>Wind]:::son
168
- GA[☾ 감 Gam<br/>Water]:::gam
169
- GN[☶ 간 Gan<br/>Mountain]:::gan
170
- GO[☡ 곤 Gon<br/>Earth]:::gon
163
+ G["☰ 깴 Geon<br/>Heaven"]:::geon
164
+ T["☱ 태 Tae<br/>Lake"]:::tae
165
+ L["☲ 댏 Li<br/>Fire"]:::li
166
+ J["☳ 진 Jin<br/>Thunder"]:::jin
167
+ S["☴ 손 Son<br/>Wind"]:::son
168
+ GA["☾ 감 Gam<br/>Water"]:::gam
169
+ GN["☶ 간 Gan<br/>Mountain"]:::gan
170
+ GO["☡ 곤 Gon<br/>Earth"]:::gon
171
171
  end
172
172
 
173
173
  subgraph "Trigram System Components"
package/README.md CHANGED
@@ -233,15 +233,15 @@ The combat loop is fully deterministic, frame-accurate, and side-effect-isolated
233
233
 
234
234
  ```mermaid
235
235
  flowchart LR
236
- A[🎮 Input<br/>Keyboard · Touch · Gesture] --> B[☯️ Trigram Stance<br/>건태리진손감간곤]
237
- B --> C[🦴 Skeletal Pose<br/>28 bones · 7 hand poses]
238
- C --> D[🎯 Vital-Point Targeter<br/>70 points · 4 regions · 14 meridians]
239
- D --> E[⚔️ Damage Calculator<br/>severity · accuracy · archetype bonus]
240
- E --> F[🩸 Body-Part Health<br/>pain · consciousness · breathing · balance]
241
- F --> G[🤖 Counter-Attack AI<br/>limb-exposure detection]
242
- G --> H[🎨 Three.js Render<br/>60fps · trauma · particles · shaders]
243
- F --> I[🔊 Audio Engine<br/>bone impact · breath · 국악]
244
- H --> J[♿ WCAG 2.1 AA HUD<br/>combat readiness · haptics]
236
+ A["🎮 Input<br/>Keyboard · Touch · Gesture"] --> B["☯️ Trigram Stance<br/>건태리진손감간곤"]
237
+ B --> C["🦴 Skeletal Pose<br/>28 bones · 7 hand poses"]
238
+ C --> D["🎯 Vital-Point Targeter<br/>70 points · 4 regions · 14 meridians"]
239
+ D --> E["⚔️ Damage Calculator<br/>severity · accuracy · archetype bonus"]
240
+ E --> F["🩸 Body-Part Health<br/>pain · consciousness · breathing · balance"]
241
+ F --> G["🤖 Counter-Attack AI<br/>limb-exposure detection"]
242
+ G --> H["🎨 Three.js Render<br/>60fps · trauma · particles · shaders"]
243
+ F --> I["🔊 Audio Engine<br/>bone impact · breath · 국악"]
244
+ H --> J["♿ WCAG 2.1 AA HUD<br/>combat readiness · haptics"]
245
245
  I --> J
246
246
 
247
247
  classDef korean fill:#000000,stroke:#FFD700,color:#FFD700,stroke-width:2px
@@ -104,38 +104,38 @@ graph TD
104
104
  direction TB
105
105
 
106
106
  subgraph "Layer 1: Perimeter & Network Security"
107
- L1A[🌐 CloudFront CDN<br/>400+ Edge Locations]
108
- L1B[🛡️ AWS Shield Standard<br/>DDoS Protection L3/L4]
109
- L1C[🔐 TLS 1.3<br/>HTTPS-Only Enforcement]
110
- L1D[📡 Route53 DNSSEC<br/>DNS Integrity]
107
+ L1A["🌐 CloudFront CDN<br/>400+ Edge Locations"]
108
+ L1B["🛡️ AWS Shield Standard<br/>DDoS Protection L3/L4"]
109
+ L1C["🔐 TLS 1.3<br/>HTTPS-Only Enforcement"]
110
+ L1D["📡 Route53 DNSSEC<br/>DNS Integrity"]
111
111
  end
112
112
 
113
113
  subgraph "Layer 2: Application Security Controls"
114
- L2A[🛡️ Content Security Policy<br/>XSS Prevention]
115
- L2B[🔒 Security Headers<br/>HSTS, X-Frame-Options]
116
- L2C[🔍 Input Validation<br/>Client-Side Sanitization]
117
- L2D[🖥️ Browser Sandbox<br/>Origin Isolation]
114
+ L2A["🛡️ Content Security Policy<br/>XSS Prevention"]
115
+ L2B["🔒 Security Headers<br/>HSTS, X-Frame-Options"]
116
+ L2C["🔍 Input Validation<br/>Client-Side Sanitization"]
117
+ L2D["🖥️ Browser Sandbox<br/>Origin Isolation"]
118
118
  end
119
119
 
120
120
  subgraph "Layer 3: Data Protection & Key Management"
121
- L3A[💾 SSE-S3 Encryption<br/>At-Rest Protection]
122
- L3B[🔑 ACM Certificates<br/>Auto-Renewal]
123
- L3C[🗝️ OIDC Federation<br/>No Static Credentials]
124
- L3D[📦 S3 Versioning<br/>Recovery Capability]
121
+ L3A["💾 SSE-S3 Encryption<br/>At-Rest Protection"]
122
+ L3B["🔑 ACM Certificates<br/>Auto-Renewal"]
123
+ L3C["🗝️ OIDC Federation<br/>No Static Credentials"]
124
+ L3D["📦 S3 Versioning<br/>Recovery Capability"]
125
125
  end
126
126
 
127
127
  subgraph "Layer 4: Supply Chain & CI/CD Security"
128
- L4A[🔍 CodeQL SAST<br/>Vulnerability Detection]
129
- L4B[📦 Dependency Review<br/>SCA Scanning]
130
- L4C[🔏 SLSA Attestations<br/>Build Provenance]
131
- L4D[📄 SBOM Generation<br/>Transparency]
128
+ L4A["🔍 CodeQL SAST<br/>Vulnerability Detection"]
129
+ L4B["📦 Dependency Review<br/>SCA Scanning"]
130
+ L4C["🔏 SLSA Attestations<br/>Build Provenance"]
131
+ L4D["📄 SBOM Generation<br/>Transparency"]
132
132
  end
133
133
 
134
134
  subgraph "Layer 5: Monitoring & Compliance"
135
- L5A[⭐ OSSF Scorecard<br/>Supply Chain Rating]
136
- L5B[🕷️ ZAP DAST<br/>Dynamic Testing]
137
- L5C[📊 Lighthouse Audit<br/>Best Practices]
138
- L5D[📋 ISMS Alignment<br/>ISO 27001 / NIST CSF]
135
+ L5A["⭐ OSSF Scorecard<br/>Supply Chain Rating"]
136
+ L5B["🕷️ ZAP DAST<br/>Dynamic Testing"]
137
+ L5C["📊 Lighthouse Audit<br/>Best Practices"]
138
+ L5D["📋 ISMS Alignment<br/>ISO 27001 / NIST CSF"]
139
139
  end
140
140
  end
141
141
 
@@ -169,15 +169,15 @@ graph TD
169
169
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
170
170
  flowchart TD
171
171
  subgraph "Frontend-Only Architecture (No Authentication)"
172
- A[👤 Player] -->|"Direct Access"| B[🌐 Web Browser]
173
- B -->|"HTTPS"| C[📦 Static Assets<br/>CDN]
172
+ A["👤 Player"] -->|"Direct Access"| B["🌐 Web Browser"]
173
+ B -->|"HTTPS"| C["📦 Static Assets<br/>CDN"]
174
174
 
175
- C --> D[⚙️ Game Logic<br/>Client-Side Only]
176
- D --> E[💾 Local Storage<br/>Session Only]
175
+ C --> D["⚙️ Game Logic<br/>Client-Side Only"]
176
+ D --> E["💾 Local Storage<br/>Session Only"]
177
177
 
178
- F[🔄 No Backend<br/>No Authentication]
179
- G[🔒 No User Accounts<br/>No Persistence]
180
- H[⚠️ No Access Control<br/>No Authorization]
178
+ F["🔄 No Backend<br/>No Authentication"]
179
+ G["🔒 No User Accounts<br/>No Persistence"]
180
+ H["⚠️ No Access Control<br/>No Authorization"]
181
181
  end
182
182
 
183
183
  style A fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
@@ -218,13 +218,13 @@ Black Trigram is a frontend-only web application with:
218
218
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
219
219
  flowchart TD
220
220
  subgraph "No Auditing Architecture"
221
- A[👤 Player] -->|"Action"| B[⚙️ Client Logic]
222
- B -->|"Temporary"| C[💾 Browser Memory]
221
+ A["👤 Player"] -->|"Action"| B["⚙️ Client Logic"]
222
+ B -->|"Temporary"| C["💾 Browser Memory"]
223
223
 
224
- D[📝 No Audit Trail]
225
- E[👤 No Author Tracking]
226
- F[📊 No Change History]
227
- G[⏱️ No Persistence]
224
+ D["📝 No Audit Trail"]
225
+ E["👤 No Author Tracking"]
226
+ F["📊 No Change History"]
227
+ G["⏱️ No Persistence"]
228
228
  end
229
229
 
230
230
  style A fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
@@ -257,13 +257,13 @@ Black Trigram currently has:
257
257
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
258
258
  flowchart TD
259
259
  subgraph "No Session Tracking"
260
- A[👤 Player] -->|"Interact"| B[🖱️ Game Interface]
261
- B -->|"Local Only"| C[📝 Browser State]
260
+ A["👤 Player"] -->|"Interact"| B["🖱️ Game Interface"]
261
+ B -->|"Local Only"| C["📝 Browser State"]
262
262
 
263
- D[📋 No Session Metadata]
264
- E[🌐 No IP Tracking]
265
- F[⏰ No Time Tracking]
266
- G[💾 No Storage]
263
+ D["📋 No Session Metadata"]
264
+ E["🌐 No IP Tracking"]
265
+ F["⏰ No Time Tracking"]
266
+ G["💾 No Storage"]
267
267
  end
268
268
 
269
269
  style A fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
@@ -296,13 +296,13 @@ Black Trigram session handling:
296
296
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
297
297
  flowchart TD
298
298
  subgraph "No Security Event Monitoring"
299
- A[🔓 No Authentication<br>Events]
300
- B[🛡️ No Authorization<br>Events]
301
- C[⚙️ No System<br>Events]
299
+ A["🔓 No Authentication<br>Events"]
300
+ B["🛡️ No Authorization<br>Events"]
301
+ C["⚙️ No System<br>Events"]
302
302
 
303
- D[📝 No Event Storage]
304
- E[🚨 No Security Alerts]
305
- F[📊 No Security Dashboard]
303
+ D["📝 No Event Storage"]
304
+ E["🚨 No Security Alerts"]
305
+ F["📊 No Security Dashboard"]
306
306
  end
307
307
 
308
308
  style A,B,C,D,E,F fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -332,21 +332,21 @@ Black Trigram security monitoring:
332
332
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
333
333
  graph TD
334
334
  subgraph "AWS Network Security Infrastructure"
335
- A[🌐 Internet] -->|"DNS Query"| B[🛡️ Route53 DNSSEC + Health Checks]
336
- B -->|"Primary"| C[⚖️ CloudFront CDN]
337
- B -.failover.-> D[📄 GitHub Pages DR]
335
+ A["🌐 Internet"] -->|"DNS Query"| B["🛡️ Route53 DNSSEC + Health Checks"]
336
+ B -->|"Primary"| C["⚖️ CloudFront CDN"]
337
+ B -.failover.-> D["📄 GitHub Pages DR"]
338
338
 
339
- C -->|"Origin Fetch"| E[💾 S3 us-east-1 Primary]
340
- E -.replication.-> F[💾 S3 Backup Region]
339
+ C -->|"Origin Fetch"| E["💾 S3 us-east-1 Primary"]
340
+ E -.replication.-> F["💾 S3 Backup Region"]
341
341
 
342
- C -->|"HTTPS Only"| G[📦 Asset Delivery]
342
+ C -->|"HTTPS Only"| G["📦 Asset Delivery"]
343
343
  D -.DR.-> G
344
344
 
345
- H[🔒 TLS 1.3] --> C
346
- I[🛡️ WAF Protection] --> C
347
- J[🔐 CAA Records] --> B
348
- K[🔑 DNSSEC Validation] --> B
349
- L[💚 Health Checks] --> B
345
+ H["🔒 TLS 1.3"] --> C
346
+ I["🛡️ WAF Protection"] --> C
347
+ J["🔐 CAA Records"] --> B
348
+ K["🔑 DNSSEC Validation"] --> B
349
+ L["💚 Health Checks"] --> B
350
350
  end
351
351
 
352
352
  style A fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
@@ -442,9 +442,9 @@ Black Trigram network security includes AWS CloudFront + S3 multi-region deploym
442
442
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
443
443
  flowchart LR
444
444
  subgraph "DNS Security Monitoring"
445
- A[🔍 DNSSEC Validation] --> B[📊 Query Monitoring]
446
- C[📜 CAA Compliance] --> D[🚨 Certificate Alerts]
447
- E[🛡️ Route53 Logs] --> F[📈 Security Metrics]
445
+ A["🔍 DNSSEC Validation"] --> B["📊 Query Monitoring"]
446
+ C["📜 CAA Compliance"] --> D["🚨 Certificate Alerts"]
447
+ E["🛡️ Route53 Logs"] --> F["📈 Security Metrics"]
448
448
  end
449
449
 
450
450
  style A,B,C,D,E,F fill:#00C853,stroke:#007E33,stroke-width:2px,color:white,font-weight:bold
@@ -465,9 +465,9 @@ flowchart LR
465
465
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
466
466
  flowchart LR
467
467
  subgraph "No VPC Infrastructure"
468
- A[🚫 No Private Subnets]
469
- B[🚫 No VPC Endpoints]
470
- C[🚫 No AWS Services]
468
+ A["🚫 No Private Subnets"]
469
+ B["🚫 No VPC Endpoints"]
470
+ C["🚫 No AWS Services"]
471
471
  end
472
472
 
473
473
  style A,B,C fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -489,18 +489,18 @@ Black Trigram does not use VPC infrastructure:
489
489
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
490
490
  graph TD
491
491
  subgraph "AWS Multi-Region High Availability"
492
- A[📡 Route53 Health Checks] --> B{Primary Healthy?}
493
- B -->|Yes| C[⚖️ CloudFront CDN]
494
- B -->|No| D[📄 GitHub Pages DR]
492
+ A["📡 Route53 Health Checks"] --> B{Primary Healthy?}
493
+ B -->|Yes| C["⚖️ CloudFront CDN"]
494
+ B -->|No| D["📄 GitHub Pages DR"]
495
495
 
496
- C --> E[💾 S3 us-east-1]
497
- E -.replication.-> F[💾 S3 Backup Region]
496
+ C --> E["💾 S3 us-east-1"]
497
+ E -.replication.-> F["💾 S3 Backup Region"]
498
498
 
499
- C --> G[🌐 Global Edge Locations]
499
+ C --> G["🌐 Global Edge Locations"]
500
500
  D --> G
501
501
 
502
- H[🔄 Automatic Failover]
503
- I[💚 Active Monitoring]
502
+ H["🔄 Automatic Failover"]
503
+ I["💚 Active Monitoring"]
504
504
  end
505
505
 
506
506
  style A fill:#FF6F00,stroke:#E65100,stroke-width:2px,color:white,font-weight:bold
@@ -557,13 +557,13 @@ As a static content application, Black Trigram benefits from inherent resilience
557
557
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
558
558
  flowchart TD
559
559
  subgraph "Data Protection Strategy"
560
- A[👤 Player] <-->|"🔒 TLS 1.3"| B[⚖️ CloudFront CDN]
561
- B <-->|"🔐 HTTPS"| C[💾 S3 with SSE]
562
- C -.replication.-> D[💾 S3 Backup]
560
+ A["👤 Player"] <-->|"🔒 TLS 1.3"| B["⚖️ CloudFront CDN"]
561
+ B <-->|"🔐 HTTPS"| C["💾 S3 with SSE"]
562
+ C -.replication.-> D["💾 S3 Backup"]
563
563
 
564
- E[🔐 Encryption at Rest<br/>SSE-S3]
565
- F[🔐 Encryption in Transit<br/>TLS 1.3]
566
- G[🗝️ ACM Certificates<br/>Auto-Renewal]
564
+ E["🔐 Encryption at Rest<br/>SSE-S3"]
565
+ F["🔐 Encryption in Transit<br/>TLS 1.3"]
566
+ G["🗝️ ACM Certificates<br/>Auto-Renewal"]
567
567
  end
568
568
 
569
569
  style A fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
@@ -607,18 +607,18 @@ Black Trigram data protection:
607
607
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
608
608
  graph TD
609
609
  subgraph "AWS Security Services"
610
- A[⚖️ CloudFront CDN] --> B[🛡️ AWS Shield Standard]
611
- A --> C[🔐 ACM Certificates]
610
+ A["⚖️ CloudFront CDN"] --> B["🛡️ AWS Shield Standard"]
611
+ A --> C["🔐 ACM Certificates"]
612
612
 
613
- D[💾 S3 Storage] --> E[🔒 SSE-S3 Encryption]
614
- D --> F[📋 IAM Policies]
615
- D --> G[🔐 Block Public Access]
613
+ D["💾 S3 Storage"] --> E["🔒 SSE-S3 Encryption"]
614
+ D --> F["📋 IAM Policies"]
615
+ D --> G["🔐 Block Public Access"]
616
616
 
617
- H[📡 Route53 DNS] --> I[🛡️ DNSSEC]
618
- H --> J[💚 Health Checks]
617
+ H["📡 Route53 DNS"] --> I["🛡️ DNSSEC"]
618
+ H --> J["💚 Health Checks"]
619
619
 
620
- K[🔑 IAM Roles] --> L[🎭 OIDC Authentication]
621
- L --> M[🔧 GitHub Actions]
620
+ K["🔑 IAM Roles"] --> L["🎭 OIDC Authentication"]
621
+ L --> M["🔧 GitHub Actions"]
622
622
  end
623
623
 
624
624
  style A,D,H fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:white,font-weight:bold
@@ -690,10 +690,10 @@ Black Trigram uses AWS infrastructure exclusively for static content hosting and
690
690
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
691
691
  flowchart TD
692
692
  subgraph "No AWS FSBP Implementation"
693
- A[🚫 No Config Service]
694
- B[🚫 No Security Hub]
695
- C[🚫 No GuardDuty]
696
- D[🚫 No Inspector]
693
+ A["🚫 No Config Service"]
694
+ B["🚫 No Security Hub"]
695
+ C["🚫 No GuardDuty"]
696
+ D["🚫 No Inspector"]
697
697
  end
698
698
 
699
699
  style A,B,C,D fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -716,9 +716,9 @@ Black Trigram does not implement AWS FSBP (uses AWS only for static hosting via
716
716
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
717
717
  flowchart TD
718
718
  subgraph "No Threat Detection"
719
- A[🔍 No Threat<br>Detection]
720
- B[🔎 No Investigation<br>Tools]
721
- C[⚠️ No Security<br>Findings]
719
+ A["🔍 No Threat<br>Detection"]
720
+ B["🔎 No Investigation<br>Tools"]
721
+ C["⚠️ No Security<br>Findings"]
722
722
  end
723
723
 
724
724
  style A,B,C fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -747,9 +747,9 @@ Black Trigram threat detection:
747
747
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
748
748
  flowchart TD
749
749
  subgraph "No Vulnerability Management"
750
- A[🔎 No Vulnerability<br>Scanning]
751
- B[📋 No CVE<br>Database]
752
- C[🔧 No Patch<br>Management]
750
+ A["🔎 No Vulnerability<br>Scanning"]
751
+ B["📋 No CVE<br>Database"]
752
+ C["🔧 No Patch<br>Management"]
753
753
  end
754
754
 
755
755
  style A,B,C fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -778,9 +778,9 @@ Black Trigram vulnerability management:
778
778
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
779
779
  flowchart TD
780
780
  subgraph "No Configuration Management"
781
- A[⚙️ No AWS Config]
782
- B[📝 No Resource<br>Inventory]
783
- C[📊 No Compliance<br>Rules]
781
+ A["⚙️ No AWS Config"]
782
+ B["📝 No Resource<br>Inventory"]
783
+ C["📊 No Compliance<br>Rules"]
784
784
  end
785
785
 
786
786
  style A,B,C fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -808,10 +808,10 @@ Black Trigram configuration management:
808
808
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
809
809
  flowchart TD
810
810
  subgraph "No Security Monitoring"
811
- A[📊 No Log Sources]
812
- B[📈 No CloudWatch]
813
- C[🔍 No Security Lake]
814
- D[🚨 No Alerting]
811
+ A["📊 No Log Sources"]
812
+ B["📈 No CloudWatch"]
813
+ C["🔍 No Security Lake"]
814
+ D["🚨 No Alerting"]
815
815
  end
816
816
 
817
817
  style A,B,C,D fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -840,9 +840,9 @@ Black Trigram monitoring:
840
840
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
841
841
  flowchart TD
842
842
  subgraph "No Automated Security Operations"
843
- A[⏱️ No Maintenance<br>Windows]
844
- B[🔄 No Patch<br>Management]
845
- C[📊 No Security<br>Automation]
843
+ A["⏱️ No Maintenance<br>Windows"]
844
+ B["🔄 No Patch<br>Management"]
845
+ C["📊 No Security<br>Automation"]
846
846
  end
847
847
 
848
848
  style A,B,C fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -870,13 +870,13 @@ Black Trigram automated operations:
870
870
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
871
871
  flowchart LR
872
872
  subgraph "Frontend Application Security"
873
- A[🛡️ Browser<br>Security Model] --> B[🔐 HTTPS Only]
874
- A --> C[🔒 CSP Headers]
875
- A --> D[🛑 Input<br>Validation]
873
+ A["🛡️ Browser<br>Security Model"] --> B["🔐 HTTPS Only"]
874
+ A --> C["🔒 CSP Headers"]
875
+ A --> D["🛑 Input<br>Validation"]
876
876
 
877
- E[🚫 No Backend<br>Security]
878
- F[🚫 No Authentication]
879
- G[🚫 No Authorization]
877
+ E["🚫 No Backend<br>Security"]
878
+ F["🚫 No Authentication"]
879
+ G["🚫 No Authorization"]
880
880
  end
881
881
 
882
882
  style A,B,C,D fill:#00C853,stroke:#007E33,stroke-width:2px,color:white,font-weight:bold
@@ -909,10 +909,10 @@ Black Trigram application security:
909
909
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
910
910
  graph TD
911
911
  subgraph "No Formal Compliance"
912
- A[🏛️ No Compliance<br>Framework]
913
- B[🔍 No NIST CSF]
914
- C[🔐 No ISO 27001]
915
- D[📋 No Regulatory<br>Requirements]
912
+ A["🏛️ No Compliance<br>Framework"]
913
+ B["🔍 No NIST CSF"]
914
+ C["🔐 No ISO 27001"]
915
+ D["📋 No Regulatory<br>Requirements"]
916
916
  end
917
917
 
918
918
  style A,B,C,D fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -941,13 +941,13 @@ Black Trigram compliance:
941
941
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
942
942
  flowchart TD
943
943
  subgraph "Simplified Defense-in-Depth"
944
- A[🌐 Network Layer] --> B[🔒 HTTPS/TLS]
945
- C[🖥️ Application Layer] --> D[🛡️ Browser Security]
946
- E[👤 User Layer] --> F[🔍 Input Validation]
944
+ A["🌐 Network Layer"] --> B["🔒 HTTPS/TLS"]
945
+ C["🖥️ Application Layer"] --> D["🛡️ Browser Security"]
946
+ E["👤 User Layer"] --> F["🔍 Input Validation"]
947
947
 
948
- G[🚫 No Identity Layer]
949
- H[🚫 No Data Layer]
950
- I[🚫 No Infrastructure Layer]
948
+ G["🚫 No Identity Layer"]
949
+ H["🚫 No Data Layer"]
950
+ I["🚫 No Infrastructure Layer"]
951
951
  end
952
952
 
953
953
  style A,B,C,D,E,F fill:#00C853,stroke:#007E33,stroke-width:2px,color:white,font-weight:bold
@@ -982,10 +982,10 @@ Black Trigram's simplified defense approach:
982
982
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
983
983
  flowchart TD
984
984
  subgraph "No Security Operations"
985
- A[🔍 No Monitoring]
986
- B[⚡ No Incident<br>Response]
987
- C[🔄 No Security<br>Maintenance]
988
- D[📊 No Threat<br>Intelligence]
985
+ A["🔍 No Monitoring"]
986
+ B["⚡ No Incident<br>Response"]
987
+ C["🔄 No Security<br>Maintenance"]
988
+ D["📊 No Threat<br>Intelligence"]
989
989
  end
990
990
 
991
991
  style A,B,C,D fill:#9E9E9E,stroke:#616161,stroke-width:2px,color:white,font-weight:bold
@@ -1014,13 +1014,13 @@ Black Trigram security operations:
1014
1014
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
1015
1015
  flowchart TD
1016
1016
  subgraph "Minimal Security Investment"
1017
- A[💰 Low Cost] --> B[📦 CDN Costs Only]
1018
- A --> C[🔒 TLS Certificate]
1019
- A --> D[🛠️ Development Time]
1017
+ A["💰 Low Cost"] --> B["📦 CDN Costs Only"]
1018
+ A --> C["🔒 TLS Certificate"]
1019
+ A --> D["🛠️ Development Time"]
1020
1020
 
1021
- E[💲 AWS Hosting Costs]
1022
- F[🚫 No Backend Costs]
1023
- G[🚫 No Operations Costs]
1021
+ E["💲 AWS Hosting Costs"]
1022
+ F["🚫 No Backend Costs"]
1023
+ G["🚫 No Operations Costs"]
1024
1024
  end
1025
1025
 
1026
1026
  style A,B,C,D fill:#00C853,stroke:#007E33,stroke-width:2px,color:white,font-weight:bold
@@ -1053,21 +1053,21 @@ Black Trigram security investment:
1053
1053
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
1054
1054
  flowchart TD
1055
1055
  subgraph "Security-Hardened CI/CD Pipeline"
1056
- A[🔒 Source Code<br>Security] --> B[🔍 CodeQL Analysis]
1057
- A --> C[📦 Dependency Review]
1058
- A --> D[⭐ OSSF Scorecard]
1056
+ A["🔒 Source Code<br>Security"] --> B["🔍 CodeQL Analysis"]
1057
+ A --> C["📦 Dependency Review"]
1058
+ A --> D["⭐ OSSF Scorecard"]
1059
1059
 
1060
- E[🏗️ Build Security] --> F[🔏 SLSA Attestations]
1061
- E --> G[📄 SBOM Generation]
1062
- E --> H[🔐 Artifact Signing]
1060
+ E["🏗️ Build Security"] --> F["🔏 SLSA Attestations"]
1061
+ E --> G["📄 SBOM Generation"]
1062
+ E --> H["🔐 Artifact Signing"]
1063
1063
 
1064
- I[🚀 Deployment<br>Security] --> J[🌐 GitHub Pages]
1065
- I --> K[🔆 Lighthouse Audit]
1066
- I --> L[🕷️ ZAP Security Scan]
1064
+ I["🚀 Deployment<br>Security"] --> J["🌐 GitHub Pages"]
1065
+ I --> K["🔆 Lighthouse Audit"]
1066
+ I --> L["🕷️ ZAP Security Scan"]
1067
1067
 
1068
- M[🛡️ Runner Security] --> N[📌 SHA Pinning]
1069
- M --> O[📊 Audit Logging]
1070
- M --> P[🔒 Hardened Runners]
1068
+ M["🛡️ Runner Security"] --> N["📌 SHA Pinning"]
1069
+ M --> O["📊 Audit Logging"]
1070
+ M --> P["🔒 Hardened Runners"]
1071
1071
  end
1072
1072
 
1073
1073
  style A,B,C,D fill:#2979FF,stroke:#0D47A1,stroke-width:2px,color:white,font-weight:bold
package/THREAT_MODEL.md CHANGED
@@ -154,28 +154,28 @@ Following [Hack23 AB Asset-Centric Threat Modeling](https://github.com/Hack23/IS
154
154
  }%%
155
155
  flowchart TB
156
156
  subgraph CROWN_JEWELS["💎 Crown Jewels"]
157
- EDUCATIONAL[🎓 Educational Integrity<br/>Korean Martial Arts Authenticity]
158
- CULTURAL[🇰🇷 Cultural Content<br/>Traditional Knowledge & Respect]
159
- GAMEPLAY[🎮 Game Experience<br/>User Engagement & Performance]
160
- DOMAIN[🌐 Domain Trust<br/>Blacktrigram.com Reputation]
157
+ EDUCATIONAL["🎓 Educational Integrity<br/>Korean Martial Arts Authenticity"]
158
+ CULTURAL["🇰🇷 Cultural Content<br/>Traditional Knowledge & Respect"]
159
+ GAMEPLAY["🎮 Game Experience<br/>User Engagement & Performance"]
160
+ DOMAIN["🌐 Domain Trust<br/>Blacktrigram.com Reputation"]
161
161
  end
162
162
 
163
163
  subgraph ATTACK_VECTORS["⚔️ Primary Attack Vectors"]
164
- CONTENT_POISON[💉 Content Poisoning]
165
- SUPPLY_CHAIN[🔗 Supply Chain Attack]
166
- CLIENT_EXPLOIT[💻 Client-Side Exploitation]
167
- CULTURAL_ATTACK[🏛️ Cultural Misrepresentation]
168
- DOMAIN_HIJACK[🌐 Domain Hijacking]
169
- SESSION_ATTACK[👤 Session Manipulation]
164
+ CONTENT_POISON["💉 Content Poisoning"]
165
+ SUPPLY_CHAIN["🔗 Supply Chain Attack"]
166
+ CLIENT_EXPLOIT["💻 Client-Side Exploitation"]
167
+ CULTURAL_ATTACK["🏛️ Cultural Misrepresentation"]
168
+ DOMAIN_HIJACK["🌐 Domain Hijacking"]
169
+ SESSION_ATTACK["👤 Session Manipulation"]
170
170
  end
171
171
 
172
172
  subgraph THREAT_AGENTS["👥 Key Threat Agents"]
173
- SCRIPT_KIDDIES[🐛 Script Kiddies<br/>Simple Web Exploits]
174
- CULTURAL_TROLLS[🎭 Cultural Trolls<br/>Offensive Content Injection]
175
- MALWARE_DISTRIBUTORS[🦠 Malware Distributors<br/>Browser Exploitation]
176
- COMPETITOR_SABOTAGE[🏢 Competitor Sabotage<br/>Platform Disruption]
177
- NATION_STATE[🏛️ Nation-State Actors<br/>Cultural/Political Agenda]
178
- CRIMINAL_GROUPS[💰 Cybercriminal Groups<br/>Monetization/Disruption]
173
+ SCRIPT_KIDDIES["🐛 Script Kiddies<br/>Simple Web Exploits"]
174
+ CULTURAL_TROLLS["🎭 Cultural Trolls<br/>Offensive Content Injection"]
175
+ MALWARE_DISTRIBUTORS["🦠 Malware Distributors<br/>Browser Exploitation"]
176
+ COMPETITOR_SABOTAGE["🏢 Competitor Sabotage<br/>Platform Disruption"]
177
+ NATION_STATE["🏛️ Nation-State Actors<br/>Cultural/Political Agenda"]
178
+ CRIMINAL_GROUPS["💰 Cybercriminal Groups<br/>Monetization/Disruption"]
179
179
  end
180
180
 
181
181
  CONTENT_POISON --> EDUCATIONAL
@@ -221,35 +221,35 @@ Following [Architecture-Centric Threat Modeling](https://github.com/Hack23/ISMS-
221
221
  }%%
222
222
  flowchart TB
223
223
  subgraph TRUST_BOUNDARY_1["🌐 Internet Trust Boundary"]
224
- USER[👤 Player/Learner]
225
- ATTACKER[🎭 Potential Attacker]
224
+ USER["👤 Player/Learner"]
225
+ ATTACKER["🎭 Potential Attacker"]
226
226
  end
227
227
 
228
228
  subgraph TRUST_BOUNDARY_2["📦 CDN Trust Boundary"]
229
- STATIC_CDN[📄 Static Asset CDN]
230
- AUDIO_CDN[🎵 Audio Asset CDN]
231
- APP_CDN[🌐 Application CDN]
229
+ STATIC_CDN["📄 Static Asset CDN"]
230
+ AUDIO_CDN["🎵 Audio Asset CDN"]
231
+ APP_CDN["🌐 Application CDN"]
232
232
  end
233
233
 
234
234
  subgraph TRUST_BOUNDARY_3["🖥️ Browser Trust Boundary"]
235
- BROWSER[🌐 Web Browser]
236
- REACT_APP[⚛️ React Application]
237
- THREE_RENDERER[🎨 Three.js Renderer]
238
- AUDIO_ENGINE[🎵 Audio Engine]
239
- LOCAL_STORAGE[💾 Browser Storage]
235
+ BROWSER["🌐 Web Browser"]
236
+ REACT_APP["⚛️ React Application"]
237
+ THREE_RENDERER["🎨 Three.js Renderer"]
238
+ AUDIO_ENGINE["🎵 Audio Engine"]
239
+ LOCAL_STORAGE["💾 Browser Storage"]
240
240
  end
241
241
 
242
242
  subgraph TRUST_BOUNDARY_4["🏗️ Build Trust Boundary"]
243
- GITHUB[📦 GitHub Repository]
244
- CI_CD[🔧 GitHub Actions]
245
- DEPENDENCIES[📚 NPM Dependencies]
246
- ATTESTATIONS[🔏 SLSA Attestations]
243
+ GITHUB["📦 GitHub Repository"]
244
+ CI_CD["🔧 GitHub Actions"]
245
+ DEPENDENCIES["📚 NPM Dependencies"]
246
+ ATTESTATIONS["🔏 SLSA Attestations"]
247
247
  end
248
248
 
249
249
  subgraph TRUST_BOUNDARY_5["🌐 Domain Trust Boundary"]
250
- DNS[🌍 DNS Resolution]
251
- DOMAIN[🏷️ blacktrigram.com]
252
- TLS[🔒 TLS Certificate]
250
+ DNS["🌍 DNS Resolution"]
251
+ DOMAIN["🏷️ blacktrigram.com"]
252
+ TLS["🔒 TLS Certificate"]
253
253
  end
254
254
 
255
255
  USER -->|🎯 T1: Malicious Input| BROWSER
@@ -332,53 +332,53 @@ Following [MITRE ATT&CK-Driven Analysis](https://github.com/Hack23/ISMS-PUBLIC/b
332
332
  }
333
333
  }%%
334
334
  flowchart TD
335
- GOAL[🎯 Compromise Black Trigram<br/>Educational Gaming Platform]
336
-
337
- GOAL --> PATH1[🚪 External Web Attack]
338
- GOAL --> PATH2[🔒 Client-Side Abuse]
339
- GOAL --> PATH3[🔗 Supply Chain Compromise]
340
- GOAL --> PATH4[🌐 Infrastructure Attack]
341
- GOAL --> PATH5[🏛️ Cultural/Social Attack]
342
-
343
- PATH1 --> EXT1[🌐 Web Application Exploit]
344
- PATH1 --> EXT2[🔌 CDN/Asset Abuse]
345
- PATH1 --> EXT3[📧 Social Engineering]
346
-
347
- EXT1 --> EXT1A[🔍 XSS/CSRF Attack]
348
- EXT1 --> EXT1B[💉 Content Injection]
349
- EXT1A --> EXT1A1[🎯 Session Hijacking]
350
- EXT1B --> EXT1B1[📊 Data Corruption]
351
-
352
- EXT2 --> EXT2A[📦 Malicious Asset Injection]
353
- EXT2 --> EXT2B[🎵 Audio Content Tampering]
354
- EXT2A --> EXT2A1[🦠 Malware Distribution]
355
- EXT2B --> EXT2B1[🎭 Cultural Offensive Content]
356
-
357
- PATH2 --> CLI1[🖥️ Browser Exploitation]
358
- PATH2 --> CLI2[👤 User Session Abuse]
359
- CLI1 --> CLI1A[🎨 WebGL/Canvas Attack]
360
- CLI1 --> CLI1B[🔊 Audio System Exploit]
361
- CLI2 --> CLI2A[💾 Storage Manipulation]
362
- CLI2 --> CLI2B[🎮 Gameplay Disruption]
363
-
364
- PATH3 --> SUP1[📚 NPM Dependency Attack]
365
- PATH3 --> SUP2[🔧 Build Pipeline Compromise]
366
- SUP1 --> SUP1A[🦠 Malicious Package Injection]
367
- SUP2 --> SUP2A[🏗️ CI/CD Tampering]
368
-
369
- PATH4 --> INF1[🌐 DNS/Domain Attack]
370
- PATH4 --> INF2[📦 CDN Infrastructure]
371
- INF1 --> INF1A[🏷️ Domain Hijacking]
372
- INF1 --> INF1B[🌍 DNS Poisoning]
373
- INF2 --> INF2A[📄 Asset Tampering]
374
- INF2 --> INF2B[🔒 CDN Compromise]
375
-
376
- PATH5 --> CUL1[🇰🇷 Cultural Misrepresentation]
377
- PATH5 --> CUL2[🎭 Community Manipulation]
378
- CUL1 --> CUL1A[🏛️ Offensive Content Injection]
379
- CUL1 --> CUL1B[📚 Educational Misinformation]
380
- CUL2 --> CUL2A[👥 Social Media Campaign]
381
- CUL2 --> CUL2B[🗣️ Reputation Attack]
335
+ GOAL["🎯 Compromise Black Trigram<br/>Educational Gaming Platform"]
336
+
337
+ GOAL --> PATH1["🚪 External Web Attack"]
338
+ GOAL --> PATH2["🔒 Client-Side Abuse"]
339
+ GOAL --> PATH3["🔗 Supply Chain Compromise"]
340
+ GOAL --> PATH4["🌐 Infrastructure Attack"]
341
+ GOAL --> PATH5["🏛️ Cultural/Social Attack"]
342
+
343
+ PATH1 --> EXT1["🌐 Web Application Exploit"]
344
+ PATH1 --> EXT2["🔌 CDN/Asset Abuse"]
345
+ PATH1 --> EXT3["📧 Social Engineering"]
346
+
347
+ EXT1 --> EXT1A["🔍 XSS/CSRF Attack"]
348
+ EXT1 --> EXT1B["💉 Content Injection"]
349
+ EXT1A --> EXT1A1["🎯 Session Hijacking"]
350
+ EXT1B --> EXT1B1["📊 Data Corruption"]
351
+
352
+ EXT2 --> EXT2A["📦 Malicious Asset Injection"]
353
+ EXT2 --> EXT2B["🎵 Audio Content Tampering"]
354
+ EXT2A --> EXT2A1["🦠 Malware Distribution"]
355
+ EXT2B --> EXT2B1["🎭 Cultural Offensive Content"]
356
+
357
+ PATH2 --> CLI1["🖥️ Browser Exploitation"]
358
+ PATH2 --> CLI2["👤 User Session Abuse"]
359
+ CLI1 --> CLI1A["🎨 WebGL/Canvas Attack"]
360
+ CLI1 --> CLI1B["🔊 Audio System Exploit"]
361
+ CLI2 --> CLI2A["💾 Storage Manipulation"]
362
+ CLI2 --> CLI2B["🎮 Gameplay Disruption"]
363
+
364
+ PATH3 --> SUP1["📚 NPM Dependency Attack"]
365
+ PATH3 --> SUP2["🔧 Build Pipeline Compromise"]
366
+ SUP1 --> SUP1A["🦠 Malicious Package Injection"]
367
+ SUP2 --> SUP2A["🏗️ CI/CD Tampering"]
368
+
369
+ PATH4 --> INF1["🌐 DNS/Domain Attack"]
370
+ PATH4 --> INF2["📦 CDN Infrastructure"]
371
+ INF1 --> INF1A["🏷️ Domain Hijacking"]
372
+ INF1 --> INF1B["🌍 DNS Poisoning"]
373
+ INF2 --> INF2A["📄 Asset Tampering"]
374
+ INF2 --> INF2B["🔒 CDN Compromise"]
375
+
376
+ PATH5 --> CUL1["🇰🇷 Cultural Misrepresentation"]
377
+ PATH5 --> CUL2["🎭 Community Manipulation"]
378
+ CUL1 --> CUL1A["🏛️ Offensive Content Injection"]
379
+ CUL1 --> CUL1B["📚 Educational Misinformation"]
380
+ CUL2 --> CUL2A["👥 Social Media Campaign"]
381
+ CUL2 --> CUL2B["🗣️ Reputation Attack"]
382
382
 
383
383
  style GOAL fill:#d32f2f,color:#fff
384
384
  style PATH1 fill:#ff5722,color:#fff
@@ -522,36 +522,36 @@ Aligned with [Security Architecture](SECURITY_ARCHITECTURE.md) implementation:
522
522
  }%%
523
523
  flowchart TB
524
524
  subgraph PERIMETER["🌐 Perimeter Security"]
525
- HTTPS[🔐 HTTPS Enforcement]
526
- CDN[📦 CDN Security]
527
- SRI[🔒 Subresource Integrity]
525
+ HTTPS["🔐 HTTPS Enforcement"]
526
+ CDN["📦 CDN Security"]
527
+ SRI["🔒 Subresource Integrity"]
528
528
  end
529
529
 
530
530
  subgraph APPLICATION["📱 Application Security"]
531
- CSP[🛡️ Content Security Policy]
532
- REACT[⚛️ React Security Patterns]
533
- INPUT[✅ Input Validation]
534
- THREE[🎨 Three.js Security Context]
531
+ CSP["🛡️ Content Security Policy"]
532
+ REACT["⚛️ React Security Patterns"]
533
+ INPUT["✅ Input Validation"]
534
+ THREE["🎨 Three.js Security Context"]
535
535
  end
536
536
 
537
537
  subgraph BROWSER["🖥️ Browser Security"]
538
- STORAGE[💾 Session-Only Storage]
539
- PERMISSIONS[🔑 API Permissions]
540
- SANDBOX[📦 Browser Sandbox]
541
- CORS[🌐 CORS Policy]
538
+ STORAGE["💾 Session-Only Storage"]
539
+ PERMISSIONS["🔑 API Permissions"]
540
+ SANDBOX["📦 Browser Sandbox"]
541
+ CORS["🌐 CORS Policy"]
542
542
  end
543
543
 
544
544
  subgraph PIPELINE["🏗️ Build Security"]
545
- DEPS[📚 Dependency Scanning]
546
- SLSA[🔏 SLSA Attestations]
547
- SAST[🔍 Static Analysis]
548
- SBOM[📋 Software Bill of Materials]
545
+ DEPS["📚 Dependency Scanning"]
546
+ SLSA["🔏 SLSA Attestations"]
547
+ SAST["🔍 Static Analysis"]
548
+ SBOM["📋 Software Bill of Materials"]
549
549
  end
550
550
 
551
551
  subgraph MONITORING["📊 Security Monitoring"]
552
- PERFORMANCE[📈 Performance Monitoring]
553
- ERRORS[🚨 Error Tracking]
554
- INTEGRITY[🔍 Content Integrity]
552
+ PERFORMANCE["📈 Performance Monitoring"]
553
+ ERRORS["🚨 Error Tracking"]
554
+ INTEGRITY["🔍 Content Integrity"]
555
555
  end
556
556
 
557
557
  HTTPS --> CSP
@@ -619,24 +619,24 @@ Following cultural authenticity requirements from [CRA Assessment](CRA-ASSESSMEN
619
619
  }%%
620
620
  flowchart TD
621
621
  subgraph EDUCATIONAL_THREATS["🎓 Educational Integrity Threats"]
622
- MISINFORMATION[📚 Misinformation Injection]
623
- CULTURAL_BIAS[🏛️ Cultural Bias Introduction]
624
- TECHNIQUE_DANGER[⚠️ Dangerous Technique Promotion]
625
- HISTORICAL_FALSIFICATION[📜 Historical Falsification]
622
+ MISINFORMATION["📚 Misinformation Injection"]
623
+ CULTURAL_BIAS["🏛️ Cultural Bias Introduction"]
624
+ TECHNIQUE_DANGER["⚠️ Dangerous Technique Promotion"]
625
+ HISTORICAL_FALSIFICATION["📜 Historical Falsification"]
626
626
  end
627
627
 
628
628
  subgraph ATTACK_METHODS["⚔️ Attack Methods"]
629
- CONTENT_INJECTION[💉 Content Injection]
630
- GRADUAL_CORRUPTION[🔄 Gradual Content Corruption]
631
- SOCIAL_ENGINEERING[🎭 Social Engineering]
632
- INSIDER_MODIFICATION[👤 Insider Content Modification]
629
+ CONTENT_INJECTION["💉 Content Injection"]
630
+ GRADUAL_CORRUPTION["🔄 Gradual Content Corruption"]
631
+ SOCIAL_ENGINEERING["🎭 Social Engineering"]
632
+ INSIDER_MODIFICATION["👤 Insider Content Modification"]
633
633
  end
634
634
 
635
635
  subgraph CULTURAL_IMPACTS["🇰🇷 Cultural Impacts"]
636
- STEREOTYPE_REINFORCEMENT[📺 Stereotype Reinforcement]
637
- CULTURAL_APPROPRIATION[🎭 Cultural Appropriation]
638
- DISRESPECTFUL_PORTRAYAL[😠 Disrespectful Portrayal]
639
- EDUCATIONAL_HARM[🎓 Educational Harm]
636
+ STEREOTYPE_REINFORCEMENT["📺 Stereotype Reinforcement"]
637
+ CULTURAL_APPROPRIATION["🎭 Cultural Appropriation"]
638
+ DISRESPECTFUL_PORTRAYAL["😠 Disrespectful Portrayal"]
639
+ EDUCATIONAL_HARM["🎓 Educational Harm"]
640
640
  end
641
641
 
642
642
  MISINFORMATION --> CONTENT_INJECTION
@@ -680,27 +680,27 @@ Following frontend-only architecture from [Architecture](ARCHITECTURE.md):
680
680
  }%%
681
681
  flowchart LR
682
682
  subgraph DEVELOPMENT["🔧 Development Phase"]
683
- CODE[💻 Source Code]
684
- ASSETS[📦 Static Assets]
685
- DEPS[📚 Dependencies]
683
+ CODE["💻 Source Code"]
684
+ ASSETS["📦 Static Assets"]
685
+ DEPS["📚 Dependencies"]
686
686
  end
687
687
 
688
688
  subgraph BUILD["🏗️ Build Phase"]
689
- SCAN[🔍 Security Scanning]
690
- BUNDLE[📦 Asset Bundling]
691
- HASH[🔐 Integrity Hashing]
692
- SIGN[✍️ Asset Signing]
689
+ SCAN["🔍 Security Scanning"]
690
+ BUNDLE["📦 Asset Bundling"]
691
+ HASH["🔐 Integrity Hashing"]
692
+ SIGN["✍️ Asset Signing"]
693
693
  end
694
694
 
695
695
  subgraph DEPLOYMENT["🚀 Deployment Phase"]
696
- CDN_UPLOAD[📤 CDN Upload]
697
- SRI_GEN[🔒 SRI Generation]
698
- CSP_CONFIG[🛡️ CSP Configuration]
696
+ CDN_UPLOAD["📤 CDN Upload"]
697
+ SRI_GEN["🔒 SRI Generation"]
698
+ CSP_CONFIG["🛡️ CSP Configuration"]
699
699
  end
700
700
 
701
701
  subgraph RUNTIME["⚡ Runtime Phase"]
702
- BROWSER[🌐 Browser Load]
703
- VALIDATE[✅ Integrity Check]
702
+ BROWSER["🌐 Browser Load"]
703
+ VALIDATE["✅ Integrity Check"]
704
704
  EXECUTE[▶️ Safe Execution]
705
705
  end
706
706
 
@@ -944,7 +944,7 @@ Following [Hack23 AB Threat Modeling Policy — AI-Enabled Threats](https://gith
944
944
  ```mermaid
945
945
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
946
946
  flowchart TD
947
- A[🤖 AI Threat Detection] --> B{Threat Category}
947
+ A["🤖 AI Threat Detection"] --> B{Threat Category}
948
948
  B -->|Content Manipulation| C[Cultural Review Gate]
949
949
  B -->|Supply Chain| D[SBOM + SRI Validation]
950
950
  B -->|Social Engineering| E[Contributor Verification]
@@ -953,7 +953,7 @@ flowchart TD
953
953
  D --> H[SLSA Provenance + Lockfile Audit]
954
954
  E --> I[Signed Commits + Code Review]
955
955
  F --> J[Rate Limiting + Shield Standard]
956
- G --> K[✅ Safe to Deploy]
956
+ G --> K["✅ Safe to Deploy"]
957
957
  H --> K
958
958
  I --> K
959
959
  J --> K
@@ -982,10 +982,10 @@ Following [Hack23 AB Threat Modeling Policy — Maturity Framework](https://gith
982
982
  ```mermaid
983
983
  %%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#2979FF','primaryTextColor':'#fff','primaryBorderColor':'#0D47A1','lineColor':'#00C853','secondaryColor':'#FFD600','tertiaryColor':'#FF3D00'}}}%%
984
984
  graph LR
985
- L1[Level 1<br/>Ad-hoc<br/>✅ Done] --> L2[Level 2<br/>Repeatable<br/>✅ Done]
986
- L2 --> L3[Level 3<br/>Defined<br/>✅ Current]
987
- L3 --> L4[Level 4<br/>Managed<br/>🎯 2026]
988
- L4 --> L5[Level 5<br/>Optimizing<br/>🔮 2027+]
985
+ L1["Level 1<br/>Ad-hoc<br/>✅ Done"] --> L2["Level 2<br/>Repeatable<br/>✅ Done"]
986
+ L2 --> L3["Level 3<br/>Defined<br/>✅ Current"]
987
+ L3 --> L4["Level 4<br/>Managed<br/>🎯 2026"]
988
+ L4 --> L5["Level 5<br/>Optimizing<br/>🔮 2027+"]
989
989
  style L1 fill:#4CAF50,color:#fff
990
990
  style L2 fill:#4CAF50,color:#fff
991
991
  style L3 fill:#2196F3,color:#fff
@@ -21,7 +21,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
21
21
  import { jsx, jsxs } from "react/jsx-runtime";
22
22
  import { Canvas } from "@react-three/fiber";
23
23
  //#region src/components/screens/intro/IntroScreen3D.tsx
24
- var APP_VERSION = "0.7.52";
24
+ var APP_VERSION = "0.7.54";
25
25
  var MENU_ITEMS = [
26
26
  {
27
27
  mode: GameMode.VERSUS,
@@ -183,7 +183,7 @@ var SplashScreen = ({ onStart, width, height }) => {
183
183
  }),
184
184
  /* @__PURE__ */ jsxs("div", {
185
185
  role: "contentinfo",
186
- "aria-label": `Application version 0.7.52`,
186
+ "aria-label": `Application version 0.7.54`,
187
187
  style: {
188
188
  position: "absolute",
189
189
  bottom: "20px",
@@ -192,7 +192,7 @@ var SplashScreen = ({ onStart, width, height }) => {
192
192
  fontSize: "10px",
193
193
  zIndex: 1
194
194
  },
195
- children: ["v", "0.7.52"]
195
+ children: ["v", "0.7.54"]
196
196
  })
197
197
  ]
198
198
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blacktrigram",
3
- "version": "0.7.52",
3
+ "version": "0.7.54",
4
4
  "description": "Black Trigram (흑괘) - Korean Martial Arts Combat Simulator. Reusable game systems, combat mechanics, animation framework, and Korean martial arts data built with React, Three.js, and TypeScript.",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -141,6 +141,7 @@
141
141
  "find:unused": "npm run knip",
142
142
  "test:licenses": "license-compliance --direct --allow 'MIT;ISC;0BSD;BSD-2-Clause;BSD-3-Clause;Apache-2.0;Unlicense;CC0-1.0'",
143
143
  "validate:mcp": "bash scripts/validate-mcp-config.sh",
144
+ "validate:mermaid": "node scripts/validate-mermaid.mjs",
144
145
  "docs": "typedoc --options typedoc.json",
145
146
  "docs:sitemap": "node generate-sitemaps.js",
146
147
  "build:test-reports": "node scripts/copy-test-reports.js",
@@ -187,7 +188,7 @@
187
188
  "three": "0.184.0"
188
189
  },
189
190
  "devDependencies": {
190
- "@aws-sdk/client-bedrock-runtime": "3.1051.0",
191
+ "@aws-sdk/client-bedrock-runtime": "3.1054.0",
191
192
  "@eslint/js": "10.0.1",
192
193
  "@react-three/drei": "10.7.7",
193
194
  "@react-three/fiber": "9.6.1",
@@ -203,11 +204,11 @@
203
204
  "@vitejs/plugin-react": "6.0.2",
204
205
  "@vitest/coverage-v8": "4.1.7",
205
206
  "@vitest/ui": "4.1.7",
206
- "cypress": "15.15.0",
207
+ "cypress": "15.16.0",
207
208
  "cypress-junit-reporter": "1.3.1",
208
209
  "cypress-multi-reporters": "2.0.5",
209
210
  "cypress-wait-until": "3.0.2",
210
- "dependency-cruiser": "17.4.0",
211
+ "dependency-cruiser": "17.4.2",
211
212
  "dotenv": "17.4.2",
212
213
  "eslint": "10.4.0",
213
214
  "eslint-plugin-react-hooks": "7.1.1",
@@ -215,13 +216,14 @@
215
216
  "globals": "17.6.0",
216
217
  "jest-axe": "10.0.0",
217
218
  "jsdom": "29.1.1",
218
- "knip": "6.14.1",
219
+ "knip": "6.14.2",
219
220
  "license-compliance": "3.0.1",
221
+ "mermaid": "11.15.0",
220
222
  "mocha-junit-reporter": "2.2.1",
221
223
  "mochawesome": "7.1.4",
222
224
  "mochawesome-merge": "5.1.1",
223
225
  "mochawesome-report-generator": "6.3.2",
224
- "openai": "6.38.0",
226
+ "openai": "6.39.0",
225
227
  "playwright": "1.60.0",
226
228
  "postprocessing": "6.39.1",
227
229
  "react": "19.2.6",
@@ -237,7 +239,7 @@
237
239
  "typedoc-plugin-mermaid": "1.12.0",
238
240
  "typedoc-plugin-missing-exports": "4.1.3",
239
241
  "typescript": "6.0.3",
240
- "typescript-eslint": "8.59.4",
242
+ "typescript-eslint": "8.60.0",
241
243
  "vite": "8.0.14",
242
244
  "vite-bundle-analyzer": "1.3.8",
243
245
  "vite-tsconfig-paths": "6.1.1",