You are reading the proj-bolero repository (root = current directory), the host of a sealed multi-stage research harness. Task: an independent root-cause diagnosis of the d3_executor stage's recurring failures, and an architectural proposal — which LAYER should own each failure class — for the operator, who has just stopped a prompt-optimization campaign because editing the executor's prompt text stopped paying off. You are one of two independent readers; do not assume the other reader's conclusions.

READ FIRST (all paths repo-relative; all exist):
- evaluation/meta-harness/PLAN.md — the campaign record: Phase B (ten rounds adding rules, R1–R10, prompt 1,850→5,166 words) and Phase C (two "lean" rounds cutting words: c1 lost 4–0 to the initial prompt, c2 split 3–4 across judge families). Read "## Phase C design", the C-R1 and C-R2 sections, and skim Phase B rounds R7–R10.
- evaluation/meta-harness/complaints-ledger.md — per-round complaint/finding ledger with class tags.
- evaluation/meta-harness/outputs/2026-08-29/22-07-c-judge-c1-executor/ROUND-FINDINGS.md — blind-judge findings for C-R1 (cand = shortened prompt, base = initial 490d50f).
- evaluation/meta-harness/outputs/2026-08-29/23-24-c-judge-c2-executor/ROUND-FINDINGS.md — the same for C-R2.
- evaluation/meta-harness/outputs/2026-08-29/21-12-c-judge-c0-executor-AA/ROUND-TABLE.md — an A/A control (identical prompts) that judges scored 2–0: the noise floor.
- bolero-harness/bolero/prompts/d3_executor.md — the executor prompt as restored to 490d50f (5,166 words).
- bolero-harness/bolero/prompts/system.md and bolero-harness/bolero/prompts/d3_reviewer.md — the shared doctrine and the downstream consumer of the executor's result.
- bolero-harness/bolero/stages/d3_executor/.bolero/hooks/stop-gate.py — the entire mechanical stop gate (26 lines: result.md format only).
- bolero-harness/bolero/stages/d3_executor/.bolero/skills/execute-research-plan/scripts/execution_runner.py — the governed runner (what it records: certificate.json, evidence-manifest.json with declared grain, run.log).
- bolero-harness/bolero/stages/d3_executor/.bolero/skills/execute-research-plan/SKILL.md, bolero-harness/bolero/stages/d3_executor/.bolero/skills/choose-implementation/SKILL.md (6,541 words), bolero-harness/bolero/stages/d3_executor/.bolero/agents/executor-coder.md, bolero-harness/bolero/stages/d3_executor/.bolero/agents/governed-runner.md — the executor's current sub-agents and skills. Total instruction text the executor can see ≈ 14,200 words.
- bolero-harness/bolero/schema/result.py — the result contract the gate checks.
- evaluation/meta-harness/phase-c/PAIR-BRIEF-executor.md — the judge brief (dimensions D1 fidelity / D2 evidence / D3 reporting / D4 efficiency).
Do NOT open any session directory (evaluation/*/outputs/**/mhc-* lanes, workspace/, .cache/) or any parquet/CSV; the findings files already quote what you need. Do not open any file named routing.json or .env.

AUTHORITATIVE RECAP. Where this recap conflicts with older documents, the recap wins.
- The executor receives a frozen plan (d3_planner/plan.md), implements each declared action as source, dispatches governed runs through the runner, and writes result.md (terminal) plus per-action result.md. It may refuse to execute a contradictory plan (report it unexecuted with the contradiction named) or execute with disclosed deviations.
- Failure classes seen repeatedly under BOTH long (5,166 w) and short (3,806 w) prompts: (i) substitution — executor replaces a named routine/constant/input with its own (hand-written likelihoods, canonical Webb for a mis-summed PMF, self-chosen detector thresholds, self-chosen surgery-window rule); (ii) over-refusal — executor treats a resolvable ambiguity or a bookkeeping phrase as a blocking contradiction and runs zero governed dispatches; (iii) prose numbers with no persisted field — terminal quotes quotients/ranges/differences computed in prose, mechanically unmatched to any aggregate evidence file (bank "N/N prose numbers unmatched"); (iv) scratch/synthetic evidence deleted after being used to justify a decision; (v) data-boundary breach — governed data loaded outside the runner during "profiling"; (vi) unrequested fits/diagnostics and hand-rolled machinery blowing the 3,600 s budget; (vii) implementation defects surviving to delivery (empty manifest, pl.concat shape error); (viii) reporting contradictions between per-action result and terminal (stated CI facts false, deviations omitted from the deviation list).
- Judge families disagree on (ii) vs (i): in C-R2 codex favoured the arm that refused, Opus the arm that executed with disclosure.
- Option "mechanical conduct checker" (a stop-gate that would check items like persisted numbers, chained commands, out-of-runner data access) was ABANDONED by the operator earlier today; you may still argue for a gate if you can say precisely what it checks and why the earlier objection (a gate becomes another rule engine) does not apply — but state that you know it was abandoned.
- The operator's question, verbatim: "能不能从架构上入手?比如设计新的 skill 或者 sub agent 来解决痛点?当前的痛点到底是什么" — can architecture (new skills, new sub-agents, reassigning duties between stages) address the pain points, and what exactly ARE the pain points.

PRODUCE, in this order, plain text, no Markdown headers, nothing outside the protocol:

PAIN-POINTS:
For each pain point (at most 8, root causes not symptoms), one block:
P<n> <short name>
  evidence: <2–4 citations: pid + file:line or ledger row>
  root cause: <one or two sentences — what about the task, the artefacts or the division of labour makes this recur regardless of prompt wording>
  owner layer: prompt | stop-gate | runner | sub-agent | skill | planner-side | reviewer-side | schema | model-capability | evaluation
  why prompt text cannot fix it: <one sentence>

ARCHITECTURE-OPTIONS:
Up to 6 options, one block each:
O<n> <name>
  mechanism: <what is built, where it lives (which stage, hook, sub-agent, skill), what it reads and writes>
  covers: P<n>, P<m>
  cost: <rough LOC or words, and whether it adds instruction text the executor reads>
  risk: <false positives, new failure modes, what could get worse>
  proof: <what measurement on which problems would show it worked>

RANKED: three lines, the best three options in order, each with one sentence of reason.

POLICY-QUESTIONS: up to 3 questions only the operator can settle (e.g. is "refuse vs execute-with-disclosure" a policy, and which one), each with the evidence that makes it a policy question rather than a prompt defect.

CHALLENGE: up to 4 lines on where the campaign's own framing may be wrong (measurement, problem pool, judge brief, dimension weights), with the evidence.
