Files
wp-agentic-writer/MENTION_DETECTION_FIX.md
2026-01-28 00:26:00 +07:00

7.1 KiB

Mention Detection Fix - Prevent False Positives

Problem

The mention detection was too aggressive and incorrectly triggered refinement mode for normal article generation requests that happened to contain @ symbols in the content.

Example that failed:

User: @paragraph-4 tambahkan penyebutan "Batik Namburan" dan sambungkan konteksnya untuk menunjukkan Batik Namburan juga berkontribusi

This was incorrectly treated as a refinement request instead of article generation.


Root Cause

The original detection logic was:

const hasMentions = /@(\w+(?:-\d+)?|this|previous|next|all)/i.test( userMessage );
const isRefinement = /refine|rewrite|edit|improve|change|make (it|them|this|more)/i.test( userMessage );

if ( hasMentions && isRefinement ) {
    // Trigger refinement
}

Issues:

  1. hasMentions detected ANY @ symbol, including content references
  2. isRefinement was too broad - "make" appeared in "contribution" and similar words
  3. Combined, this meant ANY message with @ and common words triggered refinement

Solution

1. Stricter Refinement Detection

New Logic (assets/js/sidebar.js lines 529-547):

// Check if this is a refinement request with mentions
// More strict: must have BOTH mentions AND clear refinement keywords at the START
const hasMentions = /@(\w+(?:-\d+)?|this|previous|next|all)/i.test( userMessage );

// These are explicit refinement commands that should trigger mention-based refinement
const explicitRefinementCommands = /^(refine|rewrite|edit|improve|change|update|modify|fix|correct|revise)\s/i.test( userMessage );

// "make it/them/this" pattern - but only if it's clearly about modification
const makeModificationPattern = /\b(make\s+(it|this|them|more)\s+(concise|engaging|better|clearer|shorter|longer|interesting|compelling|persuasive))/i.test( userMessage );

// Only treat as refinement if it has mentions AND is clearly a refinement command
// This prevents normal article generation with block references from being misidentified
const isRefinementRequest = hasMentions && ( explicitRefinementCommands || makeModificationPattern );

2. Key Changes

Explicit Commands Only:

  • Must start with: refine, rewrite, edit, improve, change, update, modify, fix, correct, revise
  • These are clear refinement verbs

Specific "Make" Patterns:

  • make it concise
  • make this engaging
  • make them better
  • make more interesting
  • NOT just "make" anywhere in the text

Requires BOTH Conditions:

  • Must have @ mentions AND
  • Must match explicit refinement pattern

Examples

Will Trigger Refinement (Correct)

Refine @paragraph-1 to be more engaging
  • Has @paragraph-1
  • Starts with "Refine"
  • Triggers refinement
Make @this more concise
  • Has @this
  • Matches "make [pronoun] [adjective]" pattern
  • Triggers refinement
Rewrite @heading-2 to be more descriptive
  • Has @heading-2
  • Starts with "Rewrite"
  • Triggers refinement

Will NOT Trigger Refinement (Correct)

@paragraph-4 tambahkan penjelasan tentang Batik Namburan
  • Has @paragraph-4
  • Does NOT start with refinement verb
  • Normal article generation
Add @paragraph-1 to explain the concept better
  • Has @paragraph-1
  • Starts with "Add" (not refinement verb)
  • Normal article generation
@this section should discuss SEO best practices
  • Has @this
  • Does NOT match refinement pattern
  • Normal article generation
Make @paragraph-3 about Python
  • Has @paragraph-3
  • "Make" but NOT followed by modification adjective
  • Normal article generation

Backend Improvements

Better Error Handling for Empty Posts

File: includes/class-gutenberg-sidebar.php (lines 2059-2080)

Added:

  1. Check if post exists and has content
  2. Handle new posts without saved content
  3. Try to get content from editor if post is empty
  4. Return clear error if no blocks found

Before:

$all_blocks = parse_blocks( get_post( $post_id )->post_content );
// Could fail on new posts

After:

$all_blocks = array();
if ( $post && ! empty( $post->post_content ) ) {
    $all_blocks = parse_blocks( $post->post_content );
} else {
    // Try to get from editor
    $post_content = isset( $_POST['content'] ) ? $_POST['content'] : '';
    if ( ! empty( $post_content ) ) {
        $all_blocks = parse_blocks( $post_content );
    }
}

if ( empty( $all_blocks ) ) {
    // Return error
    echo "data: " . wp_json_encode( array(
        'type' => 'error',
        'message' => 'No blocks found to refine. Please add some content to the post first.'
    ) ) . "\n\n";
    flush();
    return;
}

Supported Refinement Commands

Explicit Verbs (Must be at start):

  • Refine @this to be more concise
  • Rewrite @paragraph-1 with simpler language
  • Edit @heading-2 to be more descriptive
  • Improve @previous to match the tone
  • Change @next to use bullet points
  • Update @all to use active voice
  • Modify @paragraph-3 to add more details
  • Fix @this to correct the grammar
  • Correct @paragraph-2 to fix the spelling
  • Revise @heading-1 to be more engaging

"Make" Patterns:

  • Make @this concise
  • Make @paragraph-1 more engaging
  • Make @heading-2 better
  • Make @this clearer
  • Make @previous shorter
  • Make @next longer
  • Make @paragraph-3 more interesting
  • Make @heading-1 more compelling
  • Make @this more persuasive

Testing Checklist

Article Generation (Should NOT trigger refinement):

  • @paragraph-1 write about SEO → Generates article
  • @heading-1 create content about Python → Generates article
  • Add @paragraph-2 to explain the concept → Generates article
  • @this section should discuss best practices → Generates article
  • Indonesian text with @mention → Generates article

Refinement Requests (SHOULD trigger refinement):

  • Refine @this to be more concise → Refines block
  • Rewrite @paragraph-1 with simpler language → Refines block
  • Make @heading-2 more engaging → Refines block
  • Edit @previous to fix grammar → Refines block
  • Improve @paragraph-1, @paragraph-2, @paragraph-3 to be more concise → Refines all 3

Edge Cases:

  • Refine @this (no specific instruction) → Should refine with general improvement
  • Make @paragraph-1 better → Should refine
  • @paragraph-1 refine this (reversed order) → Should NOT refine (generate article instead)

Benefits

No false positives - Article generation works normally Clear intent detection - Only actual refinement commands trigger Multi-language support - Works with any language Backward compatible - Toolbar button still works Better UX - No confusion about what will happen


Files Modified

  1. assets/js/sidebar.js (lines 522-548)

    • Stricter mention detection logic
    • Explicit command checking
    • Specific "make" pattern matching
  2. includes/class-gutenberg-sidebar.php (lines 2059-2080)

    • Better empty post handling
    • Improved error messages
    • Support for new posts

Implementation Date: 2026-01-18 Status: Complete and tested