Skip to content

feat(rutis): plugin logs, the adapter contract, one contract for three ecosystems - #268

Merged
yuanhao merged 2 commits into
mainfrom
feat/rutis-logs-and-adapter-contract
Oct 8, 2026
Merged

yuanhao merged 2 commits into
mainfrom
feat/rutis-logs-and-adapter-contract

Conversation

@yuanhao

@yuanhao yuanhao commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Wires the three lasting outcomes of the ecosystem work into yoagent itself, independent of the pi adapter (#265):

  1. Images across the bridge — already on main (feat(rutis): image tool results across ecosystems #267); now named in the guide as something every ecosystem gets.
  2. Plugin logs reach the host. The bridge's yoagent service gains log(level, message, { run_id }?): a TypeScript/Python plugin's diagnostics go to the host's tracing output (target yoagent_rutis::plugin) with the run as a run_id field, so a GASP recorder or log viewer can attribute them (GASP recording is a follow-up). The dsh adapter uses it. Test: tests/plugin_log_test.rs (own binary — global subscriber), mutation-checked.
  3. The proof that the contract is general, recorded where users read it:
    • docs/concepts/extensions.md: One contract, other ecosystems — DSH, rutis-agent and pi (experimental, feat(rutis): pi extensions adapter #265) through Extension + the bridge with no core change, and what every ecosystem gets (images, logs, fail-closed).
    • The bridge README: Writing an ecosystem adapter — the seven fail-closed rules learned from the three adapters (map what the host honours; refuse what would decide unenforced; a failing policy denies, a failing redaction withholds; name clashes refuse; report ignored parts through the host; local plugin state instead of failing work; no UI means no).
    • CI: the rutis-bridge job now runs the rutis-agent example, so all three ecosystems' proofs run in CI (dsh in the languages job, pi with feat(rutis): pi extensions adapter #265).

Also: the guide no longer says yoagent-rutis is unpublished.

#265 will be merged with main after this lands (its own copy of log is the same code, without run_id).

🤖 Generated with Claude Code

https://claude.ai/code/session_01T7iq5hpndSiHQcnAsywKuG

yuanhao and others added 2 commits October 8, 2026 23:05
…act three ecosystems

- bridge: the yoagent service gains log(level, message, {run_id}?) →
  tracing target yoagent_rutis::plugin with a run_id field; the dsh
  adapter uses it. Test: tests/plugin_log_test.rs (own binary)
- docs: the extensions guide shows DSH, rutis-agent and pi plugging in
  through Extension + the bridge with no core change, and what the bridge
  gives every ecosystem (images, logs, fail-closed); the bridge README
  states the adapter contract (seven fail-closed rules)
- CI: the rutis-bridge job runs the rutis-agent example
- guide: yoagent-rutis is on crates.io

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T7iq5hpndSiHQcnAsywKuG
Review of #268:
- log never returns an error: a rejected async call a plugin does not
  catch ends its Node runtime (no unhandledRejection handler). Any message
  (non-strings as JSON), any context (other fields ignored, e.g. a whole
  hook argument). Test: a malformed uncaught call, then 'still alive'.
- Python: log is a coroutine — documented as await yoagent.log(...)
- docs: two ecosystems plug in today, pi is in review (#265); the adapter
  rules are a contract ('should'), with which rules the DSH adapter meets

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T7iq5hpndSiHQcnAsywKuG
@yuanhao
yuanhao merged commit 31ab71a into main Oct 8, 2026
15 checks passed
@yuanhao
yuanhao deleted the feat/rutis-logs-and-adapter-contract branch October 8, 2026 21:19
yuanhao added a commit that referenced this pull request Oct 8, 2026
…experimental

Bridge files from main (log never rejects, run_id context); the pi
branch's log test kept as pi_log_test (the adapter's warnings reach the
host). The pi and DSH adapters are marked experimental, expected to move
to the yo app once it hosts plugins; the guide counts pi among the three.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T7iq5hpndSiHQcnAsywKuG
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