Skip to content

umbrella: config-first parity — every platform section resolves config → env → default for ALL fields #1375

Description

@chaodu-agent

Note

✅ COMPLETE (2026-07-13). All six platform sections shipped (#1381#1385), docs landed, config-supplied L1 secrets feed the #1373 startup warning (test-pinned per platform), and the conformance guard (#1387) prevents env-first regression workspace-wide. The invariant holds everywhere: [section] config → PLATFORM_* env → default, config always wins.

Summary

Guarantee every platform has a complete first-class config section ([telegram], [line], [feishu], [googlechat], [wecom], [teams]) covering all of its settings — credentials, connection, and behavior — with the invariant:

Resolution order: [section] config value → PLATFORM_* env var → default. Config always wins; env is a fallback only. Never consult env without checking the section first.

Today only the trust fields (allow_all_users / allowed_users, from #1356's Phase 1 PRs) follow this. Platform credentials and connection settings are still env-only for five of six platforms.

Parity Status (updated 2026-07-13 — ALL PLATFORMS DONE 🎉)

Platform Section Config-first today Env-only remaining
Telegram [telegram] ✅ ALL fields (resolve()ResolvedTelegram, bridged via apply_telegram_config) — (reference pattern)
LINE [line] ✅ ALL fields (#1381)
Feishu [feishu] ✅ ALL 21 fields (#1385) + joined the per-platform trust registry
WeCom [wecom] ✅ ALL fields (#1382)
Google Chat [googlechat] ✅ ALL fields (#1383, incl. from_parts DRY refactor)
MS Teams [teams] ✅ ALL fields (#1384)

Reference Pattern (Telegram — already compliant)

  1. Core TelegramConfig with all fields Option<T> + resolve() applying config → TELEGRAM_* env → default per field (empty-string ${} expansion treated as unset)
  2. Bridge struct (GatewayTelegramConfig) keeps openab-gateway free of an openab-core dependency
  3. AppState::apply_telegram_config() overrides env-derived state after from_env
  4. Env-only deployments keep working (fallback), config-only deployments work, mixed works — config wins per-field

Per-Platform Sub-Issues

Platform Sub-issue Scope
LINE #1376 channel_secret, channel_access_token, webhook_path
Feishu #1377 full [feishu] section (21 env vars; coordinate with #1357)
WeCom #1378 credentials + connection (graduates from shared PlatformTrustConfig)
Google Chat #1379 credentials + connection (same graduation)
MS Teams #1380 credentials + connection (same graduation)

Shared Work

Refs

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions