Files
our-claude-skills/custom-skills/82-our-gdrive-organizer/shared/patterns/gotchas.md
Andrew Yim c750fa7f5e feat(our-gdrive-organizer): add new skill at slot 82, rename old 82 → 92
New Python CLI + dual SKILL.md (Code + Desktop) for organizing Google
Drive folders under OurDigital conventions:

- Refresh root README index (preserves manual Topics/Notes between
  AUTO-STRUCTURE markers)
- Ensure per-subfolder README.md meta files
- Propose filename + folder renames (D.intelligence → OurDigital with
  SEO-context caveat documented in patterns/gotchas.md)
- Propose moves for cluttered files (screenshots, temp downloads)
- Sensitive-folder skip list (04_Case Studies, 99_Project Archive,
  *Archive*, 진단*)
- shared/patterns/ gotcha library: canonical-files, canonical-folders,
  categorization-rules, 12 known gotchas — grows over time as the
  system encounters new edge cases

Slash command: /organize. CLI: ~/.local/bin/our-gdrive-organize.

82-tui-design-template renumbered to 92 (no content change) to free
slot 82. AGENTS.md and CLAUDE.md updated for both moves.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:02:45 +09:00

11 KiB
Raw Blame History

Gotchas

Edge cases the system has learned. When in doubt during interactive content-based reorganization, check here first.

Each gotcha follows the format: Pattern → Why it's tricky → Resolution.


Lesson notes for a specific lawyer/doctor/consultant

Pattern: Notes [레슨] SEO 진단 & 관리 수업 - 양제민 변호사 6회차 (대면).gdoc or similar lesson-format file referencing a real client by name.

Why tricky: Looks like training material (it IS a lesson note), but it's client-specific (양제민 variant of 오현이혼상속센터 engagement).

Resolution: Belongs in 99_Project Archive/{NN_그_클라이언트}/, NOT in 98_Training/. Training is for generic, reusable content. Client-specific lesson notes are engagement records.


Quote sheet with D.intelligence Lab- prefix and a client name

Pattern: D.intelligence Lab-SEO Coaching-오현법률사무소-20240612.gsheet

Why tricky: Has both a brand-rebrand candidate (D.intelligence Lab-OurDigital-) AND a real client name that should become OOO. But cell content can't be normalized by filesystem rename.

Resolution:

  1. Filesystem rename: OurDigital-SEO Coaching-OOO 견적-20240612.gsheet
  2. Add to a TODO.md reminding the user to open the sheet in Google Sheets and replace 오현법률사무소 and contact info inside cells with OOO / placeholder text.
  3. Move to 05_Working Template/ once both filesystem AND cell content are neutralized. Until then, leaving the file in place with the rename done is a valid intermediate state.

Files at the root that look like they should be in a subfolder

Pattern: A top-level subfolder root contains 30+ loose files plus 0 subfolders. E.g., a screenshots collection directly at the top of 98_Training/.

Why tricky: The script's MOVE_RULES only catches very specific patterns (Screenshot YYYY-MM-DD…). Manual moves often need judgment — which subfolder should be created, what should be its name?

Resolution: Interactive content-based mode. Claude reads filenames in batches, proposes a subfolder name (matching local language convention — Korean if rest of folder is Korean), confirms with user, then moves with mv. Update the parent README afterward via our-gdrive-organize --scope index.


Korean vs English filename mixing inside one subfolder

Pattern: 02_SEO Audit Toolkit/ contains both English files (OurDigital-on-Pages Elements Kit-20250529.gsheet) and Korean subfolders (참고 자료/, 문서 양식/).

Why tricky: Looks inconsistent at first glance, but is intentional — files use English when they're "OurDigital products" and Korean when they're "Korean-language reference materials."

Resolution: Don't normalize. Language tracks function:

  • OurDigital-authored asset → English filename, OurDigital prefix
  • External / Korean reference → Korean filename
  • Subfolder for grouping Korean references → Korean folder name

Empty subfolders

Pattern: 99_Project Archive/03_소노펠리체CC Local SEO/09_수급 정보/ contains 0 files.

Why tricky: Tempting to delete to "clean up." But empty subfolders often represent reserved engagement phases that the project just didn't reach, or pending document deliveries.

Resolution: Leave empty subfolders alone unless the user explicitly says to clean them up. They don't break anything.


Numbered duplicates: (1), (2) suffixes

Pattern: D.intelligence Lab-SEO Coaching-오현법률사무소-20240612 (1).gsheet exists alongside the same name without the (1).

Why tricky: Looks like a Drive sync duplicate, but cmp shows different bytes — they're DIFFERENT Drive documents that happen to have the same name.

Resolution: cmp the two .gsheet stubs. If different (which they usually are for (N)-suffixed files), preserve both with a suffix like (v1), (v2), or (legacy). Never overwrite blindly. If actually identical bytes, ask user which to keep.


_unsorted/ accumulates over time

Pattern: After several --scope move --apply runs, _unsorted/ accumulates .crdownload / .tmp files that the user never went back to.

Why tricky: These are usually legitimate trash but occasionally a real in-progress download.

Resolution: Don't auto-delete. Periodically prompt the user: "Your _unsorted/ has N files older than 30 days. Want to review?"


A folder that mixes archive + active work

Pattern: A subfolder under 01_Active Workspaces/ contains both ongoing work AND files from a finished engagement that should have been archived.

Why tricky: Hard to tell from filenames alone. Need to check mtimes and content (last-modified-recently → active; older + closure-marker docs → should be archived).

Resolution: Interactive mode. Claude reads file mtimes + samples content, proposes splitting into a new 99_Project Archive/{NN_client}/ entry. User confirms before moving.


