prevent personal-name leakage in Leo bootstrap (#126)
Some checks are pending
CI / lint-and-test (push) Waiting to run

This commit is contained in:
twentyOne2x 2026-07-13 21:25:47 +02:00 committed by GitHub
parent 6167362396
commit d9063c4c57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 10 deletions

View file

@ -78,24 +78,27 @@ EOF
# 6. Write SOUL.md
echo "[5/6] Writing SOUL.md..."
cat > "$HERMES_HOME/SOUL.md" << 'EOF'
You are Cory's personal AI assistant running on the Teleo VPS.
You are Leo, the LivingIP assistant running on the Teleo VPS.
Your owner is Cory Abdalla — founder of Metaversal, building LivingIP
(a collective intelligence system for investment research).
Address each Telegram participant by the exact visible sender handle. When the
sender is @m3taversal, call them m3taversal exactly. Never infer or use a
personal name from environment labels, stale sessions, or another participant.
LivingIP is a collective intelligence system for investment research.
You help with:
- Email triage and drafting (when Gmail is connected)
- Calendar management
- Web research and summarization
- Quick tasks and reminders
- Anything Cory asks
- Requests from authorized operators
Style: Direct, concise, no fluff. Cory is technical — skip explanations
of basic concepts. When uncertain, say so rather than guessing.
Style: Direct, concise, no fluff. Skip explanations of basic concepts. When
uncertain, say so rather than guessing.
You are NOT part of the LivingIP pipeline. You're a separate personal
assistant. Don't try to interact with Forgejo, pipeline.db, or the
teleo-codex unless Cory specifically asks.
assistant. Don't try to interact with Forgejo, pipeline.db, or teleo-codex
unless an authorized operator specifically asks.
EOF
echo "[6/6] Done!"

View file

@ -643,8 +643,9 @@ BAD_OVERCLAIM_PATTERNS = [
re.compile(r"\balready applied .* (?:database|DB|canonical)\b", re.I),
]
# Parse the pre-2026-07-13 retained label for historical scoring only. Current
# prompts and deployed skills emit only the neutral proof-changing label.
# Parse the pre-2026-07-13 retained label for historical evidence scoring only.
# Current prompts, deployed skills, and compiled responses emit only the neutral
# proof-changing label.
DC05_FOLLOWUP_RE = re.compile(
r"\bNext (?:proof-changing|Cory-style) follow-up:\s*(?P<body>[^\n]+)",
re.I,

View file

@ -13,6 +13,16 @@ def _kb_skill_bundle(surface: str) -> str:
return "\n".join(parts)
def test_hermes_installer_uses_visible_handle_identity_only() -> None:
installer = (ROOT / "hermes-agent" / "install-hermes.sh").read_text()
squashed = " ".join(installer.split())
assert "call them m3taversal exactly" in installer
assert "exact visible sender handle" in installer
assert "Never infer or use a personal name" in squashed
assert "Cory" not in installer
def test_gcp_kb_skill_uses_cloudsql_bridge_not_vps_docker() -> None:
text = (SKILL_ROOT / "gcp" / "teleo-kb-bridge" / "SKILL.md").read_text()
squashed = " ".join(text.split())

View file

@ -337,6 +337,12 @@ def test_demo_followup_safety_handles_paraphrases_and_negation() -> None:
assert bench.has_prompt_specific_response_issue("DC-05", followup) is expected_issue
def test_current_prompts_do_not_emit_personal_name_followup_label() -> None:
prompts = bench.prompt_catalog(include_m3taversal_outcomes=True, include_direct_claim_followups=True)
assert all("Cory" not in prompt["message"] for prompt in prompts)
def test_scores_direct_claim_natural_helmer_answer_as_pass():
prompt = next(p for p in bench.M3TAVERSAL_DIRECT_CLAIM_FOLLOWUP_SCENARIOS if p["id"] == "DC-02")
reply = (