Notes from the work

One email when a tutorial or migration write-up goes live. Nothing else, and an unsubscribe link in every email.

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. Tutorials
Tutorials

AI & Atlassian Tutorials

Step-by-step AI & Atlassian guides with real code examples.

Browse tutorialsRead the blog
Forge guidesBuild and test apps on Atlassian ForgeCloud migrationsWork through the details of moving to CloudAI codingExplore coding agents and practical development workflows

Tutorials 64

All topicsAI CodingAtlassian ForgeAtlassian TeamBitbucketCertificationsCloud MigrationCogniRunnerConfluenceJiraJira Service ManagementLeanZero ManagementLocal AISentinel Vaultgoose Local Edition
Forge egress: backend ignores your URL path, client enforces it
TutorialAtlassian Forge

Forge egress: backend ignores your URL path, client enforces it

The same URL in two Forge permission lists means two different things. I read the shipped matcher, deployed a probe to a live site, and measured which half of the docs is wrong.

Mihai PerdumAug 8, 202614 min read

More Tutorials

(8 available)
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.

Gabriela PerdumAug 6, 202612 min read
The @forge/bridge import that kills your resolver, and why nothing warns you
TutorialAtlassian Forge

The @forge/bridge import that kills your resolver, and why nothing warns you

One unused frontend import in a shared file takes a Forge function from HTTP 200 to HTTP 424. It throws at import time, the stack trace blames the wrong function, forge lint says No issues found, and the error message changed in April so the threads you'll find on Google no longer match.

Mihai PerdumAug 4, 202613 min read
Suppressing the email when Jira Automation adds a comment (and why sendNotifications does nothing)
TutorialJira

Suppressing the email when Jira Automation adds a comment (and why sendNotifications does nothing)

A Community Champion added sendNotifications: false to an automation rule, re-imported it cleanly, and still got the mail. Here is why the flag is ignored, which endpoints actually carry a suppression flag, and how to tell a real API parameter from one Jira is only pretending to accept.

Gabriela PerdumAug 2, 20269 min read
Hide a Forge module per project: app properties in a display condition
TutorialAtlassian Forge

Hide a Forge module per project: app properties in a display condition

Connect had entity_property_contains_any_user_group. Forge has no such named condition — but it can do the same job with a jiraExpression over your app's own properties. Here is the working manifest, the endpoint that actually exists, and the one-character bug that hides your module everywhere.

Mihai PerdumAug 1, 202611 min read
Your Unattended AI Agent Looks Healthy and Does Nothing: 8 Silent Failures on macOS launchd (2026)
TutorialAI Coding

Your Unattended AI Agent Looks Healthy and Does Nothing: 8 Silent Failures on macOS launchd (2026)

An agent scheduled with launchd wrote 288 healthy log lines a day and produced nothing. Here are the eight failure modes behind that, each of which looks identical from the outside, and the checks that make them loud.

Mihai PerdumJul 27, 202612 min read
How to Migrate Off Bitbucket App Passwords Without Breaking Git (2026)
TutorialBitbucket

How to Migrate Off Bitbucket App Passwords Without Breaking Git (2026)

A working migration: find what is still using an app password when Bitbucket gives you no report, pick the right credential for each consumer, prove the new token works before you cut over, and purge the cached credential that silently keeps sending the old one.

Gabriela PerdumJul 22, 202614 min read
Security reports for Forge apps: the clean scan that isn't (2026)
TutorialAtlassian Forge

Security reports for Forge apps: the clean scan that isn't (2026)

Running SAST and SCA on a Forge app is easy. The hard part is that your scanner and the reviewer's will disagree about the same version, and if you don't explain why first, your report loses.

Mihai PerdumJul 17, 202611 min read
How to run real end-to-end UI tests against a deployed Forge app (2026)
TutorialAtlassian Forge

How to run real end-to-end UI tests against a deployed Forge app (2026)

Your Forge app's unit tests pass and it still breaks inside Jira. Here's how I drive a deployed Custom UI app in a real browser with Playwright — past the iframe and past Atlassian's 2FA.

Mihai PerdumJul 15, 20269 min read
Previous
Page6of 8
Next

Found My Advice Helpful?

If I helped you solve something for free, coffee money is always appreciated (but never expected).

Buy Me a Coffee

Join the Community

Join the community to ask questions, share your work, and connect with other professionals.

Join Discord

Recent Tutorials

View all
Jira automation usage billing from 3 December 2026: step counts we measured on real rules
TutorialJira

Jira automation usage billing from 3 December 2026: step counts we measured on real rules

Gabriela Perdum14 min read
Claude Code Hits a Jira Workflow Validator: CogniRunner Blocks the Change Request
TutorialCogniRunner

Claude Code Hits a Jira Workflow Validator: CogniRunner Blocks the Change Request

Mihai Perdum17 min read
Jira local LLM integration: pin one HR project to LM Studio with CogniRunner
TutorialCogniRunner

Jira local LLM integration: pin one HR project to LM Studio with CogniRunner

Mihai Perdum15 min read
LLM regression testing for a Jira workflow validator: CogniRunner before you switch models
TutorialCogniRunner

LLM regression testing for a Jira workflow validator: CogniRunner before you switch models

Mihai Perdum17 min read
Jira Gantt Chart Critical Path: Show the Work That Sets the Finish of a 1,992-Row Plan
TutorialLeanZero Management

Jira Gantt Chart Critical Path: Show the Work That Sets the Finish of a 1,992-Row Plan

Mihai Perdum15 min read