Connect → Forge migration: legacy ac:structured-macro fails to transform to inlineExtension view format ("Node is null")

XMLWordPrintable

    • 4
    • Severity 3 - Minor
    • 2
    • Warranty

      Issue Summary

      When migrating a Connect app to Forge and setting layout: inline in the Forge manifest, all existing pages created by the Connect version of the app break with a "broken macro" error. New pages created after the Forge migration render correctly — only pages with legacy Connect storage (ac:structured-macro) are affected.

      The failure occurs entirely within Confluence's storage-to-view transformation layer, before the Forge app function is ever invoked. This is a Connect → Forge migration compatibility gap that blocks migration for any app that uses layout: inline.

      Related:

      • CONFCLOUD-75323 — related but distinct: covers Forge layout: inline failing in export/page templates/history for new Forge storage (ac:adf-node); this ticket covers the legacy Connect storage migration path (ac:structured-macroinlineExtension)
      • CONFCLOUD-83162 — partial fix shipped for inline bodied macros migrated from DC/legacy editor; the inline extension (non-bodied) migration path from Connect storage remains broken

      Steps to Reproduce

      1. Install a Connect app that has a macro with outputType: block on a Confluence Cloud site
      2. Create one or more pages using that Connect macro — these pages will be stored in legacy ac:structured-macro format
      3. Migrate the app to Forge and set layout: inline in the manifest.yml, then deploy the new Forge version
      4. Open an existing page that was created in Step 2 (i.e. a page with legacy Connect macro storage)
      5. Result: The macro renders as a broken macro error instead of the expected inline content
      6. For comparison, create a new page with the same macro after the Forge migration — it renders correctly (stored in modern ADF format)

      Expected Results

      Existing pages created by the Connect version of an app should continue to render correctly after migrating the app to Forge with layout: inline. The legacy ac:structured-macro storage format should be transformed to inlineExtension during the storage-to-view pass, consistent with how layout: block macros are handled (which successfully transforms ac:structured-macrobodiedExtension/blockExtension).

      Actual Results

      The page renders a "broken macro" error placeholder. The below exception is thrown in the confluence-app.log file:

      Unhandled adf-attribute when trying to transform from storage to view format. Node is null
      

      Workaround

      Currently there is no known workaround for this behavior that is feasible at scale.

      The following options exist but have significant limitations:

      • Option 1: Keep layout: block in the Forge manifest — prevents breakage but loses the inline layout behaviour, which may break the existing user experience
      • Option 2: Re-save all affected pages via the REST API to force re-serialisation into modern ADF format — not feasible for app vendors who do not have access to customer Confluence instances

      A workaround will be added here when available.

              Assignee:
              Unassigned
              Reporter:
              Jim Alexander
              Votes:
              16 Vote for this issue
              Watchers:
              11 Start watching this issue

                Created:
                Updated: