docs(transcript-fixer): 3 native-pass actionability fixes - #210
Merged
Conversation
Based on friction hit across two real transcripts: - step2: dictionary-false-positive feedback loop — disable the bad rule in-session via --report-false-positive, passing the rule's STORED from->to pair (as *_changes.md From/To shows, NOT wrong->right semantics; the 买买->卖卖 FP stored from=买买,to=卖卖 -> pass '买买' '卖卖'); one call disables it. - step5: common-word batch where most occurrences are the domain term but a few are genuine — grep -n every occurrence, judge each, then replace_all + Edit-revert the genuine minority (real case: 公开 x11, 10 工勘 + 1 real 公开渠道). - step7: minimal inline items.json example (line/original/suggestion/kind/evidence) + action_pack-optional note, so --enqueue-review no longer requires a jump to references. Doc-only (no script logic). Gate: regression audit (2 candidates, preserved_or_moved) + security scan + independent fresh-context review (re-review empty = both fixes executable). Co-Authored-By: Claude <noreply@anthropic.com>
Releases transcript-fixer SKILL.md actionability fixes (regression+security+independent review green) to installed copies; marketplace update keys off this bump. Co-Authored-By: Claude <noreply@anthropic.com>
…ve arg docs Round-2 full-flow independent review caught a factual error in step 2's example: - the 买买→卖卖 example wrongly attributed the rule to the 4+ char blind spot (买买 is 2 chars; it applied via --apply-domain), and misstated the source as 买工作流 (single) when it was 买买工作流 (double — the only form the rule matches). Rewrote to the real mechanism + correct source text. - Quick Start --report-false-positive arg labels (错误词/正确词) conflicted with step 2 NOT-wrong→right semantics — aligned both to from_text/to_text. - step 2 'not a correction' was self-contradictory — reworded. Two pre-existing flow inconsistencies the review also surfaced (step2 original-file vs step9; _needs_review.md AI-pass vs dashboard) are recorded in independent-review.md as out of scope for this change. Co-Authored-By: Claude <noreply@anthropic.com>
…g, one of them silently
Two independent reviews of this branch, the second one reproducing everything
against the real loader and CLI. Every claim below was checked against the code
before the doc was changed.
1. `file` was missing — and it is the key the other two guarantees hang on.
`review_queue.py:212` gates the verbatim-anchor check on `item["file_path"]`,
and `:793` gates the default `file_edit` on `item.file_path`. With no `file`:
a paraphrased `context` is silently accepted instead of rejected, and an
Accept records the verdict, exits 0, and never touches the transcript. That
is a green path that does nothing — worse than the bug in (2), which at least
greys the button out. No items.json example in any doc set `file`.
2. `"suggestion"` → `"suggested"`. `:511` reads
`raw.get("suggested") or raw.get("suggested_text")`; the misspelling is
dropped in silence, and `--resolve-review` later refuses with "item N has no
suggestion to accept". Fixed in the template, in the step-7 lead-in sentence
five lines above it, and in the paragraph below (see 4).
3. `action_pack` → `actions`. `:509` reads `raw.get("actions", [])`;
`action_pack` appears nowhere in the loader.
4. Touching a deliberately-restored line, so stating it rather than doing it
quietly: `fa5c964` restored the incident-#24 paragraph byte-for-byte, and it
contains `file_edit(old=original, new=suggestion)` — a key name that does not
exist (`:797` builds `"new": item.suggested_text`). Changed to `new=suggested`.
That commit's objection was to rewriting the incident's example wording;
「我们的民宿就完了」 and `original: "民宿的误写词"` are untouched.
Also restores the precondition SKILL.md:247 states correctly and my earlier
draft of this sentence dropped: the default single `file_edit` needs a file
anchor, not just an empty action pack.
Known residual, not fixed here because it is inside that restored paragraph:
its `context: "…我们的民宿就完了"` opens with an ellipsis, so copied literally
it is non-verbatim and would be rejected once `file` is set. Editing it is a
proposal for whoever owns that record, not a side effect of this branch.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
daymade
force-pushed
the
skill/transcript-fixer-actionability-fixes
branch
from
August 4, 2026 16:55
5b782d0 to
e419016
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Three doc-only actionability fixes in
transcript-fixer/SKILL.md(Native AI Correction section), distilled from friction hit across two real transcripts — plus a fourth commit fixing a defect an independent review found in this branch itself.--report-false-positive, passing the rule's stored from→to pair (as*_changes.mdFrom/To shows, NOT "wrong→right" semantics); one call disables it.grep -nevery occurrence, judge each, thenreplace_all+ revert the genuine minority.items.jsonexample +actions-optional note, so--enqueue-reviewno longer requires a jump to references.The defects this branch found in itself
Two independent fresh-context reviews were run against this branch — one on the rebase, one on the fix that came out of it. The second reproduced everything against the real loader and CLI (throwaway DB). Three key names in the new
items.jsonexample were wrong; the worst of them was the one that wasn't there.1.
filewas missing — and both guarantees attached to the example hang on it.With no
file: a paraphrasedcontextis silently accepted instead of rejected, and an Accept records the verdict, exits 0, and never touches the transcript —apply_log: [],status: accepted, file unchanged. A green path that does nothing. Noitems.jsonexample in any doc setfile.The template now sets it, and the prose states both gates explicitly. This also restores the precondition SKILL.md:247 already had right — the default single
file_editneeds a file anchor, not merely an empty action pack.2.
"suggestion"→"suggested".:511readsraw.get("suggested") or raw.get("suggested_text"). Observed: withsuggestion→suggested_text = None; withsuggested→ the value arrives. Nothing errors; the item lands with an empty verdict, the dashboard's Accept is disabled, and--resolve-reviewlater refuses with "item N has no suggestion to accept". Fixed in the template, in the step-7 lead-in five lines above it, and in the paragraph below.3.
action_pack→actions.:509readsraw.get("actions", []);action_packappears nowhere in the loader.All three are the silent-drop trap the same sentence warns about (
line, notline_hint) — the example was demonstrating the failure instead of the rule.Touching a deliberately-restored line, stated rather than done quietly.
fa5c964restored the incident-#24 paragraph byte-for-byte; it containedfile_edit(old=original, new=suggestion), a key that does not exist (:797builds"new": item.suggested_text). Changed tonew=suggested. That commit's objection was to rewriting the incident's example wording — 「我们的民宿就完了」 andoriginal: "民宿的误写词"are untouched.Known residual, deliberately not fixed here. The same restored paragraph's
context: "…我们的民宿就完了"opens with an ellipsis, so copied literally it is non-verbatim and would be rejected oncefileis set. Editing it is a proposal for whoever owns that record, not a side effect of this branch.Reference sweep.
references/dictionary_guide.md's--report-false-positiverow still taught the"错" "对"argument order this branch repudiates in SKILL.md — an agent reading that table instead of step 2 would pass the arguments backwards. Swept; the reviewer confirmed all 7 remaining doc occurrences are now correct and zero 错→对 teaching survives.Rebase note
The branch was opened 2026-07-23 and rebased onto current
maintwice (main moved mid-review). Re-based values:1.14.1 → 1.14.2is obsolete — main is at1.18.0, so this landsdaymade-audio 1.18.0 → 1.18.1. Verified with a full 58-entry version-table diff: exactly one entry changed, no entries added or removed, all non-version fields byte-identical..security-scan-passed: re-scanned against the rebased content (main's copy was stale —fa5c964changed SKILL.md but bumped only the timestamp, leaving the previous commit's content hash).--ours/--theirs); the two SKILL.md steps that conflicted each received an addition from both sides and keep both.Ordering matters here and works out:
1212832(already on main) fixes the bug where the people roster resurrected DB-disabled rules and--report-false-positivethen reported "No active rule" while the rule kept firing. Step 2's claim that one call stops the rule firing is true after that commit, not before.Verification
git-ref:origin/main: 5 candidates / 2664 exact preservations, all classifiedpreserved_or_movedwith locatable needles. Passed.quick_validate— passes.security_scan— clean, plus a manual line-by-line read of every added line for private paths / project names (a keyword scan does not catch those).fa5c964's incident-Add AnyoneCLI — CLI identity registration skill #24 restoration (verified by line hash across five revisions). Its one splice-created finding and one pre-existing finding are both fixed by the fourth commit. A second review then found thefileomission above; that is fixed too.🤖 Generated with Claude Code