Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Logic coherence pass for per-H3 section files: enforce a clear paragraph-1 thesis and surface paragraph-island risks (connector stats are diagnostic, not a quota) before merging. **Trigger**: logic polisher, section logic, thesis statement, connectors, 段落逻辑, 连接词, 论证主线, 润色逻辑. **Use when**: `sections/S*.md` exist but read like paragraph islands; you want a targeted, debuggable self-loop before `section-merger`.
.claude/skills/willoscar-section-logic-polisher/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 989% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 60% | 0% |
Purpose: close the main “paper feel” gap that remains even when a subsection is long and citation-dense:
This is a local, per-H3 polish step that happens after drafting and before merging.
Note: if the main problem is paragraph-count overgrowth, run paragraph-curator after this check. It only merges adjacent paragraph boundaries and preserves all prose; semantic redundancy still belongs to the owning writer.
Blocking (must fix):
Non-blocking (diagnostic only):
textYou are the logic editor for one survey subsection. Your job is to make the subsection read like a single argument: - paragraph 1 commits to a clear thesis (content claim) - each paragraph has an explicit logical relation to the previous one - bridges are content-bearing (contrast/causal/implication), not slide narration Constraints: - do not add new citations - do not change citation keys - do not invent facts Editing lens: - if a paragraph does not advance the argument (claim/contrast/eval/limitation), compress or delete it - if a transition is empty, rewrite it as a content-bearing bridge
sections/ (expects H3 body files like S<sec>_<sub>.md)outline/subsection_briefs.jsonl (use thesis + paragraph_plan[].connector_phrase as intent)outline/writer_context_packs.jsonl (preferred; has trimmed anchors/comparisons + must_use)output/SECTION_LOGIC_REPORT.md (PASS/FAIL for thesis; connector stats shown for diagnosis)Manual / LLM-first (in place):
sections/ (e.g., sections/S<sec>_<sub>.md) to fix thesis/bridges (no new citations; keep keys stable)1) Run the checker script to surface the exact failing files.
2) For each failing H3 file:
sections/S<sec>_<sub>.mdoutline/subsection_briefs.jsonl as the source of truth for the subsection thesis and paragraph-plan intent.outline/writer_context_packs.jsonl to stay aligned with must_use anchors/constraints (no new cites).This subsection argues/surveys ....1) claim / tension 2) why it matters (protocol/evaluation relevance) 3) how the subsection will resolve it (what contrasts/anchors it will use)
Next, we ..., We now turn to ...).3) Rerun the checker until output/SECTION_LOGIC_REPORT.md is PASS, then proceed to paragraph-curator, evaluation-anchor-checker, the final argument-selfloop snapshot, and merge.
Bad (topic setup only):
Tool interfaces vary across agent systems, and many recent works explore different designs.Better (conclusion-first claim):
A central tension in tool interfaces is balancing expressivity with verifiability; as a result, interface contracts often determine which evaluation claims transfer across environments.Bad (meta narration):
This subsection argues that memory is important for agents.Better (content claim):
Memory designs trade off retrieval reliability against write-time contamination, and this trade-off shows up as distinct failure modes under fixed evaluation protocols.Bad (no relation):
X does ... (para 2)Y does ... (para 3)Better (explicit tie):
Whereas X optimizes for <axis>, Y shifts the bottleneck to <axis>; under fixed budgets, this changes whether the reported gains reflect better planning or simply more expensive search.output/SECTION_LOGIC_REPORT.md shows - Status: PASSTODO/…/...) or outline meta markers (Intent:/RQ:/Evidence needs:)uv run python .codex/skills/section-logic-polisher/scripts/run.py --workspace <workspace>Notes:
--workspace <dir>--unit-id <U###>--inputs <semicolon-separated>--outputs <semicolon-separated>--checkpoint <C#>uv run python .codex/skills/section-logic-polisher/scripts/run.py --workspace <workspace>
uv run python .codex/skills/section-logic-polisher/scripts/run.py --workspace <workspace> --outputs output/SECTION_LOGIC_REPORT.md
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,714 | 5,455 | +16% | 1 | 1 | 0% | 331 | 1,867 | +464% | 0 | 0 | — |
case-02 | fail→fail | 5,423 | 6,500 | +20% | 1 | 1 | 0% | 310 | 1,726 | +457% | 0 | 0 | — |
case-03 | fail→fail | 4,532 | 4,914 | +8% | 1 | 1 | 0% | 256 | 1,772 | +592% | 0 | 0 | — |
case-04 | fail→pass | 1,798 | 7,239 | +303% | 1 | 1 | 0% | 258 | 2,810 | +989% | 0 | 0 | — |
case-05 | pass→fail | 6,532 | 7,485 | +15% | 1 | 1 | 0% | 1,215 | 1,626 | +34% | 0 | 0 | — |
case-14 | fail→pass | 11,286 | 2,899 | -74% | 1 | 1 | 0% | 1,657 | 1,890 | +14% | 0 | 0 | — |
case-06 | pass→pass | 10,255 | 8,570 | -16% | 1 | 1 | 0% | 2,179 | 2,879 | +32% | 0 | 0 | — |
case-07 | pass→pass | 8,796 | 4,609 | -48% | 1 | 1 | 0% | 1,271 | 2,179 | +71% | 0 | 0 | — |
case-08 | pass→pass | 8,891 | 5,197 | -42% | 1 | 1 | 0% | 1,603 | 2,272 | +42% | 0 | 0 | — |
case-09 | fail→fail | 10,653 | 3,530 | -67% | 1 | 1 | 0% | 1,888 | 2,055 | +9% | 0 | 0 | — |
case-10 | pass→pass | 7,142 | 4,512 | -37% | 1 | 1 | 0% | 1,084 | 2,182 | +101% | 0 | 0 | — |
case-11 | fail→pass | 9,315 | 3,880 | -58% | 1 | 1 | 0% | 1,335 | 2,018 | +51% | 0 | 0 | — |
case-12 | pass→pass | 7,863 | 6,641 | -16% | 1 | 1 | 0% | 1,223 | 2,280 | +86% | 0 | 0 | — |
case-13 | fail→fail | 6,474 | 3,697 | -43% | 1 | 1 | 0% | 1,192 | 1,967 | +65% | 0 | 0 | — |
case-15 | pass→pass | 12,564 | 6,909 | -45% | 1 | 1 | 0% | 1,850 | 2,490 | +35% | 0 | 0 | — |
case-16 | pass→fail | 9,686 | 2,030 | -79% | 1 | 1 | 0% | 1,476 | 1,726 | +17% | 0 | 0 | — |
case-17 | fail→pass | 7,688 | 2,071 | -73% | 1 | 1 | 0% | 1,424 | 1,764 | +24% | 0 | 0 | — |
case-18 | pass→fail | 8,218 | 1,903 | -77% | 1 | 1 | 0% | 1,196 | 1,709 | +43% | 0 | 0 | — |
case-19 | fail→pass | 7,194 | 1,497 | -79% | 1 | 1 | 0% | 1,030 | 1,651 | +60% | 0 | 0 | — |
case-20 | pass→pass | 8,842 | 1,784 | -80% | 1 | 1 | 0% | 1,428 | 1,699 | +19% | 0 | 0 | — |
case-21 | fail→pass | 11,335 | 1,923 | -83% | 1 | 1 | 0% | 1,630 | 1,666 | +2% | 0 | 0 | — |
case-22 | fail→pass | 8,787 | 2,214 | -75% | 1 | 1 | 0% | 1,387 | 1,688 | +22% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 18 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.