Turn an editor-test-harvester report into one lane-specific execution plan, e.g. process every Slate v2 candidate from a harvest through slate-plan without executing implementation.
Turn an editor-test-harvester report into one lane-specific execution plan, e.g. process every Slate v2 candidate from a harvest through slate-plan without executing implementation.
For slate-v2, this means: read the harvest, find every raw Slate candidate,
apply slate-plan, and produce a plan that accounts for all Slate-specific
tests. It does not mean blindly port every upstream test.
Use When
A completed or near-complete editor-test-harvester report exists.
The user wants all rows for one lane processed, such as slate-v2 or plate.
The user asks "all Slate tests from this harvest", "all Plate-owned rows", or
"process this harvester result into a plan".
The output should be a docs/plans/*-harvest-plan.md execution plan with an
accepted-plan handoff for the downstream lane skill.
The source may be behavior-only, so versioned output must stay
fresh-invariant-only.
Do Not Use When
The user asks to mine a source repo from scratch. Use editor-test-harvester.
The user asks to execute an accepted plan. Invoke the downstream lane skill
against the accepted plan.
The user asks for one narrow bug fix or a direct code/test patch.
The harvest has no report, no inventory, and no test index. Run or request
editor-test-harvester first.
If the lane is unknown, infer only when the harvest row owner labels make the
mapping obvious. Otherwise ask for the lane. Do not invent a new owner lane and
pretend it is covered.
Hard Policy
This is a planning/routing skill. Do not patch implementation code, tests,
examples, package files, or build config.
For slate-v2, do not edit .tmp/slate-v2 from this skill.
For plate, do not edit packages, apps, docs, examples, or behavior from this
skill except the plan.
User phrases like "go", "process", "apply", or "all tests" do not override
the planning boundary. Build the plan and hand execution to the downstream
lane skill after user acceptance.
Do not rerun the full harvest unless the report is missing required evidence.
If the harvest is incomplete but usable, process what exists and keep the plan
pending with the missing harvester pass named.
Preserve license mode from the harvest. For behavior-only sources, any
versioned plan row must use fresh local invariant wording and source path
provenance only.
Never copy upstream test code, fixtures, helpers, snapshots, expected output,
or expressive prose into versioned output.
Do not count Plate/product rows as Slate v2 tests.
Do not count raw Slate substrate rows as Plate plugin backlog unless they were
explicitly split and routed.
"All lane tests" means every harvest row that belongs to the lane, including
covered, refactor-existing, create-new, fresh-invariant, copy-now
for permissive sources, defer, and unresolved lane candidates. It is not
limited to create-new.
Browser, clipboard, selection, mobile, and IME rows need honest proof routes.
Package tests alone do not close browser/device claims.
Read First
Latest user request and lane argument.
Active goal and active docs/plans goal plan, if present.
The harvest report:
explicit report path, or
docs/editor-test-harvester/<repo>/report.md, or
.tmp/editor-test-harvester/<repo>/report.md.
Companion harvest files when present:
<report_dir>/inventory.md
<report_dir>/test-index.md
.agents/skills/editor-test-harvester/SKILL.md.
The downstream lane skill:
slate-v2: .agents/skills/slate-plan/SKILL.md
plate: .agents/skills/plate-plan/SKILL.md
docs/solutions/ entries about editor harvest routing, browser proof, IME,
selection, placeholders, and Skiller/sync failures.
Current owner evidence:
slate-v2: .tmp/slate-v2 tests, examples, package scripts, and relevant
ledgers.
plate: current Plate packages, kits, docs, examples, and behavior-law
docs.
For slate-v2, the live .tmp/slate-v2 checkout wins over stale plans. Search
current tests and source before saying a row is covered or missing.
Goal And Plan State
This skill uses agent-native goals for durable state. Always call get_goal
first. Call create_goal only when no active matching goal exists. There can be
only one active goal per thread.
Keep pending while any lane row can still be mapped, deduped, split, or routed.
Use blocked only when the harvest artifact, target checkout, browser/device
proof, or user lane decision is missing and no useful autonomous pass remains.
Confidence Score
Score from 0.00 to 1.00.
Dimension
Weight
Harvest source readiness
0.15
Lane-filter completeness
0.25
Current owner coverage mapping
0.25
Actionability of execution queue
0.20
License/provenance discipline
0.15
Score caps:
Total cannot exceed 0.80 if the harvest report is missing.
Total cannot exceed 0.86 if inventory or test-index status is unknown.
Lane-filter completeness cannot exceed 0.80 unless every harvest matrix row
is counted as in-lane or out-of-lane/split/duplicate/skip.
Coverage mapping cannot exceed 0.85 unless current owner tests/source were
searched in the target workspace.
Actionability cannot exceed 0.85 unless every non-covered in-lane row names
target file, proof kind, and focused verification command or defer reason.
License/provenance cannot exceed 0.80 for behavior-only sources unless
the plan states the fresh-invariant-only rule and avoids copied source
wording.
Completion threshold:
total score >= 0.92;
no dimension below 0.85;
no unresolved in-lane row;
no create-new, refactor-existing, copy-now, fresh-invariant, or
defer row lacks owner and verification/defer evidence;
Start or reuse a matching goal, then create the plan with
--template editor-harvest-plan.
Read harvest metadata:
status;
score;
license mode;
output mode;
inventory counts;
matrix rows;
skips;
next slice;
pass-state ledger.
Validate companion files:
inventory exists or missing reason;
test-index exists or missing reason.
Normalize lane aliases.
Build row accounting:
in-lane: belongs to the requested owner lane;
out-of-lane: belongs to another owner;
split: contains both lane-owned substrate and product/plugin behavior;
duplicate: already represented by another row;
skip: no portable behavior;
unresolved: needs more reading or user decision.
For slate-v2, include every row whose tag, owner coverage, action, target,
or behavior invariant points to raw Slate substrate:
selection DOM mapping;
beforeinput/input;
IME/composition;
clipboard, paste, drag, drop;
history undo/redo;
normalization and transforms;
delete/backspace;
insert fragment;
marks/inline/void primitives;
shadow DOM;
browser engine behavior;
focus/blur;
performance-large-doc when the invariant is raw editor substrate.
For slate-v2, exclude or split:
link/autolink grammar;
list/checklist policy;
markdown transformer UX;
mention/hashtag/emoji/date-time plugins;
media/product decorators;
toolbar/menu/dialog state;
React plugin hosts;
NodeView/PluginView-style authoring unless reduced to raw substrate.
Search current owner coverage:
for slate-v2, search .tmp/slate-v2 by behavior words and adjacent
concepts, not upstream API names;
for plate, search packages, kits, docs, examples, and behavior-law docs.
Apply the downstream lane skill:
for slate-v2, load and apply slate-plan gates to the lane plan;
for plate, load and apply plate-plan gates to the lane plan.
Fill the template sections under docs/plans/.
If the plan is below threshold, keep pending and name the next pass.
If the plan passes threshold, set done, run check-complete.mjs, and
produce the user-review handoff. Do not execute implementation.
Action Values
covered
refactor-existing
create-new
copy-now for permissive sources only
fresh-invariant for behavior-only sources
defer
split
skip
For behavior-only sources, never use copy-now in versioned output. Use
fresh-invariant.
Issue And Claim Accounting
Default to no issue claim.
For slate-v2, apply slate-plan issue rules:
fixed issue claims need exact proof and issue ledger sync;
improved issues need material behavior proof;
related issues stay related when the exact repro is not proven;
no broad GitHub discovery unless the downstream skill allows it;
update PR/issue ledgers only when the plan changes claim text or proof
status.
If no claim changes, write:
Fixed issues: none from this plan.
Improved issues: none from this plan.
Related issues: unchanged; this plan routes harvested test pressure only.
PR reference: unchanged; no claim or proof status changed.
Accepted-Plan Execution Handoff
When the lane plan is ready, write a handoff that the downstream lane skill can
execute after user acceptance:
read-first plan path;
requested lane;
exact execution queue IDs;
implementation boundaries;
focused verification commands;
broad final gate;
issue/claim sync rule;
stop rule.
Do not start execution from this skill. The user reviews the finished plan
first, then invokes the downstream lane skill again with the accepted plan path.
Slate v2 behavior verification belongs only to accepted-plan execution from
.tmp/slate-v2.
Final Response
If pending:
Editor Harvest Plan is pending: [docs/plans/...](docs/plans/...)
Score: 0.xx
Next owner: ...
If done:
Editor Harvest Plan is ready: [docs/plans/...](docs/plans/...)
Lane processed:
-`<lane>`: N in-lane rows, N covered, N refactor, N create/fresh-invariant,
N defer, N excluded/out-of-lane.
- Downstream skill: `<skill>`.
- Execution next: `<first execution queue id or none>`.