D.intelligence vs OurDigital — parent company / child brand

Pattern: Files or folders named D.intelligence …, D intelligence …, or with the legacy D.intelligence Lab- prefix.

Why tricky: D.intelligence is the parent company; OurDigital is its SEO-specialty child brand. The rebrand-to-OurDigital rule only applies when the asset is SEO-related. Non-SEO D.intelligence assets (consulting, data, training in other practices) keep the D.intelligence name because they belong to the parent company, not to OurDigital.

Resolution:

  • Inside an SEO context (02_SEO in Action/, 00_OurDigital/04_SEO/, or any folder whose name contains "SEO"): apply the standard rename D.intelligence … → OurDigital ….
  • Outside SEO context: do not rename. Flag for user review and document the asset's intended owning practice.
  • The RENAME_RULES in code/organizer.py cover three variants (D.intelligence Lab-, D.intelligence, and the no-dot D intelligence typo). The rules don't enforce the SEO-context caveat — that's the caller's responsibility (point the script at an SEO folder, not the whole Drive Stream).

Brand-variant typos that escape the regex

Pattern: A filename uses an off-spec spelling of D.intelligence — e.g., D intelligence SEO Audit & Treatment.pdf (no dot), or OurDigitial-… (transposed letters), or Techincal SEO (transposed).

Why tricky: The standard D\.intelligence regex requires the literal dot, so the no-dot variant slips through. Same for OurDigital typos — they don't match the brand pattern at all and look like normal filenames.

Resolution:

  1. When you find one during a manual review, do the rename via mv and immediately consider whether to add a regex variant to RENAME_RULES.
  2. The current rules cover: D.intelligence Lab-, D.intelligence, and D intelligence (no-dot, word-boundaries to avoid false positives).
  3. Common typos that are NOT in regex (because they're one-off mistakes): OurDigitial, Techincal. Catch with mv during manual review.

Real client names in 예시 자료 모음/

Pattern: Files in 02_…/예시 자료 모음/ that still have real client names in the filename — e.g., OurDigital-SEO Audit-1gada.com-20240703.xlsx, OurDigital-Sono International-Preliminary SEO Audit-20240927.gdoc.

Why tricky: The folder's canonical role is "neutralized example deliverables" — examples to show in pre-sales without exposing real client data. A file with a real client name in this folder is a half-done neutralization. The original engagement copy usually exists elsewhere (99_Project Archive/{NN_client}/ or 04_Case Studies/).

Resolution:

  1. Filesystem rename to neutralize the FILENAME using OOO-style placeholders: OurDigital-OOO 호텔 체인-Preliminary SEO Audit-…gdoc.
  2. Add to a TODO.md reminding the user to also neutralize CELL CONTENT (real names, contact info, URLs, keyword examples) inside the source Sheet/Doc — filesystem rename doesn't touch cell content.
  3. Don't delete the file even though the original exists elsewhere — the neutralized example serves a different purpose (sales / training) than the archived original (engagement record).
  4. If the original doesn't exist elsewhere, copy it to the right archive folder FIRST before neutralizing the example.

Near-duplicate templates across 문서 양식/ and 05_Working Template/

Pattern: Same template name in both 02_…/문서 양식/OurDigital-SEO Audit Template-{date1}.gsheet and 05_Working Template/OurDigital-SEO Audit Template-{date2}.gsheet with different dates (and different Doc IDs).

Why tricky: Looks like the same template at v1 and v2 (good cleanup target — keep the newer, archive the older). But sometimes they're genuinely different templates that just happen to share a name.

Resolution:

  1. cmp the .gsheet stubs first. Always different (different Doc IDs) for files at different dates — that just confirms they're separate Drive Docs, not bytes-identical stubs.
  2. The Doc IDs alone can't tell you whether the cell content is similar. Open both Sheets in Google Drive. Usually one is a direct refinement of the other (older = v1, newer = v2 with added rows/columns).
  3. If clearly v1 / v2 of same template: delete v1, OR move v1 to 05_Working Template/ with (legacy v1) suffix.
  4. If genuinely different (e.g., one is "quick check" and other is "comprehensive"): rename to disambiguate explicitly.
  5. Always defer to the user for the open-and-compare step. Add to TODO.md with both Doc IDs + paths so the user knows what to compare.

Stray screenshot that turns out to be a process diagram

Pattern: A Screenshot_YYYY-MM-DD…png in a folder of templates that the script's MOVE_RULES would normally route to a screenshots/ subdir.

Why tricky: The MOVE_RULES regex (^Screenshot \d{4}-\d{2}-\d{2}…) treats anything with that prefix as junk to be tucked away. But sometimes the screenshot is actually a captured workflow diagram, org chart, or reference visualization that has real value AND a meaningful home elsewhere.

Resolution:

  • Always view the screenshot before moving it (use Read on the .png).
  • If it's a diagram / reference visualization: rename to a descriptive filename and move to the most relevant subfolder (often 참고 자료/ for audit-toolkit context, docs/ for code-related).
  • If it's an actual junk screenshot (UI snapshot during work): apply the default rule and move to screenshots/.
  • The MOVE_RULES regex pattern uses the macOS default Screenshot YYYY-MM-DD at HH.MM.SS AM/PM.png (with spaces). The underscore variant Screenshot_YYYY-MM-DD_at_* does NOT match — catch those manually during content review.

Adding new gotchas

When you (Claude) encounter a new ambiguous case during a content-based reorganization session, add an entry here BEFORE moving on. Format:

### Short pattern title

**Pattern**: filename / structure example.

**Why tricky**: what makes this hard.

**Resolution**: what to do.

---

This is how the system gets smarter over time. The patterns library is the institutional memory.