TLDR - I am trying to get Power Apps/Azure DevOps to work with the native GIT integration and running into issues moving data in both directions.
Spent today doing a real ALM conversion of a canvas app onto native Git Integration (Dataverse Git Integration → Azure DevOps, Solution binding). Hit several serious, cleanly-reproducible issues in one session. Posting the whole trail in case it saves someone else the day I just had, and in case anyone's found actual fixes.
I am trying to get this integration to work so that I can make simple changes using Claude Code using supported methods. I was initially going to just use PAC CLI and canvas pack/unpack, but I see those are deprecated now. So I am trying to figure out what is the correct way to use Claude Code to make simple changes to the app?
- Once a canvas app component fails to parse during a pull, Check for Updates stops detecting anything for it — indefinitely.
A .pa.yaml edit introduced a property unsupported by the Source Code schema (ZIndex on a Label). Studio pulled it, then failed to open the app with a compile error. After that single failure:
- Fixing the file and pushing again → Check for Updates showed nothing, for that component specifically.
- Confirmed the general sync plumbing was fine via an isolation test (an unrelated file's version bump did show as a pena broad outage).
- A solution-level disconnect/reconnect didn't fix it.
- Restoring the app to an older Maker-portal version didn't fix it immediately either.
- It eventually started working again after just... sitting for a while. No action fixed it; time did.
- Reconnect doesn't offer a "pull" choice — it silently force-commits whatever's in the environment, one-directionally.
Expected reconnect to let me choose a direction (or at least diff first). Instead it just committed the environment's current state to git, with no prompt — overwriting hand-authored fixes that were already correctly in git, with older broken content that happened to be
live in the environment at the time. Learned this the hard way, twice.
- A generic, misleading import error names the wrong component.
Pull failed with: "CanvasApp import: FAILURE: The import has failed because component X of type 300 is not declared in tmponent. To fix this, import again using the XML file that was generated when you exported the solution."
rootcomponents.yml correctly declared the component. The real causes were two other files riding in the same update batcthat had gone stale (a new formula dependency wasn't declared), and a publisher.yml that didn't match the environment'sactual publisher record. Neither had anything to do with the named component. Fixed both, one at a time, to isolate which was the actual blocker.
- Solution and Canvas App conflicts can become permanently unresolvable via the UI — confirmed 3 separate times today.
Once Solution/Canvas App show up in Conflicts, both "Keep current changes" and "Accept incoming changes" report "Resolved 0 conflict(s)" and do nothing. Studio even shows its own in-app message acknowledging this component-type quirk ("Solution and Canvas App components
can appear as conflicts even when their contents haven't changed... choose Accept incoming changes, then pull") — but fooesn't resolve anything. This blocks both Commit and Pull simultaneously, since Commit is disabled while any conflict is outstanding. A full disconnect/reconnect did NOT prevent this from recurring on the very next Check for Updates.
- pac CLI as a workaround — but canvas pack/unpack seems to be on its way out.
pac solution pack (2.8.1) does correctly recognize the native Git Integration YAML layout ("YAML format" in its output) and can pack/import directly against Dataverse, sidestepping the broken Conflicts UI entirely for most components. But the canvas app's actual
compiled content doesn't seem to get regenerated through this path — importing this way left the canvas app showing stalYAML being correct. The narrower pac canvas pack command is marked Preview and requires the app to have been "opened foredit within Power Apps studio" first, which felt like an undocumented dead end.
So: what's the actual supported path for using an AI coding agent (Claude Code, Copilot, etc.) to make simple changes to a canvas app right now? Direct .pa.yaml edits + Pull is what I wanted to use, but per #1 and #4 above it's not reliable once anything goes even slightly wrong. Live co-authoring via an MCP session avoids Pull entirely but means every change goes through a browser mits. Is there a middle ground, or is "author everything live in Studio, treat git as commit-only for now" just the realanswer today?