Skip to content

docs(runtimehost): say which RuntimeHost calls Silo doesn't implement - #46

Open
blurbery wants to merge 2 commits into
Silo-Server:mainfrom
blurbery:docs/runtime-host-unimplemented-calls
Open

blurbery wants to merge 2 commits into
Silo-Server:mainfrom
blurbery:docs/runtime-host-unimplemented-calls

Conversation

@blurbery

@blurbery blurbery commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Closes #47

The README and docs/runtime-host.md list 16 RuntimeHost calls as available, but Silo implements only 10 of them. The other six return codes.Unimplemented on every Silo host:

  • PublishEventToInstallation
  • ListLibraryMedia
  • GetCatalogStats
  • ResolveCatalogImageURLs
  • MintScopedStream
  • CallPluginHTTP, and so CallPluginJSON

In silo-server, RuntimeHostServer (internal/pluginhost/runtime_host_server.go) embeds UnimplementedRuntimeHostServer and defines only the other ten. None of the six appears anywhere in silo-server's history. The README's recommended way to call another plugin is CallPluginJSON, so an author who follows it builds something that can't work and only finds out at runtime.

No plugin in the Silo-Server or Silo-Community organisations calls any of the six. That's from GitHub code search, which only covers indexed default branches.

Approach

Docs and comments only, with no contract change.

  • The README and docs/runtime-host.md list the calls Silo implements separately from the ones the contract only declares, and show how to check for codes.Unimplemented.
  • The six proto RPC comments and the matching runtimehost client methods say Silo doesn't implement them yet. runtime_host_grpc.pb.go is regenerated, and only its comments change.
  • The CallPluginJSON peer example is replaced with one that works today: find enabled peers whose event_consumer.v1 subscribes to plugin.<your plugin_id>.<event name>, and address the event to them with PublishEventTo.
  • The README's list was also missing three calls Silo does implement (ReadInstanceState, WriteInstanceState and ReportNetworkAccessStatus), so they're added, with a note that ReportNetworkAccessStatus is for network access providers only.

Nothing is removed from the proto. docs/compatibility.md rules out removals in v1, and silo-server can implement any of the six later without a contract change.

Release impact: none on the contract. The generated Go code changes only in comments, so this can go out in any release.

Downstream: none. silo-server's behaviour doesn't change, and no plugin uses the six.

Evidence

Evidence: none, no user-visible change

Validation

On cfbe887. The later dafe2ae changes only the peer example in docs/runtime-host.md, so these still apply:

  • go test -count=1 for ./pkg/pluginsdk/runtimehost/ and ./pkg/pluginproto/...: pass.
  • go vet on those packages: clean. go build of all four examples: pass.
  • buf generate with protoc-gen-go v1.36.11 and protoc-gen-go-grpc v1.6.1: no drift from the committed code. protoc isn't installed here, so I ran buf generate directly instead of make proto.
  • buf breaking against main: pass. buf lint: the same 70 findings as main.
  • gofmt -l .: lists only pkg/pluginsdk/runtime/scan_source_test.go, which this PR doesn't touch and which main already lists.
  • Not run locally: go test ./... across the whole repo. CI runs it.

Risks

  • When silo-server implements one of the six, these notes need updating in the same release, or the docs will undersell the host.

Checklist

  • I read and can explain the complete diff.
  • This pull request addresses one concern.

AI Disclosure

  • Harness: Claude Code (Claude desktop app)
  • Tool(s): Claude Code, Claude Code subagents for exploration and review, GitHub CLI, buf
  • Model(s): claude-opus-5-5
  • Involvement: AI-assisted with Claude Opus. I directed the task and designed the work.
  • Adversarial review: a separate Claude Code subagent checked each claim against silo-server main and the SDK. It confirmed that the six are unimplemented and the rest are reachable by ordinary plugins, that PublishEventTo routes by exact subscription, that status.Code sees the client's errors, and that the generated code matches a fresh buf generate byte for byte. It found four problems, all fixed before opening: the peer example sent to an arbitrary plugin, the GetCatalogStats snippet didn't compile, ReportNetworkAccessStatus needed its providers-only note, and "use PublishEventTo" needed to say it reaches every installation of the target plugin.

Note

Document which RuntimeHost RPCs Silo does not implement

  • Splits the RPC tables in README.md and runtime-host.md into implemented vs. declared-but-unimplemented calls, and adds instance-state and network-access status to the implemented list
  • Marks the six unsupported RPCs — PublishEventToInstallation, ListLibraryMedia, GetCatalogStats, ResolveCatalogImageURLs, MintScopedStream, and CallPluginHTTP — as returning UNIMPLEMENTED, with matching comments in runtime_host.proto, the generated bindings, and SDK doc comments
  • Replaces the plugin-to-plugin JSON example with an event-based example that discovers event consumers and publishes once per target plugin ID; clarifies that event delivery is one-way and dropped when no subscription matches

Macroscope summarized dafe2ae.

The README and docs/runtime-host.md list PublishEventToInstallation,
ListLibraryMedia, GetCatalogStats, ResolveCatalogImageURLs,
MintScopedStream and CallPluginHTTP as available, but Silo doesn't
implement them, so a call that reaches the host fails with
codes.Unimplemented.

Split the lists into calls Silo implements and calls it only declares,
note the status on the proto RPCs and the runtimehost client methods,
show how to check for Unimplemented, and replace the CallPluginJSON
peer example with PublishEventTo, which works today.
@silo-triage silo-triage Bot added the size/L 200–499 added + deleted lines (all files); change volume, not priority. label Oct 20, 2026
@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 144ce0b3-fb37-4673-bd4d-aea025ca45be
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@silo-kody

silo-kody Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌

@silo-triage silo-triage Bot added documentation Improvements or additions to documentation triaged High-confidence review completed; does not mean fixed, validated, or accepted for release. labels Oct 20, 2026
Comment thread docs/runtime-host.md
@silo-kody

silo-kody Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌
⚠️ 2 Kody Rule(s) were not evaluated

These rules declare that they need repository context beyond this diff, and the review could not retrieve it, so they were not judged on this pull request:

  • Share optional authentication service resolution across interface types
  • Find the last complete-line boundary with bounded memory

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/L 200–499 added + deleted lines (all files); change volume, not priority. triaged High-confidence review completed; does not mean fixed, validated, or accepted for release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RuntimeHost docs list six calls Silo doesn't implement

1 participant