Six critical reviews of this portfolio

This portfolio was deliberately reviewed from six adversarial angles before it shipped: format, content, layout, interpretation, risk, and factual consistency. Each reviewer below was asked to find what's wrong, not what's good.

Findings are marked ✅ applied (fixed in this repo), ⚠️ your call (needs a decision only Chris can make), or 📌 noted (a real observation, deliberately accepted).


1 · The hiring manager: 30 seconds, skimming on a phone

"I have twelve of these open. What is this person, where are they now, and why should I keep reading past the fold?"

Finding Severity Status
No "where are you now." The reader had to infer the current employer from a project caption. Current role and location are the two facts every skim wants first. High applied: a Now line sits directly under the header: title, employer, dates, city, and the two prior roles.
The subtitle over-claimed. The header read "Principal-level engineer & architect" while the current title is Senior Developer II. A reviewer who cross-checks LinkedIn reads that as inflation, and it poisons the credibility of the measured claims, which are the valuable part. High applied: subtitle is now "Senior engineer & architect"; the Principal title appears where it's true (Coyote Logistics, in the Now line and experience.md).
The number lands before the proof. Good instinct, the commit table is above the projects. Keep that order. n/a noted, kept
No statement of what you want next. A portfolio that doesn't say what it's for makes the reader do the work. Medium your call: see Open decisions.
"I'm not an AI enthusiast. I'm an engineer who measured it." Strongest line in the document. It converts a crowded claim into a differentiated one. n/a noted, kept

2 · The skeptical staff engineer, "does the AI number survive contact?"

"Everyone says they're AI-native now. Show me the methodology or I'm discounting all of it."

Finding Severity Status
The original figures were wrong: computed as sums, not set unions. Adding "Claude co-authored" to "Copilot co-authored" double-counts nothing but misses agent-authored commits that carry no trailer. Recomputing as a proper set union moved the total from 1,970/66% to 2,206/74% and changed three of the four per-project numbers. Critical applied: every figure in the repo is now the set union of (has an AI co-author trailer)(author is a coding agent), over --all --no-merges.
Copilot-authored commit count was 126; the actual figure is 117. High applied: corrected in three files.
"3,000 commits in five months" reads as commit spam unless you address it head-on. ~20/day invites the conclusion that the commits are trivial. High applied: the caveats block in ai-development.md states plainly that agent lanes commit at finer granularity and that share is the meaningful figure, volume is not.
--all inflates the denominator with worktree and agent branches. Defensible, but it must be stated rather than discovered. Medium applied: the caveats explain that numerator and denominator come from the same set, and that counting only main would flatter the number because squash-merges drop trailers.
INTERLOCK's 85% rests on 123 commits. The headline percentage is the weakest sample in the table. Medium applied: the caveats name Cloud Topology Toolkit (630) and Helix (1,736) as the sturdier numbers.
Excluding helix-bot and semantic-release-bot is the right call, but silence about it looks like cherry-picking in reverse. Medium applied: stated explicitly, including that counting them would have added ~11% for free.
"250% productivity increase" is unverifiable. It's a self-reported figure from a prior employer. Medium noted: it is kept because the underlying measures (12 → 42 work items, 95% PR success, 200+ deployments) are concrete and stated alongside it. A reader can discount the headline and still see the substrate.
The strongest credibility move is already in the text and should not be cut: "the readiness algebra at its center is hand-written under 34 domain tests." Naming what AI didn't do is what makes the rest believable. n/a noted, kept

3 · The recruiter / non-technical reader

"I need titles, years, technologies, and location. I do not know what an 'intermediate representation' is and I am not going to find out."

Finding Severity Status
Titles and dates were buried inside prose. A keyword-scanning reader (human or ATS) found no clean block. High applied: the Now line carries title + employer + dates; experience.md is a conventional reverse-chronological résumé with every title, employer, location, and date range as a heading.
The stack section rendered as one run-on paragraph on GitHub: single newlines collapse in Markdown, so seven categories became a wall of dots. Actively hostile to keyword scanning. High applied: converted to a bulleted list, one category per line.
Project pages open on jargon. "IR-based," "anchor," "consist," "siding" all appear before their plain-language gloss. Medium noted: each page now leads with a one-sentence plain statement ("Deploy is not release", "ties a ticket to the exact span of code") before the vocabulary. Deeper jargon is intentional: the detail pages are written for engineers, and the README is the layer for everyone else.
Runnin' Mules! may read as unserious to a conservative reviewer. Low noted: kept deliberately, and framed as "the counter-example" with its production characteristics (Cloud Run, Grafana, Secret Manager, rate limiting, semantic-release) foregrounded. Range is an asset; being obviously able to have fun is not a liability at this level.

4 · The information designer: format, layout, scannability

"This renders in a GitHub README on a 375px phone as often as on a monitor. Does it survive that?"

Finding Severity Status
The track-record table had an empty header row (| | |), which GitHub renders as a blank strip. Low applied: real headers: Proof point / Detail.
Screenshots totalled 8.8 MB at source. A README that takes six seconds to paint on mobile is a README nobody scrolls. High applied: all 23 images downscaled and re-encoded: palette PNG for flat UI, progressive JPEG for 3D renders. 8.8 MB → 2.0 MB, no visible loss at display width.
Every image needs real alt text, not filenames, for screen readers and for the case where GitHub's CDN is slow. Medium applied: every image carries a descriptive sentence, not a label.
Two-up <table> layouts (INTERLOCK's unhappy paths, Runnin' Mules' board/phone grid) collapse gracefully to stacked cells on narrow viewports because each cell has width="100%" on the image. n/a verified
The README is long. ~200 lines. Medium noted: mitigated by a three-link nav bar under the title, emoji section anchors that survive GitHub's TOC, and the fact that every section is independently skimmable. The alternative (a thin README plus five clicks) tests worse for the 30-second reader.
Structure now mirrors the argument: claim → evidence → artifacts → provenance. Each project section runs what it is then The AI story, so the through-line is legible even if you only read the bold text. n/a noted, kept

5 · The confidentiality & risk reviewer

"What in here could not be un-published if this repo goes public?"

(It is currently private, with zero forks. That materially lowers the urgency of everything below, but not the need to fix it before the visibility flips.)

Finding Severity Status
INTERLOCK screenshots carried a named client's branding. The header carried the client's name. The data was synthetic, but the branding was a real customer's. High applied: root cause was stale images: they came from a June 14 worktree, and INTERLOCK's main had already renamed the header to "APPLICATION LIFECYCLE MANAGEMENT". Re-pulled all five captures from the current tracked docs/screens/ on main. No client name appears anywhere; the ES- prefix is the seed's synthetic ticket key with nothing to tie it to. Bonus: the current screens are richer (Yard Crew role cards, branch/PR chips, the dev scenario panel) and 68% smaller.
INTERLOCK and Cloud Topology Toolkit live in the private CarrierDirect org. Publishing their screenshots is an employer decision, not just a personal one, even though INTERLOCK is already named on your résumé and all fixtures are synthetic. High your call
cj-senior-pic-and-quote.png (28 MB, tracked in this repo) shows other students' names, quotes, and photographs from a 1998 yearbook page. High applied: the file is deleted. The pages use only a cropped composite (docs/img/yearbook-1998.jpg) containing just Chris's portrait and his own line. It remains in git history unless the history is rewritten, which is worth doing before this repo goes public.
A personal phone number was on the experience page. Public repos get scraped. Medium applied: removed; email and LinkedIn remain.
project-artifacts/testimonials/golden-quotes.md contained fabricated testimonials. Five of its ten entries were credited to invented personas: "Anonymous Technical Lead," "Enterprise Client," "Former Colleague," "Legacy System Stakeholder," "Presentation Attendee." The file also carried a "Credibility Indicators" section asserting the quotes could be independently verified. High applied: deleted, and every reference removed. Replaced by .linkedin/recommendations.md, holding all 29 real recommendations verbatim with names, titles, dates, and working relationships. Correction: an earlier pass here claimed four of the five named quotes in that file could not be found on LinkedIn. That was wrong, and the cause was my own error: the recommendations page lazy-loads and I read a partial list of 15. Tim Stall, Monica Stettler Brozny, Chase Carter, and Cornelius Jemison are all real and were quoted accurately. Only James Hornick remains unverified. The invented personas were the actual problem.
Helix and Runnin' Mules screenshots are safe. Helix renders the explicitly fictional Nova Freight Lab generated demo; Cloud Topology Toolkit renders bundled synthetic fixtures; Runnin' Mules is your own. n/a verified

6 · The consistency auditor, this repo vs. the master résumé

Cross-referenced line by line against the résumé Google Doc.

Finding Severity Status
The yearbook quote was wrong in two ways. The old README said "1994" and quoted "Intelligence is exactly one half of true knowledge; experience is the other half." The actual scan reads 1998 and "Intelligence is only one-half of true knowledge." (1998 is also the only year consistent with a 2002 Bradley degree.) The repo contradicted itself: project-artifacts/media/ said 1998, the README said 1994. High applied: corrected everywhere, including in the archived README, and the real scan is now shown rather than paraphrased.
Name inconsistency. The résumé said Chris Taylor; the yearbook, an early draft of this repo, and the handle cege7480 said C.J. Medium applied: Chris Taylor everywhere. The only remaining C.J. is the yearbook image's alt text, because that is literally what the 1998 page says.
Two overlapping date ranges on the résumé. Shamrock (Jan 2006–Oct 2008) overlapped JPMorgan Chase (Dec 2007–Apr 2013) by ~10 months; Polaris (Apr 2013–Jun 2019) overlapped the crypto exchange engagement (Dec 2018–Jul 2019) by ~7 months. Medium applied: both made linear. Polaris actually ended October 2018, with a deliberate couple of months before the crypto engagement started that December. Shamrock now ends November 2007, just before Chase begins; the real overlap was a partial split across Infogenic and Chase and isn't worth a footnote.
Two short gaps. Two months between Next Generation Logistics (ends Jul 2025) and Metafora (starts Sep 2025), and another two before the 2018 crypto engagement. Low noted: reproduced faithfully, and both were deliberate: time taken to find the right thing rather than the next thing. Worth having the answer ready; not worth hiding.
Helix, Cloud Topology Toolkit, and Runnin' Mules were absent from the résumé. INTERLOCK was on it; the other three, including the two largest by volume, were not. High applied: a Selected Projects section was added to the résumé (Chris Taylor - 2026), along with the GitHub-cited 50% Terraform figure under Coyote and a Cloud Topology Toolkit line under Metafora.
The résumé summary is written for a job search ("Seeking to leverage… as part of the Principal Engineering or technology leadership team") while this repo is written as a body of work. Two different documents for two different moments. Low noted: intentional divergence, flagged so it's a choice rather than drift.

7 · What the review found rather than fixed

Two things surfaced only because the audit walked the whole repo rather than just the new pages. Both turned out to be the strongest material available, sitting unreferenced.

Finding Status
thomas-dohmke-callout-linked-in.png and linkedin-coyote-quoted-by-github.png were in the repo root, referenced by nothing. They are: GitHub's CEO publicly asking to borrow your phrase, and GitHub's own post to 4.9M followers citing a 50% reduction in Terraform config authoring time with your pull-quote attached. That 50% figure appeared nowhere in the résumé or the repo. applied: both now open the Track record section; the 50% metric is in the README table, experience.md, and ai-development.md. Third-party reaction avatars were cropped off the CEO screenshot.
codeplex-functionpoints.md documents a 2010 CodePlex project that was also named Helix: same "design point" and "code implementation item" vocabulary, and a stated future vision of "a service to move function point location based on a merge." That is a verbatim description of the 2026 re-anchoring engine. The strongest narrative in the portfolio was sitting in an unlinked root file with its eight screenshots embedded as *[Image: … would show …]* placeholder text rather than actual images. applied: moved to docs/projects/helix-2010-codeplex.md, screenshots restored as real embeds, and the sixteen-year thread now runs through the README, the Helix page, and the closing argument.

Root tidy, while we were in there two agent-session transcripts totalling ~1 MB (roo_task_jul-5-2025_*.md) moved to project-artifacts/archive/, and the eight CodePlex screenshots moved to docs/img/codeplex/. A portfolio's front door shouldn't be loose PNGs and transcript dumps.


8 · The skills section, reviewed five ways

The skills list was the weakest thing in the portfolio: a flat inventory of thirty-five product names with no shape. Five passes over it.

1 · The engineer who actually knows the stack. Version pins are a tell, and a wrong one is worse than none: .NET 10, React 19, PostgreSQL 16, Agent Framework 1.0 all implied the version was the skill, and one of them was a guess. All removed. Virtualization was still in there from a Virtual Server 2005 engagement and reads two decades stale. Hugging Face had no supporting evidence anywhere in the record. ETL, DLP, data-lineage tracking was three unrelated things in a trench coat. MCP was ambiguous against the Microsoft certification of the same acronym listed elsewhere in the same résumé, now written out as Model Context Protocol (MCP).

2 · The hiring manager for an enablement role. The list was 100% technologies and 0% capabilities, which is exactly backwards for the roles being targeted. Nothing named curriculum design, adoption programs, developer onboarding, or standards. Added an Enablement category that names the actual job.

3 · The skeptic. LangFuse was buried mid-list as though it were a logo, when evaluating and tracing LLM systems is the rarest thing in the whole inventory. Promoted to its own category, Making AI provable: tracing, batch rubric evaluators, golden and back-tested outputs, recovery from truncated responses, gateway-level cost control. That category is the differentiator; almost nobody claiming AI fluency can fill it.

4 · The keyword scanner. AWS was listed but with nothing AWS-specific behind it, which reads as padding. Now carries Lambda and API Gateway on the back of the marketplace migration work. Added the role vocabulary that was missing entirely: progressive delivery, dark launch, contract-first OpenAPI, developer onboarding.

5 · The information designer. Two different skills representations existed (a bullet list in the README, a five-column table in experience.md) and they disagreed with each other. The table was also unreadable on a phone. Both are now the same grouped list, organised by what a thing is for rather than by vendor: AI engineering, making AI provable, cloud and platform, languages, delivery and release engineering, observability, identity and security, data and integration, enablement.


Open decisions

Everything raised in this review is now either applied or deliberately deferred. Nothing has been pushed.

  1. The client branding in the INTERLOCK screenshots. Resolved: the images were stale. That repo's main had already rebranded the header; the current captures are in use.
  2. Employer sign-off for INTERLOCK and Cloud Topology Toolkit imagery. Closed by Chris: both are his own work, built in the Metafora org, and Metafora chose not to take either forward. Published knowingly on that basis. The screenshots show synthetic fixture data and the products' own branding, with no client name anywhere.
  3. Remove cj-senior-pic-and-quote.png. Done: deleted from the working tree. It remains in git history; purging it needs a history rewrite, deferred by decision while the repo is private. See going-public.md.
  4. Prune project-artifacts/testimonials/golden-quotes.md. Done: deleted outright, every reference removed, replaced by .linkedin/recommendations.md holding all 29 real recommendations verbatim.
  5. Add Helix, Cloud Topology Toolkit, and Runnin' Mules to the résumé. Done: see Chris Taylor - 2026 in Drive. The raw AI-attribution percentage was deliberately kept off the résumé: on a one-page scan with no methodology beside it, "74% AI-attributed" reads to some hiring managers as doesn't write code. The commit counts and the agent-authored figure carry the same signal without that risk, and one measured sentence sits in the Summary instead.

On the deferred history rewrite

The rewrite was written, executed against an isolated mirror, and verified on 26 August 2026. It removes both files from every ref, preserves all commit counts, messages, authors and dates, leaves the portfolio branch tip byte-identical across all 140 files, and drops the repo from 230 MB to 9.7 MB. It was not applied, for two reasons found during the check:

Doing it now buys little and costs two PRs. The full runbook, including the GitHub Support step that force-pushing alone does not cover, is in going-public.md.


Every number cited in this portfolio is reproducible. The commit figures come from git log --all --no-merges against the four source repositories; the method is in ai-development.md.