Skip to content

Write-back contract (§7) amendment: explicit per-field overwrite of author-set values #47

Description

@ChrisBeWithYou

@topkoa — following up on the write-back contract we settled in the alignment discussion (and that shipped as agreed: gap-fill in got-feedBack/feedBack#724 adds absent keys only, never replaces).

§7 today covers gap-fill — and it's behaving exactly as agreed in production. Users are now asking for the next step: replacing a WRONG author-set value with the confirmed-match value (a typo'd artist, a wrong year), which §7 deliberately excluded pending this conversation.

Proposed amendment, keeping every §7 principle:

  1. Still user-initiated + single-song — never background, never batch (batch stays parked as before).
  2. Per-field explicit checkboxes, default OFF, showing old → new before anything writes — a field is only ever replaced by a deliberate individual tick.
  3. Eligibility only from a match the user explicitly confirmed (pinned/manual) — an automatic match can display, but cannot authorize destroying author bytes.
  4. Provenance recorded — locally for now (a write log: old/new/source/score/timestamp per field), migrating into the pack once the provenance/extra FEP gives an in-file shape. Nothing is written that can't be traced.
  5. Atomic writer + backup: the FIRST backup is the pristine author original and is never clobbered by later writes; a visible one-click Revert restores it.
  6. Hard never-overwrite list: all chart/practice data (tuning, arrangements, duration, capo, offsets, stems, timeline), and identity keys (mbid/isrc) except via an explicit manual re-match.

Effectively: gap-fill fills gaps; overwrite fixes errors — one field at a time, with receipts and an undo.

The host-side implementation is being prepared as a draft PR and stays draft until you're comfortable amending §7. Happy to adjust any of the six points — the eligibility bar (point 3) and the provenance shape (point 4) are the ones where your judgment matters most.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Nm7tHs1Yvjjtnnu4nzJgdN

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions