Skip to content

docs(transcript-fixer): 3 native-pass actionability fixes - #210

Merged
daymade merged 4 commits into
mainfrom
skill/transcript-fixer-actionability-fixes
Aug 4, 2026
Merged

docs(transcript-fixer): 3 native-pass actionability fixes#210
daymade merged 4 commits into
mainfrom
skill/transcript-fixer-actionability-fixes

Conversation

@daymade

@daymade daymade commented Jul 23, 2026

Copy link
Copy Markdown
Owner

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.

  • step 2 (Verify Stage 1) — dictionary-false-positive feedback loop. A Stage 1 FP is debt you owe the dictionary: 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); one call disables it.
  • step 5 (Apply fixes) — common-word batch where most occurrences are the domain term but a few are genuine: grep -n every occurrence, judge each, then replace_all + revert the genuine minority.
  • step 7 (Enqueue) — minimal inline items.json example + actions-optional note, so --enqueue-review no longer requires a jump to references.
  • fix commit — the example above got three keys wrong, including one it omitted entirely. See below.

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.json example were wrong; the worst of them was the one that wasn't there.

1. file was missing — and both guarantees attached to the example hang on it.

review_queue.py:212   if item["file_path"] and item["source"] != "stage1_deferred":   # verbatim-anchor check
review_queue.py:793   if not actions and item.suggested_text and item.file_path and not override:   # default file_edit

With no file: a paraphrased context is silently accepted instead of rejected, and an Accept records the verdict, exits 0, and never touches the transcriptapply_log: [], status: accepted, file unchanged. A green path that does nothing. No items.json example in any doc set file.

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_edit needs a file anchor, not merely an empty action pack.

2. "suggestion""suggested". :511 reads raw.get("suggested") or raw.get("suggested_text"). Observed: with suggestionsuggested_text = None; with suggested → the value arrives. Nothing errors; the item lands with an empty verdict, the dashboard's Accept is disabled, and --resolve-review later 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_packactions. :509 reads raw.get("actions", []); action_pack appears nowhere in the loader.

All three are the silent-drop trap the same sentence warns about (line, not line_hint) — the example was demonstrating the failure instead of the rule.

Touching a deliberately-restored line, stated rather than done quietly. fa5c964 restored the incident-#24 paragraph byte-for-byte; it contained file_edit(old=original, new=suggestion), a key 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.

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 once file is 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-positive row 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 main twice (main moved mid-review). Re-based values:

  • manifest: the original bump 1.14.1 → 1.14.2 is obsolete — main is at 1.18.0, so this lands daymade-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 — fa5c964 changed SKILL.md but bumped only the timestamp, leaving the previous commit's content hash).
  • Four merge conflicts were resolved additively (never --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-positive then 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

  • No content lost from main — line-membership check per file; every apparent loss adjudicated individually (2 version bumps, 2 regenerated scan-artifact lines, 2 extensions where the base line is a byte-exact prefix, 1 intentional correction whose dropped clause reappears verbatim in step 2).
  • Regression audit — compare → classify → verify against git-ref:origin/main: 5 candidates / 2664 exact preservations, all classified preserved_or_moved with 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).
  • Trial merge with feat(skill-creator): six corrections a real update cycle exposed (1.22.0) #195 — conflict-free in both orders, producing the same tree.
  • Independent fresh-context review of the rebase itself: PASS on fidelity to main, to the original PR payload, to the manifest, and to 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 the file omission above; that is fixed too.

🤖 Generated with Claude Code

daymade and others added 4 commits August 5, 2026 00:31
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
daymade force-pushed the skill/transcript-fixer-actionability-fixes branch from 5b782d0 to e419016 Compare August 4, 2026 16:55
@daymade
daymade merged commit 2d7711d into main Aug 4, 2026
4 checks passed
@daymade
daymade deleted the skill/transcript-fixer-actionability-fixes branch August 4, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant