• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

amacgregor / amgr_phx / b2dac54b93142d0aaf6ac1b989c519c43a5fd0f6
41%

Build:
DEFAULT BRANCH: main
Ran 25 Aug 2026 03:59PM UTC
Jobs 1
Files 79
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 Aug 2026 03:39PM UTC coverage: 34.487% (+0.8%) from 33.682%
b2dac54b93142d0aaf6ac1b989c519c43a5fd0f6

push

github

amacgregor
Fix P3 and P4 SEO findings, and the track-copy drift

Heading hierarchy. The four track names came out of the track component as h2,
level with the h2 introducing the section holding them, so /services was a flat
run of eight siblings under one h1. They are h3 now, and a test walks the
rendered levels and fails on any skip.

Section headings. "Start here — pick your situation", "How I work" and
"Questions" matched no query anyone runs. They now name what they cover, which
also lifts "fractional" from 3 occurrences in the visible body to 6 without
anyone stuffing anything.

Track copy. The four descriptions were maintained in services.html.heex and
again in json_ld.ex, and had already drifted: the Lead track read differently in
each, so the structured data described an offering the page did not. Both render
from Amgr.Services.tracks/0, and a test asserts the OfferCatalog description is
the same string the page shows.

The site entity. Tag pages have declared isPartOf https://allanmacgregor.com/#website
since they were built, and no node ever defined it. website_node/0 defines it and
rides in the graph of every page that emits one. Because / redirects to /posts
there is no homepage to hang it on, and /posts itself carried no structured data
at all despite being where every crawler lands — it now describes itself as a
Blog belonging to that site.

Sitemap. Google ignores priority and changefreq and reads lastmod, which only
posts had. Index pages take the date of their newest item and tag pages the date
of their newest tagged item, both real signals. The six hand-written pages take a
date from a map in the controller that has to be bumped by hand: the markup is
compiled into the release, and file mtime inside a Docker build is the build
date, so deriving it would claim every page changed on every deploy. All 161
urls carry one, and a test rejects any date in the future.

Item 12, publishing a price, stays open. It is a business decision, and acting on
it... (continued)

35 of 36 new or added lines in 5 files covered. (97.22%)

1 existing line in 1 file now uncovered.

568 of 1647 relevant lines covered (34.49%)

352.25 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
95.24
-4.76% lib/amgr_web/controllers/sitemap_controller.ex

Coverage Regressions

Lines Coverage ∆ File
1
65.22
2.72% lib/amgr_web/seo/json_ld.ex
Jobs
ID Job ID Ran Files Coverage
1 b2dac54b93142d0aaf6ac1b989c519c43a5fd0f6.1 25 Aug 2026 03:59PM UTC 79
34.49
GitHub Action Run
Source Files on build b2dac54b93142d0aaf6ac1b989c519c43a5fd0f6
  • Tree
  • List 79
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • b2dac54b on github
  • Prev Build on main (#0E69E694...)
  • Next Build on main (#65038715...)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc