Humanizer 35-Pattern to 25-Pattern Migration Mapping: Complete 3S to 2S Conversion Guide

The Humanizer skill maps original 35-pattern (3S) numbers to new 25-pattern (2S) numbers via a documented translation table where old identifiers consolidate into positions 1-25 (e.g., 1→13, 9→1) with patterns 12 and 23 dropped, enabling seamless migration from legacy versions to v3.0.0+.

The blader/humanizer repository underwent a major reorganization in version 3.0.0, replacing its legacy 35-pattern to 25-pattern migration mapping structure to align with updated AI detection taxonomies. This conversion from the original "3S" numbering scheme to the compact "2S" scheme is fully documented in README.md lines 71-78 and supported by validation scripts to ensure data integrity during upgrades.

Understanding the 3S to 2S Pattern Reorganization

Consolidation Rationale

The original 35 patterns were merged and reordered to eliminate redundancy and align with the latest Wikipedia "Signs of AI writing" taxonomy. This consolidation reduces cognitive load while maintaining comprehensive coverage of AI-generated text indicators, resulting in a stronger, clearer set of 25 detection patterns.

Removed Patterns

Patterns 12 and 23 from the legacy 3S scheme have no equivalents in the new 2S system. According to the source code analysis, these specific indicators were deprecated during consolidation and should be treated as removed during any migration process.

Complete 35-Pattern to 25-Pattern Mapping Table

The authoritative translation between legacy and current numbering is maintained in the repository's README. The full migration mapping is as follows:

Old (3S) New (2S)
1 13
2 17
3 15
4 16
5 17
6 13
7 12
8 18
9 1
10 6
11 7
12 dropped
13 11
14 8
15 19
16 19
17 20
18 20
19 21
20 22
21 23
22 22
23 dropped
24 9
25 13
26 10
27 3
28 4
29 24
30 25
31 2
32 3
33 4
34 5
35 5

Note that multiple old patterns may map to identical new positions (e.g., both 15 and 16 map to 19), reflecting the consolidation of similar detection indicators into unified categories.

Implementing Pattern Translation in Code

Python Dictionary Lookup

Store the mapping as a constant dictionary to translate legacy identifiers at runtime. The translate() function handles dropped patterns by returning None:

OLD_TO_NEW = {
    1: 13, 2: 17, 3: 15, 4: 16, 5: 17, 6: 13, 7: 12, 8: 18,
    9: 1, 10: 6, 11: 7, 12: None, 13: 11, 14: 8, 15: 19,
    16: 19, 17: 20, 18: 20, 19: 21, 20: 22, 21: 23, 22: 22,
    23: None, 24: 9, 25: 13, 26: 10, 27: 3, 28: 4, 29: 24,
    30: 25, 31: 2, 32: 3, 33: 4, 34: 5, 35: 5,
}

def translate(old_number: int) -> int | None:
    """Return the new 2S pattern number or None if the old pattern was dropped."""
    return OLD_TO_NEW.get(old_number)

# Example usage

print(translate(9))   # → 1

print(translate(12))  # → None (pattern removed)

Batch Migration of JSON Data

Automate upgrades of stored pattern references using the translation function:

import json

with open("legacy_patterns.json") as f:
    data = json.load(f)

for entry in data["patterns"]:
    old_id = entry["pattern_id"]
    entry["pattern_id"] = translate(old_id)
    if entry["pattern_id"] is None:
        entry["status"] = "deprecated"

with open("migrated_patterns.json", "w") as f:
    json.dump(data, f, indent=2)

CLI and Prompt References

While the Humanizer CLI in v3.0.0+ accepts only 2S pattern numbers, you may encounter legacy documentation referencing 3S identifiers. When writing custom prompts or automation, always translate old references first:


# Legacy reference

"Analyze using pattern #9 (old scheme)"

# Converted for v3.0.0+ compatibility  

"Analyze using pattern #1 (new 2S scheme)"

Source Files and Validation

The migration mapping is validated against the skill definition to prevent documentation drift. Key files in blader/humanizer include:

  • README.md: Contains the canonical mapping table at lines 71-78 in the "Version history" section, serving as the primary reference for the 35-pattern to 25-pattern conversion.
  • SKILL.md: Defines the current 25-pattern (2S) scheme and serves as the source of truth for new pattern behaviors and descriptions.
  • scripts/validate-package.py: Validates consistency between the README table and SKILL.md definitions, ensuring the migration mapping remains accurate across releases.
  • AGENTS.md: Documents agent-specific packaging requirements that may reference pattern numbers in configuration files.

Summary

  • The 35-pattern to 25-pattern migration mapping consolidates detection indicators while dropping obsolete patterns 12 and 23.
  • Legacy pattern 9 maps to new pattern 1, while patterns 15 and 16 both converge on pattern 19.
  • Implement translation using the OLD_TO_NEW dictionary with None checks for removed patterns.
  • Reference README.md lines 71-78 for the canonical table and scripts/validate-package.py for automated validation.
  • Update all custom prompts and automation scripts to use 2S pattern numbers before deploying Humanizer v3.0.0+.

Frequently Asked Questions

Which patterns were removed in the 3S to 2S migration?

Patterns 12 and 23 from the original 35-pattern scheme were dropped entirely and have no equivalents in the new 25-pattern system. Any automation referencing these specific pattern numbers should flag them as deprecated or remove them entirely during migration to prevent null pointer exceptions.

Where is the official 35-pattern to 25-pattern mapping documented?

The authoritative translation table resides in README.md at lines 71-78 within the "Version history" section of the blader/humanizer repository. This table is tested against SKILL.md via scripts/validate-package.py to ensure the documented mapping matches the actual skill implementation.

How do I handle multiple old patterns mapping to the same new pattern?

When consolidating data, treat converging mappings (such as old patterns 15 and 16 both mapping to new pattern 19) as merging duplicate indicators. The translate() function returns the same integer for both inputs, allowing your migration script to deduplicate entries automatically by checking for existing keys before insertion.

Does the Humanizer CLI accept old 3S pattern numbers?

No, the Humanizer CLI and skill interface in v3.0.0+ exclusively recognize the 2S numbering scheme. You must translate legacy pattern references using the migration table before passing them to current API endpoints or command-line interfaces, as the system no longer maintains backward compatibility for 3S identifiers at runtime.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →