tinyhumansai/openhuman · error
secret ref {} not yet fulfilled
Error message
secret ref {} not yet fulfilled What it means
resolve_refs found the SecretRef in the map but its value slot is still empty — the user has not yet completed the interactive credential step. The doc comment instructs callers to retry rather than partially apply; last_touched is bumped so the idle TTL resets.
Source
Thrown at src/openhuman/mcp/registry/setup.rs:186
/// Resolve a `{KEY: SecretRef}` map into a `Vec<(KEY, VALUE)>`. Returns
/// `Err(_)` if any ref is unknown or not yet fulfilled — callers should
/// retry rather than partially-apply.
///
/// Touches the `last_touched` on every hit so iterative `test_connection`
/// calls reset the idle TTL.
pub async fn resolve_refs(
refs: &HashMap<String, SecretRef>,
) -> anyhow::Result<Vec<(String, String)>> {
let mut guard = map().lock().await;
let mut out = Vec::with_capacity(refs.len());
for (key, r) in refs {
let entry = guard
.get_mut(r)
.ok_or_else(|| anyhow::anyhow!("unknown secret ref {}", r.as_str()))?;
let value = entry
.value
.clone()
.ok_or_else(|| anyhow::anyhow!("secret ref {} not yet fulfilled", r.as_str()))?;
entry.last_touched = Instant::now();
out.push((key.clone(), value));
}
Ok(out)
}
/// Same as [`resolve_refs`] but also removes the entries from the map on
/// success. Used by `install_and_connect` once the values have been
/// persisted to `mcp_client_env`. On failure the entries are left intact
/// so the agent can retry without re-prompting.
pub async fn consume_refs(
refs: &HashMap<String, SecretRef>,
) -> anyhow::Result<Vec<(String, String)>> {
// First pass: resolve. Bail without mutation if any ref is missing.
let resolved = resolve_refs(refs).await?;
// Second pass: drop. Bail-out on the first miss is impossible because
// we just held the resolved values without releasing the lock — but to
// be honest we *did* release between the two awaits. Recheck.View on GitHub (pinned to 7491200858)
Solutions
- Prompt the user to complete the pending authorization, then retry
- Poll resolve_refs until the value is fulfilled (test_connection loops this way)
- Abort the setup flow if the user cancels the authorization
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/openhuman/mcp/registry/setup.rs:186 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/cf0500a441d78b48.
Report an issue: GitHub.