Skip to content

Commit 0de8466

Browse files
committed
Update user-facing LJPW terminology to developer-friendly names
Internal LJPW constants remain unchanged, but user-facing descriptions now use: - L → Cohesion (integration, connectivity, module relationships) - J → Structure (validation, type safety, contracts, consistency) - P → Complexity (execution density, logic, cyclomatic complexity) - W → Abstraction (documentation, patterns, architecture, design) This makes the harmonizer output more intuitive for developers while preserving the mathematical foundation.
1 parent 9f11b4b commit 0de8466

File tree

1 file changed

+40
-26
lines changed

1 file changed

+40
-26
lines changed

harmonizer/resonance_engine.py

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,13 @@ class ResonanceEngine:
8989

9090
# Coupling matrix (asymmetric)
9191
# Row = source dimension, Column = target influence
92+
# L=Cohesion, J=Structure, P=Complexity, W=Abstraction
9293
COUPLING_MATRIX = np.array(
9394
[
94-
[1.0, 1.4, 1.3, 1.5], # Love amplifies all, especially Wisdom
95-
[0.9, 1.0, 0.7, 1.2], # Justice moderates
96-
[0.6, 0.8, 1.0, 0.5], # Power absorbs (lowest out-coupling)
97-
[1.3, 1.1, 1.0, 1.0], # Wisdom integrates
95+
[1.0, 1.4, 1.3, 1.5], # Cohesion amplifies all, especially Abstraction
96+
[0.9, 1.0, 0.7, 1.2], # Structure moderates
97+
[0.6, 0.8, 1.0, 0.5], # Complexity absorbs (lowest out-coupling)
98+
[1.3, 1.1, 1.0, 1.0], # Abstraction integrates
9899
]
99100
)
100101

@@ -104,11 +105,11 @@ class ResonanceEngine:
104105
# Anchor Point (perfection)
105106
ANCHOR_POINT = np.array([1.0, 1.0, 1.0, 1.0])
106107

107-
# Power erosion parameters (from LJPW Codex v5.1)
108+
# Complexity erosion parameters (how complexity degrades structure)
108109
POWER_EROSION_PARAMS = {
109110
"gamma_JP": 0.49, # Erosion rate coefficient
110-
"K_JP": 0.71, # Threshold constant
111-
"n_JP": 4.1, # Hill coefficient (steepness)
111+
"K_JP": 0.71, # Complexity threshold constant
112+
"n_JP": 4.1, # Hill coefficient (steepness of erosion)
112113
}
113114

114115
def __init__(self, params: Optional[Dict] = None):
@@ -210,13 +211,14 @@ def compare_voltage(
210211
@staticmethod
211212
def detect_power_erosion(L: float, J: float, P: float, W: float) -> PowerErosionResult:
212213
"""
213-
Detect if Power is eroding Justice (lacks Wisdom protection).
214+
Detect if high Complexity is eroding Structure (lacks Abstraction protection).
214215
215-
From LJPW Codex: "Raw Power, unchecked by Wisdom, degrades Justice."
216+
High complexity code without proper abstractions will degrade
217+
structural integrity over time (validation, contracts, consistency).
216218
217-
PowerErosion = gamma_JP × (P^n / (K^n + P^n)) × max(0, 1-W)
219+
Erosion = gamma × (Complexity^n / (K^n + Complexity^n)) × (1 - Abstraction)
218220
219-
High Power without WisdomJustice degrades over time.
221+
High Complexity without AbstractionStructure degrades over time.
220222
221223
Args:
222224
L, J, P, W: LJPW coordinates
@@ -245,23 +247,25 @@ def detect_power_erosion(L: float, J: float, P: float, W: float) -> PowerErosion
245247
if erosion_rate < 0.05:
246248
severity = "NONE"
247249
at_risk = False
248-
recommendation = "System is balanced."
250+
recommendation = "Code is balanced."
249251
elif erosion_rate < 0.15:
250252
severity = "LOW"
251253
at_risk = True
252-
recommendation = "Consider increasing Wisdom to protect Justice."
254+
recommendation = (
255+
"Consider improving Abstraction (documentation, patterns) to protect Structure."
256+
)
253257
elif erosion_rate < 0.30:
254258
severity = "MEDIUM"
255259
at_risk = True
256-
recommendation = f"Warning: Power ({P:.2f}) eroding Justice without Wisdom ({W:.2f}). Add abstractions, documentation."
260+
recommendation = f"Warning: High Complexity ({P:.2f}) eroding Structure without Abstraction ({W:.2f}). Add documentation, extract patterns."
257261
elif erosion_rate < 0.45:
258262
severity = "HIGH"
259263
at_risk = True
260-
recommendation = f"Critical: High Power ({P:.2f}) with Low Wisdom ({W:.2f}). Justice will collapse. Refactor urgently."
264+
recommendation = f"Critical: High Complexity ({P:.2f}) with low Abstraction ({W:.2f}). Structure will degrade. Refactor urgently."
261265
else:
262266
severity = "CRITICAL"
263267
at_risk = True
264-
recommendation = f"Emergency: Reckless Power scenario. System unstable. Immediate intervention required."
268+
recommendation = "Emergency: Excessive complexity without abstractions. Code unmaintainable. Immediate refactoring required."
265269

266270
return PowerErosionResult(
267271
at_risk=at_risk,
@@ -312,10 +316,10 @@ def _derivatives(self, state: np.ndarray, bounded: bool = True) -> np.ndarray:
312316
# State-dependent coupling
313317
kappa_LJ, kappa_LP, kappa_LW = self._calculate_kappa(H)
314318

315-
# Love equation (Source - gives more than receives)
319+
# Cohesion equation (amplifies other dimensions)
316320
dL_dt = p["alpha_LJ"] * J * kappa_LJ + p["alpha_LW"] * W * kappa_LW - p["beta_L"] * L
317321

318-
# Justice equation (Mediator - with Power erosion)
322+
# Structure equation (with Complexity erosion when Abstraction is low)
319323
L_effect = p["alpha_JL"] * (L / (p["K_JL"] + L)) # Saturation
320324
P_erosion = (
321325
p["gamma_JP"]
@@ -324,10 +328,10 @@ def _derivatives(self, state: np.ndarray, bounded: bool = True) -> np.ndarray:
324328
)
325329
dJ_dt = L_effect + p["alpha_JW"] * W - P_erosion - p["beta_J"] * J
326330

327-
# Power equation (Sink - receives more than gives)
331+
# Complexity equation (tends to accumulate)
328332
dP_dt = p["alpha_PL"] * L * kappa_LP + p["alpha_PJ"] * J - p["beta_P"] * P
329333

330-
# Wisdom equation (Integrator - synthesizes all)
334+
# Abstraction equation (synthesizes understanding from all dimensions)
331335
dW_dt = (
332336
p["alpha_WL"] * L * kappa_LW + p["alpha_WJ"] * J + p["alpha_WP"] * P - p["beta_W"] * W
333337
)
@@ -512,14 +516,24 @@ def _get_dominant_dimension(self, state: np.ndarray) -> str:
512516
# The dimension furthest below its equilibrium is the deficit
513517
return min(relative, key=relative.get)
514518

519+
# User-facing dimension names (developer-friendly terminology)
520+
DIMENSION_NAMES = {
521+
"L": "Cohesion",
522+
"J": "Structure",
523+
"P": "Complexity",
524+
"W": "Abstraction",
525+
}
526+
527+
DIMENSION_DESCRIPTIONS = {
528+
"L": "Cohesion (integration, connectivity, module relationships)",
529+
"J": "Structure (validation, type safety, contracts, consistency)",
530+
"P": "Complexity (execution density, logic, cyclomatic complexity)",
531+
"W": "Abstraction (documentation, patterns, architecture, design)",
532+
}
533+
515534
def _interpret_deficit(self, primary: str, percentages: Dict[str, float]) -> str:
516535
"""Interpret the deficit analysis."""
517-
names = {
518-
"L": "Love (relationships, connectivity)",
519-
"J": "Justice (structure, validation)",
520-
"P": "Power (execution, action)",
521-
"W": "Wisdom (abstraction, understanding)",
522-
}
536+
names = self.DIMENSION_DESCRIPTIONS
523537

524538
dominant_pct = percentages[primary]
525539

0 commit comments

Comments
 (0)