Asset Lifecycle Management  ·  Miami University

Automated Laravel App
Decommissioning

End-to-end automation from service request to infrastructure removal — with AI-assisted code review and a complete audit trail.

TeamDynamix iPaaS GitLab CI/CD GitLab Duo Agent Platform OpenTofu / Kubernetes POSIX Shell
"Give me six hours to chop down a tree and I will spend the first four sharpening the axe."
— Abraham Lincoln
Automation tools — and the quality of those tools — are how we sharpen the axe. The right investment upfront delivers faster, more consistent outcomes every time.
What We'll Cover

Seven things, in this order

1
Why We Started — what we set out to do
2
Current State — how this still works today, in production
3
What We Built — the automated workflow, and a look at the demo
4
Why This Approach — what changed, and the architectural trade-offs behind it
5
Where We Stand — progress so far, as a non-exclusive, ongoing project
6
What We Expect — the impact, and what it takes to get to production
7
What's Next — a repeatable pattern for more tasks ahead
1  ·  Why We Started

High maintenance costs across Application Development, Decommissioning and Solution Delivery lifecycles

⏱️

Valuable Time Lost

Retiring a single app requires careful, detail-oriented manual work from developers across 10+ systems — time that could be spent building, not maintaining.

19
workflow tasks per decommission, spanning
10+ separate systems and teams
⚠️

Error-Prone

Manual steps across multiple systems create opportunities for mistakes that can impact production reliability.

📋

No Consistent Audit Trail

Manual steps leave no structured record. Tracking what changed, who changed it, and when requires digging through commit history and old emails.

2  ·  Current State

Making the code change: manual and repetitive

1
Ticket approvedManual
A developer notices the request and starts the work by hand
2
Create a GitLab issueManual
Opened by hand to track the change
3
Create a branchManual
Manually created from that issue
4
Edit files locallyManual
Find and remove the app's entry by hand, in both environments
5
Commit & pushManual
Changes are manually committed and pushed to GitLab
6
Open a Merge RequestManual
Opened by hand, then wait for a teammate to notice and review
There's no automated path from ticket to code change. Every one of these steps has to be remembered and done by hand, the same way, every single time — with nothing connecting them to each other or to the original request.
3  ·  What We Built

Two workflow tasks, fully automated today

1

Terraform (OpenTofu) / Kubernetes

Removes the app's infrastructure entry from the Kubernetes repo, opens a Merge Request, gets it AI-reviewed, and waits for a human to approve and merge — then marks the TDX workflow task complete.

TDX Workflow Task ID: 7800179  ·  Change Ticket: 29620627
2

Retire GitLab Repository

Renames the app's GitLab repo to mark it retired, transfers it to the archive group, locks it read-only, and marks the TDX workflow task complete. No manual GitLab actions needed.

TDX Workflow Task ID: 7800181  ·  Change Ticket: 29620627
These 2 of the 19 tasks are today's focus. The working prototype also includes a self-service intake form, automated MRs to deprovision AWS resources (human approval required before deletion), and Slack/email notifications at every gate — all built during the initial PoC window.
3  ·  What We Built

From service request to automated task completion

🎫
TDX Ticket
Submitted
A decom request reaches the Kubernetes workflow task in TeamDynamix
Automated
⚙️
Automation
Reads the Ticket
iPaaS reads the asset record and identifies which app to remove
Automated
📂
GitLab Makes
the Changes
A CI job finds and removes the app's config from the right files in both environments
Automated
🤖
AI Reviews
the Change
GitLab Duo runs a checklist on the proposed change before any human sees it
GitLab Duo Agent Platform
👤
Human Reviews
& Approves
A Developer sees AI's verdict in Slack, opens the MR, and approves
Human Gate
TDX Task
Marked Complete
iPaaS confirms success and closes the workflow task with a full audit link
Automated
Every step is traceable. The TDX ticket, GitLab issue, git commit history, Merge Request, and TDX closure comment together create a complete record of every decommission — who requested it, what changed, who approved it, and when.
3  ·  What We Built
Real-time Notifications

