Op feedback harvest
Harvest durable preflight feedback rules from git commits, bug fixes, reviews, incident notes, and agent-contract rules (AGENTS.md/CLAUDE.md) into docs/feedback. Use when the user asks to collect feedback from commits, update docs/feedback after bugs, backfill preflight rules, or bootstrap feedback rules for a fresh project. Default mode writes only a checkpoint; updating docs/feedback requires explicit `--apply`.From its SKILL.md
npx -y skills add rnrn/op --skill op-feedback-harvestAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.5 KB, as published. Nobody here has run it
Feedback Harvest
Convert recent project history into durable docs/feedback rules for op-preflight. This is a maintenance/bootstrap workflow, not normal preflight; never run it implicitly from op-preflight.
Safety Contract
Default mode writes only docs/feedback/audits/op-feedback-harvest-YYYYMMDD-HHMM.md
in the workspace. Do not create, modify, or delete anything else unless the
user explicitly passed --apply (or clearly said to apply/update rules) in
the same request. Write files only — never run git add, git commit, or
git reset; staging and commits belong to the user or the baby-commit/
dry-commit skills.
Never store secrets, API keys, tokens, passphrases, proxy credentials, or raw logs in feedback. Redact command output and error payloads to the smallest evidence needed.
Usage
feedback-harvest --last 50feedback-harvest --since 2026-05-03feedback-harvest <commit-range>feedback-harvest --apply ...
No range given -> commits since the latest commit that touched docs/feedback; if none exists, the last 50 commits.
Workflow
- Resolve the project root from the requested path or cwd.
- Read
docs/feedback/index.mdif it exists, plusbaseline.md,process.md, andrules-and-skills.mdwhen present. - Determine the commit window (explicit flags > since last
docs/feedbackchange > last 50). An explicit list of commit hashes IS a valid window — treat the named set as the window directly. - Classify commits into candidates: bug/regression fixes; test additions encoding a new invariant; protocol/client/runtime/deploy/security changes; workflow/skill/agent behavior changes; repeated operator friction.
- Declared rule sources are first-class candidates too:
AGENTS.md,CLAUDE.mdcritical-rules / review-checklist sections, and lesson entries in project CHANGELOGs. Cite the source file per rule. This matters most on a fresh scaffold, where the project's real rules predatedocs/feedbackand live in the agent contract — exactly the caseop-preflightflags as template-only.
- Declared rule sources are first-class candidates too:
- Inspect only bounded evidence per candidate: commit subject/body, changed file names, targeted diff hunks, referenced story/epic notes.
- Extract durable rules, not change summaries. Good: "When CLI flags override saved config, persist the resolved runtime endpoint before launching the client." Bad: "Fixed bug in commit abc123."
- Place each rule before mapping it. First decide whether it is a design invariant already owned by a source-of-truth doc (
docs/**/architecture.md,design.md,docs/HANDBOOK.md,baseline.md): if so, the feedback rule must be pointer-form ("follow<doc>#<rule>"), never a restatement that can later drift — but pointer-form requires a citeddoc#anchorthat actually exists; if you assert an invariant is owned upstream you must cite the exactdoc#anchor, and if you cannot find one, it is NOT owned upstream → write the full rule (don't emit a pointer to a non-existent anchor). If the invariant belongs upstream but is missing there, route it to that doc (or flag it in Open Questions), not only into feedback. Only genuinely incident-born rules get a full checklist entry indocs/feedback. Then map the rule to an existing feedback file or propose a narrow new one, and run duplicate detection against currentdocs/feedback/*.md(and against the source-of-truth docs above) — procedure, examples, and the file-mapping table are inreferences/rules-guide.md. - Write the audit checkpoint (shape under Output) with commit range, selected/rejected commits, proposed rules, duplicate matches, target files, and unresolved questions.
- With
--apply: re-run duplicate detection; updatedocs/feedbackfiles andindex.mdselector entries only for non-duplicateAPPLYrules (neverDUPLICATE/WATCH/REJECT); keep rules checklist-oriented and project-local; run the apply-mode validation inreferences/rules-guide.md— its mechanical form isnode <skill-dir>/scripts/validate-feedback.mjs --root <project-root>— the script ships WITH this skill (installed:~/.claude/skills/op-feedback-harvest/scripts/validate-feedback.mjs), it is NOT a project file, so do not expect it in the project tree and do not skip validation when it is absent there (dead index routes, missingChecklist (for preflight)sections, deaddoc#anchorpointers, checkpoint shape, secret patterns; exit 0 = clean).
Rule Quality Bar
Promote a candidate only when it is durable (prevents future regressions), actionable (checkable by op-preflight), project-local, non-duplicative (of other feedback rules and of invariants already owned by a source-of-truth doc — those become pointer-form, see step 7), and tied to a test, command, incident, bug, or documented operator path. Useful but not ready -> keep it in the checkpoint as WATCH, not as a rule. "Not a defect — environment" claims expire: any rule or note excusing a red suite as an environment issue MUST carry the verification date and the exact repro command, and goes stale — unconfirmed after ~30 days it is re-verified, never inherited (field: 46 of 55 "known-red" tests were missing mounts/env vars, and one "environmental" suite hid a real contract drift for years). Already covered -> mark DUPLICATE, name the existing rule id/file, do not apply.
Output
Return to the conversation: commit range inspected, checkpoint path, rule files proposed/changed, duplicate count and targets, selected/rejected commit counts, remaining WATCH items.
Write checkpoints to docs/feedback/audits/op-feedback-harvest-YYYYMMDD-HHMM.md — it must contain exactly these sections, in order (## Selected Commits, ## Rejected Commits, ## Proposed Rules, ## Index Updates, ## Open Questions):
# Feedback Harvest YYYY-MM-DD HH:MM
Range: <range>
Mode: checkpoint | apply
## Selected Commits
- `<hash>` <subject> -> <reason>
## Rejected Commits
- `<hash>` <subject> -> <reason>
## Proposed Rules
### <target feedback file>
- Rule: <durable checklist rule, or pointer to the owning source-of-truth doc>
- Origin: incident (<commit/date>) | design-invariant (owner: <doc>) | imported-baseline
- Evidence: <commit/test/story reference>
- Status: APPLY | WATCH | DUPLICATE | REJECT
- Duplicate of: <file>#<rule-id> when status is DUPLICATE
## Index Updates
- <selector or priority update>
## Open Questions
- <question or none>
Completion Status
Protocol (non-negotiable): the VERY LAST line of every run MUST start with exactly one of these tokens, as plain text — no markdown emphasis or backticks around the token. An optional — <one-line reason> may follow the token; nothing else. Do not invent other status wording:
DONE— checkpoint written (and rules applied, if--apply); no unresolved questions.DONE_WITH_CONCERNS— checkpoint written but open questions orWATCHitems remain; list them.BLOCKED— no git history available ordocs/feedbackcannot be created.NEEDS_CONTEXT— commit range ambiguous and nodocs/feedbackbaseline exists to infer one.