Reject-to-learn

When the agent's output doesn't match how you actually like to code, capture it:

tastecode reject "no inline styles, use the tokens"
tastecode reject "too many files for what should be one component"
tastecode accept "prefer single bundled PR for refactors"

Each call:

  1. Appends a timestamped entry to .tastecode/feedback.md (committed, plain markdown — no hidden memory).
  2. Runs a reusable-reason heuristic. If the reason looks like a generic style preference (not task-specific), TasteCode shows a preview of the change it would make to tastecode.md under a new ## Learned Rules section and asks apply? [y/N].
  3. On y: writes tastecode.md and marks the feedback entry as promoted.

Optional flags:

FlagEffect
--provider <name>Tag the entry with the agent that produced the rejected output
--task "<text>"Tag the entry with what you were trying to do
--yesSkip the apply? [y/N] prompt — auto-apply

Batch-promote later with tastecode learn

If you skipped the promote offer (or the heuristic deemed a reason task-specific), pending entries stay in .tastecode/feedback.md. Promote several at once:

tastecode learn
# Pending feedback entries:
#   1. ✗ no inline styles
#   2. ✗ rename to getUserById in src/login.ts
#   3. ✓ prefer named exports
#
# Promote which? (e.g. "1,3" or "all", blank to cancel):

Or non-interactive: tastecode learn --select 1,3 --yes.

The feedback log is plain markdown. Edit, delete, or git-ignore it as you like — TasteCode never reads it without your asking.