Summary
kbagent sync does not pull or track the configuration-level isDisabled (enabled/disabled) state. A config or flow that is disabled in production looks identical to an enabled one in the local working tree: sync diff / sync status report it as "in sync", and even a forced full re-pull produces byte-identical files. The disabled state is effectively invisible to the repo and to every sync/diff command — even though the Storage API exposes isDisabled.
Related to #466 (sync diff/status reliability), but this is a distinct root cause: the field is never pulled at all.
Environment
kbagent v0.59.0
- Config-only sync trees (
sync pull --no-jobs --no-storage), one .keboola/manifest.json per project.
Reproduction / evidence
- In production, all legacy flows (component
keboola.orchestrator) of a project are DISABLED (each flow shows a DISABLED badge in the Keboola UI).
- The pulled config files contain no disabled flag, e.g.
…/main/other/keboola.orchestrator/<flow>/_config.yml:
version: 2
name: Raw Data Processing
description: ''
_configuration_extra:
phases: [ ... ]
tasks:
- id: 1
name: ...
enabled: true
task: { mode: run, componentId: ..., configId: ... }
_keboola:
component_id: keboola.orchestrator
There is no isDisabled at the config root (and a recursive search for disab* across the whole pulled project tree finds nothing in any config file).
kbagent sync diff --project <p> →
No differences found. Local and remote are in sync.
- Forcing a full fresh pull (back up
.keboola/manifest.json, empty its configurations array, then sync pull) downloads the whole project again and produces byte-identical files — the disabled state is still not written.
- The same
isDisabled flag is returned by the Storage API / MCP for these configs, so the information exists upstream; kbagent simply doesn't include it when pulling.
Impact
- You cannot tell from the repo — or from
sync diff / sync status — whether a flow/config is enabled or disabled in production. sync diff will report "in sync" while production flows are disabled and the repo implies they're enabled.
- The enabled/disabled state cannot be version-controlled or deployed:
sync push carries no such flag.
- Auditing "which flows/configs are disabled in production" is impossible through
kbagent; it requires querying the API directly.
Expected behavior
sync pull should capture the config-level isDisabled state (e.g. an isDisabled: true field in _config.yml or in a meta/manifest entry).
sync diff / sync status should report a difference when the disabled state differs between local and remote.
sync push should be able to set/clear the disabled state on the remote config.
Summary
kbagent syncdoes not pull or track the configuration-levelisDisabled(enabled/disabled) state. A config or flow that is disabled in production looks identical to an enabled one in the local working tree:sync diff/sync statusreport it as "in sync", and even a forced full re-pull produces byte-identical files. The disabled state is effectively invisible to the repo and to every sync/diff command — even though the Storage API exposesisDisabled.Related to #466 (sync diff/status reliability), but this is a distinct root cause: the field is never pulled at all.
Environment
kbagent v0.59.0sync pull --no-jobs --no-storage), one.keboola/manifest.jsonper project.Reproduction / evidence
keboola.orchestrator) of a project are DISABLED (each flow shows aDISABLEDbadge in the Keboola UI).…/main/other/keboola.orchestrator/<flow>/_config.yml:isDisabledat the config root (and a recursive search fordisab*across the whole pulled project tree finds nothing in any config file).kbagent sync diff --project <p>→.keboola/manifest.json, empty itsconfigurationsarray, thensync pull) downloads the whole project again and produces byte-identical files — the disabled state is still not written.isDisabledflag is returned by the Storage API / MCP for these configs, so the information exists upstream;kbagentsimply doesn't include it when pulling.Impact
sync diff/sync status— whether a flow/config is enabled or disabled in production.sync diffwill report "in sync" while production flows are disabled and the repo implies they're enabled.sync pushcarries no such flag.kbagent; it requires querying the API directly.Expected behavior
sync pullshould capture the config-levelisDisabledstate (e.g. anisDisabled: truefield in_config.ymlor in ameta/manifestentry).sync diff/sync statusshould report a difference when the disabled state differs between local and remote.sync pushshould be able to set/clear the disabled state on the remote config.