The server wraps GET /api/v1/config/{applicationId} in an envelope
({config, globalSensitiveKeys, mergedSensitiveKeys}). The agent was
deserializing the body straight into ApplicationConfig, so version fell
back to 0 and the agent logged "No server config, using defaults" even
though the server had returned a populated config.
- ServerConnection.fetchApplicationConfig: unwrap envelope; fall back
to bare ApplicationConfig for older servers; populate sensitiveKeys
from mergedSensitiveKeys when the inner config doesn't carry them.
- ApplicationConfig: add @JsonIgnoreProperties(ignoreUnknown=true) so
future server-added fields (environment) don't break older agents,
and add the environment field itself.
- CameleerAgentConfig: stop silently defaulting environmentId to
"default"; log a WARN when cameleer.agent.environment is unset and
expose isEnvironmentExplicit() so it's visible in diagnostics.
- StartupReport: surface environment (with "(unconfigured)" suffix
when defaulted) in the startup log and AGENT_STARTED event details.
- deploy/perf-app.yaml: align on "development" like the other
non-native sample apps.
- PROTOCOL.md: document the real config endpoint path and envelope
shape (was still describing the unimplemented /agents/{id}/config).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>