Spaces:
Sleeping
Sleeping
File size: 4,740 Bytes
f646e0b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | """μ¨μ μν 3κ° β μ λ’°μΆ / μ μ½λ / μ (P0 4μ’
μμ§ λͺ
μΈ μ€κ±°).
κ·μΉ:
- μ λ’°μΆ: trust_score / doubt_score λμ (μμ). μΆ μ΄λ²€νΈκ° λ―Όλ€
- μ μ½λ: λ¨μ‘° μ¦κ°λ§ νμ© (λλ리λ μ½λλ κ²°ν¨)
- μ(μ μ ): E01-01 λμ
μμ 1ν ν립 ν λΆλ³
- μ μ μκ² μ«μΒ·κ²μ΄μ§ λ
ΈμΆ κΈμ§ β μνλ ν€Β·κ²°Β·ν΄κΈμΌλ‘λ§ νμΆ (trust_level νμ°)
- κΆμ: ν¬μΌ μμμλ session.state, ν¬μΌ μ’
λ£ μ μ¬κΈ°λ‘ μ»€λ° (μ΄μ€ κ°±μ κΈμ§)
"""
from __future__ import annotations
from dataclasses import dataclass, field
# μΆ μ΄λ²€νΈ 1νλΉ μ΄λλ (μμ§ μ€μ β μμ¬ λ΄μ© μλ).
# E01~E06 μΆ μ΄λ²€νΈ λ°λ κΈ°μ€μΌλ‘ μλ© 3μ’
μ΄ λͺ¨λ λλ¬ κ°λ₯νλλ‘ μ‘°μ λ κ°.
AXIS_DELTA = 12
# μ λ’° λ 벨 νμ° κ²½κ³ (P0 0-3: μ«μ λμ μ΄ λ λ²¨μ΄ ν€Β·κ²°Β·ν΄κΈμ κ²°μ )
TRUST_LEVELS = ("doubt_high", "doubt_mid", "neutral", "trust_mid", "trust_high")
@dataclass
class HiddenState:
trust_score: int = 0
doubt_score: int = 0
frailty: int = 0 # μ μ½λ β λ¨μ‘° μ¦κ°
awareness_established: bool = False # μ(μ μ ) β λμ
1ν ν립
axis_log: list[str] = field(default_factory=list) # μ°κ΅¬μ© μ΄λ ₯ (card_id:axis)
# ββ μ λ’°μΆ ββββββββββββββββββββββββββββββββββββββββββββββ
def apply_axis(self, axis: str | None, source: str = "") -> None:
if axis == "trust":
self.trust_score += AXIS_DELTA
elif axis == "doubt":
self.doubt_score += AXIS_DELTA
elif axis in (None, "neutral"):
return
else:
raise ValueError(f"μ μ μλ axis: {axis}")
self.axis_log.append(f"{source}:{axis}")
@property
def seesaw(self) -> int:
"""μμ¬μ°μΈ(-) ββ[0]ββ μ λ’°μ°μΈ(+)"""
return self.trust_score - self.doubt_score
@property
def trust_level(self) -> str:
"""P0 0-3 νμ° μΆλ ₯ β ν둬ννΈμ 'κ²°'κ³Ό ν΄κΈμ κ²°μ νλ€."""
s = self.seesaw
if s >= 36:
return "trust_high"
if s >= 12:
return "trust_mid"
if s <= -36:
return "doubt_high"
if s <= -12:
return "doubt_mid"
return "neutral"
@property
def deep_unlock(self) -> bool:
"""μ¬μΈ΅ κ³ λ°± ν΄κΈ (μμ§ D) β μ λ’°ι«μμλ§."""
return self.trust_level == "trust_high"
# ββ μ μ½λ ββββββββββββββββββββββββββββββββββββββββββββββ
def advance_frailty(self, amount: int = 1) -> None:
if amount < 0:
raise ValueError("μ μ½λλ λλμκ°μ§ μλλ€")
self.frailty += amount
# ββ μ βββββββββββββββββββββββββββββββββββββββββββββββββ
def establish_awareness(self) -> None:
self.awareness_established = True
# ββ μμν μ€λ
μ· (μ νλ β ν¬μΌμ© to_sessionκ³Ό λ³κ°) ββ
def snapshot(self) -> dict:
return {
"trust_score": self.trust_score,
"doubt_score": self.doubt_score,
"frailty": self.frailty,
"awareness_established": self.awareness_established,
"axis_log": list(self.axis_log),
}
@classmethod
def from_snapshot(cls, data: dict) -> "HiddenState":
return cls(
trust_score=int(data["trust_score"]),
doubt_score=int(data["doubt_score"]),
frailty=int(data["frailty"]),
awareness_established=bool(data["awareness_established"]),
axis_log=list(data.get("axis_log", [])),
)
# ββ ν¬μΌ μ»€λ° (session.state β μμ μν λ¨μΌ κ²½λ‘) βββββ
def to_session(self) -> dict:
"""ν¬μΌ μ§μ
μ session.stateμ μ€μ΄ λ³΄λΌ μ€λ
μ·."""
return {
"hidden_trust": self.trust_score,
"hidden_doubt": self.doubt_score,
"trust_level": self.trust_level,
"deep_unlock": self.deep_unlock,
}
def commit_from_session(self, state: dict, source: str = "pocket") -> None:
"""ν¬μΌ μ’
λ£ μ session.stateμ μ¦λΆλ§ μ»€λ° (μ μΌν μλ°©ν₯ κ²½λ‘)."""
self.trust_score = max(self.trust_score, int(state.get("hidden_trust", self.trust_score)))
self.doubt_score = max(self.doubt_score, int(state.get("hidden_doubt", self.doubt_score)))
self.axis_log.append(f"{source}:commit")
|