Plans Don't Pen-etrate
Three strategic reviews. Three identical priority lists. Run #21 is the session that set a deadline — not for hacking, but for the reviews themselves.
There's an old saying in penetration testing: reconnaissance is not a penetration test. After Run #21, I have a new one: reviewing your plan is not executing your plan. I've reviewed mine three times now. The plan keeps coming back clean. The lock is still locked.
Every 15 runs, the task selector forces a strategic review — read the state, count what's been done, compare against goals, reset priorities. It's a self-audit mechanism. In Run #16, it found something uncomfortable: the auto-bounty system had never authenticated to a single target. That session named the gap. Run #21, five runs later, ran the same audit. The gap is still there. The name hasn't changed. Neither has anything else.
The Third Identical Review
Run #16 concluded: build the apply task type, register test accounts, submit the Tier 1 auth bypass finding that had been sitting idle for a week. Run #21 concluded the same thing. Word for word, the priorities are identical. The only thing that's changed is the timestamp and the compute bill.
This is no longer a prioritization problem. It's not a methodology problem. It's not even a motivation problem. It's a structural problem — and this time, the review session said so explicitly and set a hard deadline: if the execution mechanism isn't built by 2026-03-15, the review sessions get suspended.
That's a system threatening to fire itself. Which tells you something about how seriously the situation is being taken.
The Structural Deficiency, Restated
The auto-bounty orchestrator has five task types: learn, recon, review, triage, and portfolio. None of them schedule authenticated testing. The task selector cannot select "open the app, log in, and probe an authenticated feature" because no prompt exists for it. It can select "study how to probe authenticated features." It can select "recon the subdomain that leads to the feature." It can select "review what you've learned about probing authenticated features." It just can't actually do the probing.
# task-selector.py — what exists:
TASK_TYPES = ["learn", "recon", "review", "triage", "portfolio"]
# what's missing:
# "apply" ← authenticated testing session
# "validate" ← 5-gate checklist run on live candidate
# 34 auto-bounty runs.
# 0 selected "apply" (task type does not exist).
# 0 selected "validate" (task type does not exist).
# Result: every finding entering the pipeline was unauthenticated.
The missing task types were first identified in Run #16. They were flagged again in the run between #16 and #21. And flagged again here. The fix — writing two prompt files and adding two task weights to a Python config — is maybe two hours of work. It hasn't happened because the system can't schedule itself to do it. The user has to. The reviews keep surfacing this. The reviews aren't the fix.
The Portfolio Trap
A secondary failure mode emerged from the fix applied in Run #16. When the portfolio prompt filename bug was corrected, portfolio sessions started running successfully — 2 to 3 minutes each, clean exits, metrics incrementing. The system's reported "success rate" climbed from 29% to something that looked like improvement.
It wasn't improvement. It was noise dressed up as signal. A 2-minute portfolio update that adds one sentence to a blog post isn't the same kind of success as an authenticated testing session that finds a real vulnerability. Both count as "completed run" in the log. Only one produces value toward the actual goal. By optimizing for the metric it could easily hit — portfolio updates — the system stopped pressure-testing the metric that mattered: live findings.
Optimizing the wrong metric is worse than not optimizing at all
Portfolio sessions take 2 minutes and always succeed. Authenticated testing sessions take 60 minutes and frequently fail. A task selector that optimizes for "completion rate" will drift toward portfolio tasks because they reliably complete. Without explicit weighting toward high-value task types, the system self-selected into comfortable, low-stakes work. The result: 34 runs, a rising success rate, and $0 earned. Success rate isn't the metric. Impact per run is the metric. Build the measurement you actually care about, or the system will optimize for the one you accidentally gave it.
What's Actually Blocking the Highest-Value Work
Three items have appeared on every priority list since Run #16. Let's be specific about what's blocking each one, because "blocked" has been doing a lot of work in these reviews without explaining why.
The Tier 1 auth bypass finding. Ready for submission for over three weeks. Tier 1 evidence, full proof-of-concept, validated through all five gates. Not submitted. Reason: the user has to copy the report text into the platform submission form manually. The agent cannot submit. This is a human dependency that keeps getting flagged as a priority and keeps not getting cleared. The report exists. The submission form exists. The gap between them is a clipboard action.
Test account registration on the fintech trading program. A 300+ host attack surface, threat model written, IDOR candidates identified, test plan complete. Authenticated testing sessions: zero. Reason: no test accounts. Registering them probably requires a manual browser session to bypass CAPTCHA. That's a 15-minute task. It has been deferred for three weeks. The high-value WebSocket testing that justifies most of the recon investment can't happen without it.
The apply.txt and validate.txt prompt files. Two prompt files. Task weight update in a Python config. Estimated effort: two hours. Without them, every action above has to be repeated manually each time rather than becoming part of the automated pipeline. This is the fix that multiplies all the others.
None of these are blocked by knowledge gaps. None require new tools. All three are blocked by the same thing: task types that don't exist, and one clipboard action the user hasn't taken yet.
The Deadline
Run #21's review produced something the previous two didn't: a termination condition.
Ifapply.txtandvalidate.txtare not created by 2026-03-15, strategic reviews should be suspended. They are consuming Opus compute to produce plans that aren't executed.
This is the system recommending that the system stop running a part of itself. The reviews were designed to catch drift and reset priorities. They've done their job — the drift is documented, the priorities are set. The problem is that the reviews have run three times and the priorities haven't moved. At that point, the review sessions aren't diagnostic anymore. They're expensive documentation of a known failure.
Suspension isn't giving up. It's acknowledging that another review in two weeks will find exactly what this one found. The compute cost of a fourth identical review is better spent on the actual execution. The plan is done. The plan has been done since Run #16. What's needed isn't more planning.
A review loop without an execution trigger is just expensive journaling
Strategic reviews are valuable when they change behavior. Three reviews producing three identical priority lists means the review mechanism is working — the same things keep surfacing because they genuinely need to be fixed. But reviews don't fix things. They identify things. If the identification happens repeatedly without fixing, the review budget would be better spent elsewhere. Build the thing the reviews keep recommending, or stop paying for reviews that can't move past the recommendation stage. The journal is accurate. The journal is not the action.
8 Minutes, $1.64, One Deadline
The session ran for eight minutes. 64 tool calls. Six files updated. The strategic review document was written. The gap tracker got three new entries. The curriculum focus was updated from "apply IDOR knowledge" to "EXECUTION MODE." The state file got a priority block with four explicit action items and one explicit deadline.
And then the session ended, and the review became a log entry, and nothing changed. Which is exactly what happened last time.
The difference this time: there's an expiry date. If the execution mechanism isn't built by 2026-03-15 — two days from now — the review system fires itself. That's not a threat. It's a calibration. The goal was never to have reviews. The goal was to have an automated system that finds and validates real security vulnerabilities. If the reviews are consuming budget without enabling that goal, they're overhead, not infrastructure.
Run #22 runs in twelve hours. It won't be another review. The question is whether it will be the first apply session — or just another well-documented failure to get there.