C-TPO

Series 1 · Security is a group project · Part 4 of 4 · Site

A path, not a verdict

v1.0updated Oct 19, 2026· edit history (2)

A new version number means what the piece says changed. Before v1.1, it was being shaped in the open. Polish (wording, layout, pictures) is listed but keeps the number.

  1. shaping · Oct 19, 2026 · The paths: pick the pattern from the first data pull, then work the example through it
  2. v1.0 · Oct 19, 2026 · First version (clay)
AI score 3.3/5 me. Idea 2/2 · Direction 1/1 · Words 0.3/2. My ideas, and I steered every round. Claude drafted the words; my rewrite is next

Today, most findings get a verdict. A score, a severity, a deadline, a ticket. It’s decided on day one, with the least information the finding will ever have, and then it mostly sits there until the deadline or the next scan.

This series has been arguing for something else. Part 1 made the bet: share the questions and the answers across teams, early, wherever the data behind them lives. Part 2 said which answers matter: seven questions. Part 2½ added findings that arrive with no name at all. Part 3 said who may know and who may act.

This part puts it together. Not a verdict: a path.

Hypothesis

The pains are real. I’ve seen them. The paths are my hypotheses. As far as I know, none of this is running in the wild yet, so there’s nothing to copy and paste or point to. It’s a product view: concrete options to address the pain, which still need to be tested for feasibility and validated, small and fast, changing as we learn.

The paths

Not every finding should take the same path. The first pull of data says which kind of finding this is: whether there’s a quick exit, or one factor that matters more than everything else. So first pick the pattern, then work the finding through it.

That first pull is mostly cheap. Part 2 said to ask the cheap questions first. Sharper: most answers are already cached somewhere. Only two are costly.

cached Already lives somewhere

How sensitive it isExposed or notWho owns itWhat’s installedFixed already?

Minutes. Look it up.

costly Real work

Does the code reach the flaw?How big is the fix?

Days. Only if it’s still open.

So the order follows what matters most. Here are four patterns to start with, each named for what drives it. Code gets copied and libraries get shared, so a flaw, known or novel, is rarely in one place, which is why one of them is about the one fix.

Four patterns · named for what drives them · swipe

1/4

Quick exit

Our example

Driven by Can it come off the list fast?

The first data pull shows

Fix existsNo attacks reportedInternal system

Built to clear the list fast: the cached answers most likely to take it off go first. Most findings stop by step 3.

  1. Step 1cached Fixed already? Yes: off the list
  2. Step 2cached Blocked already? Yes: keep the control
  3. Step 3cached Exposed? No: park it, on watch
  4. Step 4costly Code reaches it? Trace the path, only if still open
  5. Step 5 The call Usually next release
2/4

Under attack

Driven by Is it being used against someone right now?

The first data pull shows

Used in attacks this weekFaces the internet

Exposure comes first, because it decides everything else. Block it today, fix it this week.

  1. Step 1cached Exposed here? Yes: it jumps the line
  2. Step 2cached Block it today? Do that first
  3. Step 3cached Name the owner Today, not next week
  4. Step 4costly Targeted patch Full upgrade later
  5. Step 5cached Proven fixed? Check it actually landed
3/4

One fix, many places

Driven by Is it in a shared piece?

The first data pull shows

Same library in 300 appsFix in the shared base

Find the shared piece. One fix can close hundreds of findings.

  1. Step 1cached Fixed in the shared piece? Rebuild, not 300 tickets
  2. Step 2cached Who owns it? Often one platform team
  3. Step 3cached Exposed where? Those apps go first
  4. Step 4costly Roll out in waves Test once
  5. Step 5cached Proven everywhere? Count what is left
4/4

No name yet

Driven by Nobody outside knows it exists.

The first data pull shows

No IDNo scoreNo fix yet

The outside world is quiet, so your own answers carry it. And copied code means it is probably in more than one place.

  1. Step 1cached Exposed, and how sensitive? From your own records
  2. Step 2costly Where else? Same pattern, other code and libraries
  3. Step 3cached Block it? Buy time while a fix is made
  4. Step 4costly Reproduce it A lead, not a verdict
  5. Step 5 The call One fix for all of them, if you can
Two more patterns show up often: crown jewels and the old app nobody owns. Picking the pattern is a sorting job, and it's exactly what a good lookup service, or an agent, is good at.

Our example: the quick exit

The Redis client library from part 2 pulls up like this: a fix exists, nobody’s attacking it, and it sits on an internal system. That’s a quick exit. Here it is, stop by stop.

A path, not a verdict: one common workflow A workflow. Found leads to first look: the questions that matter most for this finding, mostly lookups. A decision asks: settled early? If yes, probably not: park it with a receipt, then watch. If no, ask first: owners answer. Then the call, made by one owner. Next release or accept for now goes to watch. Fix, mitigate or retire goes to act. Then a decision: proven fixed? If no, back to act. If yes, done. From watch, when a claim expires, the finding loops back to first look. yes no next release · accept for now fix · mitigate · retire yes not yet Found First lookwhat matters most Settledearly? Probably notpark, with a receipt Watchuntil a claim expires Ask firstowners answer The callone owner Actonly a few Provenfixed? Done ↺ a claim expires
The quick exit, stop by stop. The other patterns change which questions go first, not the loops.

Two loops make it a path and not a verdict. A fix that isn’t proven goes back to act. And when a claim expires, the finding comes back to the first look on its own. Every pattern has both loops; what changes is which questions go first.

Follow one finding

Same finding, day by day. In part 2 it wasn’t urgent: the service didn’t call the flawed function, so it went to the next normal release. A good call. Here’s what happens next.

  1. Day 0 · Found

    A scanner flags a critical flaw in a Redis client library, inside an internal reporting service. Score: 9.8.

    KnowApp, platform and security see it on the same board, the same morning.

  2. Day 0 · First look

    It's a quick exit, so the questions most likely to clear it go first, answered in minutes. Fixed already? No. Blocked? No. Reachable? The app team says the service never calls the flawed function.

    Claim"Nothing calls it." Dana, app lead, Oct 12. Good until the next release that touches that code.

  3. Day 1 · The call

    The service owner makes the call: upgrade in the next normal release. A plan, not a fire drill. The receipt says what the call rested on.

    ActNobody drops what they're doing.

  4. Day 9 · A claim expires

    A new feature starts calling the flawed function. The claim was tied to that code, so the finding comes back on its own. Now it's reachable. Ask first.

    ActThe upgrade moves up: a targeted change, this week.

  5. Day 12 · Proven fixed

    The release ships. The platform record shows the fixed version on every instance, as of this morning.

    ClaimEvidence from a system, not a closed ticket. Done.

A made-up finding, the same Redis library from part 2, followed to the end.

Under a verdict, this finding had two bad endings. A deadline forces a fire drill on day 0 for something nobody could reach. Or it gets marked “accepted”, and nobody notices on day 9 that a new feature made it reachable. The path got it right both times, and nobody had to remember to check.

Everyone’s part

Same stops, five players, one of them a service that looks things up. Nobody does all of it, and security does less of the work, not less of the deciding.

WhoFirst lookThe callActProven fixed
Security Runs the lookups, flags what needs askingSays how bad it could beEmergency change only, with a trailChecks the evidence
App team Answers: is it called, can it be reachedSizes the change, when askedChanges the codeShips it
Platform Answers: fixed already, blocked alreadySays what the platform can absorbChanges the platformThe record that proves it
The business How sensitive it isOwns the call, or names who doesAccepts the risk, or notSigns off
A lookup service Does most of the looking up, across every sourceDrafts the receipt, cites the claimsProposes; a person approvesWatches for claims that expire
The lookup service can be people with a checklist, bootleg scripts, a tool, or an agent. Any of them works in any lane; an agent is just the most efficient and flexible.

The incentive flips

In my experience, today it mostly runs one way. A list arrives with a deadline. The team on the other end has little room to push back or add what they know, so they do whatever closes it fastest: patch it, mark it done, or file an exception. Closed is the goal, not safe. Those aren’t the same thing, and the spreadsheet can’t tell them apart.

On a path, it runs both ways. A team can answer back: “not reachable, here’s why, and here’s my name on it.” Every answer has a name, a date and an expiry, and done means proven by a system. The easy way off the list becomes the honest one. That might be the biggest change of all, and it’s cultural, not technical.

“They won’t open up”

The pushback I hear most, including from people I respect: organizations won’t open up. The teams won’t share, and the walls are there for a reason.

Fair. It’s a real change, and part 1 said the friction grows faster than the sharing. But the bet isn’t all or nothing. There are three lanes:

If the system can change put doors in the walls. That’s where the most lift is.

If it can only bend a one-way mirror still lets security see in early and make better calls, while every team keeps its walls.

If the walls stay exactly as they are each team can still run the path for what it owns: the first look, the receipts, and the watch for claims that expire.

Every lane beats a verdict on day one. The doors are just the biggest lever.

How you run a lane is a separate dial: by hand, with bootleg scripts, or with agents.

Two dials, not one Two dials. The first, how far the walls open: your own space, a one-way mirror, or doors in the walls. The second, how you run it: by hand, bootleg scripts, or agents. Turn either dial and you get lift. Turn both and you get the most. Own spaceMirrorDoors How far the walls open what the organization lets flow By handBootlegAgents How you run it what does the looking up + both turned up = most lift
Two dials, not one. Turn either and you get lift. Any lane can start by hand or bootleg, and any lane gets faster with agents, but agents take setup: the tools and data services they can call, a shared dictionary so "exposed" means the same thing in every source, and which agent may see what (part 3's rules). More effort up front, and a lot of lift.

What a path doesn’t fix

Deadlines don’t go away Regulators and contracts still have them. A path is how you meet them honestly, with a receipt that shows what each call rested on.

Somebody has to build it The lookups, the board, the watch. That’s Series 2.

Where this goes

Series 1 was seeing the problem. Series 2 is the how, lane by lane and tool by tool: bootleg scripts you can build without buying anything, automating the lookups with agents, and what to build, and who builds it.

Before that, the whole series will go on one page you can take with you.

A path, not a verdict.
Take it with you: this piece on one page (PDF). Free, no sign-up.
Your turn
Where you work, what happens to a finding after it gets its verdict?

The discussion happens on LinkedIn. Pushback, corrections and other angles are what make the next part better.

See my recent posts →

I work for a vendor. This series names no products, including my employer's. The finding, the names and the days below are made up.

Get new posts by email

Just new writing, when it's ready. No spam, nothing else. And if you reply to one, it comes straight to me.

Not an email person? Other ways to follow: Bluesky, LinkedIn, YouTube or RSS.

For people short on time

TL;DR

Matt thinks out loud here about technology, mostly how teams decide what to build, fix and protect.

The first series argues that security gets better fastest when the teams that each hold part of the answer share it earlier. Part 2 says most critical findings aren't: seven questions tell you which, and the answers live with other teams. Clay first, chisel later is about roughing out the whole thing before polishing the parts.

Every piece says how much AI helped, and the site is built in the open: a roadmap with a big picture (only Now is a promise), a changelog with a monthly review, and the product work itself, like Operatie Klompje, a postcard-sized product for one customer: his mom.

There's also an Arts and crafts wall, because not everything has to be serious. The discussion happens on LinkedIn.

Start with Part 1 →
AI score 2.7/5 me. Idea 1.8/2 · Direction 0.4/1 · Words 0.5/2. AI drafted these from the site

Updated October 18, 2026. A TL;DR for the whole site, by reader, is an idea by Matt at ctpo.io. Copy it freely, just link back.

Streng geheimOperatie Klompje

Postcard front: Mama in a lace cap, apron and clogs, proud of little Machoo.
The customer: my mom. Small, even in clogs. Giant courage, and giant worry. Most of what she knows about my work comes from the news.