mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 04:07:04 +00:00
Follow the official catalog after telegram-bridge was retired
The hub retired telegram-bridge on 2026-09-14 (OuroborosHub #72), so every tier of the official-skill smoke fails at the catalog assertion and the whole skill-smoke lane is red on `ouroboros`. The expected-catalog list, the review subset and the two telegram-specific branches now follow the catalog as it is. The review tier loses its protected-token and chat-permission coverage with that skill; no remaining official skill requests a protected token, and the comment says so rather than implying the path is still exercised.
This commit is contained in:
parent
b81f7e826d
commit
8a6431b4f9
1 changed files with 10 additions and 38 deletions
|
|
@ -64,7 +64,6 @@ pytestmark = pytest.mark.skill_smoke
|
|||
REPO_ROOT = pathlib.Path(__file__).resolve().parents[1]
|
||||
|
||||
OFFICIAL_SKILLS = [
|
||||
"telegram-bridge",
|
||||
"a2a",
|
||||
"duckduckgo",
|
||||
"perplexity",
|
||||
|
|
@ -315,30 +314,6 @@ def test_manifest_parses_and_matches_contract(slug, install_skill):
|
|||
keyed = {"perplexity", "nanobanana", "music_gen"}
|
||||
if slug in keyed:
|
||||
assert "OPENROUTER_API_KEY" in manifest.env_from_settings
|
||||
if slug == "telegram-bridge":
|
||||
# The protected bot token is REQUESTED by the manifest. The
|
||||
# install/probe tiers never grant it; Tier 6 auto-grants it
|
||||
# request-keyed (empty settings value, temp DATA_DIR) and persists
|
||||
# enablement only — no extension is ever loaded with the token.
|
||||
assert "TELEGRAM_BOT_TOKEN" in manifest.env_from_settings
|
||||
assert manifest.subscribe_events
|
||||
if slug in {"duckduckgo", "weather", "backlog_manager", "a2a"}:
|
||||
assert not manifest.env_from_settings, f"{slug}: expected a keyless manifest"
|
||||
if slug == "a2a":
|
||||
# Companion daemon is validated STATICALLY only — never spawned here
|
||||
# (owner decision): install/preflight paths start no processes.
|
||||
assert len(manifest.companion_processes) == 1
|
||||
companion = manifest.companion_processes[0]
|
||||
assert companion.get("name") == "a2a_server"
|
||||
assert companion.get("runtime") == "python3"
|
||||
# Contract-level shape only (a hub-side flag addition must not red the
|
||||
# release gate): python3 runs the daemon script, which exists on disk.
|
||||
# command[1] is the parser-pinned script position (skill_manifest.py
|
||||
# rejects inline -c/-m forms), so trailing flags stay legal.
|
||||
command = companion.get("command") or []
|
||||
assert len(command) >= 2 and command[0] == "python3", command
|
||||
assert str(command[1]).endswith("a2a_daemon.py"), command
|
||||
assert (target / "scripts" / "a2a_daemon.py").is_file()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
@ -565,15 +540,17 @@ def test_backlog_manager_summary_offline(install_skill, tmp_path):
|
|||
# CI run for the 4-skill subset on one OS; a verdict retry doubles at most.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Owner-picked subset: telegram-bridge + a2a (mandated) + duckduckgo (core
|
||||
# keyless search; exercises the review→deps production ordering) + perplexity
|
||||
# (keyed skill; exercises OPENROUTER_API_KEY auto-grant).
|
||||
REVIEW_SKILLS = ("telegram-bridge", "a2a", "duckduckgo", "perplexity")
|
||||
# Owner-picked subset: a2a (mandated) + duckduckgo (core keyless search;
|
||||
# exercises the review→deps production ordering) + perplexity (keyed skill;
|
||||
# exercises OPENROUTER_API_KEY auto-grant). The subset carried telegram-bridge
|
||||
# for the protected-token and chat-permission path until that skill was retired
|
||||
# from the official catalog; no remaining official skill requests a protected
|
||||
# token, so that tier is unexercised here.
|
||||
REVIEW_SKILLS = ("a2a", "duckduckgo", "perplexity")
|
||||
_REVIEW_MODEL = "google/gemini-3.5-flash"
|
||||
# Expected auto-granted settings keys per skill (grants are request-keyed,
|
||||
# not value-keyed; empty values grant fine and only bite at runtime).
|
||||
_REVIEW_EXPECTED_KEYS = {
|
||||
"telegram-bridge": {"TELEGRAM_BOT_TOKEN", "OPENAI_API_KEY"},
|
||||
"a2a": set(),
|
||||
"duckduckgo": set(),
|
||||
"perplexity": {"OPENROUTER_API_KEY"},
|
||||
|
|
@ -718,8 +695,8 @@ def test_review_grants_and_enable(slug, review_secret, install_skill, review_env
|
|||
assert review.get("review_profile") == "official_hub", review.get("review_profile")
|
||||
|
||||
# Auto-grant ran inside review_skill (blocking enforcement ⇒ only on
|
||||
# clean/warnings). Grants are request-keyed: TELEGRAM_BOT_TOKEN grants
|
||||
# with an empty settings value.
|
||||
# clean/warnings). Grants are request-keyed: a requested key grants with an
|
||||
# empty settings value.
|
||||
grants = grant_status_for_skill(DATA_DIR, loaded)
|
||||
assert grants.get("all_granted") is True, grants
|
||||
expected_keys = _REVIEW_EXPECTED_KEYS[slug]
|
||||
|
|
@ -727,14 +704,9 @@ def test_review_grants_and_enable(slug, review_secret, install_skill, review_env
|
|||
assert granted_keys == expected_keys, (
|
||||
f"{slug}: granted_keys={sorted(granted_keys)} expected={sorted(expected_keys)}"
|
||||
)
|
||||
if slug == "telegram-bridge":
|
||||
granted_permissions = set(grants.get("granted_permissions") or [])
|
||||
assert "inject_chat" in granted_permissions, grants
|
||||
assert any(p.startswith("subscribe_event:chat.") for p in granted_permissions), grants
|
||||
|
||||
# Enable persistence prerequisites: the production toggle-gate facts plus
|
||||
# the top static readiness gate. Nothing runtime starts here (no server,
|
||||
# temp DATA_DIR) — enabling telegram-bridge/a2a cannot poll or spawn.
|
||||
# temp DATA_DIR) — enabling a2a cannot poll or spawn.
|
||||
save_enabled(DATA_DIR, name, True)
|
||||
assert load_enabled(DATA_DIR, name) is True
|
||||
reloaded = find_skill(DATA_DIR, name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue