LLM WikiAccess-protected knowledge portal

WIKI

2026-W34 Worklog

AI Summary Purpose Record cross repository development and review work for ISO week 34 of 2026. Key points 2026 08 20 3 Built the Kmong Data Engineer tailored application package from Remember posting 334810. The evidence audit maps 52/52 r

경로ai/worklog/2026/2026-W34.md
카테고리Worklog
태그#crawler #portfolio #report #w34 #worklog

# 2026-W34 Worklog

AI Summary

Purpose:

Key points:

from Remember posting 334810. The evidence audit maps 52/52 resume claims, 21/21 numeric claims, and 13/13 portfolio-only claims. The final A4 artifacts are a two-page resume and six-page portfolio, with CEO/CTO/Tech Lead reviews at 96/97/98 and both visual-QA lanes passing. Deterministic quality is 94.7/100 because verified experience covers 8/10 must-have and 2/7 preferred rows; Spark, production recommendation/ranking serving, and formal DW remain honest gaps. The package is therefore DONE_WITH_CONCERNS and was not copied into the final-submission archive.

and Korean portfolio. Added source captures for DT/4209377355 and DT/4211146807 + DT/4212457542, corrected the stale RHEL summary from the old dimension/view and delete-reinsert draft to the current three-table + row-diff design, and added two evidence-bounded portfolio entries: RHEL VEX collection redesign and crawler-source legal/operating governance. Both are explicitly labeled as design/pre-review work, not deployed impact or completed legal approval.

public/OSS sources, conditional sources requiring rate/API/robots controls, and restricted sources requiring a supported interface, alternative data, or written agreement. The customer-operated collection project is distinct from LabradorLabs' own third-party redistribution; the latter remains unresolved.

4211605514) for the 2026-08-20 14:00 customer meeting on crawler legal review. Per user, page v2 carries ONLY the two prep items from 조학수 CTO's announcement: ① crawl-site inventory refreshed against the live crawler fleet (file components excluded), ② per-source legal pre-review with risk grades (Snyk / GitLab gemnasium-db flagged high). v3 merged the site table and the legal table into one, turned URLs into links, and dropped in-progress/ops-status remarks. libraries.io was removed from the page — user states it is no longer used by the PyPI crawler (2026-08-19); the code on this host still references it, so verify on next pypi_crawler work. The scope-proposal table, IP/know-how boundary framing (meeting conclusions 5–6) and prep checklist were removed from the page and preserved in this worklog's 2026-08-19 details. Base doc DT/3010625669 left untouched.

based on the user's result update. Updated the Drive final-archive index, the Korean application tracker and web page, and the durable career-transition wiki. Recorded a source-backed retrospective that separates confirmed status from inferred causes and carries concrete next-resume actions.

once more. The surrogate PRODUCT_KEY / MODULE_KEY dimensions are gone; the CPE string is the key and MODULE is a single column. Five tables plus a view became three. The source models the data as CPE -> package -> fixed version, so keying on the CPE reproduces that model directly and the source's own bubblewrap example is literally three rows differing only in CPE — which is also the clearest way to explain the table to a reviewer. Cost is the CPE repeated across ~4.9M rows (~200 MB) against 14.7 GB today. Confluence at v7, rewritten in 개조식 with tables instead of prose.

(4149674090) is the spine rather than an appendix, at the user's instruction. Confluence DT/4209377355 v5 now runs: what the source fixed → how it is implemented → measured answers to what it left open → what is outside its scope. Also corrected the matching key: the host CPE string is NOT the join key. Measured, a literal CPE join matches 27.3% of fixed rows and drops the 38.2% under AppStream, while MAIN and the entitled channel disagree on the fixed EVR in 96.9% of comparable cases — so the key is (OS_MAJOR, SUPPORT_CHANNEL) derived from the CPE, expanded to the repo streams the host has. That vindicates the source document's own line that "CPE가 직접적으로 필요하지는 않음".

them against measurement rather than intuition — the EVR tie-break was rationalized, not verified; a primary-key collision would have aborted the load; the match-time rule for FIXED-vs-AFFECTED was missing entirely; and the serving DB turned out to be the binlog master shipping to customer on-premise servers, which makes write volume a product constraint. Confluence page at v3.

[os 패키지 취약점 - v4] Red Hat, a child of the empty v4 hub page 4209180746, following the v3 naming convention. Confluence Cloud auto-converts ```mermaid code blocks into native Mermaid diagram macros, so the three diagrams (data flow with table placement, ERD, decision flow) render rather than sit as code.

will be rebuilt, rewrote the page as a greenfield design spec grounded in the full 63,152-document VEX corpus. Scope A vs B row counts, CPE resolution coverage, EVR-collapse rate, module inventory, parse throughput all measured.

reported for ServerCare, ahead of the table-structure 협의 agreed in the 2026-08-04 AI engine team meeting. Added ai/wiki/projects/rhel-vex-vuln-collection.md.

crawler in labrador-scrapers/etl_components/os_pkg_vuln/rhel_crawler has been pulling security.access.redhat.com/data/csaf/v2/vex/ (full .tar.zst archive + changes.csv incremental) since at least 2025-10. The problem is the parse stage, which still interprets VEX with OVAL-era assumptions.

1. _get_os_versions() fans one product's fix across every minor of the major; OS_VERSION_EDITION = 'generated' rows dominate the table. 2. build_thresholds_from_fixed_nevra() keeps only the major of the first fixed NEVRA. CVE-2024-42472 flatpak has fixes for majors 7/8/9; only 7 is written. 3. Module conditions (::mysql:8.0) break NEVRA_RE — parsed architecture becomes "0" — and are never applied at match time. 75 such product_ids in CVE-2022-21607 alone. 4. PRODUCT_RE truncates package names at the first hyphen: gstreamer-plugins is stored as gstreamer, compat-glibc as compat. 5. No CPE filter, so 5Client-OracleJava-*, CRB-*, NFV-*, 4AS-SAP and other non-OS products land in the OS table. 6. red_hat_enterprise_linux_ai_(rhel_ai)_3 is parsed as RHEL 3. 7. ARCHITECTURE is copied from an arbitrary first NEVRA and sits in the PK: src 1.90M / aarch64 1.30M / x86_64 0.42M of 3.71M rows.

10.4 GB data / 4.3 GB index; TB_OS_PKG_VULN_RHEL_RAW_STATUS 723,247 rows. Debian is 261K rows and Alpine 782K by comparison.

to the product_name node and take version + subscription channel + repo stream from its CPE only; store one row per (CVE, product, package, module) with no minor fan-out; move host resolution to match time using agent-reported CPE, enabled dnf modules and kernel-rt presence. Draft two-table structure and a W34–W39 phase plan against the end-of-September feature deadline are in the wiki page.

required, not optional), known_not_affected discarded entirely, a per-batch list-reuse bug that lets one CVE's fix suppress another CVE's known_affected row, a runtime dependency on endoflife.date, and a hardcoded production DB URI with credentials as a default argument in both crawler classes.

Relevant when:

API definition for the AI engine team.

Do not read full document unless:

Linked documents:

Open Questions

4–5 is unresolved; it gates the CPE reject list.

RHEL-derivative hosts (no subscription-manager, so no /etc/pki/product/*.pem).

Details

2026-08-19 — 미래아카데미 크롤러 법적 이슈 사전 검토 페이지

Context: the customer (미래아카데미, ISMP 2차년도) asked to self-collect component/vulnerability/license data to cut external data-license cost, and a 2026-08-20 14:00 meeting (담당관·과장) covers "크롤러 수집 시 법적 이슈 검토". The plan under discussion delivers RAW collection only, excluding know-how and patented tech (CENTRIS/VUDDY/XVDB) — meeting minutes 4199350485 conclusions 5–6.

Created Confluence page DT/4211146807 (크롤러 수집 사이트 현행화 및 법적 이슈 사전 검토 (2026-08-20 미팅)) under "26. 미래아카데미" (4211605514):

licenses; exclude file, function, binary components, code-level vuln (VUDDY/XVDB-adjacent), LPP/CTI; EOL, AI-model, AI license extraction marked 결정 필요. All framed as (안) — decisions left to the meeting (review-docs rule).

etl_components + labrador-data-platform DAGs + in-code URLs), base doc DT/3010625669 (2025-12) untouched. New vs base doc: OSV (osv-vulnerabilities GCS bucket), NVD JSON feed crawler, OpenSSF malicious-packages, SPM/Swift Package Index, server OS-package vuln DAGs (alpine/debian/ubuntu/rhel; RHEL = CSAF/VEX v4 redesign), Conan switched to conan-center-index clone. PHP/NuGet/RubyGems have no data-platform DAG — marked 운영 상태 확인 필요.

producer rights, collecting-party identity for ToS/API keys — customer-name collection is safer than collect-and-redistribute, robots/rate-limit compliance, maintainer PII in registry metadata) + per-source table with risk grades. High-risk: Snyk web crawling (commercial curated DB), GitLab gemnasium-db (license restricts commercial use outside GitLab). libraries.io (CC-BY-SA share-alike) was initially flagged from code inspection, but the user states it is no longer used by the PyPI crawler (2026-08-19) — removed from the page in v3; host code still references it, verify on next pypi_crawler work. All "known conditions" labeled as pre-check requiring original-text verification.

vs patents) + contract clauses proposal, grounded in meeting conclusions 5–6.

materials, legal pre-review, collecting-party question, legal-team review decision).

Sources: Confluence 3010625669 (base URL doc), 4199350485 (2026-08-09 회의록), 4197941878 (고객 요구사항 정리), 4198629558 (ISMP CDBVDB 방안), host fleet inspection 2026-08-19.

Update (same day): user found v1 too complex — the Confluence page (v2) now carries ONLY the two prep items from 조학수 CTO's meeting announcement (site materials + legal pre-review). The sections below were REMOVED from the page and are preserved here instead. If needed later, they can be re-published as a separate internal page (do not put them back on the meeting page).

Update 2 (v3–v4, user corrections for the customer build):

from the vulnerability rows; noted in the page's 제외 line.

page now lists redhat.com/security/data/oval/v2). Note the base URL doc's remark says Red Hat OVAL stopped exposing data and internal collection moved to CSAF/VEX — flag this tension before implementation.

Maven Central (repo1.maven.org + search.maven.org), Cloudera (repository.cloudera.com), Atlassian (packages.atlassian.com). The 9-repo list (WSO2/Liferay/Jenkins/Eclipse/Clojars/Google 등) in the base doc is historical; Google Maven belongs to the excluded binary crawler.

항목/수집처/방안·주기/리스크 및 사유/확인 필요), URLs as links (not code spans), multi-URL cells as bullet lists, per-row risk grade now carries a brief reason, ops-status remarks ("운영 중", "재설계 진행 중" 등) dropped.

(NVD developers/terms-of-use, cve.org TermsOfUse, KEV catalog page — cisa.gov blocks bots so the license.txt path was not linked, first.org/epss, gemnasium-db LICENSE.md, github advisory-database, npm/PyPI/NuGet/RubyGems terms, vendor legal hubs). Verified live before linking: NVD ToU, nuget.org Terms, gemnasium-db LICENSE.md blob; PyPI ToU redirects to policies.python.org/pypi.org/Terms-of-Use/ (final URL used).

Update 3 — vendor ToS actually read (2026-08-19; page NOT edited — user is editing it themselves and asked for a report only):

prohibits "any use of data mining, robots, or similar data gathering and extraction tools" and any commercial reproduction/exploitation without express written consent. Only docs.aws.amazon.com is CC-BY-SA-4.0, and ALAS is not under docs. → ALAS HTML crawling is textually prohibited: risk should move 중→상. Mitigation to investigate: Amazon Linux repo metadata (updateinfo) meant for machine consumption, or written consent.

WebFetch gets 403): "You agree not to use any robot, spider, scraper or other automated means to access the Site … without Oracle's express written permission"; Materials clause limits use to personal/informational/ noncommercial. The OVAL directory itself (linux.oracle.com/security/oval) is a bare file listing with no license text. → textually 상, though the OVAL feed exists precisely for scanner consumption; written confirmation recommended.

"robot, spider, crawler, scraper or other automated means … to extract data" and collecting/copying/distributing Materials; open-source components keep their own licenses. → 중~상; the repo exists for build-tool access, so written inquiry is the clean path.

/legal/website-terms* URLs 404); Customer Agreement covers products, not the Maven repo. No explicit crawl prohibition found. → stays 중.

crawlers) allows website crawling at ≤1 req/s and explicitly recommends replication; Open Source Terms explicitly permit "replicate data from the Public Registry using the Public APIs" (our crawler's replicate._changes + registry API path), with a stated unreasonable-volume line of 5M req/month. Caveat: "data about the security of Packages" (audit data) may not be redistributed — we collect metadata only. → npm can move 중→하 (via the replication path, within rate limits).

except /api/ (AI-training bots are blocked; Content-Signal ai-train=no), but the site actively bot-blocks via Cloudflare in practice (FAQ fetch 403s, matches our crawler's 403 history). → robots-permitted but block-in-practice; the GitHub PackageList repo remains the safe universe source.

license terms are not overridden by the ToS; model licenses vary per model. → stays 중 (no prohibition found, per-model license handling needed).

written permission; no explicit crawler clause; no license text found for the CVRF/CSAF feeds themselves. → stays 중 (feed-specific license still unverified).

Update 5 — Atlassian properly verified (page v14): Atlassian Acceptable Use Policy (atlassian.com/legal/acceptable-use-policy) applies to "all products and websites owned or operated by Atlassian, and any related websites, sub-domains and pages" and prohibits both automated request rates beyond human speed and "accessing or searching any part of the services by any means other than our publicly supported interfaces (for example, 'scraping')". Both packages.atlassian.com and its successor robots.txt are a full Disallow: /. Also discovered: packages.atlassian.com/mvn/ maven-external 301-redirects to maven.artifacts.atlassian.com (2026-08-19) — crawler target URL needs updating. Atlassian moved 중→상 (alongside Cloudera); nuance noted that build-tool protocol access is arguably the "publicly supported interface".

Update 6 — final sweep of remaining 미확인 items (page v15), per user "확인해서 없으면 하로": EPSS — first.org/epss states data is "freely and openly accessible" (no restriction found) → 하. SUSE — the CSAF feed directory carries a LICENSE file: CC-BY-4.0 (changed from CC-BY-NC-4.0 on 2021-05-12) → 하, linked in the page. OSADL — checklist raw data is provided "without access restrictions" and "may be incorporated into scanning tools, companies' internal utilities" (always-use-current-version caveat) → 하. OLIS — no prohibition found; note: no 공공누리(KOGL) mark, footer says "All Rights Reserved" → marked 하 per user rule with the KOGL absence noted in the cell. OSV remaining sources — Bitnami vulndb Apache-2.0 (LICENSE.md), Haskell security-advisories CC0 public domain (LICENSE.txt), both verified via raw.githubusercontent → OSV row now entirely 하. Result: the only remaining flags are 상 = GitLab gemnasium-db (community MIT repo as the fix), Amazon ALAS, Oracle OVAL, Cloudera Maven, Atlassian Maven; no 중 rows remain.

Update 7 (page v17): user then asked to keep 중 for sources with usage constraints (rate limits etc.) rather than eliminating the grade. Re-graded to 중: Maven Central (rate limit), npm (1 req/s, 5M req/month), NVD API (rate limit + API key; JSON feed exempt — shown as 하+중 dual chips), GitHub GraphQL API (rate limit + token identity; data itself stays 하 CC-BY), SPI (robots-permitted but Cloudflare bot-block in practice), OSADL (must-use-current-version condition). Grading convention now: 하 = data nature free, 중 = usable with operational conditions, 상 = textual prohibition; dual chips per row where nature and access constraints differ.

Update 8 (page v18): OS-package row broken down per distro (user request), with two more licenses verified: 하 = Red Hat (CC-BY 4.0), SUSE (feed LICENSE CC-BY-4.0 verified), Mariner (CBL-MarinerVulnerabilityData LICENSE = MIT, verified), Ubuntu (public git, clone/rsync instructions in README, no prohibition), Alpine·Debian·Alma·Rocky·Arch·Fedora (community public data, no prohibition found); 중 = Photon (GitHub wiki data is public — photon repo COPYING is GPLv3 — but packages.vmware.com vendor (Broadcom) site terms unverified); 상 = Amazon ALAS, Oracle OVAL (unchanged). Photon added to the summary 중 line and the OS row's 확인 필요 cell.

Update 10 (2026-08-20, page v23): reviewer supplied three legal position statements ("2. 보안데이터 수집 체계의 법적 고려사항") to merge into the page: (1) this is a build-service (용역 구축) project — the customer collects, so redistribution concerns don't apply to the vendor; (2) scraping-restricted sites must be accessed only within permitted limits; (3) rate-limit-style constraints must be honored. Chapter 2 restructured accordingly (retitled to the reviewer's heading), with each of the three items explicitly marked "(검토 의견 반영)" and an intro line "최종 확정은 계약 전 법무 검토를 전제" — deliberate attribution so the engineering document carries facts while legal judgments remain attributed to their source (user's role-boundary concern: ToS fact-finding is engineering work, legal position statements are not). Kept the caveat that licenses restricting USE (gemnasium-db) still bind the customer regardless of who collects. Item 1's premise (약관 동의·API 키 고객 명의, 계약서 명시) folded in from the old 수집 주체 item; 저작권/DB권, attribution, 개인정보 items retained below.

Update 9 — AI-model crawler verified in code + DB (page v22): ai_huggingface_crawler has 3 scrapers chained in one daily-20:00 DAG (ALL_SUCCESS serial): ① hugging_model — HfApi.list_models + model_info via huggingface_hub → TB_COMP_MODEL (3.1M rows; MODEL_ID/TASK/AUTHOR/MODIFIED, LICENSE_IDS mapped from license: tags, MODEL_CONTENT = model card, MODEL_MAL_YN); ② hugging_vuln — parses huggingface.co/{id}/tree/main HTML for HF's own security-scan unsafe files → TB_COMP_MODEL_VULN_INFO (1.1M; FILE_NAME/IS_UNSAFED/IS_PICKLED/MAL_INFO); ③ hugging_pipeline_model — clones huggingface/transformers, AST-parses pipelines SUPPORTED_TASKS → TB_HF_PIPELINE_MODEL (43 rows: task×framework default model). DB freshness: ① daily through 2026-08-18; ② no new rows since 2026-04-10 (grid shows frequent model-crawler failures cascading upstream_failed to ②③, and green runs of ② still produce nothing — parsing selector likely broken); ③ unchanged since 2026-03-24 (may be legitimate no-change). Page AI-model row updated with the HTML path (모델 페이지 웹 파싱) and cycle corrected to 매일 (was 7일). Incidental: component contains ad-hoc library_license.py (npm LICENSE_AI backfill, references mvnrepository.com) — not a registered scraper.

Update 4 — reviewer feedback applied (page v13): per-registry grades for Maven (Central 하 / Cloudera 상 / Atlassian 중); SPI graded on its stated policy (robots.txt allows all but /api/) = 하, with the Cloudflare bot block noted as a CDN-level technical measure separate from the terms; HuggingFace graded on Hub content ToS (no crawling prohibition, verified) = 하, per-model-license caveat dropped; OSV broken down by source with verified licenses — GitHub Advisory / PyPA advisory-database / golang/vulndb / google/oss-fuzz-vulns all CC-BY 4.0 (verified via each repo README), RustSec advisory-db public domain except GHSA-derived entries (verified), distro sources 하, remaining sources (Bitnami·Haskell 등) 중; GitLab — 공개판 gitlab-org/advisories-community exists and is MIT-licensed (verified), added as the migration alternative to gemnasium-db in the source cell, risk cell, 확인필요 cell and summary. Summary 상 now: GitLab gemnasium-db (or switch to community MIT repo), Amazon ALAS · Oracle OVAL · Cloudera Maven.

#### Removed section — 수집 범위(안) (per-category include/exclude proposal)

Basis: 협상 전략 (수집 대상은 ISMP SBOM 분석에 필요한 구성요소·버전·CVE 중심 취약점·라이선스로 한정, CENTRIS·VUDDY·XVDB 특허 배제) + 2026-08-09 회의 결론.

구분포함 여부(안)근거/비고
라이브러리 컴포넌트(메타데이터)포함구성요소·버전 데이터, SBOM 매핑 기준
취약점(NVD CVE/CPE, KEV, EPSS, OSV, 어드바이저리, OS 패키지)포함일부 출처는 법적 리스크로 개별 재검토
라이선스(SPDX, OLIS, OSADL)포함라이선스 기준 데이터
EOL결정 필요ISMP 기능 범위에 따름
AI 모델 컴포넌트(HuggingFace)결정 필요ISMP가 AI 모델 SBOM을 다루는지에 따름
파일 컴포넌트제외파일/함수 해시는 분석 전용(CDBVDB 방안 검토), CENTRIS 영역
함수 컴포넌트제외상동
바이너리 컴포넌트(APK 시그니처, 바이너리 함수)제외(안)바이너리 매칭용 분석 데이터, 시그니처 생성은 고유 기술
코드 레벨 취약점(취약 코드/함수, 커밋 URL)제외(안)VUDDY/XVDB 특허 연관(회의 결론 5)
LPP(PoC/exploit, CWE 순위)제외(안)CTI성 — 불포함 방침 + RFP에서 CTI 삭제 유도(결론 10)
AI 기반 라이선스 추출결정 필요회의 결론 8

#### Removed section — 지적자산·노하우 경계 (논의 안건)

Follow-up framing of 회의 결론 5 (고객 제공 소스에 특허·고유 기술 배제) and 결론 6 (소유권·사용권 조건 별도 검토 — 당사 재사용 제약 방지). Presented as proposal only; decisions belong to the meeting/협의.

계층내용제공 범위(안)
RAW 수집공개 출처 접근·원본 다운로드·원문 보존제공 대상(안) — 공개 출처 기반 재구현 가능 영역
정규화·정제·매핑구성요소명 정규화, CPE 매핑, 버전 비교(dpkg/rpm 의미론), 증분·diff·해시 전략, 상태 모델, PURL 정규화조건 결정 필요 — 다년간 축적된 당사 노하우. 제공 시 소유권·사용권(당사 재사용권 보장) 명문화 필요(결론 6). 회의에서도 "단순 크롤링은 전체 프로세스의 일부"라는 의견
AI 기반 라이선스 추출AI 활용 라이선스 추출·정제결정 필요(결론 8)
특허·고유 분석 기술CENTRIS·VUDDY·XVDB, 파일/함수/바이너리 매칭·시그니처배제(결론 5)

계약서 반영 필요 사항(안): ① 고객 제공 산출물 범위를 위 계층으로 명시, ② 제공 소스코드에 대한 당사의 계속 사용·재사용권 보장(결론 6), ③ 수집 데이터의 원출처 라이선스 조건이 고객 측 의무로 승계됨을 명시, ④ 수집 주체(약관 동의·API 키 명의) 지정.

#### Removed section — 미팅 준비 체크리스트

Red Hat VEX 문서, Alpine secdb JSON, npm 메타 JSON 등)

Advisory·libraries.io) 처리 방침 내부 입장 정리

할지

2026-08-18 (4) — 방안 정련: 자체 설계 결함 4건 수정

Re-reviewed the design critically instead of building the prototype. Four things were wrong or missing, each now settled by measurement.

1. EVR 충돌 규칙이 근거 없이 정해져 있었다. The draft said "keep the max EVR because a MAIN host tracks the newest Z-stream". Inspecting the 20,176 conflict rows (scope B; 12,578 in scope A) shows that rationale describes a minority case: 80.2% are same-epoch same-version with only the release differing, and the dominant shape is a single legacy product listing successive builds (3AS: 0:2.4.21-20.0.1.EL and 0:2.4.21-27.0.4.EL for CVE-2004-1073). For that shape max EVR manufactures a false positive on an already-patched host. Design now stores FIXED_EVR (min, used for the decision), FIXED_EVR_LATEST (max, shown as the target) and FIXED_EVR_COUNT, so the choice is auditable and switchable without re-collecting.

2. The primary key could not hold the data. Dropping architecture collapses rows VEX reported under different statuses: 356 fixed+known_not_affected and 45 known_affected+known_not_affected at the exact grain key. 401 hard PK collisions that would abort the load. Added an explicit parse-time precedence (fixed > known_affected > known_not_affected > under_investigation, because the usual cause is one arch fixed and another never vulnerable) plus a STATUS_CONFLICT flag.

3. The matching spec had no rule for multiple matching rows. Measured 27,079 (major, package, module) combos in the MAIN family carrying both a FIXED row (repo-stream CPE) and an AFFECTED row (whole-major CPE). Without a rule every one would report "패치 없음" while a patch exists. Added: channel precedence first (minor-pinned > MAIN), then status (FIXED > AFFECTED).

4. The serving DB is the binlog master for customer on-premise servers. labradordb on dist-m feeds BTS; binlog growth has already caused low-spec on-prem servers to fall behind. So delete-and-reinsert per document was the wrong physical apply. Measured on 120 republished documents (archive version vs current): only 30 of 120 change any fact row at all, and only 22.7% of rows change — 268 docs/day × 114.9 × 2 ≈ 61,600 row events for replace versus ≈ 7,000 for a diff apply, an 8.8x difference replicated to every customer. The document remains the unit of recomputation; only the physical apply changed.

Also settled: column widths from measured maxima (package 110, EVR 62, CPE 47, module:stream 25); the product dimension now stores every Red Hat CPE with IS_TARGET so new products are visible; deletions.csv needs its own watermark; bootstrap catch-up is ~2,909 documents (1,031 new + 1,878 republished), not the 1,031 stated earlier; and known_not_affected's suppression value is measurably negligible (45 / 356 overlaps against 2.3M rows), which turns decision 4 from taste into arithmetic.

2026-08-18 (3) — 수집/분석 테이블 분리 + Confluence 게시

Three further measurements settled open design points:

rows / 9.9 GB plus TB_CONTAINER_OS_VULN_V2_RHEL (1,555,420 / 464 MB). The v3 convention of annotating columns "수집DB에만 필요한" is what the v4 split formalizes: _DOC never leaves gatheringdb; the two dimensions, the slim fact table and a view go to labradordb.

2026-08-17, only 7 of which still exist in the archive. Genuine withdrawals, not churn — this is the "CVE가 발급됐다가 없어지는 케이스" from v3.

names. Instead of a binary/source mapping table, the agent reports rpm -qa --qf '%{NAME}|%{SOURCERPM}' and the fact table carries PKG_KIND.

Also found while enumerating CPEs: RHEL 7 realtime is rhel_extras_rt:7, not enterprise_linux:7::realtime, so it falls outside the product allowlist — added as an open question rather than silently included.

2026-08-18 (2) — Greenfield design after the rebuild decision

The user decided the existing rhel_crawler is not in use and will be replaced outright, so the wiki page was rewritten from a defect analysis into a design specification. To ground it, the full VEX corpus was pulled and measured rather than sampled: csaf_vex_2026-08-09.tar.zst (273 MB) -> 16 GB, 63,152 CVE documents, 36,130 of which carry a RHEL OS product.

Measurements that drove design decisions:

product_status — 0 unresolved out of ~7.15M entries. So the pipeline needs no string parsing of the product half at all.

rows (32.6%); 3.93M of those already had a single architecture.

4,866,082 rows. Scope B (A + ::server/::computenode/::as/::es) yields 5,177,949. Scope A silently drops all of RHEL 4–7, which use ::server, so the allowlist in the Confluence note needs extending — this is now the first open question for 협의.

(enterprise_linux:8::appstream <- 27 product_ids). 12,578 grain rows (1.05% of fixed) get more than one candidate EVR; the design keeps the max EVR by rpm comparison and flags the row with EVR_COLLAPSED.

rows / 64,176 unique paths and 280,797 rows / 280,797 unique paths, zero duplicates in either, both sorted newest-first. So changes.csv is "every currently published document with its last-modified time", and its oldest timestamp (2025-08-22) is just the least-recently-touched document — not a retention boundary. Incremental recovery works from any watermark; a snapshot simply cannot express deletion, which is why deletions.csv is mandatory. (An earlier reading of this as a rolling 1-year window was wrong and has been corrected in the wiki page and Confluence DT/4209377355 v2.)

mysql:8.0 70,737, container-tools:rhel8 56,086). Module gating is the single largest false-positive control.

corpus parses in ~1.3 minutes on one core. Re-collection is cheap enough to repeat whenever a scoping decision changes.

Design output: 4 tables (_DOC, _PRODUCT, _MODULE, fact) with surrogate PRODUCT_KEY/MODULE_KEY so the clustered PK is (PRODUCT_KEY, PACKAGE_NAME, MODULE_KEY, CVE_ID) and the host-match query is a covered range scan. Staleness is handled by document-scoped replace rather than tombstones. Full DDL, normalization vocabulary, matching spec and W34–W39 phase plan are in the wiki page.

Working corpus left at <scratchpad>/vex/ (16 GB) with analyze.py, scope.py, bench.py for the W34 prototype. Delete when done.

2026-08-18 — RHEL VEX collection investigation

Sources read: Confluence 4149674090 (VEX 수집 방법), 4093706274 (OVAL 분석 / per-distro capability matrix), 4191846604 (AI엔진팀 협의 2026-08-04).

Code read: etl_components/os_pkg_vuln/rhel_crawler/* in labrador-scrapers and dags/os_pkg_rhel_vuln.py in labrador-data-platform (schedule 40 */4 * * *, raw task then parse task, max_active_runs=1).

Verification method: downloaded CVE-2024-42472 and CVE-2022-21607 from the public CSAF VEX endpoint and replayed the crawler's own regexes against them, then cross-checked the resulting rows in gatheringdb.TB_OS_PKG_VULN_RHEL. Every defect above has either a parsed-output example or a live row behind it.

No code was changed. Output is the design/analysis page and this log entry.

2026-08-20 (2) — Confluence-to-wiki and portfolio parity

Read the current rendered Confluence pages rather than relying on the 2026-08-18 worklog summary:

2026-08-20. The current document has three tables (_CPE, fact, _DOC), a fact key of (CPE, PACKAGE_NAME, MODULE, CVE_ID), no serving-side view, and a row-diff physical apply. The full wiki body already contained those changes, but its AI Summary still described the earlier dimensions/view and DELETE+INSERT draft. The summary now matches the body and Confluence.

one-page child DT/4212457542 were published/updated on 2026-08-20. The durable wiki now records the source-routing model and its evidence limits; private comments and personal identifiers were not copied.

Durable outputs:

Human outputs:

Portfolio verification:

relative link.

confirmed no body overflow or broken images, a 19/52 security-filter result, visible keyboard focus, and focusable horizontal exploration for dense mobile diagrams.

accent used on the four changed detail pages to WCAG-AA contrast.

.omo/evidence/confluence-portfolio-sync-2026-08-20/.

Evidence boundaries kept in the portfolio:

production cutover or measured false-positive reduction.

confirmed removal of every restricted source.

2026-08-18 (4) — CJ-family and Vroong rejection status + retrospective

Vroong must be treated as rejected rather than presumed silent rejection.

ENM and Vroong notification dates, channels, and selection stages are Needs confirmation because the user did not supply those details.

human/career/index.html, and career/최종 이력서/README.md. Submitted final PDFs remain under their dated folders; deprecated/ continues to hold only no-application decisions.

ai/sources/career/2026-08-18-cj-vroong-application-results.md and compiled the durable result and decision rules into ai/wiki/projects/2026-career-transition.md.

human/reports/2026-08-18-cj-vroong-rejection-retrospective.md. No employer- specific reason was available, so it labels causality as inference. Strongest shared signal: central production Kafka/streaming, distributed/data-lake, and DW/Data Mart requirements were not directly evidenced, while verified depth is batch pipelines, data integrity, MySQL, Airflow/Kubernetes, and batch CDC.

three direct operating signals, remove repeated CDC narration, and use the recovered space for stakeholder, decision, and observed-result evidence.

2026-08-20 (3) — Kmong Data Engineer tailored application package

Captured Remember posting 334810 for Kmong's Data Engineer role, due 2026-08-30, and built the working package under career/맞춤이력서/크몽-Data-Engineer/.

Verified alignment:

Airflow, Kubernetes, batch collection, data extraction/reconciliation, data infrastructure, EC2-scoped AWS operations, and a ChatGPT API classification stage.

product are supported.

formal data warehouse/data mart design, Terraform, Personalize/SageMaker, Feature Store, real-time streaming, and recommendation/advertising domain experience.

Package evidence and QA:

portfolio-only claims mapped to durable sources.

reading order.

reconciliation, bounded LLM classification scope, and MySQL operating cases.

design-system/functional and CJK/fidelity lanes passed.

linked claims. Direct links to locally corrected but not yet deployed AI license and crawler pages were removed.

The deterministic pipeline score is 94.7/100. Evidence, narrative, ATS, and artifact integrity are full-score; posting alignment is 19.74/25 because the verified job-fit gaps cap the result below the required 95. The package remains in the working directory and was not copied to career/최종 이력서/2026-08-20/크몽/.

연결 문서