Background When an Ocean integration starts up, it reads its mapping from .port/resources/port-app-config.yml and applies it to the integration config stored in Port. However, this only happens in two narrow cases: when the integration is being created for the first time, or when it exists but has never been initialized (empty config). In both cases, patch_integration() is called with the port_app_config payload. Once the integration is fully initialized, Port sets arePortResourcesInitialized = true on the integration record. From that point on, every subsequent restart hits an early-return guard in BaseSetup.setup() and skips the entire setup phase. Only metadata fields ( changelogDestination , version , actionsProcessingEnabled , processingMode ) are ever updated via _verify_integration_configuration() - the mapping is never touched. This is intentional: it protects mappings that users may have edited manually in the Port UI from being overwritten on redeploy. Problem The protection has no opt-out, which creates a real friction point for integration developers who manage their mapping in code and expect port-app-config.yml to be the source of truth. In practice this means: Updating the mapping in port-app-config.yml and redeploying silently has no effect - the old mapping keeps running. Running a new version of an integration alongside an outdated mapping is not immediately obvious and can produce confusing behavior. Developers are forced to manually clear or reset the mapping in the Port UI to pick up changes, breaking the "ship code + mapping together" workflow. Proposed Solution Introduce an opt-in configuration flag (e.g. overwrite_config_on_restart , analogous to the k8s-exporter's overwrite-configuration-on-restart ) in IntegrationConfiguration. When enabled: The arePortResourcesInitialized guard in BaseSetup.setup() should not short-circuit. _verify_integration_configuration() (or the setup flow) should call patch_integration(port_app_config=...) with the mapping loaded from port-app-config.yml . The flag should default to false so existing behavior is fully preserved for production deployments where users manage their mappings in the UI. Notes This mirrors a pattern already established in the k8s-exporter ( overwrite-configuration-on-restart ), so there's prior art in the product for this kind of escape hatch. The fix is low-risk when scoped correctly, the default-off behavior means no existing integration is affected unless the flag is explicitly set. A follow-up consideration: whether to expose this flag via an env var, a Helm value, or both, to cover different deployment models.