Editor Harvest Plan
Handle $ARGUMENTS.
Use this after editor-test-harvester has produced a report and the user wants
one owner lane processed into an execution-grade plan.
Examples:
editor-harvest-plan slate-v2 tinymce
editor-harvest-plan slate-v2 .tmp/editor-test-harvester/tinymce/report.md
editor-harvest-plan docs/editor-test-harvester/tiptap/report.md --lane slate-v2
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.
Lane Registry
| Lane |
Aliases |
Downstream skill |
Owner |
Output |
slate-v2 |
slate, raw-slate |
.agents/skills/slate-plan/SKILL.md |
Raw Slate v2 substrate in .tmp/slate-v2 |
docs/plans/YYYY-MM-DD-slate-v2-<repo>-harvest-plan.md |
plate |
platejs, plate-owned |
.agents/skills/plate-plan/SKILL.md |
Plate packages, kits, docs, examples, and product behavior in this repo |
docs/plans/YYYY-MM-DD-plate-<repo>-harvest-plan.md |
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.
Create the lane plan from the project template:
node .agents/skills/autogoal/scripts/create-goal-scratchpad.mjs \
--template editor-harvest-plan \
--title "<Lane> <Repo> Harvest Plan"
The generated docs/plans file is the durable evidence and pass-state ledger.
Do not create hook state.
Complete the goal only when the plan records:
- harvest report path and license mode;
- inventory and test-index status, including missing-file reasons;
- every harvest row accounted for as in-lane, out-of-lane, split, duplicate,
skip, or unresolved;
- every in-lane row with owner coverage, action, target location, proof kind,
and verification command or explicit defer reason;
- downstream lane gates applied and recorded;
- pass-state ledger, confidence score, lane queue, excluded rows, issue/claim
accounting, and accepted-plan execution handoff;
- no behavior-only source material copied or mechanically translated into
versioned output;
- no row that still needs autonomous routing;
node .agents/skills/autogoal/scripts/check-complete.mjs <plan> passing.
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;
- downstream lane application recorded;
- final goal-plan check passes.
Workflow
- Resolve arguments:
- lane first, then report/repo key; or
- report/repo key plus
--lane <lane>.
- Resolve the harvest report:
- explicit path wins;
- else try
docs/editor-test-harvester/<repo>/report.md;
- else try
.tmp/editor-test-harvester/<repo>/report.md;
- else run or request
editor-test-harvester first.
- 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.
Verification
Planning-only verification in plate-2:
rg -n "Harvest grounding|Lane contract|Full harvest row accounting|In-lane candidate matrix|Execution queue|Downstream lane application|Accepted-plan execution handoff" docs/plans/<plan>.md
node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/<plan>.md
Source sync verification after editing this skill:
pnpm install
test -f .agents/skills/editor-harvest-plan/SKILL.md
rg -n "editor-test-harvester|slate-plan|Lane Registry|Full harvest row accounting" .agents/skills/editor-harvest-plan/SKILL.md
pnpm lint:fix
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>`.
1---2name: editor-harvest-plan3description: 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.4---56# Editor Harvest Plan78Handle $ARGUMENTS.910Use this after `editor-test-harvester` has produced a report and the user wants11one owner lane processed into an execution-grade plan.1213Examples:1415```text16editor-harvest-plan slate-v2 tinymce17editor-harvest-plan slate-v2 .tmp/editor-test-harvester/tinymce/report.md18editor-harvest-plan docs/editor-test-harvester/tiptap/report.md --lane slate-v219```2021For `slate-v2`, this means: read the harvest, find every raw Slate candidate,22apply `slate-plan`, and produce a plan that accounts for all Slate-specific23tests. It does not mean blindly port every upstream test.2425## Use When2627- A completed or near-complete `editor-test-harvester` report exists.28- The user wants all rows for one lane processed, such as `slate-v2` or `plate`.29- The user asks "all Slate tests from this harvest", "all Plate-owned rows", or30 "process this harvester result into a plan".31- The output should be a `docs/plans/*-harvest-plan.md` execution plan with an32 accepted-plan handoff for the downstream lane skill.33- The source may be `behavior-only`, so versioned output must stay34 fresh-invariant-only.3536## Do Not Use When3738- The user asks to mine a source repo from scratch. Use `editor-test-harvester`.39- The user asks to execute an accepted plan. Invoke the downstream lane skill40 against the accepted plan.41- The user asks for one narrow bug fix or a direct code/test patch.42- The harvest has no report, no inventory, and no test index. Run or request43 `editor-test-harvester` first.4445## Lane Registry4647| Lane | Aliases | Downstream skill | Owner | Output |48| ---------- | ------------------------ | ------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------ |49| `slate-v2` | `slate`, `raw-slate` | `.agents/skills/slate-plan/SKILL.md` | Raw Slate v2 substrate in `.tmp/slate-v2` | `docs/plans/YYYY-MM-DD-slate-v2-<repo>-harvest-plan.md` |50| `plate` | `platejs`, `plate-owned` | `.agents/skills/plate-plan/SKILL.md` | Plate packages, kits, docs, examples, and product behavior in this repo | `docs/plans/YYYY-MM-DD-plate-<repo>-harvest-plan.md` |5152If the lane is unknown, infer only when the harvest row owner labels make the53mapping obvious. Otherwise ask for the lane. Do not invent a new owner lane and54pretend it is covered.5556## Hard Policy5758- This is a planning/routing skill. Do not patch implementation code, tests,59 examples, package files, or build config.60- For `slate-v2`, do not edit `.tmp/slate-v2` from this skill.61- For `plate`, do not edit packages, apps, docs, examples, or behavior from this62 skill except the plan.63- User phrases like "go", "process", "apply", or "all tests" do not override64 the planning boundary. Build the plan and hand execution to the downstream65 lane skill after user acceptance.66- Do not rerun the full harvest unless the report is missing required evidence.67 If the harvest is incomplete but usable, process what exists and keep the plan68 `pending` with the missing harvester pass named.69- Preserve license mode from the harvest. For `behavior-only` sources, any70 versioned plan row must use fresh local invariant wording and source path71 provenance only.72- Never copy upstream test code, fixtures, helpers, snapshots, expected output,73 or expressive prose into versioned output.74- Do not count Plate/product rows as Slate v2 tests.75- Do not count raw Slate substrate rows as Plate plugin backlog unless they were76 explicitly split and routed.77- "All lane tests" means every harvest row that belongs to the lane, including78 `covered`, `refactor-existing`, `create-new`, `fresh-invariant`, `copy-now`79 for permissive sources, `defer`, and unresolved lane candidates. It is not80 limited to `create-new`.81- Browser, clipboard, selection, mobile, and IME rows need honest proof routes.82 Package tests alone do not close browser/device claims.8384## Read First85861. Latest user request and lane argument.872. Active goal and active `docs/plans` goal plan, if present.883. The harvest report:89 - explicit report path, or90 - `docs/editor-test-harvester/<repo>/report.md`, or91 - `.tmp/editor-test-harvester/<repo>/report.md`.924. Companion harvest files when present:93 - `<report_dir>/inventory.md`94 - `<report_dir>/test-index.md`955. `.agents/skills/editor-test-harvester/SKILL.md`.966. The downstream lane skill:97 - `slate-v2`: `.agents/skills/slate-plan/SKILL.md`98 - `plate`: `.agents/skills/plate-plan/SKILL.md`997. `docs/solutions/` entries about editor harvest routing, browser proof, IME,100 selection, placeholders, and Skiller/sync failures.1018. Current owner evidence:102 - `slate-v2`: `.tmp/slate-v2` tests, examples, package scripts, and relevant103 ledgers.104 - `plate`: current Plate packages, kits, docs, examples, and behavior-law105 docs.106107For `slate-v2`, the live `.tmp/slate-v2` checkout wins over stale plans. Search108current tests and source before saying a row is covered or missing.109110## Goal And Plan State111112This skill uses agent-native goals for durable state. Always call `get_goal`113first. Call `create_goal` only when no active matching goal exists. There can be114only one active goal per thread.115116Create the lane plan from the project template:117118```bash119node .agents/skills/autogoal/scripts/create-goal-scratchpad.mjs \120 --template editor-harvest-plan \121 --title "<Lane> <Repo> Harvest Plan"122```123124The generated `docs/plans` file is the durable evidence and pass-state ledger.125Do not create hook state.126127Complete the goal only when the plan records:128129- harvest report path and license mode;130- inventory and test-index status, including missing-file reasons;131- every harvest row accounted for as in-lane, out-of-lane, split, duplicate,132 skip, or unresolved;133- every in-lane row with owner coverage, action, target location, proof kind,134 and verification command or explicit defer reason;135- downstream lane gates applied and recorded;136- pass-state ledger, confidence score, lane queue, excluded rows, issue/claim137 accounting, and accepted-plan execution handoff;138- no behavior-only source material copied or mechanically translated into139 versioned output;140- no row that still needs autonomous routing;141- `node .agents/skills/autogoal/scripts/check-complete.mjs <plan>` passing.142143Keep `pending` while any lane row can still be mapped, deduped, split, or routed.144Use `blocked` only when the harvest artifact, target checkout, browser/device145proof, or user lane decision is missing and no useful autonomous pass remains.146147## Confidence Score148149Score from `0.00` to `1.00`.150151| Dimension | Weight |152| -------------------------------- | -----: |153| Harvest source readiness | 0.15 |154| Lane-filter completeness | 0.25 |155| Current owner coverage mapping | 0.25 |156| Actionability of execution queue | 0.20 |157| License/provenance discipline | 0.15 |158159Score caps:160161- Total cannot exceed `0.80` if the harvest report is missing.162- Total cannot exceed `0.86` if inventory or test-index status is unknown.163- Lane-filter completeness cannot exceed `0.80` unless every harvest matrix row164 is counted as in-lane or out-of-lane/split/duplicate/skip.165- Coverage mapping cannot exceed `0.85` unless current owner tests/source were166 searched in the target workspace.167- Actionability cannot exceed `0.85` unless every non-covered in-lane row names168 target file, proof kind, and focused verification command or defer reason.169- License/provenance cannot exceed `0.80` for `behavior-only` sources unless170 the plan states the fresh-invariant-only rule and avoids copied source171 wording.172173Completion threshold:174175- total score `>= 0.92`;176- no dimension below `0.85`;177- no unresolved in-lane row;178- no `create-new`, `refactor-existing`, `copy-now`, `fresh-invariant`, or179 `defer` row lacks owner and verification/defer evidence;180- downstream lane application recorded;181- final goal-plan check passes.182183## Workflow1841851. Resolve arguments:186 - lane first, then report/repo key; or187 - report/repo key plus `--lane <lane>`.1882. Resolve the harvest report:189 - explicit path wins;190 - else try `docs/editor-test-harvester/<repo>/report.md`;191 - else try `.tmp/editor-test-harvester/<repo>/report.md`;192 - else run or request `editor-test-harvester` first.1933. Start or reuse a matching goal, then create the plan with194 `--template editor-harvest-plan`.1954. Read harvest metadata:196 - status;197 - score;198 - license mode;199 - output mode;200 - inventory counts;201 - matrix rows;202 - skips;203 - next slice;204 - pass-state ledger.2055. Validate companion files:206 - inventory exists or missing reason;207 - test-index exists or missing reason.2086. Normalize lane aliases.2097. Build row accounting:210 - `in-lane`: belongs to the requested owner lane;211 - `out-of-lane`: belongs to another owner;212 - `split`: contains both lane-owned substrate and product/plugin behavior;213 - `duplicate`: already represented by another row;214 - `skip`: no portable behavior;215 - `unresolved`: needs more reading or user decision.2168. For `slate-v2`, include every row whose tag, owner coverage, action, target,217 or behavior invariant points to raw Slate substrate:218 - selection DOM mapping;219 - beforeinput/input;220 - IME/composition;221 - clipboard, paste, drag, drop;222 - history undo/redo;223 - normalization and transforms;224 - delete/backspace;225 - insert fragment;226 - marks/inline/void primitives;227 - shadow DOM;228 - browser engine behavior;229 - focus/blur;230 - performance-large-doc when the invariant is raw editor substrate.2319. For `slate-v2`, exclude or split:232 - link/autolink grammar;233 - list/checklist policy;234 - markdown transformer UX;235 - mention/hashtag/emoji/date-time plugins;236 - media/product decorators;237 - toolbar/menu/dialog state;238 - React plugin hosts;239 - NodeView/PluginView-style authoring unless reduced to raw substrate.24010. Search current owner coverage:241 - for `slate-v2`, search `.tmp/slate-v2` by behavior words and adjacent242 concepts, not upstream API names;243 - for `plate`, search packages, kits, docs, examples, and behavior-law docs.24411. Apply the downstream lane skill:245 - for `slate-v2`, load and apply `slate-plan` gates to the lane plan;246 - for `plate`, load and apply `plate-plan` gates to the lane plan.24712. Fill the template sections under `docs/plans/`.24813. If the plan is below threshold, keep `pending` and name the next pass.24914. If the plan passes threshold, set `done`, run `check-complete.mjs`, and250 produce the user-review handoff. Do not execute implementation.251252## Action Values253254- `covered`255- `refactor-existing`256- `create-new`257- `copy-now` for permissive sources only258- `fresh-invariant` for behavior-only sources259- `defer`260- `split`261- `skip`262263For `behavior-only` sources, never use `copy-now` in versioned output. Use264`fresh-invariant`.265266## Issue And Claim Accounting267268Default to no issue claim.269270For `slate-v2`, apply `slate-plan` issue rules:271272- fixed issue claims need exact proof and issue ledger sync;273- improved issues need material behavior proof;274- related issues stay related when the exact repro is not proven;275- no broad GitHub discovery unless the downstream skill allows it;276- update PR/issue ledgers only when the plan changes claim text or proof277 status.278279If no claim changes, write:280281```md282Fixed issues: none from this plan.283Improved issues: none from this plan.284Related issues: unchanged; this plan routes harvested test pressure only.285PR reference: unchanged; no claim or proof status changed.286```287288## Accepted-Plan Execution Handoff289290When the lane plan is ready, write a handoff that the downstream lane skill can291execute after user acceptance:292293- read-first plan path;294- requested lane;295- exact execution queue IDs;296- implementation boundaries;297- focused verification commands;298- broad final gate;299- issue/claim sync rule;300- stop rule.301302Do not start execution from this skill. The user reviews the finished plan303first, then invokes the downstream lane skill again with the accepted plan path.304305## Verification306307Planning-only verification in `plate-2`:308309```bash310rg -n "Harvest grounding|Lane contract|Full harvest row accounting|In-lane candidate matrix|Execution queue|Downstream lane application|Accepted-plan execution handoff" docs/plans/<plan>.md311node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/<plan>.md312```313314Source sync verification after editing this skill:315316```bash317pnpm install318test -f .agents/skills/editor-harvest-plan/SKILL.md319rg -n "editor-test-harvester|slate-plan|Lane Registry|Full harvest row accounting" .agents/skills/editor-harvest-plan/SKILL.md320pnpm lint:fix321```322323Slate v2 behavior verification belongs only to accepted-plan execution from324`.tmp/slate-v2`.325326## Final Response327328If pending:329330```md331Editor Harvest Plan is pending: [docs/plans/...](docs/plans/...)332333Score: 0.xx334Next owner: ...335```336337If done:338339```md340Editor Harvest Plan is ready: [docs/plans/...](docs/plans/...)341342Lane processed:343344- `<lane>`: N in-lane rows, N covered, N refactor, N create/fresh-invariant,345 N defer, N excluded/out-of-lane.346- Downstream skill: `<skill>`.347- Execution next: `<first execution queue id or none>`.348```