Notes from the work

One email when a tutorial or migration write-up goes live. Nothing else, and one click to leave.

LeanZero

Two people in Romania doing Atlassian migrations, Forge apps and practical AI work for teams that would rather talk to the person doing the job. Most of what we learn ends up on this site.

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
  • Certifications
  • Atlassian Team
  • All topics

Company

  • Blog
  • Tutorials
  • Contact

Community

  • Join Discord
  • Support this site

© 2026 LeanZero. All rights reserved.

Privacy PolicyTerms of Service24/7 SupportTrust CenterSecurityDPALegal notice
  1. Home
  2. Topics
  3. Confluence
Topic hub

Confluence

Space administration and the operations that are hard to undo.

Read the articlesAll topics

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.

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

Articles

19
Lock attachments in Confluence Cloud with Sentinel Vault, step by step
TutorialSentinel VaultConfluence

Lock attachments in Confluence Cloud with Sentinel Vault, step by step

Confluence Cloud has no built-in way to lock attachments. This walks one file through Sentinel Vault 6.6.0 on a real site: seal it, overwrite it as someone else, watch the sealed version come back in seconds, read both versions in the history and over the REST API, then unlock it. Plus a bug in our own app that we hit while running it.

Oct 4, 202613 min read
Confluence data classification without Guard: Sentinel Vault 6 levels from Assets
ArticleSentinel VaultConfluence

Confluence data classification without Guard: Sentinel Vault 6 levels from Assets

Confluence data classification needs Atlassian Guard Premium, and admins keep finding that out on the Atlassian Community. Sentinel Vault 6 gives every page a classification level either way: its own levels, levels imported from Jira Service Management Assets, or Confluence's own when your site has them.

Oct 3, 20268 min read
Runs on Atlassian apps with AI: Sentinel Vault reviews Confluence with no API key
ArticleSentinel VaultConfluence

Runs on Atlassian apps with AI: Sentinel Vault reviews Confluence with no API key

Sentinel Vault is one of the Runs on Atlassian apps that review Confluence content with AI. It calls Atlassian-hosted LLMs through the Forge LLMs API, so there is no API key to paste and no external data egress declared. What that buys an admin, who pays for the tokens, how the cost ceiling actually works, and the four places it is weaker than it looks.

Oct 2, 202615 min read
Atlassian Data Security Policy: What It Blocks, What Needs Guard, and Migrations
ArticleCloud MigrationConfluence

Atlassian Data Security Policy: What It Blocks, What Needs Guard, and Migrations

An Atlassian data security policy has seven controls, and only one of them works without Atlassian Guard: blocking all Marketplace and custom apps from chosen spaces. This post walks through what each control blocks, what the app access rule really takes away from an app, what the admin API says when you try a Guard control without Guard, and what happens to policies and classification levels on a Data Center to Cloud or Cloud to Cloud migration.

Sep 26, 202611 min read
Confluence Space Permissions After Migration: Audit Who Lost or Gained Access
TutorialCloud MigrationConfluence

Confluence Space Permissions After Migration: Audit Who Lost or Gained Access

Confluence space permissions after migration break in two directions: people lose spaces and private pages, and other people quietly gain access when groups merge by name. This tutorial gives you a dependency-free Node script that snapshots every space permission, role, page restriction and group member, then diffs the before and after into two lists. Run on a real Cloud site, with the Data Center queries alongside.

Sep 23, 202616 min read
Confluence nested bodied macros before a Cloud migration: find them, triage them, fix them
TutorialCloud MigrationConfluence

Confluence nested bodied macros before a Cloud migration: find them, triage them, fix them

Nested bodied macros are the one Confluence Data Center content pattern a Cloud migration cannot carry across intact, and since April 2026 there is no legacy editor left to hide them in. This walks the discovery probe on the Data Center database, the triage against what the Cloud editor actually accepts, a REST probe that shows exactly how Cloud wraps a nest it cannot render, the error string your users will paste, and the repair patterns, with the parts of the script that matter and not the whole thing.

Sep 18, 202622 min read
"Uncaught (in promise) Error: Unable to emit ready event." in a Forge Confluence macro
ArticleAtlassian ForgeConfluence

"Uncaught (in promise) Error: Unable to emit ready event." in a Forge Confluence macro

You added emitsReadyEvent to a Confluence macro to speed up PDF export, called view.emitReadyEvent(), and every normal page view now logs "Unable to emit ready event." The shipped @forge/bridge source says why it happened, why it was harmless, and which version made it stop.

Sep 18, 20267 min read
Confluence heap size for a Cloud migration: Data Center memory settings, Synchrony, CCMA
TutorialConfluenceCloud Migration

Confluence heap size for a Cloud migration: Data Center memory settings, Synchrony, CCMA

Confluence 10.2 ships a 1 GB heap; the Cloud Migration Assistant refuses to be safe below 4 GB and, in its own code, will not start an attachment step above 80% of whatever heap you give it once its memory budget is on. This is the DC-side preparation for a large migration: a heap calculator from Atlassian's node splits, its tested heaps and your GC log, the 32 to 47 GB band to avoid, the Synchrony JVM, the thread-to-pool pairing, the assistant's documented floor and undocumented mechanics, and what Atlassian has actually tested at 102,000 users.

Sep 17, 202634 min read
Six pieces of owner feedback, and what each one actually turned out to be
ArticleSentinel VaultConfluence

Six pieces of owner feedback, and what each one actually turned out to be

"The request stays available even if I approve it" was a missing else branch. "I cannot tell which image is which" was a 5 MB base64 preview we had hidden to save bandwidth. What users report and what is wrong are rarely the same sentence.

Sep 14, 202611 min read
Repair the Confluence Cloud pages your migration quietly broke, one space at a time
TutorialCloud MigrationConfluence

Repair the Confluence Cloud pages your migration quietly broke, one space at a time

A DC to Cloud migration moves pages. It does not guarantee that what is inside them still works. Here is how to find the broken macros and lost restrictions, repair them with a backup before every write, and prove the fix on the page rather than in the API response.

Sep 8, 202614 min read
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