Temporal Relationship Modeling #
In traditional writing tools, character relationships are static fields (e.g. "Bob is Alice's friend"). This breaks down in long-form fiction where trust erodes, alliances fracture, and enemies reconcile.
FleshNote treats relationships as temporal streams of Turning Points. Every shift in dynamic is stored in the character_relationships junction table with exact narrative and chronological timestamps.
Database Schema (`character_relationships`) #
| Column | Type | Description |
|---|---|---|
id |
PRIMARY KEY | Unique record identifier (UUID / integer). |
character_id |
UUID / INT | Source Character: Who feels this emotion or holds this status? |
target_character_id |
UUID / INT | Target Character: Towards whom is this directed? |
rel_type |
TEXT | Standard preset (friendship, love, hate, trust, spite) or custom label. |
is_one_sided |
INTEGER | 1 = Unidirectional (subjective feeling); 0 = Mutual (shared status). |
chapter_id |
INT / NULL | Narrative chapter anchor where the turning point occurred. |
word_offset |
INT / NULL | Exact word count location inside the chapter text. |
world_time |
TEXT / NULL | In-universe calendar date string of the event. |
notes |
TEXT | Author's commentary or direct quote explaining the shift. |
Directionality: Unidirectional vs Mutual #
Relationships in FleshNote explicitly distinguish between subjective feelings and social bonds:
Unidirectional (`is_one_sided = 1`)
Represents subjective or asymmetrical emotional states. For example: Alice completely trusts Bob, but Bob harbors deep spite towards Alice. Inspecting Alice's profile reflects her trust, while Bob's profile reflects his hostility.
Mutual (`is_one_sided = 0`)
Represents bilateral social or legal bonds (e.g. Married, Sworn Allies, Siblings). The UI renders these symmetrically across both character inspectors.
Preset Emotional Vectors & Colors #
The IDE provides semantic color-coded presets to allow instant visual audits in the Character Inspector:
| Relationship Vector | Color Token | UI Color | Intended Usage |
|---|---|---|---|
friendship |
--accent-green |
Green | Comradeship, positive alliance, mutual aid. |
love / hate |
--accent-red |
Crimson / Rose | Passionate romantic attachment or lethal enmity. |
trust / distrust |
--accent-cyan / --accent-orange |
Cyan / Orange | Tactical reliance vs suspicion of betrayal. |
spite |
--accent-purple |
Purple | Resentment, jealousy, grudge-bearing. |
guilt |
--accent-blue |
Blue | Burden of past mistakes or unpayable debts. |
Authoring Workflow in Editor #
Turning points are authored directly from the text:
- Select Text: Highlight a pivotal line of dialogue or narrative revelation in the editor.
- Right-Click Context Menu: Choose "Relationship Turning Point".
- Turning Point Popup (`RelationshipTurningPointPopup.jsx`): The IDE automatically pre-selects the characters mentioned in the highlighted text, allowing you to select the vector, set the world time, and write brief notes.
- Live Inspector Update: The relationship appears immediately in the character's inspector timeline with a clickable link back to the exact chapter and word offset.