personio-eng-monolith

Skills and conventions for working with the Personio monolith.

Installation

claude plugin install personio-eng-monolith@personio-claude-code-marketplace

What does this plugin do?

This plugin provides skills, tools, and guidance specific to the Personio monolith codebase. It covers patterns, conventions, and best practices for developers working in the monolith.

PHP LSP (Phpactor)

Integrates Phpactor to give Claude rich language intelligence for PHP files, including go-to-definition, find references, hover info, document symbols, and more.

What you need: phpactor installed and available on your PATH.

Installing Phpactor:

# macOS with Homebrew
brew install phpactor/tap/phpactor

# Or using Composer (recommended for PHP projects)
composer global require --dev phpactor/phpactor

If installed via Composer, ensure ~/.composer/vendor/bin (or ~/.config/composer/vendor/bin) is in your PATH.

What Claude can do with the LSP:

  • Go to definition and implementation of symbols
  • Find all references to a symbol
  • Hover over symbols for type information
  • List and search for symbols across the workspace
  • Navigate call hierarchies (incoming and outgoing calls)

fix-flaky-test skill

End-to-end workflow for fixing flaky PHPUnit tests in the monolith — from ticket to merged-ready PR. Handles all three input forms: a Jira ticket ID, a raw PHPUnit failure dump, or a bare test FQCN.

What you need:

  • acli installed at /opt/homebrew/bin/acli (Atlassian CLI)
  • gh CLI, authenticated (gh auth login)
  • pup CLI for Datadog log search
  • Docker running (monolith-cli uses it)

Quick Start:

# From a Jira ticket
/fix-flaky-test MDX-2203

# From a FQCN (skill will create the Jira ticket for you)
/fix-flaky-test Personio\Core\Grpc\Tests\Integration\GrpcTimeoutTest::testSomething

# From pasted PHPUnit output
/fix-flaky-test FAILED Personio\Admin\Payroll\Tests\...\PayrollRunTest::testProcess

What the skill does:

  1. Reads the Jira ticket (or parses the FQCN/output directly)
  2. Verifies the test still exists; if not, comments on the ticket and transitions it to Won't Do
  3. Creates a Jira ticket when none was provided (FQCN / raw output path)
  4. Checks Datadog and CI logs for existing failure patterns
  5. Temporarily removes markTestSkipped, runs the test 5× to confirm flakiness
  6. Investigates root cause against a checklist (Faker, feature flags, sort order, time, WireMock, shared state…)
  7. Applies the minimal fix and re-runs 5× to confirm
  8. Opens a draft PR with before/after run counts in the body
  9. Self-evaluates and proposes concrete improvements to the skill

Why would you want this?

  • One command, zero context-switching — no manual Jira, no manual grep, no manual test-loop counting.
  • Safe by default — always creates a draft PR, never marks it ready.
  • Handles the Won't Do case — if the test was already deleted, the ticket is closed automatically.
  • Improves over time — the self-evaluation phase feeds back into the skill after each run.