Files
Andrew Yim 2ee018a146 docs(our-gdrive-organizer): add 3 gotchas from Brand in Action audit
- D_intelligence (underscore) — typo, NOT a regex variant. Fix one-off
  via mv; do not widen RENAME_RULES (false-positive risk on legit
  underscore-separator filenames).
- Externally-generated filenames vs OurDigital convention. Default to
  normalize {Client}_/Client_/client_ → CLIENT- inside Active Workspaces;
  drop 14-digit timestamps to YYYYMMDD; preserve only when an external
  system requires the literal name.
- Reference library naming inconsistency — DO NOT bulk-normalize. Mixed
  naming reflects source provenance (Slideshare slugs, vendor whitepapers,
  Korean blog captures). Group by topic into subfolders instead
  (frameworks/, examples/, ko/) when count exceeds ~15 at root.

Patterns library now at 15 gotchas. Validated by live application during
01_Brand in Action audit.

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

15 KiB
Raw Permalink 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.

D_intelligence (underscore) — typo, NOT a regex variant

Pattern: A file uses D_intelligence with an underscore separator between D and intelligence instead of a dot. E.g., D_intelligence_홍아현_프로젝트부속계약서_20260501.gdoc.

Why tricky: It LOOKS like a third regex-escaping variant of the brand prefix (alongside D.intelligence with dot and D intelligence with space, both of which ARE valid spellings the parent company uses). But underscore is wrong — D.intelligence is always written with a dot. The underscore form is purely an accidental typo (probably auto-generated by a system that sanitized dots to underscores).

Resolution:

  1. Treat as a one-off typo fix: rename D_intelligenceD.intelligence via mv. The rest of the filename keeps its underscores (those are legitimate field separators in the file's own naming scheme).
  2. Do NOT add to RENAME_RULES. Adding a D_intelligence regex would cause false positives in any filename that uses underscores as field separators between something ending in D and something starting with intelligence — unlikely but defensively avoid widening the rules.
  3. Same applies to other one-off accidental variants: fix with mv, document the fix here, but don't widen the rules.

Externally-generated filenames vs OurDigital convention

Pattern: Files in an active client workspace whose names come from external systems and don't follow OurDigital convention. E.g.:

  • Jamie_Naver_Booking_Products_v1.0.gsheet (Title_Case_With_Underscores — looks like a Google Sheets name template)
  • jam_medical_advertising_review_guide_20251119154552.gslides (lowercase + 14-digit timestamp — looks like an export from a publishing tool)
  • jamie_monthly_sow_standard.docx (lowercase + underscores — looks like a Word template name)

Why tricky: These names are functional and the user might prefer to preserve them as-is to maintain traceability with the originating system. But they violate the canonical {ClientPrefix}-{topic}-{date}.{ext} pattern from canonical-files.md, which makes the folder feel inconsistent.

Resolution:

  • The OurDigital convention wins inside 01_Active Workspaces/{NN_client}/ because the user owns that folder's organization. Normalize:
    • Jamie_JAM-
    • jamie_JAM-
    • jam_JAM-
    • _ field separators → - (or space inside hyphenated phrases)
    • Long timestamps YYYYMMDDhhmmssYYYYMMDD (drop time portion)
    • Title_Case_Words → Title Case Words (use spaces inside hyphen-separated phrases)
  • Default to normalizing unless the user says preserve. The originating system can usually re-export with a new name if needed.
  • If the file is truly the system's source-of-truth filename (e.g., a webhook expects an exact filename match), keep it and note WHY in a README inside the same folder.

Reference library naming inconsistency (do NOT normalize)

Pattern: A reference folder like 90_Brand Management Reference/ contains 20+ image files imported as a batch from various sources, with mixed naming conventions (Title_Case, lowercase-hyphens, Korean-spaces, auto-generated junk).

Why tricky: It's tempting to normalize all the names for consistency. But the inconsistency reflects the varied sources of the references — each filename traces back to its origin (Slideshare slug, vendor whitepaper, screenshot of a textbook page, Korean blog).

Resolution:

  • Do not bulk-rename reference filenames for cosmetic consistency. They have provenance value as-is.
  • DO fix individual filenames that are functionally broken:
    • Double extensions (foo.png--example.pngfoo-example.png)
    • Filesystem-illegal characters
    • Truncated names that lost the meaning
  • DO group by topic into subfolders if the count exceeds ~15 files at the root: frameworks/, examples/, ko/ (or whatever fits the content). Subfolders provide structure without touching the legitimate filename diversity.

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.