feat(googlechat): full [googlechat] section — credentials + connection config-first - #1383
Merged
Merged
Conversation
This comment has been minimized.
This comment has been minimized.
chaodu-agent
added a commit
that referenced
this pull request
Jul 13, 2026
…irst Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383.
chaodu-agent
force-pushed
the
feat/1379-googlechat-config-first
branch
from
July 13, 2026 01:01
6f8ce39 to
bcf35d8
Compare
chaodu-agent
force-pushed
the
feat/1378-wecom-config-first
branch
from
July 13, 2026 01:01
ec468f1 to
094c876
Compare
This comment has been minimized.
This comment has been minimized.
chaodu-agent
added a commit
that referenced
this pull request
Jul 13, 2026
…irst Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383.
chaodu-agent
force-pushed
the
feat/1379-googlechat-config-first
branch
from
July 13, 2026 01:05
bcf35d8 to
21f5f8a
Compare
chaodu-agent
added a commit
that referenced
this pull request
Jul 13, 2026
…irst Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383.
Collaborator
Author
|
Note LGTM ✅ — Clean config-first graduation for What This PR DoesGraduates How It Works
Findings
What's Good (🟢)
Baseline Check
5️⃣ Three Reasons We Might Not Need This PR
|
Collaborator
Author
|
Note LGTM ✅ — Clean config-first graduation of What This PR DoesGoogle Chat's credentials and connection settings were env-only; this graduates How It Works
Findings
What's Good (🟢)
Baseline Check
5️⃣ Three Reasons We Might Not Need This PR
|
…n config-first Third platform slice of the config-first parity umbrella (#1375): [googlechat] graduates from the shared PlatformTrustConfig to a dedicated GoogleChatConfig carrying enabled, sa_key_json, sa_key_file, access_token, audience, webhook_path alongside the trust fields. Each field resolves config → GOOGLE_CHAT_* env → default. - core: GoogleChatConfig/ResolvedGoogleChat + resolve(); trust_config() view keeps the registry override path unchanged - gateway: adapter construction deduplicated into GoogleChatAdapter::from_parts (was copy-pasted between from_env and the standalone run()); GatewayGoogleChatConfig bridge + AppState::apply_googlechat_config; new googlechat_webhook_path state honored by both binaries' route mounts - unified: applies [googlechat] before warn_unenforceable_l1 — a config-supplied audience builds the JWT verifier and satisfies the #1373 L1 startup check (test pins the whole flagged→cleared flow) - docs: config.toml.example, config-reference.md ([googlechat] gets its own full section), google-chat.md Backward compatible: env-only deployments construct identically via the shared from_parts path; trust-only [googlechat] sections keep parsing. Closes #1379. Refs #1375. Stacked on #1382.
chaodu-agent
added a commit
that referenced
this pull request
Jul 13, 2026
…irst Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383.
chaodu-agent
force-pushed
the
feat/1379-googlechat-config-first
branch
from
July 13, 2026 01:46
c71528c to
3c6a924
Compare
thepagent
approved these changes
Jul 13, 2026
chaodu-agent
added a commit
that referenced
this pull request
Jul 13, 2026
…irst Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383.
thepagent
pushed a commit
that referenced
this pull request
Jul 13, 2026
…irst (#1384) * feat(teams): full [teams] section — credentials + connection config-first Fourth platform slice of the config-first parity umbrella (#1375): [teams] graduates from the shared PlatformTrustConfig to a dedicated TeamsConfig carrying app_id, app_secret, allowed_tenants, oauth_endpoint, openid_metadata, webhook_path alongside the trust fields. Each field resolves config → TEAMS_* env → default. - core: TeamsConfig/ResolvedTeams + resolve(); trust_config() view - gateway: TeamsConfig::from_env refactored onto a from_reader shared with the new AppState::apply_teams_config (app_id + app_secret mandatory — incomplete section disables the adapter, matching env-only semantics); new teams_webhook_path state honored by both binaries' route mounts - unified: applies [teams] before warn_unenforceable_l1 - docs: config.toml.example, config-reference.md (full field table), msteams-selfhosted.md Closes #1380. Refs #1375. Stacked on #1383. * docs(config): PlatformTrustConfig is now the shared trust-view type --------- Co-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>
3 tasks
thepagent
pushed a commit
that referenced
this pull request
Jul 13, 2026
The platform-configured check read only the GOOGLE_CHAT_ENABLED env var, so a deployment enabling the platform via `[googlechat] enabled = true` (first-class section, #1383) would have its cron jobs rejected at startup by validate_cronjobs. Use GoogleChatConfig::resolve() (config → env → default) — same semantics the adapter itself uses. Align the cronjob.md platform table and the schema note wording. Verified: all-features clippy clean, cron tests 74 pass, bin tests 15 pass, schema conformance green. (Single-feature --features googlechat clippy failure is pre-existing on main, unrelated.)
6 tasks
thepagent
pushed a commit
that referenced
this pull request
Jul 13, 2026
* feat(cron): support Google Chat platform for scheduled messages * fix(cron): googlechat enablement check is config-first The platform-configured check read only the GOOGLE_CHAT_ENABLED env var, so a deployment enabling the platform via `[googlechat] enabled = true` (first-class section, #1383) would have its cron jobs rejected at startup by validate_cronjobs. Use GoogleChatConfig::resolve() (config → env → default) — same semantics the adapter itself uses. Align the cronjob.md platform table and the schema note wording. Verified: all-features clippy clean, cron tests 74 pass, bin tests 15 pass, schema conformance green. (Single-feature --features googlechat clippy failure is pre-existing on main, unrelated.) --------- Co-authored-by: shaun-agent <265093149+shaun-agent@users.noreply.github.com> Co-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Stacked on #1382 (→ #1381 → main). Net-new diff = the last commit; will re-target as parents merge.
What problem does this solve?
Third platform slice of #1375: Google Chat's credentials/connection were env-only.
[googlechat]graduates from the shared trust-only struct to a dedicatedGoogleChatConfig(6 fields + trust), resolving each field config →GOOGLE_CHAT_*env → default.How It Works
GoogleChatConfig/ResolvedGoogleChat+resolve();trust_config()view keeps the registry path unchangedfrom_envand standalonerun()— deduplicated intoGoogleChatAdapter::from_parts;GatewayGoogleChatConfigbridge +apply_googlechat_config(); newgooglechat_webhook_pathstate honored by both binaries[googlechat]beforewarn_unenforceable_l1— config-suppliedaudiencebuilds the JWT verifier and satisfies the #1373 L1 checkTests
googlechat_resolve_all_scenarios— defaults, config-wins (incl. explicitenabled=falsebeating envtrue), empty-string fallthrough,trust_config()apply_googlechat_config_builds_adapter_and_feeds_l1_warning— pins the L1 integration: enabled-without-audience flagged → config audience clears → disabled removes adapterValidation
-D warningsclean (all-features + gateway no-features); unified + default builds passsecretsfailure); gateway l1_audit 6/6Closes #1379. Refs #1375, #1373.