blacktrigram 0.7.53 â 0.7.55
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 +42 -42
- package/COMBAT_ARCHITECTURE.md +8 -8
- package/README.md +9 -9
- package/SECURITY_ARCHITECTURE.md +143 -143
- package/THREAT_MODEL.md +128 -128
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/shared/ui/SplashScreen.js +2 -2
- package/package.json +11 -9
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
|
|
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")
|
package/COMBAT_ARCHITECTURE.md
CHANGED
|
@@ -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
|
package/SECURITY_ARCHITECTURE.md
CHANGED
|
@@ -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.
|
|
24
|
+
var APP_VERSION = "0.7.55";
|
|
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.
|
|
186
|
+
"aria-label": `Application version 0.7.55`,
|
|
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.
|
|
195
|
+
children: ["v", "0.7.55"]
|
|
196
196
|
})
|
|
197
197
|
]
|
|
198
198
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blacktrigram",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.55",
|
|
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.
|
|
191
|
+
"@aws-sdk/client-bedrock-runtime": "3.1057.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,25 +204,26 @@
|
|
|
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.
|
|
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.
|
|
211
|
+
"dependency-cruiser": "17.4.3",
|
|
211
212
|
"dotenv": "17.4.2",
|
|
212
|
-
"eslint": "10.4.
|
|
213
|
+
"eslint": "10.4.1",
|
|
213
214
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
214
215
|
"eslint-plugin-react-refresh": "0.5.2",
|
|
215
216
|
"globals": "17.6.0",
|
|
216
217
|
"jest-axe": "10.0.0",
|
|
217
218
|
"jsdom": "29.1.1",
|
|
218
|
-
"knip": "6.
|
|
219
|
+
"knip": "6.15.0",
|
|
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.39.
|
|
226
|
+
"openai": "6.39.1",
|
|
225
227
|
"playwright": "1.60.0",
|
|
226
228
|
"postprocessing": "6.39.1",
|
|
227
229
|
"react": "19.2.6",
|
|
@@ -231,13 +233,13 @@
|
|
|
231
233
|
"ts-morph": "28.0.0",
|
|
232
234
|
"ts-node": "10.9.2",
|
|
233
235
|
"tsc-alias": "1.8.17",
|
|
234
|
-
"tsx": "4.22.
|
|
236
|
+
"tsx": "4.22.4",
|
|
235
237
|
"typedoc": "0.28.19",
|
|
236
238
|
"typedoc-plugin-markdown": "4.11.0",
|
|
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.
|
|
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",
|