2012 F150 3.5 EcoBoost Negative Fuel Trims

Since i originally purchased a used 2012 F150 I’ve had a constant battle with negative fuel trims. anywhere from -12% to -20% LTFT at idle or cruising. During the year long tune up process I continued to troubleshoot the issue.

FORScan graph showing the negative fuel trims while driving

Intake Valves

I performed a port induction service, blasting the intake valves and stems with walnuts to remove carbon build up thanks to the nature of direct injection.

before port induction
after port induction

Clean valves allow air to enter the combustion chamber easier. While a needed service the engine needed, this didn’t have any effect on the trims.

Fuel Injectors

The next possible cause for negative fuel trims can be “stuck” injectors, putting more fuel into the combustion chamber than the PCM calls for. I inspected the original fuel injectors which seemed quite dirty. Although I didn’t have any other symptoms, like flooded cylinders or dropped fuel pressure after the engine is turned off, I replaced them with remanufactured ones. I hoped this would help, but as the logical part of my brain expected, the fuel trim issue remained.

example of a dirty end of the fuel injectors

VCT System

Next was the VCT system. I monitored the error PIDs like VCT_EXH_DIF1 to see what PCM was calling for and what the phasers were actually doing. They all seemed to have around 1 degree of error while idling.

VVT error values

While driving around I noticed periodic high and low spikes. I read in the service manual that spikes like this are normal.

I wasn’t able to find any definitive information about how many degrees of error were acceptable so I assumed these were fine.

I removed the valve covers and inspected the vct solenoid screens for debris. There was some minor build up that I cleaned off. I tested the solenoids with 12V to ensure they were turning on and off correctly.

vct solenoid with some build up on the oil screen.

Oil Catch Can

I installed a catch can to help filter out oil and fuel from entering the intake from the PCV system. While it does filter out quite a bit of liquid, it also had no effect.

I also performed the “weep hole” mod, an attempt at getting condensation that builds up inside the intercooler to drain instead of being sucked up into the intake.

oil fuel and water draining from the intercooler.

There was a considerable amount of fluid, but no changes in the fuel trims were noticed. This issue mainly manifests with hesitation and misfires while accelerating quickly, when rapid airflow picks this liquid up.

Exhaust Manifolds

The 1st and 2nd generation 3.5 EcoBoost engine is notorious for warping the exhaust manifolds. Mine had a pretty bad exhaust leak on both sides. Exhaust leaks can fool the upstream O2 sensors into thinking their is a rich condition by letting unmetered air into the exhaust pipe. These sensors are used by the PCM to adjust the fuel trims to compensate for rich and lean conditions.

The rear of both exhaust manifolds were warped, allowing exhaust gas to bypass the upstream O2 sensor.
The exhaust manifold is not flat.

While there are third party manifolds that claim to fix this issue by using all the bolt holes present on the cylinder head, I went with the revised manifolds from Ford, made from stainless steel to prevent the warping.

cylinder head after cleaning.

I went ahead and replaced the turbo coolant and oil lines as a preventive measure for the notorious leaks they can have. I did not get a picture of it, but the turbo oil supply line screens were spotless, no gunk was present preventing the turbos from getting oil. Unfortunately this repair had no effect on the trims either. I was stumped!

Some Time Passes

I had thrown in the towel for fixing this issue. I couldn’t find any information online about this. No facebook group or forum post had similar issues. After a few months passed I came across this blog post which had nearly identical symptoms! A stretched timing chain can cause intake/exhaust valve timing issues. I purchased a pressure gauge and attached it to the intake manifold. Sure enough, low vacuum pressure!

Low vacuum pressure at idle indicating the intake and exhaust valves were not operating correctly!

Like a kid at Christmas I ripped the passenger side valve cover off and shoved a borescope down to the timing chain tensioner. It was extended to the maximum position. The engine had a stretched timing chain!

Timing chain tensioner with 7 teeth exposed, the maximum amount!

Unlike the 2nd generation EcoBoost, the 1st generation is not known for cam phaser issues. Almost all the information online centered around cam phaser rattle at start up. I assumed since I did not have that issue my timing system was operating normally. The 1st generation engine _does_ have issues with stretched timing chains because it’s nearly 5 feet long!

I took the timing cover off and inspected the engine:

The timing chain stretch was confirmed. I ordered the parts and performed a timing job. New chains, phasers, guides, oil and water pump were installed. I did keep the original VCT solenoids because they were working correctly and aren’t known for issues. All genuine Ford parts, which ended up actually being cheaper than most aftermarket kits.

Buttoned everything back up, reset the KAM, and took the truck for a spin. After getting the engine warmed up the trims were much better! At a warm idle the VCT errors were also smaller!

