Files
ironclaw/deny.toml
firat.sertgoz 06527e4f22 fix(channels): unify hot-activation owner_id type and capabilities fallback (#2471)
* Fix WASM channel owner_id fallback

* ci: ignore rand advisory

* ci: satisfy cargo-deny path dependency versions

* fix(telegram): handle null/string owner_id and propagate to WASM config

The bundled Telegram capabilities.json ships `"owner_id": null`. The
previous code only called `Value::as_i64()`, which returns `None` for
`Null`, so the fallback silently produced no owner — the fix never
actually worked for Telegram.

Changes:
- Handle `Null`, `String`, and `Number` variants in
  `owner_actor_id_for_channel()` so the real production payload works.
- Propagate the *resolved* owner_id into the WASM runtime config map
  regardless of whether it came from runtime config or capabilities
  fallback (previously only the runtime-config path injected it).
- Add `tracing::debug!` for non-scalar owner_id values to aid debugging.
- Add tests: null config, missing capabilities file, empty string,
  non-scalar value, and caller-level register_channel tests that verify
  config injection and null-owner-id handling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): unify owner_id type and add capabilities fallback to hot-activation

Address two follow-up items from PR #2349 review:

1. Type consistency: boot path injected owner_id as Value::String, but
   hot-activation path (build_wasm_channel_runtime_config_updates) used
   Value::Number. Changed the function to accept Option<&str> and inject
   as Value::String, matching the boot path.

2. Capabilities fallback: hot-activation paths (complete_loaded_wasm_channel_activation
   and refresh_active_channel) only checked runtime HashMap and settings store.
   Now they also consult capabilities.json via the extracted
   owner_id_from_capabilities() helper, matching the boot path's behavior.

Also updates the telegram WASM module to accept both string and number
JSON for owner_id via a custom deserializer, since all other channels
already use Option<String>.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Illia Polosukhin <ilblackdragon@gmail.com>
2026-04-18 13:22:09 +09:00

65 lines
2.1 KiB
TOML

[advisories]
unmaintained = "workspace"
yanked = "deny"
ignore = [
# Pre-existing advisories — tracked for upgrade in separate PRs
# serde_yml unsound/unmaintained — direct dep, upgrade tracked separately
"RUSTSEC-2025-0068",
# tokio-tar PAX header parsing — sandbox containers only
"RUSTSEC-2025-0111",
# rustls-webpki CRL distributionPoint matching — 0.102.8 pinned by libsql transitive dep
"RUSTSEC-2026-0049",
# rustls-webpki URI name constraint bypass — 0.102.8 pinned by libsql transitive dep;
# patched in >=0.103.12 but libsql 0.6.0 requires rustls 0.22 which pins 0.102.x
"RUSTSEC-2026-0098",
# rustls-webpki wildcard name constraint bypass — same 0.102.8 pin from libsql
"RUSTSEC-2026-0099",
# rand unsoundness with custom logger calling rand::rng() during reseed — we don't use this pattern;
# revisit/remove by 2026-06-30, or when transitive deps (tower, nanoid, phf_generator) release rand ≥0.9.3 compat
"RUSTSEC-2026-0097",
]
[licenses]
version = 2
allow = [
"MIT",
# MIT-0 (MIT No Attribution) is strictly more permissive than MIT —
# required by `jsonschema` (used for workspace document schema validation).
"MIT-0",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"Unicode-3.0",
"Unicode-DFS-2016",
"OpenSSL",
"Zlib",
"MPL-2.0",
"0BSD",
"BSL-1.0",
"CC0-1.0",
"Unlicense",
"CDLA-Permissive-2.0",
]
unused-allowed-license = "allow"
[bans]
multiple-versions = "warn"
wildcards = "deny"
# monty (Pydantic's embedded Python) is git-only (not on crates.io),
# so it inherently lacks a version constraint. Allow path-dep wildcards.
allow-wildcard-paths = true
[sources]
unknown-registry = "deny"
unknown-git = "deny"
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
allow-git = [
# Monty (Pydantic's embedded Python interpreter) — not yet on crates.io.
# Pulls in ruff_* crates from astral-sh/ruff at a pinned revision.
"https://github.com/pydantic/monty.git",
"https://github.com/astral-sh/ruff.git",
]