Skip to content

Feat/humanize interaction#2

Merged
yuzushi-dev merged 3 commits into
masterfrom
feat/humanize-interaction
Jun 16, 2026
Merged

Feat/humanize interaction#2
yuzushi-dev merged 3 commits into
masterfrom
feat/humanize-interaction

Conversation

@yuzushi-dev

Copy link
Copy Markdown
Owner

Summary

Verification

  • make lint
  • pytest -q
  • python3 scripts/ci/check_json_jsonl.py
  • python3 scripts/ci/check_no_raw_private_data.py
  • UI changes: cd ui && npm audit --audit-level=moderate && npm run build:static

Privacy Checklist

  • No real subject data, chat exports, credentials, local Hermes profiles, databases, logs, or generated private artifacts are included.
  • New fixtures are synthetic or redacted.

yuzushi-dev and others added 3 commits June 10, 2026 00:04
…eractivity, natural cadence

Checkin lane:
- follow-up-first question selection: a recently answered exchange is
  followed up (same facet_id, attribution-safe) before a new TGS topic
  is opened (Huang et al. 2017: follow-up questions drive liking)
- prompt contract: episodic framing (concrete recent episodes, never
  trait/spectrum wording), share-then-ask reciprocity (Moon 2000),
  follow-up mode, variable question placement
- ASK posture cap 2 -> 3 sentences to fit the share-then-ask shape

Diegetic lane:
- deterministic per-day hook flag in the gate (~35%): fragment may close
  with one light invitation to the subject (Liu et al. CHI 2025);
  base contract (no questions, not subject-addressed) unchanged otherwise
- continuity rule: fragments may continue a previous open thread

Proactive lane:
- re-engagement must anchor to one specific dropped thread and close
  with a small question on it; no anchor -> [SILENT] (Skjuve et al. 2022:
  grounded reference, not frequency, drives perceived listening)

Cadence (flag-gated RELIC_NATURAL_CADENCE, default off):
- seeded skip-days for diegetic (25%) and proactive (20%); checkins never
  skipped (measurement instrument). Bursty, not metronomic (Barabasi 2005)
- triangular two-draw window jitter for day-to-day fire-time spread
  (Gnewuch et al. 2018). All rolls are sha256(subject|lane|date):
  deterministic and replayable, no RNG state

Also: natural_cadence_skip decision reason, force-path hook parity for
dry runs, sandboxed dry-run harness for subject daniele (no dispatch),
accent fixes in prompt strings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The SOUL.md validator required the literal word "diegetic" while the
prompt forbids technical jargon, so valid LLM generations were silently
replaced by the template fallback, and the provisioning log still
recorded method=ollama. The fallback in turn pasted clinical stance
labels ("avoidant attachment") verbatim, which the gateway model then
performed literally: a distant, unresponsive persona.

- validation markers now match wording the prompt actually instructs
  (identity anchor + assistant boundary), word-bounded forbidden checks
- SOUL prompt now carries the persona's life facts (place, work,
  rhythm, passions); occupation presence is validated, so the model can
  no longer drift into placeless prose or borrow the subject's own
  biography
- retry loop (3 draws) before falling back; draws leaking psychology
  labels are kept only as backstop; question-mark clause appended
  deterministically when missing
- fallback renders attachment/intimacy as behavioral prose, gains the
  presence/humor rules, and fixes slot-fill grammar
- humor responsiveness + concrete-reaction rules added to the SOUL
  contract (both LLM and fallback paths)
- personalization hard-excludes avoidant/disorganized attachment for
  Gumi (preference weight alone leaked them ~20% of the time)
- registry records the real generation outcome via last_soul_method

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A second-person SOUL can carry zero pronouns, so the pronoun-conform
pass has nothing to rewrite and the persona's gender ends up unstated;
the gateway model then defaults to feminine self-reference. Chats run
in Italian, where every adjective and participle agrees, so the anchor
spells out the agreement rule explicitly.

- _gender_anchor(): explicit self-gender paragraph (masculine/feminine/
  neutral) with Italian agreement examples
- appended deterministically in generate_soul_md when missing, and
  always present in the fallback template
- prompt now instructs stating gender plainly in the opening paragraph

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@yuzushi-dev
yuzushi-dev merged commit ff0714b into master Jun 16, 2026
5 checks passed
@yuzushi-dev
yuzushi-dev deleted the feat/humanize-interaction branch June 16, 2026 07:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant