fix: align canva action scopes with canonical docs
loading diff…
VERIFIED canva workbook rows flagged as real mismatches_scopes blocks to the documented single-scope CNF form{"all_of": [{"any_of": [scope]}]} convention after Bugbot reviewThe current VERIFIED canva sheet snapshot contains 5 real mismatch rows and no explicit need review rows.
| Action | Old | New | Reason | Source |
|---|---|---|---|---|
delete_asset_by_id | {"all_of": [{"any_of": ["asset:read", "asset:write"]}]} | {"all_of": [{"any_of": ["asset:write"]}]} | Action code calls only DELETE /v1/assets/{assetId}; Canva's Delete asset doc requires asset:write, so asset:read was a runtime trap. Follow-up commit preserved that scope value while restoring the existing Canva single-scope clause format. | Sheet mismatch; Delete asset |
get_design_export_job_result | {"all_of": [{"any_of": ["design:read"]}]} | {"all_of": [{"any_of": ["design:content:read"]}]} | Action code calls only GET /v1/exports/{exportId}; Canva's Get design export job doc requires design:content:read, not design:read. Follow-up commit restored the existing Canva single-scope clause format. | Sheet mismatch; Get design export job |
initiate_canva_design_autofill_job | {"all_of": [{"any_of": ["design:content:write", "design:meta:read", "asset:read", "asset:write", "brandtemplate:meta:read", "brandtemplate:content:read", "profile:read"]}]} | {"all_of": [{"any_of": ["design:content:write"]}]} | Action code calls only POST /v1/autofills; Canva's Create design autofill job doc lists only design:content:write. The six extra scopes did not authorize the endpoint. Follow-up commit restored the existing Canva single-scope clause format. | Sheet mismatch; Create design autofill job |
remove_folder_and_move_contents_to_trash | {"all_of": [{"any_of": ["folder:read", "folder:write"]}]} | {"all_of": [{"any_of": ["folder:write"]}]} | Action code calls only DELETE /v1/folders/{folderId}; Canva's Delete folder doc requires folder:write, so folder:read was too broad. Follow-up commit restored the existing Canva single-scope clause format. | Sheet mismatch; Delete folder |
update_asset_s_name_and_tags_by_id | {"all_of": [{"any_of": ["asset:read", "asset:write"]}]} | {"all_of": [{"any_of": ["asset:write"]}]} | Action code calls only PATCH /v1/assets/{assetId}; Canva's Update asset doc requires asset:write, so asset:read was a runtime trap. Follow-up commit restored the existing Canva single-scope clause format. | Sheet mismatch; Update asset |
Each changed action is single-endpoint in code, so the endpoint/doc intersection is the final single-clause CNF.
| Action | Actual HTTP call(s) in code | Doc scope(s) on affected endpoint(s) | Intersection / final CNF |
|---|---|---|---|
delete_asset_by_id | DELETE /v1/assets/{assetId} | asset:write from Delete asset | {"all_of": [{"any_of": ["asset:write"]}]} |
get_design_export_job_result | GET /v1/exports/{exportId} | design:content:read from Get design export job | {"all_of": [{"any_of": ["design:content:read"]}]} |
initiate_canva_design_autofill_job | POST /v1/autofills | design:content:write from Create design autofill job | {"all_of": [{"any_of": ["design:content:write"]}]} |
remove_folder_and_move_contents_to_trash | DELETE /v1/folders/{folderId} | folder:write from Delete folder | {"all_of": [{"any_of": ["folder:write"]}]} |
update_asset_s_name_and_tags_by_id | PATCH /v1/assets/{assetId} | asset:write from Update asset | {"all_of": [{"any_of": ["asset:write"]}]} |
need review rows were present in the current VERIFIED canva sheet snapshot../.nox/fmt_app/bin/ruff format apps/canva/actions/delete_asset_by_id.py apps/canva/actions/get_design_export_job_result.py apps/canva/actions/initiate_canva_design_autofill_job.py apps/canva/actions/remove_folder_and_move_contents_to_trash.py apps/canva/actions/update_asset_s_name_and_tags_by_id.py./.nox/chk_app/bin/ruff check apps/canva/actions/delete_asset_by_id.py apps/canva/actions/get_design_export_job_result.py apps/canva/actions/initiate_canva_design_autofill_job.py apps/canva/actions/remove_folder_and_move_contents_to_trash.py apps/canva/actions/update_asset_s_name_and_tags_by_id.pyast.literal_eval verification of each edited _scopes block against Mercury's CNF validator shape{"all_of": ["scope"]} shorthand while sibling Canva actions use {"all_of": [{"any_of": ["scope"]}]}.7bdc1df104 by preserving the audited scope values and restoring the existing Canva formatting convention.PRRT_kwDOOV9UsM6BGMux.