Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""Behavioral contract for xurl / x_search routing guidance.
|
||||
|
||||
These tests assert structural invariants (required topics + placement of the
|
||||
routing guidance), not frozen prose snapshots.
|
||||
|
||||
Placement contract (July 2026):
|
||||
- The xurl SKILL must NOT name `x_search` (or any other credential-gated
|
||||
surface): the skill loads even when that tool isn't registered, so it must
|
||||
describe its own search distinctively in its own terms (raw, engageable
|
||||
post objects as the authenticated account).
|
||||
- Cross-surface routing guidance lives where both surfaces are known to
|
||||
exist together: the x_search feature docs, the toolset description, and
|
||||
the tools-config setup note.
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
XURL_SKILL = REPO_ROOT / "skills" / "social-media" / "xurl" / "SKILL.md"
|
||||
X_SEARCH_DOC = REPO_ROOT / "website" / "docs" / "user-guide" / "features" / "x-search.md"
|
||||
|
||||
|
||||
def _read(path: Path) -> str:
|
||||
return path.read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def _contains_any(text: str, *needles: str) -> bool:
|
||||
lowered = text.lower()
|
||||
return any(n.lower() in lowered for n in needles)
|
||||
|
||||
|
||||
def test_xurl_skill_never_names_credential_gated_surfaces():
|
||||
"""The skill must be self-contained: no cross-references to tools that
|
||||
may not be registered (x_search is check_fn-gated on xAI credentials)."""
|
||||
lowered = _read(XURL_SKILL).lower()
|
||||
assert "x_search" not in lowered
|
||||
assert "web_search" not in lowered
|
||||
|
||||
|
||||
def test_xurl_skill_search_is_distinct_standalone():
|
||||
"""Search must be described so an agent can route correctly even when
|
||||
another X search surface exists — raw engageable posts, authenticated."""
|
||||
text = _read(XURL_SKILL)
|
||||
assert _contains_any(text, "raw post")
|
||||
assert _contains_any(text, "authenticated")
|
||||
assert _contains_any(text, "engage", "engageable")
|
||||
# Distinguish from synthesized-answer surfaces in xurl's own terms.
|
||||
assert _contains_any(text, "summarized answer", "summary of a topic")
|
||||
|
||||
|
||||
|
||||
|
||||
def test_x_search_doc_separates_discovery_from_account_actions():
|
||||
text = _read(X_SEARCH_DOC)
|
||||
lowered = text.lower()
|
||||
|
||||
assert "x_search" in lowered
|
||||
assert "xurl" in lowered
|
||||
# Explicit comparison section or equivalent boundary language.
|
||||
assert _contains_any(text, "vs `xurl`", "vs xurl", "two different x surfaces")
|
||||
assert _contains_any(text, "read-only public", "public x discovery")
|
||||
assert _contains_any(
|
||||
text,
|
||||
"posting",
|
||||
"replying",
|
||||
"liking",
|
||||
"dm",
|
||||
"media upload",
|
||||
"deleting",
|
||||
)
|
||||
assert _contains_any(
|
||||
text,
|
||||
"authenticated",
|
||||
"exact or authenticated",
|
||||
"account actions",
|
||||
"state-changing",
|
||||
)
|
||||
# Write confirmation must come from xurl / X API, not x_search.
|
||||
assert _contains_any(
|
||||
text,
|
||||
"confirmed by `xurl`",
|
||||
"xurl` output",
|
||||
"x api response",
|
||||
"never evidence",
|
||||
)
|
||||
assert _contains_any(text, "switch to the `xurl`", "switch to `xurl`", "xurl skill")
|
||||
Reference in New Issue
Block a user