Stay Updated

New tutorials, tips, and Atlassian insights. No spam, unsubscribe anytime.

L
LeanZero

An approachable expert helping teams simplify their Atlassian ecosystems. Sharing knowledge and building community, one solution at a time.

Services

  • Atlassian Migrations
  • Atlassian FastShift
  • Atlassian Maintenance
  • Forge App Development
  • AI Development Consultation

Topics

  • Jira
  • Jira Service Management
  • Confluence
  • Bitbucket
  • Atlassian Forge
  • Cloud Migration
  • Local AI
  • AI Coding
  • All topics

Company

  • Blog
  • Tutorials
  • Contact

Community

  • Join Discord
  • Support this site

© 2026 LeanZero. All rights reserved.

Privacy Policy|Terms of Service|Service Level Agreement|Trust Center
LZ·/TOPICS·REV 2.6
  1. Home
  2. Topics
  3. Confluence
Topic hub

Confluence

Space administration and the operations that are hard to undo.

Read the articlesAll topics
§01
What this covers

One article here so far, and it is about getting a space back out of Confluence: exporting to a real folder tree that keeps the page hierarchy, and taking only the attachments you want instead of everything ever uploaded. More will follow. Until then this page is not pretending to be a section.

§02
Series

Read in order

Administering Confluence Cloud

1 part

Space-level operations on Confluence Cloud that the UI does not offer.

  1. 1Part 1 — TutorialExport a Confluence Cloud space to a real folder tree, with only the attachments you want12 min
§03
Everything on this topic

Articles

9
Skip the migration writes that change nothing, without skipping the ones that matter
TutorialCloud MigrationConfluence

Skip the migration writes that change nothing, without skipping the ones that matter

A semantic hash makes a re-run cheap. Ours also erased a mention's accountId, so two different users hashed the same and a corrected mapping would be silently skipped. Here is the pattern, the bug, and the tests that would have caught it.

Sep 3, 202610 min read
I built a Forge major-version predictor on a guess, and it took a review to find the answer inside my own commit
TutorialAtlassian ForgeSentinel Vault

I built a Forge major-version predictor on a guess, and it took a review to find the answer inside my own commit

Two triggers fired on the release that took us to 4.0.0, not one. I wrote a tool that knew about six of them when the docs list eleven, published a thesis that inverted the truth, and found the correct answer sitting in a comment in the same commit.

Aug 29, 202614 min read
Build your migration's gap list before you start, and make the differ refuse to guess
TutorialCloud MigrationJira

Build your migration's gap list before you start, and make the differ refuse to guess

Atlassian publishes what each migration tool copies. Turning that page into a scope document takes six steps and one insight most people miss: some things are copied partially, and a tool that reports those as done will cost you the migration.

Aug 28, 20269 min read
Identity is the hard half of a Data Center migration. Cloud to Cloud hands it to you and charges you for the gaps instead.
ArticleCloud MigrationJira

Identity is the hard half of a Data Center migration. Cloud to Cloud hands it to you and charges you for the gaps instead.

DC to Cloud spends its budget resolving who everyone is, because usernames do not exist in Cloud. Cloud to Cloud gives you identity for free and a first-party copy tool — then bills you for the specific things that tool does not take.

Aug 28, 202612 min read
Fix "Disallowing path manipulation attempt" from Forge's route tag, and know which of the two causes you hit
TutorialAtlassian ForgeJira

Fix "Disallowing path manipulation attempt" from Forge's route tag, and know which of the two causes you hit

The @forge/api route template throws on two different mistakes with one identical message. Six steps to tell them apart and fix each, with a probe that prints exactly which characters it rejects in a path and which it silently encodes in a query.

Aug 27, 202611 min read
Refuse an unentitled caller in a Forge resolver, and prove it with a test that goes red without the gate
TutorialSentinel VaultAtlassian Forge

Refuse an unentitled caller in a Forge resolver, and prove it with a test that goes red without the gate

A Forge resolver that takes a page id from the payload and writes with asApp() will write to any page the caller can name. Six steps to gate it, with a test suite that fails 5 of 6 before the fix and passes 6 of 6 after.

Aug 27, 202615 min read
The duplicate Forge event that deleted our spam filter
ArticleSentinel VaultAtlassian Forge

The duplicate Forge event that deleted our spam filter

Forge delivered one page edit twice, 400ms apart. The duplicate didn't post a second comment — it wiped the 24-hour window that stops second comments. Then I wrote the whole thing up backwards, and the test I built to prove it agreed with me.

Aug 27, 202613 min read
Sentinel Vault: you cannot block an edit in Confluence, so we undo it instead
ArticleSentinel VaultConfluence

Sentinel Vault: you cannot block an edit in Confluence, so we undo it instead

Forge gives you no veto over a Confluence save. Product events arrive after the change is already committed, which means a lock on Confluence content cannot prevent anything — it can only detect and restore. Here is what that constraint does to an app: why the restore has to ignore itself, why reverting the whole page is the wrong fix, and why a licence check in a protection app must fail open.

Aug 19, 202611 min read
Export a Confluence Cloud space to a real folder tree, with only the attachments you want
TutorialConfluence

Export a Confluence Cloud space to a real folder tree, with only the attachments you want

The native HTML export flattens your page tree and renames every attachment to its ID. Here is what the zip actually contains, how to trigger it without a browser, and a v2 API script that rebuilds the tree — including the two bugs that silently ate a page in my first version.

Aug 6, 202612 min read