PID values after the timing job, KAM reset, and 30 minutes of driving to warm the engine up.

Next project will be replacing the worn out engine and transmission mounts.

Borgitory – A Modern Web Interface for BorgBackup Management

Managing BorgBackup repositories through command line tools works great for simple setups, but when you’re dealing with multiple repositories, scheduled backups, and want to browse archive contents, the terminal quickly becomes limiting. Commercial backup solutions either cost too much or lack the flexibility of Borg’s deduplication and compression. I set out to build a comprehensive web interface that
would give me the control I wanted without sacrificing Borg’s powerful features.

The result is Borgitory – a self-hosted web application that brings modern UI/UX to BorgBackup operations while maintaining all the security and efficiency that makes Borg great.

Repository Management Made Simple

Setting up repositories through Borgitory eliminates the guesswork of command-line Borg initialization. The interface validates connections in real-time and stores encrypted passphrases securely using
Fernet encryption. I can add local repositories, remote SSH locations, or any path accessible to the Docker container.

Additional functionality includes the repository overview page where I can see backup status, archive counts, and storage usage at a glance. No more running borg list commands to figure out what’s where.

Interactive Archive Browsing

One feature I’m particularly proud of is the archive browser. Using FUSE mounting, Borgitory mounts archives as filesystems and provides a web interface for navigating directories just like a file manager.
This was challenging to implement in a Docker environment – requiring --cap-add SYS_ADMIN and --device /dev/fuse – but the result is seamless file exploration without extracting entire archives.

Files can be downloaded directly from mounted archives, streaming efficiently even for large files. Multiple downloads work simultaneously, and there’s no temporary storage overhead since files stream
directly from the FUSE-mounted filesystem.

Automated Scheduling with Composite Jobs

Rather than managing separate cron jobs for backup, pruning, and cloud sync operations, Borgitory introduces “composite jobs” that chain multiple tasks together. A single scheduled job can backup data,
clean up old archives according to retention policies, sync to cloud storage, and send push notifications when complete.

The scheduling interface uses cron expressions but provides common presets for daily, weekly, and monthly backups. Each schedule can be enabled/disabled independently and shows the next execution time.

Real-time Job Monitoring

All backup operations run in isolated Docker containers and stream progress updates via Server-Sent Events. The job history shows detailed logs for each task within composite jobs, with expandable output
sections and progress indicators.

Failed jobs highlight errors prominently, and completed jobs show statistics like data processed, compression ratios, and execution time. The job manager handles queuing and prevents resource conflicts
when multiple operations are scheduled simultaneously.

Flexible Cleanup Policies

Archive cleanup goes beyond simple “keep N days” rules. Advanced retention strategies can keep different numbers of daily, weekly, monthly, and yearly archives – just like Borg’s native pruning but
configured through an intuitive interface.

Cleanup operations can run independently or as part of scheduled composite jobs. The interface shows exactly which archives will be deleted and estimates space savings before execution.

Cloud Storage Integration

Using Rclone under the hood, Borgitory syncs repositories to S3-compatible storage after backups complete. The cloud sync configuration supports multiple providers and includes connection testing to validate credentials.

Sync operations track transfer progress and can run manually or automatically after successful backups. This provides offsite storage without requiring separate backup tools.

Push Notifications

Pushover integration sends notifications to mobile devices when jobs complete, fail, or require attention. Rather than checking logs manually, I get immediate alerts about backup status with configurable
triggers for success, failure, or both.

Repository Statistics

Basic statistics about a repository can be viewed through the UI, including measurements that change over time as archives are created.

Technical Implementation

The backend uses FastAPI with SQLite for job history and configuration storage. The frontend leverages HTMX for dynamic updates without JavaScript frameworks, creating a responsive interface that works
well on mobile devices. All sensitive data like passphrases and API keys use Fernet encryption at rest.

Docker deployment includes pre-built images on Docker Hub, eliminating the need to clone and build from source. The container requires specific capabilities for FUSE mounting but otherwise runs as a
standard web service.

Getting Started

Installation is straightforward with Docker:

docker run -d \
-p 8000:8000 \
-v ./data:/app/data \
-v /path/to/backup/sources:/backup/sources:ro \
-v /path/to/borg/repos:/repos \
--cap-add SYS_ADMIN \
--device /dev/fuse \
--name borgitory \
mlapaglia/borgitory:latest

The interface is available at http://localhost:8000 and creates the first admin account on initial setup. From there, repository management, scheduling, and monitoring are all handled through the web
interface.

The project is open source and available on https://github.com/mlapaglia/Borgitory with comprehensive API documentation at /docs. Whether you’re backing up a single machine or managing multiple
repositories across different systems, Borgitory brings the power of BorgBackup to a modern web interface without sacrificing the flexibility that makes Borg great.