Teams stay informed without checking anything

📣

MR Created

As soon as the automated job opens the Merge Request, the review team is notified in Slack's #decom-reviews channel with a direct link.

Within minutes of ticket trigger
🤖

AI Verdict

GitLab Duo's review result — passed or action required — fires a second Slack message, so the reviewer knows whether there's a problem before they even open the link.

~2 min after MR opens

Merge Confirmed

When the Developer merges the change, Slack notifies #decom-reviews instantly. iPaaS then sends a final enriched message to #decom-ops with the TDX closure confirmation.

Instant on merge
3  ·  What We Built
Who does what

Clear roles — human approval is always required

ComponentResponsibilityType
TeamDynamix / iPaaSDetects the trigger, reads ticket metadata, fires the GitLab pipeline, and closes the TDX task on completionAutomated
GitLab CI JobMakes the actual file changes, creates the audit issue, branch, and Merge RequestAutomated
GitLab Duo Agent PlatformReviews every change against a specific checklist — posts a pass or action-required verdict before the human reviewsAI
GitLab for SlackSends real-time Slack notifications as events happen: MR opened, AI verdict, MR mergedAutomated
Human Reviewer (Developer)Makes the final approval. Reviews the diff and AI verdict, then approves and merges. The only entity that can authorize a change.Human
No single automated component can approve and apply a change on its own. The human approval gate is a structural requirement — it is not possible to bypass through automation.
3  ·  What We Built
Security & Accountability

Built-in guardrails at every layer

🔒

Automation Cannot Self-Approve

The automated job that creates a Merge Request does not have permission to approve its own work. A human Developer must approve — enforced by GitLab's branch protection rules.

🛡️

No Direct-to-Production Path

Everything goes through a Merge Request. There is no mechanism for the automation to modify production configuration files without passing through a human review step.

AI Flags Cannot Be Ignored

When GitLab Duo posts a review feedback comment, the Merge Request is technically blocked — it cannot be merged until the flag is addressed or explicitly overridden by a reviewer with justification.

🔑

Signed, Tamper-Proof Notifications

When GitLab notifies iPaaS that a Merge Request was merged, the message is cryptographically signed. If the payload was altered or faked, iPaaS rejects it automatically.

🗝️

Credentials Never Exposed

No passwords or access tokens appear in code, files, or change records. All secrets are stored in encrypted variable stores with access controls.

📚

Complete Audit Trail

Every decommission produces a traceable record across TDX ticket, GitLab issue, Git commit history, Merge Request, and TDX closure comment — including who approved it and when.

DEMO

4  ·  Why This Approach — The Core Decision

Removing an app's config entry: why POSIX shell, not an AI agent

The task: find one app's block inside a structured config file, and remove it cleanly from both environments. Same input every time, same correct answer every time — no interpretation required.

🐍 Claude Agent SDK (Python or TypeScript)
Non-deterministic: correct 19 times out of 20 means wrong sometimes — and you can't predict when, on infrastructure files.
Real dependencies: an SDK, a model, an API key, retry logic — all with their own update and deprecation cycles.
Ongoing maintenance: tracks Anthropic's release schedule, not ours — the fastest-moving dependency in the whole stack.
🐚 POSIX Shell + awk
Deterministic: same input, same output, every single time — exactly what you want touching infrastructure.
Zero runtime dependencies: ships with the base container image already — no installs, no network calls, nothing to keep patched.
Decades-stable standard: POSIX utilities haven't meaningfully changed since the 1970s–80s. Nothing to upgrade, ever.
4  ·  Why This Approach — A Quick Definition

What is GitLab Duo Code Review, exactly?

"An AI-powered DevSecOps feature that automates the initial evaluation of code changes directly within GitLab merge requests. It uses large language models to scan MR diffs, analyze repository context, and provide automated, actionable feedback on code quality, security, and performance."
How GitLab describes Code Review Flow
🔎
Reads more than the diff — pulls in repository context, not just the changed lines, before forming an opinion
🧠
Built on large language models — the same category of AI as Claude, but packaged as a maintained GitLab feature, not code we write or host ourselves
🛡️
Checks quality, security, and performance — a general-purpose reviewer, which we point at a specific checklist for this project's decommission MRs
This is the "AI Reviews the Change" step you saw earlier in the workflow. Next: why we rely on this maintained GitLab feature instead of building the same review ourselves with the Claude Agent SDK.
4  ·  Why This Approach — Balance

Every change is reviewed by AI before a human sees it

As part of our Human-in-the-Loop (HITL) guardrails, GitLab Duo automatically checks five things on every proposed decommission:

📁
Right files only — were only the expected configuration file types changed?
🎯
Exactly one app removed — is it the correct app, and only that app?
🌐
Both environments updated — were test and production both modified consistently?
🔗
Related records cleaned up — were import references also removed properly?
🔍
No unintended changes — did anything else in the file get accidentally modified?
✅ AUTOMATED REVIEW PASSED
Diff is bounded to delta-worker across both environments (test + production). No unintended changes detected. Both laravel_apps.tf files updated consistently. Import records removed.
⚠️ ACTION REQUIRED
Production environment (laravel_apps.tf) was not updated. Only the test environment reflects the removal. This must be corrected before merging.
The human reviewer still makes the final decision. GitLab Duo reduces review time by doing the repetitive checking upfront — so the reviewer can focus on judgment, not mechanics. If Duo flags a problem, the Merge Request is blocked until it's addressed.
5  ·  Where We Stand

Proof-of-concept complete — a working prototype, in the sandbox

🧪

Working prototype delivered

Self-service intake, automated TDX ticket + 19 tasks, automated infra changes, HITL Slack/email gates, AI-assisted review, GitLab archival, TDX closure — all built.

🔁

Non-exclusive project

Other priorities can and do become the team's primary focus — this can shift or delay the timeline, by design.

6  ·  What We Expect — Sharing the Impact

Who benefits, and by how much

👥

Application Operations

Less manual triage and fulfillment work per request; consistent, predictable steps every time.

🧑‍💻

SolDel Developers

Time back from repetitive teardown work — reinvested in building, not maintaining.

🏢

Enterprise Operations

As the automation extends to more workflow tasks, the desired future state also cuts down the manual, repetitive work Enterprise Operations handles for each decommission.

🛡️

Risk & Compliance

A full audit trail on every decommission: TDX ticket, GitLab history, MR, reviewer, and closure — every time.

6  ·  What We Expect — Getting to Production

This will take time — and that's expected

🚧

No immediate deployment

This is a sneak peek at an evolving, in-progress capability — not a rollout plan the dev teams can adopt tomorrow.

🧩

Known environment limits

Some Laravel apps still share combined GitLab repos, which this automation doesn't yet handle — a real gap, not a footnote.

👍

Depends on buy-in

Team fit matters as much as the technology — adoption needs agreement on where and how this gets maintained long-term.

📚

Depends on documentation & support

Sustainable operation means clear runbooks and an owner for the automation — that groundwork is still being laid.

Honest timeline: hard to commit to an exact date — it depends on availability, buy-in, and how quickly documentation and support structures come together. We'd rather say that plainly than overpromise.
Recap

The short version

Why
Decommissioning a Laravel app takes 19 manual tasks across 10+ systems — slow, inconsistent, and hard to audit.
What
A working prototype now automates 2 of those tasks end-to-end, with AI review before every human approval.
Why This Way
POSIX shell for the deterministic file edit, GitLab Duo for the judgment-based review — each tool matched to the task it's actually good at.
Status
PoC complete, prototype working in sandbox — requesting a 12-week extension to keep going.
Next
Real value at scale, but a deliberate, honest path to production — no shortcuts, no overpromises.
7  ·  What's Next

A repeatable pattern that could apply to more tasks

The Core Pattern

Automation does the structured, repetitive work
AI verifies the result before a human sees it
A human makes the final call where judgment is needed
Each task automated with this pattern reduces manual effort, improves consistency, and adds a permanent audit record — without removing human oversight from decisions that matter.
Thank You

Questions Welcome

← → or click to navigate