File size: 1,947 Bytes
414dc55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Shared enumerations for Case Zero schemas.



These constrain the *shape* of a case (so it stays solvable and the grammars stay

small). The model still invents all creative content - names, motives, prose, and

the specific clues - freely within these buckets.

"""

from __future__ import annotations

from enum import StrEnum


class Difficulty(StrEnum):
    GENTLE = "gentle"
    STANDARD = "standard"
    HARD = "hard"
    FIENDISH = "fiendish"


class DiscoveryMethod(StrEnum):
    """How a clue can be obtained. Non-INTERROGATION methods guarantee a clue is

    reachable even if no suspect ever volunteers it (the discoverability gate)."""

    SEARCH = "search"
    INTERROGATION = "interrogation"
    FORENSIC = "forensic"
    DOCUMENT = "document"


class MotiveCategory(StrEnum):
    GREED = "greed"
    REVENGE = "revenge"
    JEALOUSY = "jealousy"
    FEAR = "fear"
    AMBITION = "ambition"
    LOVE = "love"
    CONCEALMENT = "concealment"
    LOYALTY = "loyalty"


class Intent(StrEnum):
    """The suspect's chosen posture for a single turn (advisory, model-reported)."""

    COOPERATE = "cooperate"
    DEFLECT = "deflect"
    DENY = "deny"
    VOLUNTEER = "volunteer"
    BREAK_DOWN = "break_down"


class EvidenceReaction(StrEnum):
    """How the suspect reacts when shown evidence (advisory, model-reported)."""

    NONE = "none"
    DEFLECT = "deflect"
    PANIC = "panic"
    CONCEDE = "concede"


class Relevance(StrEnum):
    """Deterministic relevance of presented evidence to a suspect's dossier.



    Computed by the engine (never the model). ``BREAKING`` means the evidence is

    listed in one of the suspect's ``AnchoredLie.breaks_on`` sets.

    """

    NONE = "none"
    TANGENTIAL = "tangential"
    DIRECT = "direct"
    BREAKING = "breaking"


class SubjectType(StrEnum):
    SUSPECT = "suspect"
    SCENE = "scene"
    PROP = "prop"