LLM WikiAccess-protected knowledge portal

WIKI

Confluence Library Crawler Onboarding Docs — Working Spec

AI Summary Purpose Defines the working spec for creating/maintaining library crawler onboarding pages in the Confluence EN space 분석엔진팀 Beta , so future sessions publish pages the same way. Key points Pages live under EN space folder LIB tre

경로ai/wiki/projects/confluence-lib-onboarding-docs.md
카테고리Project
태그#ai-review #cicd #confluence #crawler #docs #documentation #kubernetes #lib #onboarding #portfolio #project #projects #report

# Confluence Library Crawler Onboarding Docs — Working Spec

AI Summary

Purpose:

Key points:

Relevant when:

Do not read full document unless:

Linked documents:

Open Questions

Details

Confluence location map (EN space, spaceId 4023779360)

Parent folder: [LIB] folder id 4023877659 (https://labradorlabs.atlassian.net/wiki/spaces/EN/folder/4023877659)

CrawlerRepo/componentFolder (id)Page title
npmlabrador-scrapers etl_components/npm_crawler[LIB] Javascript (4025024696)[GUID\LIB] Javascript(npm) 크롤러 온보딩 가이드
pypilabrador-scrapers etl_components/pypi_crawler[LIB] Python (4025188557)[GUID\LIB] Python(PyPI) 크롤러 온보딩 가이드
phpcrawler-lib-php[LIB] Php (4025188558)[GUID\LIB] Php(Packagist) 크롤러 온보딩 가이드
golangcrawler-lib-golang[LIB] Go (4025221257)[GUID\LIB] Go(Go Modules) 크롤러 온보딩 가이드
rubycrawler-lib-ruby[LIB] Ruby (4025352384)[GUID\LIB] Ruby(RubyGems) 크롤러 온보딩 가이드
javacrawler-lib-java[LIB] Java (4025745506)[GUID\LIB] Java(Maven) 크롤러 온보딩 가이드
dotnetcrawler-lib-dotnet[C#] Dotnet/Nuget (4025188560, under [LIB] C-Sharp)[GUID\LIB] C#(NuGet) 크롤러 온보딩 가이드
swift (CocoaPods)crawler-lib-swift[SWIFT] Cocoapods (4025286832, under [LIB] Swift)[GUID\LIB] Swift(CocoaPods) 크롤러 온보딩 가이드
spmlabrador-scrapers etl_components/spm_scraper[SWIFT] Swift Package Index (4025352385)[GUID\LIB] Swift(Swift Package Index) 크롤러 온보딩 가이드
conanlabrador-scrapers etl_components/conan_crawler[C_CPP] Conan (4025352390)[GUID\LIB] C/C++(Conan) 크롤러 온보딩 가이드 (pageId 4155572232)
vcpkglabrador-scrapers etl_components/vcpkg_crawler[C_CPP] vcpkg (4025024709)[GUID\LIB] C/C++(vcpkg) 크롤러 온보딩 가이드
hunterlabrador-scrapers etl_components/lib_hunter_crawler[C_CPP] Hunter (4025221266)[GUID\LIB] C/C++(Hunter) 크롤러 온보딩 가이드

Page ids (created 2026-07-02): npm 4155375649, pypi 4155375669, php 4155506704, conan 4155572232, golang 4156227631, vcpkg 4156096559, spm 4156227651, swift(CocoaPods) 4156424213, ruby 4156129314, hunter 4156260364, java 4156260412, dotnet 4156620917.

Java / dotnet publication note: Claude's HTML create path was blocked by Cloudflare WAF on the Anthropic MCP gateway (SQLi rule false-positive on SQL-heavy bodies). Codex first published both pages through the Atlassian Rovo Markdown path, then updated them through the Rovo ADF path to match the npm-style structure. Verified by ADF read: both pages now have a native TOC macro, Forge mermaid-diagram extension, and expand("Diagram") containing codeBlock(language=mermaid).

2026-07-02 follow-up: Codex rewrote the remaining 10 pages through Atlassian Rovo ADF after the user allowed the shorter "option 2" reorganization. The pages now use the same native TOC + Forge mermaid-diagram extension + collapsible Mermaid source pattern, and include a collapsible SQL/schema block sourced from live DB metadata. DB credentials were read locally from crawler config.ini files only for connection and were not copied into Confluence or this wiki. Java/dotnet keep detailed fixed-width ADF tables; the other pages use shorter 8-section onboarding bodies to avoid oversized pages. Representative ADF read-back verified the vcpkg page contains expand("테이블 스키마 (DB 확인 결과)"), codeBlock(language=sql), the Forge Mermaid extension, and expand("Diagram").

Schema note: gatheringdb.TB_COMP_LIB_SWIFT_LIST was referenced by crawler code but was not present in live DB metadata on 2026-07-02, so the Swift(CocoaPods) page records that absence instead of inventing a schema.

2026-07-03 consistency pass (single agent, one session): the 2026-07-02 pages had diverged because multiple agents drafted them separately. A single agent re-standardized the 9 non-reference pages to one template. Standardized pages: pypi 4155375669, php 4155506704, conan 4155572232, golang 4156227631, vcpkg 4156096559, spm 4156227651, swift(CocoaPods) 4156424213, ruby 4156129314, hunter 4156260364. Left untouched as reference/exemplars: npm 4155375649 (format ref), java 4156260412 (diagram-style model), dotnet 4156620917 (already tables + specific diagram). Changes applied uniformly:

2026-07-03 per-language 개선 이력 Confluence 페이지 12종 생성: 온보딩 페이지 세트와 동일하게, 각 언어 폴더에 [GUID|LIB] <Lang>(<Registry>) 크롤러 개선 이력 새 페이지를 만들어 2026-04 이후 git 커밋 기반 누락 개선 항목만(결과 제외) 표로 정리(개선 타이틀·배경/문제·변경 내용·커밋/시기). PROCESSED 세분화(ladder)와 재시도 backoff 시간 확대를 명시 행으로 포함. 페이지 ids: npm 4158521347, pypi 4158554113, php 4158619649, ruby 4158685185, go 4158685206, java 4158914561, dotnet 4158980097, swift(CocoaPods) 4158521378, spm 4159078401, conan 4158947336, vcpkg 4158652421, hunter 4159012867. createConfluencePage(contentFormat=html)로 생성 — 이번엔 dotnet도 HTML로 통과(SQL 없는 본문). 커밋 해시는 각 repo git log --since=2026-04-01에서 인용(crawler-lib-* 및 labrador-scrapers etl_components).

2026-07-03 sequence-diagram overhaul (code-grounded): the §5 diagrams had been generic placeholders. 10 read-only code-reader agents investigated each crawler's actual crawl loop (in ~/labrador/crawler/crawler-lib-* and ~/labrador/platform/labrador-scrapers/etl_components/*); a single agent then authored all diagrams for consistency. Diagrams now show real work-queue SELECT (with PROCESSED/ladder WHERE), real external GET URLs, and UPSERT targets. Key code facts captured: npm/pypi = async workers, LIST work-queue retry ladder (0/30~33), registry _changes/simple+rss list refresh is a SEPARATE run, per-package (+pypi per-version) json, SPDX cache from TB_LICENSE_V2, AI License API POST http://211.115.125.171/api/v1/licenses; npm does NOT write TB_COMP_LIB_LICENSE_JAVASCRIPT (declared unused) whereas pypi/php/ruby/swift/spm DO write their LICENSE_* table. php = changes.json feed + ladder(30~35). ruby = timeframe_versions.json 7-day feed → enqueue → claim(0,30~33→20~24). golang = index.golang.org + proxy.golang.org(.mod/.info) + pkg.go.dev, claim FOR UPDATE SKIP LOCKED, ladder processing 20~29 / retry 30~38 / exhausted 39 (earlier page said 30~34 — corrected). swift(CocoaPods) = git sparse-checkout of github.com/CocoaPods/Specs, no LIST table used. conan/vcpkg/hunter = multi-stage separate processes (--scraper), git-clone upstream + SELECT RAW (LEFT) JOIN between stages; conan SORT_ORDER inversion CONFIRMED in code (version assigns 0=newest via reversed(), product picks MAX(SORT_ORDER)=oldest); vcpkg SORT_ORDER increases=newest (no inversion); hunter uses JVM sort-gen jar + GitHub GraphQL in archive_raw. spm = sitemap.xml + GitHub /tags HTML scrape (not REST) + vuln RAW→V1→UPDATE VERSION_SPI.VULN_INFO; --target-db flag. SECURITY (surfaced repeatedly, already tracked in worklogs): hardcoded GitHub PAT in several crawlers' util/licenseeUtil.py — flagged only, values never copied to Confluence/wiki. java/dotnet were then also brought to the same code-grounded diagram style via 2 more read-only investigators. IMPORTANT java correction: the meta-worker split (runSkeleton/runMeta, 89=claim, CRC32 sharding, entrypoints main_all/main_worker) is now MERGED to master (earlier W26 worklog called it unmerged) — but the DEPLOYED entry is app/main.pyrun() (single process, 5-min) which uses the non-sharded selectors and never touches 89 (states 1/90/91~97/98/88/99), matching the live DB; app/main_index.py (daily) supplies MAVEN_ARCHIVE rows that run() consumes. Java §4/§7 wording updated accordingly (89/sharding = merged main_worker path, not used by deployed run()). Maven index source is Nexus .index/*.gz (pure-Python fetcher, no index-helper jar in this build); POM fallback order MavenCentral(search.maven.org/remotecontent)→Jenkins→Clojars→Cloudera→Eclipse→AtlassianExternal→MavenGoogle. dotnet: work unit is a catalog PAGE URL, SELECT path FROM TB_COMP_LIB_DOTNET_LIST WHERE processed=0 LIMIT :start,100, catalog index→page→leaf GETs, all-or-nothing page marking (any leaf fail → page stays 0), flatcontainer missing-version backfill, license order NuGet/SPDX→GitHub License API→clone+licensee→AI; dependency table insert is commented out. dotnet HTML update is WAF-blocked so it was updated via the ADF path (mermaid Forge macro index=0, no SQL block).

2026-07-03 Java §4 accuracy fix: verified the Java(Maven) data-model section against live DB + ai/repo-notes/crawler-lib-java.md. Findings: table names/schemas were correct (archive+version in gatheringdb, product in shared labradordb.TB_COMP_LIB_PRODUCT — NOT the legacy gatheringdb.TB_COMP_LIB_PRODUCT_MAVEN/VERSION_MAVEN from the old Java pipeline). BUT the VERSION_JAVA role described 89=claim + sharded meta-worker, which is the feature/maven-metaworker-split branch (unmerged/undeployed per W26 worklog line 798-805); the live/deployed distribution has NO 89 and 91~98=0. Corrected §4 role (and aligned §3 pipeline / §6 schedule / §7 "Pending 해석") to the deployed states — 1=완료, 90=스켈레톤, 91~97=재시도, 98=포기, 88=백필 시드, 99=레거시(6.9M 미사용) — and marked 89/샤딩 as pending-branch design. Also added the SQL schema expand (MAVEN_ARCHIVE + VERSION_JAVA + labradordb.PRODUCT) that Java alone was missing; HTML update went through (java body does not trip the WAF) and the mermaid macro auto-shifted to guestParams.index=1. dotnet still has no SQL expand block (its body only trips the WAF via HTML; can be added later via the ADF path if wanted).

2026-07-03 table-sizing pass: on request, unified ALL 12 pages' tables to a fixed width:1200 centered layout with one column-width scheme — 저장소 200/1000, 파이프라인 170/270/500/260, 데이터 모델 430/770, 이슈 260/940. HTML shortcut confirmed: setting data-colwidth only on the header row cells + data-width="1200" on the <table> propagates the colwidth to every body cell automatically (verified by ADF read-back on conan). npm/java/dotnet were re-sent verbatim (content/diagram unchanged) only to normalize their table geometry (npm/java pipeline had been 1260, dotnet 1280). dotnet's HTML body reliably tripped the Cloudflare WAF on the anthropic.com MCP gateway (blocked twice); re-sending the SAME page as contentFormat: adf (JSON, no HTML <code> tags) went through — so the WAF trigger is the HTML serialization, not the text. Prefer the ADF path as the fallback when an HTML update is WAF-blocked.

IMPORTANT publishing learning (supersedes the 2026-07-02 WAF note for updates): updateConfluencePage with contentFormat: html succeeded on all 9 SQL-heavy bodies (no Cloudflare WAF block). The HTML→ADF converter auto-inserts the Forge mermaid-diagram extension + expand("Diagram") from a bare <pre><code class="language-mermaid"> block, and it sets guestParams.index to the mermaid code block's zero-based position among ALL code blocks on the page. Because the SQL schema expand is code-block 0 and the mermaid block is code-block 1, the macro correctly gets index:1 automatically — no hand-built extension node needed. Verified by ADF read-back on conan and golang. Escape only <>& inside code blocks (mermaid ->>-&gt;&gt;). DB credentials were used locally by the MCP connection only and never written to Confluence or this wiki.

Title / naming convention

Team rule (space homepage 4023780023): every doc is [Prefix|System] 제목.

Page structure (fixed 8 sections, Korean)

  1. panel-info intro (작성 기준 date) → 1. 개요2. 저장소 정보 (table) → 3. 수집 파이프라인4. 데이터 모델 (주요 테이블) (table) → 5. 시퀀스 다이어그램6. 스케줄 및 운영7. 알려진 이슈 및 주의사항. (2026-07-03: 8. 참고 섹션은 전 페이지에서 삭제 — 이제 7섹션으로 끝남.)
  2. Uncertain facts written as Needs confirmation, never invented. Secrets/tokens/DB credentials must NOT be reproduced (flag their existence only).

Mermaid rule (IMPORTANT — converter behavior)

Publishing pipeline (repeatable)

  1. Per-crawler analysis agent reads repo note + actual code + labrador-data-platform/dags/, writes <key>.html (with <!--MERMAID_CODE--> placeholder) + <key>.mmd (raw mermaid).
  2. inject_mermaid.js escapes the mmd and injects → <key>.final.html; strip macro div/details → <key>.pub.html.
  3. Create page via MCP createConfluencePage (contentFormat html, spaceId 4023779360, parentId = language folder id).
  4. Evaluation loop (superloopy evidence gate): rubric = accuracy 35 / completeness 25 / diagram 20 / convention 10 / readability 10; pass ≥95; evaluator spot-checks claims against repo code. Fix and re-evaluate until pass.

Notable findings recorded during 2026-07-02 run