내 지식 저장소 / 문서 읽기업데이트

문서 읽기

Worklog 2026-W37

작업 기록검토일 2026-09-11
원문 경로·태그ai/worklog/2026/2026-W37.md

AI Summary

Purpose:

  • Record cross-repository and career-document work for this week.

Key points:

  • 2026-09-11 wiki redesign: rebuilt the integrated home, library, categories, tags, graph and Markdown reading shell. Existing catalog URLs are preserved; UI sources live in scripts/wiki/. Local verification and Drive HTML-placeholder limits are recorded in ai/workspace/wiki-redesign-2026-09-11/index.md. No publication.
  • 2026-09-11 round-3 discovery (Claude, after the GPT session hit its token

limit): committed the finished round-2 report, then scanned Rallit and Remember for the first time and rechecked Wanted/Jumpit; one new employer 레브잇 (rank 9 of 32), 아이펙스 excluded on band, HTML re-rendered.

  • 2026-09-11 interrupted new-posting update resumed: recovered seven researched

employers and completed the 31-row report. Two postings registered September 10-11; five older first discoveries. Source: September 11 round 2.

  • 2026-09-11 existing-posting recheck: 26 candidates accounted for; Coxwave

closed, Biginsight unscored, 24 ranked. Corrected NICE regular 383912 versus contract 383906 and Konny mandatory DW gap (fit 5 -> 4). Macarong leads at 4.15. Retained dated company evidence and historical ranking. No submission or publication. See September 11 source and the dated entry below.

  • 2026-09-10 afternoon posting refresh and automation: user requested more

salary weight, current postings, and morning/afternoon runs. Applied 35/25/20/20 weights, refreshed salary sources, removed four explicitly closed Rallit listings, and produced 26 current comparison rows. Registered daily 09:00/15:00 KST launchd job dev.hwlabs.llm-wiki.job-postings; CLI smoke test passed local read/write and live Wanted API access. No publication.

  • 2026-09-10 Claude-to-Codex posting workflow: reconstructed the original

request sequence and rendering method from session ca4036e6-d90e-4da8-bc9e-4484566a9505. Added skills/job-posting-status/SKILL.md, an AGENTS.md trigger, and the compiled ai/wiki/projects/job-posting-status-workflow.md procedure.

  • 2026-09-10 (AUTOSBOM / BT26-835): Drafted the September research note for the

automotive SBOM project page AUTOSBOM/4243062825, scoped to the three data-side 1st-year plan items (automotive-domain component DB concept design, training-dataset planning, false-positive/negative filtering pipeline) mapped against the current collection pipeline. Reuse is real: labrador-sqlmodel UPSERT path, per-container etl_components, the OS-package v4 CHANNEL_ID schema (14 OS), and the DAT-1211 tag-selection numbers (1,506,786 -> 134,551 tags, 91.1% down). Gap: no collector exists for the vehicle environments the plan names (Automotive Linux, RTOS, QNX, Yocto, AOSP) and no Confluence doc covers them. Blocker: Atlassian MCP is read-only on this site - every write returns 403 The app is not installed on this instance (html and markdown both), so the note was delivered as human/briefs/2026-09-10-자동차SBOM-연구노트-데이터파이프라인.md for the user to paste. Fix needs an org admin: Atlassian Administration -> Rovo -> Rovo MCP server -> Permissions -> allow Write.

  • 2026-09-09 user-rejected portfolio correction: all ten remaining gray procedural flows now use the approved numbered timeline; all 36 architecture diagrams now use cyan infrastructure symbols, orange primary boundaries and curved spatial connections. Prior architecture acceptance is superseded. Current correction evidence and review state: ai/workspace/portfolio-redesign-2026-09-09/evidence/flow-architecture-correction/. Local files only; no deployment.
  • 2026-09-09 job-market rescan: resumed the Claude session that hit the org spend limit while listing DE/DBA postings. Wanted API plus Jumpit/Remember public pages. SOCAR DBA 377851 and NICE 378390 are closed. New core-fit DBA set: Hecto 382697, DearU Jumpit 54795256, LINE Games 364083. Korean list human/career/2026-09-공고-후보.md.
  • 2026-09-09 architecture follow-up: redrew all 36 identified technical/system/data-flow diagrams (23 generated SVGs and 13 legacy HTML diagrams), with 257 source-backed nodes and 238 connections. Added readable horizontal viewports and editable downloads; all 52 pages preserve text/code/media outside the replaced figures. Current evidence: ai/workspace/portfolio-redesign-2026-09-09/evidence/architecture/.
  • 2026-09-09 portfolio follow-up: refined result records and applied korean-clear-writing across all 52 detail pages plus catalog/interface copy (326 exact replacements). All body numbers, code, asset paths, links and section counts preserved; strict voice checks now BAN 0 / STRUCT 0 / WARN 0. Current evidence: ai/workspace/portfolio-redesign-2026-09-09/evidence/copy-results/.
  • Resumed the September 9 portfolio redesign at final QA: 53 routes / 159 current captures and six interaction scenarios pass; independent design/CJK reviewers both PASS. Execution ledger: ai/workspace/portfolio-redesign-2026-09-09/index.md.
  • Bithumb submission confirmed by the user on 2026-09-08. Archived the renamed, hash-identical final PDF and updated the application tracker and career source of truth to submitted / awaiting result.
  • 2026-09-08 (미래아카데미 / DAT-3563 후속): Surveyed which collectors live OUTSIDE

labrador-scrapers and published the consolidation plan as Confluence DT/4238606457 under "26. 미래아카데미". Decisive finding: 9 of the 13 OS-package distros are only in tool/crawler-container-vuln, and the RHEL OVAL path chosen for this customer lives there too (scrapers has CSAF/VEX only). Also found a second consolidation target already in flight (labrador-etl-platform/ labrador-raw-scraper, go+maven migrated, running 30min/hourly), so "which repo do we consolidate into" is a real open decision, presented as A/B/C scenarios rather than decided. See the entry below.

  • Corrected the existing Bithumb Korean-polished DOCX/PDF after the user's tense/flow objection: 28 paragraph changes, source backups retained, four-page visual QA complete. See the latest entry below. Earlier comparison pages contain pre-correction wording.
  • Applied the newly created Korean-writing skill to the current Bithumb final as a separate 한국어윤문_2026-09-07 DOCX/PDF: 29 paragraph edits, unchanged facts/numbers/links, four-page visual inspection complete. Original final and older alternatives remain unchanged; new paragraph chooser is optional and awaits user review.
  • New pipeline step "문장 비교·선택" (2026-09-07, Claude): scripts/resume_forms/build_compare_page.py aligns two same-structure DOCX files paragraph by paragraph and emits a local HTML page where the user picks 왼쪽 유지 / 오른쪽 채택 / 직접 수정 per changed paragraph and exports JSON. First use: career/맞춤이력서/빗썸-Data-Engineer/빗썸_문장비교_2026-09-07.html (최종본 vs 문장다듬기, 168 units, 42 changed, 0 number mismatches, 42 reviewer notes). Waiting for the user's exported choices.
  • Latest layout-only Bithumb revision is 빗썸_이력서_경력기술서_표여백정리_2026-09-07 (MD/DOCX): restored the user-requested three-column achievement table and balanced four-page spacing. Content and original files preserved; no rescore or Google Docs edit.
  • PDF export of the user's final Bithumb DOCX is done (Claude, resumed after the Codex session hit its token limit mid-task) and the font is restored to Noto Sans KR. Two PDFs sit next to the DOCX: 빗썸_이력서_경력기술서_최종본_2026-09-07.pdf (4 pages, Noto Sans KR, render-only line-spacing fixes, recommended) and ..._원본그대로_5쪽.pdf (as-is Arial Unicode MS; page 3 holds only 학력·병역). ..._최종본_2026-09-07_NotoSansKR.docx is the same document refonted for further editing. Text identical; the user's DOCX untouched. Evidence 최종본-PDF-QA-2026-09-07/4쪽/verification.json. Not submitted.
  • Created a separate natural-language Bithumb revision, 문장다듬기_2026-09-07.docx, preserving the user's original 최종본 byte-for-byte. Revised 42 paragraphs; four-page render inspected, numerical tokens/photo/links preserved. No claim of passing an AI detector.
  • Finalized the user's edited Bithumb DOCX as 최종본_2026-09-07.docx; all text/package assets preserved, page-2 spacing fixed, four-page render inspected. This supersedes the older introduction Markdown as the application handoff.
  • Latest Bithumb revision is 소개보강_2026-09-07 (MD/DOCX): a three-paragraph, 535-character introduction grounded in security-data work, expansion into shared systems, and customer operating constraints. Four-page visual QA passes; other content preserved. Full numbers linter flags two narrative paragraphs, manually classified and recorded; actual achievement sections pass.
  • Completed the interrupted Bithumb table/spacing handoff: latest MD/DOCX stem is 빗썸_이력서_경력기술서_표여백정리_2026-09-07. Fresh four-page visual QA and content-preservation checks pass. Resume files were already saved by the previous session; this continuation completed validation and durable handoff records.
  • Latest local Bithumb artifact is now 빗썸_이력서_경력기술서_종합의견반영_2026-09-07 (MD/DOCX): reviewed recommendations applied; introduction/motivation repetition reduced, DML moved second, customer-ingestion result promoted, sourced observation/handoff/reconciliation details added, and four-page typography/extraction improved. Earlier scores apply only to the earlier version.
  • Completed a requested Bithumb gstack-inspired resume review, including inclusion, posting fit, CEO/CTO/lead, all-page design, and source-backed additions. Independent scores: CEO83, CTO87, lead84, inclusion86; parent-completed JD80/design82 after two workers hit credit limits. No resume changes or submission. The legacy deterministic total is not computed; see the review report and gate limitations.
  • Bithumb resume revision now leads with omission/error detection, classification, code changes and runbooks; RubyGems remains a scoped example.
  • Added DML connection-error reduction as the fourth representative achievement. The result remains limited to four observed months.
  • Latest local resume: career/맞춤이력서/빗썸-Data-Engineer/빗썸_이력서_경력기술서_지원동기보강_2026-09-07 (Markdown and DOCX). Builds on the omission/error revision and expands motivation to three grounded paragraphs. Live Google Docs were not modified.

Relevant when:

  • Resuming Bithumb resume work or tracing the user's achievement-framing correction.

Do not read full document unless:

  • Exact changes, validation, or artifact hashes are needed.

Linked documents:

  • ai/sources/career/2026-09-07-bithumb-achievement-framing.md
  • ai/wiki/projects/library-missing-improvements.md
  • ai/wiki/projects/data-platform-systems-engineering.md
  • ai/repo-notes/labrador-scrapers.md
  • ai/repo-notes/labrador-data-platform.md
  • ai/wiki/projects/crawler-source-governance.md
  • ai/wiki/projects/ismp-sfr-data-part-scope.md
  • ai/worklog/2026/2026-W34.md (미래아카데미 법적 사전 검토)
  • ai/worklog/2026/2026-W36.md

Open Questions

  • DML zero-error observation: exact start/end dates and original aggregation logs remain Needs confirmation, as recorded in the previous review. No new metrics were supplied in this revision.
  • 미래아카데미 통합 목적지: labrador-scrapers (A) vs labrador-etl-platform

(B) vs 병행 (C). Everything else in the port plan depends on this. Decision belongs to 엔진파트 협의, not to the doc.

  • Whether all 13 OS distros are in the customer's scope or only the ones they

actually run. Nine un-ported distros dominate the effort estimate.

  • Whether Red Hat still serves security/data/oval/v2. The customer build chose

OVAL while internal collection moved to CSAF/VEX; unverified as of 2026-09-08.

  • GHSA: keep HTML scraping of github.com/advisories or move to the GraphQL API.

Changes the legal grade recorded on DT/4211146807.

  • Which of crawler-lib-golang / -java vs the raw-scraper ports is the 정본.
  • crawler-lib-rust has no .git locally and repos.md records no remote —

whether the repo exists at all is unconfirmed.

  • Crawler-server ×1 sizing (CPU/memory/disk) is still unknown, so the sequential /

concurrency-limit design for the ported set cannot be fixed yet.

Details

2026-09-11 — Existing job posting recheck and evidence corrections

  • Request: check existing postings, without starting a new-market or resume run.
  • Read the shared skill, profile, transition, shortlist and monthly report.
  • Rechecked 21 Wanted IDs including the NICE alternate, three Jumpit APIs,

three JobKorea/Saramin pairs and four previously closed Rallit targets. Read NICE page metadata and cross-channel contract detail, plus Macarong's Remember detail. Exact observations are in ai/sources/career/2026-09-11-posting-status-observations.json and compiled in ai/sources/career/2026-09-11-de-posting-scan.md.

  • Coxwave 383356 changed active -> close. The four Rallit IDs remain CLOSE.

Existing 26 = 24 ranked + one active unscored Biginsight + one newly closed.

  • NICE 383912 says regular, 383906 says one-year contract with review-based

conversion. Corrected the earlier duplicate assumption; September 20 on contract cross-postings does not extend Wanted's September 17 deadline.

  • Konny's cloud DW/modeling requirement was already in yesterday's raw data;

corrected the prior fit assessment, not falsely reported a changed JD. Fit 5 -> 4, total 4.20 -> 3.85; Macarong now leads at unchanged 4.15.

  • Updated durable shortlist, Korean MD/HTML report and active context.

Retained historical ranking and September 9-10 salary/finance/culture dates.

  • Validation: 24 decimal-weighted totals and competition ranks, all 12 MD/HTML

table pairs, 34 public HTTP receipts and NICE employment-track separation pass. Strict voice check: BAN 0 / STRUCT 0 / WARN 0. Scoped git diff check passes. Existing HTML shell preserved; cached Marked rendered Markdown because Python-Markdown is unavailable on this host.

  • Computer-use CLI is unavailable, so cached Playwright/Chromium supplied

local-only QA. Browser checks at 375/768/1280 pass with no page overflow or JS errors, 24 unique current posting links, table scrolling and return navigation. Desktop and mobile screenshots were visually inspected for Korean glyphs/readability. Temporary screenshots and browser JSON are in /tmp/posting-report-* and /tmp/posting-details-*; not durable artifacts.

  • No application status inferred, recruiter contact, resume, commit or push.

Mac scheduler execution was not checked from this Linux/WSL environment.

2026-09-10 — Salary weight, afternoon refresh, and twice-daily automation

  • Changed current weighting from fit/finance/welfare/salary 40/25/20/15 to

35/25/20/20. Updated shared skill/workflow and current combined ranking; preserved older research under an explicit historical section.

  • Collected 302 Wanted list rows (261 unique) and 79 Jumpit list rows (78

unique), 18 existing + 7 additional Wanted details, 3 Jumpit details, 4 Rallit pages and 3 JobKorea/Saramin cross-postings. Remember returned a shell. This is a bounded scan, not complete market coverage.

  • Corrected Rallit 133/989/83/1656 using the exact target position's embedded

CLOSE status. Removed them from active ranking; earlier generic deadline interpretation is superseded. Added ODK Media and promoted MongooseAI from unread to reviewed/hold. Active comparison contains 26 rows.

  • Added linked salary amounts and scope; Hecto cross-platform estimates and

Daewoong entity ambiguity remain explicit. Corrected Cornerstone's current name and salary, Ajung's now-unpublished average, and Torder's 4,634만원. Source: ai/sources/career/2026-09-10-afternoon-posting-salary-refresh.md.

  • App-native scheduler controls were unavailable; computer-use explicitly

rejected access to the ChatGPT/Codex app. Used user-authorized macOS launchd with installed authenticated Codex CLI instead. Native app automation was not created. Calendar triggers 09:00 and 15:00 verified in launchctl on an Asia/Seoul host; no RunAtLoad or rapid retries. Sleeping delays until wake; shut-down/logged-out periods cannot execute. Local reports only, no push.

  • Runner scripts/run_job_posting_refresh.sh: help/argument parsing, lock,

run logs, nonzero failure, completion marker, and --smoke mode. Shell syntax passed; Bash LSP unavailable and installation previously declined. Initial web-tool-only connectivity test could not open Wanted; the actual runner smoke then passed direct public HTTP plus local write/read, using workspace-write sandbox with network enabled. Existing credentials reused; no secrets stored. Evidence: ai/workspace/job-posting-automation/.

  • Content verification: 26 scores and competition ranks, all active posting

and salary-source links, four excluded closed IDs, and MD/HTML parity PASS. Voice check BAN 0 / STRUCT 0 / WARN 0. Browser checks at 375/768/1280 show no page overflow/errors; table horizontal scroll and return navigation work. Independent visual/content reviews recorded in the evidence directory.

  • No application, resume, commit, or publication performed. Scheduler

registration and its command path were verified; future calendar runs have not yet occurred during this task.

2026-09-10 — Shared Claude/Codex job-posting status workflow

  • Request: understand Claude's posting-status work and make the same output

available when delegated to Codex. Read the raw Claude session's relevant user messages and tool inputs, both scan notes, W37, and the 28-row report.

  • Added a repository skill and canonical AGENTS.md route for discovery,

additional candidates, merged ranking, company location, and hiring checks. Durable procedure fixes the output columns, 40/25/20/15 formula, 3? unknowns, source capture, and existing Markdown-to-HTML shell regeneration.

  • Preserved the distinction between required-stack class, other mandatory

gaps, company score, and actual hiring status. Explicitly documents that subjective score thresholds were not deterministic in Claude's original.

  • Raw excerpt receipt: ai/sources/career/2026-09-10-claude-job-posting-workflow.md.

Compiled procedure: ai/wiki/projects/job-posting-status-workflow.md.

  • Verification: skill validator PASS; a temporary render from the documented

procedure is byte-identical to the existing HTML (SHA-256 c551c6da2c4e780d8faf30433dcc7db6cf70acd499359cd38d19d9b530194611). All 28 weighted totals, descending order, competition ranks, posting URLs, and nonempty locations pass. Reference MD/HTML voice check: BAN 0 / STRUCT 0 / WARN 0. Scoped git diff --check passes. No HTML was changed, so this verifies renderer fidelity, not a fresh browser or live-site QA claim.

  • Existing unrelated worktree edits were preserved. No posting refresh,

application-status change, resume, commit, or publication was performed.

2026-09-10 — Merged ranking (09-09 + 09-10) and hiring-status check

  • User: "어제 오늘 순위 매겨주고 브레인커머스 여기 실제로 뽑는지 알아봐줘 야놀자도

확인해주고 공고 URL도 무조건주고". Added "⓪-통합 순위" (28 rows, total score order, 공고 URL and 회사 위치 columns) at the top of human/career/2026-09-공고-후보.md; HTML regenerated.

  • Hiring-status check: both 랠릿 DBA postings (브레인커머스 133, 야놀자 989) show

"채용 시 마감" with an apply button and no dates; no other channel carries them (사람인 company pages: 브레인커머스 has only an HR posting, 야놀자 "현재 채용중인 공고가 없습니다"; 점핏 0; Wanted 0). 야놀자's own careers site returned 403 to WebFetch. Recorded as unconfirmed with the concrete next step (browser check / ask the company) in the list and the round-2 source note.

2026-09-10 — Second posting scan with locations (user: "또 찾아줘봐 … 회사 위치도 꼭 표기")

  • Three channel subagents ran successfully this time (Wanted extended keywords;

점핏·랠릿·프로그래머스·로켓펀치; 사람인·잡코리아). Exclusion list = every company already in the 09-09 list. Raw results with verbatim requirement lines, 근무지, and company facts: ai/sources/career/2026-09-10-de-posting-scan-round2.md. WebSearch budget for this session ran out (200 calls) midway; remaining company facts came from Wanted company pages via WebFetch.

  • Finding: new core-fit postings are almost all MySQL DBA seats at product

companies — 브레인커머스(잡플래닛) DB 엔지니어 (랠릿 133), 야놀자 DBA (랠릿 989, 상시 원격), 메타넷엑스 AWS MySQL DBA (점핏, due 10-02, MSP context), 클래스101 DBA (랠릿 83, MySQL + Go). Data-engineer-titled new postings mostly require Spark/DW/lakehouse (핀다, NHN KCP, 구다이글로벌 partial). 랠릿 postings never expire, so the low-id ones need a freshness check. 롯데헬스케어's posting is stale (company liquidated in H1 2025).

  • Added section "⓪-2 2차 스캔 순위 (2026-09-10)" to human/career/2026-09-공고-후보.md

with a 회사 위치 column (11 ranked rows, 10 body-unread rows with locations and deadlines, exclusions with reasons), same weights as ⓪; HTML regenerated; status page line and date updated.

  • Company facts gathered: 야놀자 FY2025 1조 292억 / OP 156억 (−68%); 클래스101

FY2025 282억 / 14억; 브레인커머스 FY2025 4,426억 / 65억; 드림어스컴퍼니 3Q25 누적 1,640억 / 7억 with 146 leavers in a year; 메타넷엑스 FY2025 5,541억 / 170억, IPO withdrawn 2026-04; 롯데헬스케어 liquidated.

2026-09-09 — Data Engineer posting scan for the next application

  • User request: "원티드 리멤버 사람인 잡코리아 등등 data engineer 쪽 공고를 내가

지원할만한테 리스트좀 뽑아줘". Four channel-scan subagents were terminated by the org monthly spend limit (HTTP 429, resets 12:00 KST) before returning anything, so the scan was done in the main session with WebFetch.

  • Coverage: Wanted public API list pages (tags 655/1025/10231 and search) and

31 detail pages; JobKorea search page (25 rows) but detail bodies were image-only; Saramin, Remember and Kakao careers are JS-rendered and returned empty shells. No company research was done for the new names.

  • Output: ai/sources/career/2026-09-09-de-posting-scan.md (per-posting

required-stack classification with quotes, coverage limits) and the Korean list human/career/2026-09-공고-후보.md in the August format (① 13 verified postings with rough fit, ② 10 unverified, ③ exclusions with reasons, ④ next actions). Linked from the status pages and the shortlist wiki page.

  • Reading: seven core-fit postings by the 2026-08-18 rule; the strongest text

match is 마카롱팩토리(마이클) Data Engineering 5+ (CDC operation, schema change/backfill/reprocessing without service impact, AI use with a stated verification standard). 나이스지니데이타 (August #1) is open again until 09-17. Wanted 373363 is the Bithumb posting with a garbled company name.

  • Ranking follow-up (user: "재무 복지 연봉 등등으로 적합직무해서 순위 매겨줘"):

gathered Wanted company pages (평균연봉, 인원, 1년 입·퇴사, benefits text) for 11 new companies and finance via WebSearch (헥토이노베이션 FY2025 3,758억/502억 KOSDAQ; 디어유 4Q25 OP 98억 KOSDAQ; 라인게임즈 FY2025 −149억 and 3-year capital impairment; 마카롱 2025 revenue 630억; 콕스웨이브 Pre-A 70억 on 5.6억 revenue; 다음 = ex-AXZ acquired by Upstage 2026-05-07 and renamed). Added a weighted ranking section (fit 40 / finance 25 / benefits-culture 20 / salary info 15, unknown = 3 with ?) to human/career/2026-09-공고-후보.md covering 17 companies including the four researched earlier: 1 코니바이에린 4.30, 2 마카롱팩토리 4.25, 3 헥토이노베이션 DBA 4.05, 4 다음 4.00, 5 앤서스랩 and AITRICS 3.95, 7 디어유 3.90, 8 나이스지니데이타 3.80; 티오더 last at 2.15. Facts appended to the scan source note. Entity conflict noted for 대웅 (Wanted shows 대웅제약 069620; the other session found 주식회사 대웅 003090).

  • Parallel-session reconciliation: another session working in the same

Drive checkout had already produced ai/sources/career/2026-09-09-job-market-scan.md (Wanted 281 listings / 75 details, Jumpit, Saramin 49 details, JobKorea, Rallit), 2026-09-09-de-company-research.md (마카롱팩토리, AITRICS, 대웅 holding, 코너스톤 SI/MSP, 다음 = 에이엑스지, Qraft/onePredict losses) and a Korean page human/career/job-candidates-de-2026-09.html, all untracked at the time. This session's 2026-09-공고-후보.md overwrote an untracked file of the same name from that session; its content was not recoverable, so the two source notes were merged into the list instead (SOCAR 377851 closed, NICE successor 383906/383912, 헥토이노베이션 name fix, DearU DBA on Jumpit due 09-19, Saramin DBAs, company facts). The other session's files were left untracked for it to commit. The list is also rendered to human/career/2026-09-공고-후보.html (python-markdown) because human/career Markdown is not part of the wiki build.

  • Next: company research (finances, reviews, team) for 마카롱팩토리 and

코너스톤컴퍼니 before drafting; ask the user for Saramin/Remember screenshots if they want those channels covered.

2026-09-09 — Data Engineer shortlist with company-quality checks

  • User asked to look at Data Engineer postings (not DBA) against the portfolio, then keep only companies with acceptable finance, welfare, and culture.
  • Korean page: human/career/job-candidates-de-2026-09.html. Source: ai/sources/career/2026-09-09-de-company-research.md.
  • Kept: 코니바이에린 (morning DART research), Macarong Factory 378884 (batch-or-streaming + backfill; 2024 KED profit), NICE 383906 (due 09-17, NiFi gap), AITRICS 379809 (on-prem; press revenue/Series C). Held Daewoong 375520 (Java/Spring required; JobPlanet 2.8 / WLB 2.4). Dropped DeepSales (no public P&L) and Daum 373625 (legal entity unconfirmed).
  • No resume draft.

2026-09-09 — Resume Claude job-posting scan after spend limit

  • User asked to continue the Claude session that hit the org monthly spend limit while listing Data Engineer postings from Wanted, Remember, Saramin, and JobKorea.
  • Wanted public API: tags 655 / 1025 / 10231, years=5, 281 unique listings, 75 details fetched. Jumpit public API plus DearU DBA detail. Remember limited to public search snippets. Saramin and JobKorea were started by Claude's agents and were not finished before this list was written.
  • Recheck of August IDs: SOCAR DBA 377851 close; NICE 378390 close (due 2026-08-31); SpoonLabs DBA and R.SQUARE still open. NICE successor 383906/383912 open until 2026-09-17.
  • Highest core-fit DBA postings: Hecto Innovation 382697 (due 09-30), DearU Jumpit 54795256 (due 09-19, Aurora required), LINE Games 364083 (due 09-18, MySQL plus SQL Server).
  • Artifacts: human/career/2026-09-공고-후보.md, ai/sources/career/2026-09-09-job-market-scan.md. Shortlist, active-context, and career status pages updated. No resume draft and no new application.

2026-09-09 — Complete portfolio architecture schematic redraw

  • User rejected large sequential architecture cards and supplied an AWS-style technical diagram as a visual example, explicitly asking for all diagrams. Adopted compact infrastructure symbols, dashed named boundaries and orthogonal branches; the example supplied no new provider/component facts.
  • Scope: 23 existing generated SVGs plus 13 previously boxed technical/data flows, covering 36 pages / 257 nodes / 238 edges. Ordinary approach steps and statistical/result figures remain appropriate to their original purpose. Before sources and diagrams are preserved under evidence/architecture/before/; the original 175-file archive is untouched.
  • Canonical generator now validates declarative graph catalogs with Pydantic and exports consistent SVG, editable SVG, Mermaid and Excalidraw. Separate group/component namespaces prevent editable-ID collisions. Companion PNGs are regenerated by the browser capture script.
  • Diagrams expose real branches: DML API/queue/worker/pool, database replication families, separate observability stores, source adapters, metadata/file ordering, storage types, customer delivery alternatives, and control/worker planes. Physical deployment is not inferred from logical responsibilities. DML uses “shared DB” because the old engine-specific labels lacked sufficient source support.
  • Preserved design-stage boundaries for RHEL, storage and Forgejo, batch/normal-DML limits for CDC, mock-upload status for Shorts and Supabase-ready status for Vibekits. RHEL row-count conflict (older public ~4.87M vs newer AI ~5.18M) is omitted from the diagram; this task does not silently rewrite the historical body metric.
  • Integration adds native horizontal scrolling at narrow widths, expanded SVG view and editable downloads. Print hides those controls. The focusable viewport was operated with arrow keys (333px viewport / 880px image / 547px horizontal movement); popup and both downloads passed. Historical selected printing also renders the new diagram.
  • Validation: 52-page preservation check has no failures outside diagrams; 53 routes / 1,346 local links / 175 archive hashes pass. Voice BAN 0 / STRUCT 0 / WARN 0. Basedpyright 0 errors / 0 warnings, focused Ruff and Node syntax checks pass. Final browser run: 36 full-size diagram captures plus 159 page captures and six passing scenarios. Font subset is 165,384 bytes.
  • No commit, publication, new resume or historical-PDF rewrite. Final review verdicts and exact current hashes are recorded under the architecture evidence directory.
  • Final independent visual/CJK PASS covers all 36 native and 108 embedded-page captures. Fresh integrity APPROVE confirms 251 current hashes and all 36/257/238 semantic export identities. An initial Mermaid ungrouped-node prefix/annotation defect was corrected before this fresh approval; architecture-export-check.mjs now guards source-to-export identity. Final report: evidence/architecture/review.md in the portfolio ledger.

2026-09-09 — Portfolio results and natural Korean follow-up

  • User approved the overall design and asked for more refined results plus smoother Korean throughout. Applied korean-clear-writing, Impeccable polish and existing frontend/visual QA guidance.
  • Read all 52 detail bodies and catalog text. Applied 326 exact replacements: 285 first-pass, 18 second-pass, nine catalog, four template and ten localization edits. Replaced repeated self-evaluation and abstract headings with the specific operating problem, action or result. Exact maps and before text are retained under ai/workspace/portfolio-redesign-2026-09-09/evidence/copy-results/.
  • Result layout now uses ruled rows with separate outcome labels and explanations, stronger before/after values on the DB page, and mobile stacking. Shared coverage is 39 groups / 132 records on 38 pages, plus six research metric groups. Generator normalization is idempotent; the previous four-step approach design is preserved.
  • All 52 body number multisets, code/pre content, assets, links and section counts match the before snapshot. Three new concrete headings repeat already-present counts, not new metrics. RHEL design-stage status, CDC guarantee limits and ownership remain explicit.
  • Build/syntax, 53-route / 1,225-link / 175-archive-hash checks pass. Font subset regenerated to 165,372 bytes; strict human-voice check BAN 0 / STRUCT 0 / WARN 0. Fresh browser evidence covers 159 screens and six passing interaction scenarios after fixing Korean word wrapping in result descriptions.
  • Current review and source manifest: ai/workspace/portfolio-redesign-2026-09-09/evidence/copy-results/review.md and reviewed-build.json. Local preview returns HTTP 200. No commit, publishing, resume regeneration or historical-PDF rewrite.
  • Independent design/content-integrity and all-page CJK reviewers both PASS (high), no blockers; the CJK reviewer directly inspected all 159 current captures. Final handoff matched all 183 current product hashes to the reviewed manifest.

2026-09-09 — Four Wanted candidates researched (재무·복지·문화)

  • User request from two screenshots: research 티오더, 아정네트웍스(아정당), 미리디,

then 코니바이에린 for finances, benefits and culture. Four research subagents ran in parallel (WebSearch/WebFetch; DART, Wanted, 사람인, 잡플래닛/블라인드 public screens, press). Raw findings with URLs and gaps: ai/sources/career/2026-09-09-{torder,ajung-networks,miridih,konny}-company-research.md.

  • Korean page human/career/job-candidates-2026-09.html (same design as the

08-04 shortlist page): decision block, comparison table, per-company fit / finance metrics / benefits / culture and interview questions / source strip, and a method-and-limits section. Linked from the career status pages; the index.html candidate block now shows the September batch.

  • Reading (Claude): 코니바이에린 is the only posting without a missing core

stack (Python, SQL/large DB, Airflow-type orchestration, AWS DW partial) and has the cleanest finances (FY2025 revenue 823억, OP 206억, no debt, no outside investors); risks are a likely one-person seat and a remote policy with a "주 2~3회 출근" clause for some positions. 미리디 requires Spark and DW/lakehouse modeling (stretch) but fits on data quality and AI-tool use; pre-IPO, FY2025 operating loss −56억; due 2026-10-05. 아정네트웍스 requires Kafka streaming operations (stretch); profitable, MBK-affiliate 51% owner, CS-heavy with WLB 2.4. 티오더 is stretch and in retrenchment (revenue −27%, net −254억, 희망퇴직, prior capital impairment) — do not apply now.

  • Follow-up (user: "5년차 데이터 엔지니어 평균 연봉도 같이 넣어줘"): a salary

research subagent gathered published Korean benchmarks; no source isolates DE × 5년차. Anchors: 잡플래닛 2026 (ML 5년차 5,292, SW 4,789, 백엔드 4,392), 점핏 2025 (빅데이터 엔지니어 1~3년 3,787 / 10년+ 7,776; 4~10년 gated), 원티드 estimator via blogs (DE 5년차 5,258), KOSA 2026 employer-cost daily wages, KNOW self-reports; unsourced blogs quote 8,000–12,000. Saved as ai/sources/career/2026-09-09-data-engineer-salary-benchmark.md, added as a "5년차 데이터 엔지니어 연봉 기준" section on the candidates page (table, reading, how to use it in 처우 협의), and noted in the answer bank's 희망 조건 (the 7,500–8,000만 target sits above platform averages and is a company-band estimate).

  • Shortlist wiki page updated with rows 6–9. Coverage limits: 크레딧잡, 캐치,

혁신의숲 detail blocked for all four; salary figures are unverified snippets.

2026-09-09 — Refined the DB index approach flow

  • User explicitly likes the overall portfolio design and asks to refine only the four-step flow shown in their screenshot.
  • Updated human/portfolio/items/db-index-optimization.html to an accessible ordered list with 01–04 markers, left-aligned stage titles and descriptions. Added opt-in .process-steps styling using the existing tokens and documented it in DESIGN.md. Horizontal connectors on desktop/tablet become a vertical timeline on mobile. Existing .flow components remain unchanged.
  • Simplified the repeated “재작성” wording without altering claims. User preference preserved in the original redesign source note; maintenance guidance added to the portfolio repo note.
  • Current 375/768/1280 browser checks: four steps at each width, no overflow and zero axe violations. Both independent component design and all-capture CJK reviews PASS (HIGH), no blockers. Evidence: ai/workspace/portfolio-redesign-2026-09-09/evidence/process-steps/.
  • Structural checks: 53 pages / 52 projects / 1,225 links / 175 immutable archive hashes pass. Voice BAN 0 / STRUCT 0; two unrelated pre-existing WARN contexts retained. LSP unavailable under the user's existing no-install preference. Only DESIGN.md, the target HTML and shared CSS differ from the prior reviewed 183-file product manifest; other 180 files remain identical.
  • Local preview is live at http://127.0.0.1:8765/portfolio/items/db-index-optimization.html#section-3. No commit or deployment.

2026-09-09 — Portfolio redesign continuation and final QA

  • User requested continuation from the interrupted portfolio work. Read the existing execution ledger; implementation P01–P07 was already present. Preserved concurrent edits and the immutable 175-file Deprecated snapshot.
  • Target: this wiki's human/portfolio/, not the separate portfolio app. Source catalog has 52 records across seven categories; shared templates generate the career overview and detail shells.
  • Re-ran node scripts/portfolio/check.mjs: 53 pages, 52 projects, 1,225 local links and 175 archive checksums, zero errors.
  • Re-ran node scripts/portfolio/qa.mjs: 159 current captures at 375/768/1280, no HTTP/image/overflow/axe errors, six passing interaction scenarios (categories/search/selection/print; anchors/return; keyboard; no-JS local files; invalid selections; historical print route).
  • Additional direct browser checks: search within an incompatible category reports empty; switching to the matching category recovers one result; clear selection disables print; reduced-motion uses automatic scrolling. Evidence: continuation-interactions.json.
  • python3 scripts/check_human_voice.py --strict: BAN 0, STRUCT 0, WARN 2. Remaining warnings are the existing word “다양한” near concrete mutation operators/paths and version/source differences; no invented quantitative claim is introduced.
  • Node syntax checks pass for shared templates/build/browser QA and runtime enhancement. No source implementation changed in this continuation as of this checkpoint.
  • Preferred Browser runtime was checked and returned no available browser; used configured local Playwright Chromium. Preview server: http://127.0.0.1:8765/portfolio/ (serves human/).
  • Independent design-system and CJK reviewers both returned PASS (HIGH confidence), no product/evidence blockers. CJK reviewer directly inspected all 159 captures. evidence/reviewed-build.json binds 183 portfolio files by SHA-256. Final verdict is recorded in evidence/visual-review.md and the execution ledger.
  • Historical Lighthouse evidence remains limited: mobile performance 95, other categories 100, desktop all 100. This continuation does not claim a fresh Lighthouse run or perfect mobile performance. No commit, deployment, resume export or external communication was requested or performed.

2026-09-09 — Remember second-round retrospective written

  • human/reports/2026-09-09-remember-second-interview-retrospective.md, on

the user's request ("리멤버 2차 면접 회고 정리해줘"). Grounded only in the prep set (guide, 17-question mock, 7 case cards, one-pager), the single recorded exchange from 2026-08-31 (weakness follow-up "무슨 장치를 만드나요?"), the 2026-08-28 list of still-empty slots (conflict incident, failure, feedback), and the user's mixed self-read. The company gave no reason, and the report says so.

  • Reading: the one recorded answer shows a retrieval failure under pressure

rather than missing material (cards 6 and 7 held the answer, split across three documents); three CTO-level questions had no prepared answer; practice was reading, not recorded speaking; the post-interview record was one exchange. Structural risks noted: preferred Spark/Kafka/OLAP gap, final round judged judgment and trust, possible salary-band question.

  • Lessons kept: the screening-stage process conclusion stands; weakness and

failure answers must end on the mechanism; one question, one card, one 60–90s answer; rehearse by recording; write the debrief within 30 minutes; fill the three empty slots now for any company. Eight debrief questions are listed for the user to answer.

  • Linked from the career status pages; wiki site rebuilt.

2026-09-09 — Remember & Company: rejected after the second round

  • User message: "2차 면접 떨어졌어...ㅋ 지원현황에 잘 등록해줘". Notification

time, channel and reason are Needs confirmation; the recruiter had promised the result for the afternoon of 09-08.

  • Recorded in all tracking places: human/career/2026-지원-현황.md (한눈에

보기 counts, Remember moved from 진행 중 to a new rejected section with the stage history and the interview/offer-memo links), human/career/index.html (same), the Drive archive 최종 이력서/README.md, source note ai/sources/career/2026-09-09-remember-second-interview-result.md, ai/workspace/active-context.md (no live interview process; Bithumb result pending), ai/wiki/projects/2026-career-transition.md and 2026-active-job-shortlist.md (live-process wording). Wiki site rebuilt.

  • Tally: 9 rejected (Remember is the only one that reached a final interview),

1 submitted and pending (Bithumb), 3 declined. No retrospective written yet; the 2026-08-31 follow-up-question record in the mock report is the main raw material if the user wants one.

2026-09-08 — Remember: erroneous system notice, result promised for today

  • 03:00 KST the user received a Remember platform SMS ("채용 담당자로부터

메시지가 도착했습니다") whose content said the take-home deadline had passed. Our record: take-home submitted 2026-07-28, first round passed (confirmed 08-24), second round held 08-31, so the notice contradicted the stage.

  • The recruiter's reply (user pasted it): the top of the chat shows an

unanswered consent step, which made the system send a bulk notice; the notice itself was an error produced while migrating from the external recruiting tool to an internal one, and should be ignored. The second-round result will be delivered "금일 오후 중" (2026-09-08).

  • Recorded in human/career/2026-지원-현황.md and index.html (결과 통보

예정일 filled; the notice explained). No status change yet; the archive README is untouched. Advice given: check the top of the chat for a still-open consent request and complete it if it is real, since an open consent step can hold up offer paperwork; otherwise wait until 18:00 and follow up the next morning.

  • Offer-negotiation memo written at the user's request while waiting:

human/briefs/2026-09-08-remember-offer-negotiation-memo.md (first five minutes on the call, salary anchor from the 2026-07-16 research estimate of 7,500만~8,000만 with 8,000만 as "good", offer-letter checklist including on-call and remote frequency, start date vs notice period and handover as part leader, ready-to-say sentences, do-nots, and the rejection case). Current salary, notice period and the opening number are left as [본인 확인 필요]. Wiki site rebuilt with node scripts/build-wiki.mjs . so the brief is viewable; linked from the career status pages.

  • Turnaround comparison for the user's anxiety question: first round took 12

days from interview to confirmed pass (08-12 → 08-24); the second round is at 8 days (08-31 → 09-08).

2026-09-08 — Record Bithumb application submission

  • The user confirmed submission of the final resume. Preserved the statement in ai/sources/career/2026-09-08-bithumb-application-submitted.md and consolidated the status into the career-transition wiki and active context.
  • Found that the application-root final PDF had been renamed to 빗썸_이력서_경력기술서_김현욱.pdf. Verified SHA-256 539949ab5612f2be996a3bde7124a1d9b50e2515f16f884f269afc6c1f29613b, exactly matching the previously reviewed final; copied it unchanged into career/최종 이력서/2026-09-08/빗썸/.
  • The archive date is the user's confirmation date. Exact portal receipt date/time and any separate portfolio submission remain Needs confirmation; no receipt or employer response was invented.
  • Updated the external final-archive README, human/career/2026-지원-현황.md, and the existing human/career/index.html tracker: Bithumb is submitted / awaiting result; drafting count is 0 and submitted-awaiting-result count is 1. Removed obsolete draft-selection instructions from the current Bithumb row.
  • Verification: archive checksum and all three status records agree; git diff --check passes. Browser plugin discovery returned no available browser, so used isolated bundled Playwright Chromium for the local tracker. Desktop 1440px and mobile 390px checks found no page overflow or JavaScript errors; the shortlist navigation works and mobile horizontal scrolling exposes the full Bithumb status. Both independent content/function and visual/CJK reviewers returned PASS on fresh screenshots under /tmp/bithumb-submitted-20260908/.
  • The user subsequently clarified llm-wiki 의 최신push를 진행해줘, authorizing commit/push of this completed update. The career tracker and its source/worklog changes are the publication scope; unrelated in-progress writing-skill, crawler and temporary files remain outside this commit. No job-market refresh was requested.

2026-09-08 — Which collectors are NOT in labrador-scrapers (미래아카데미 통합 방안)

Context: the user is planning to fold docker-only collectors into labrador-scrapers ahead of the 미래아카데미 build (crawler server ×1, source handed to the customer's git, SFR-067 형상관리). Asked for the inventory plus a plan page under Confluence "26. 미래아카데미" (4211605514).

Published: DT/4238606457 labrador-scrapers 미통합 수집기 현황 및 통합 방안.

Verified by reading the local clones and DAG definitions on 2026-09-08, not from memory:

  • Four homes, not two. labrador-scrapers (40 buildable components),

crawler/crawler-lib-* (6 repos + rust with no .git), tool/crawler-* (7 repos, legacy ai/labradorlabs/ layout, run by docker.run.in.background.mode.sh), and platform/labrador-etl-platform/{labrador-raw-scraper,transformer,dml-broker}.

  • tool/crawler-container-vuln is the biggest gap. crawler/osInfo.py +

module list carry all 13 distros (alma, alpine, amazon, arch, debian, fedora, mariner, oracle, photon, redhat, rocky, suse, ubuntu) plus GHSA and NVD. labrador-scrapers/etl_components/os_pkg_vuln/ only has alpine, debian, ubuntu, rhel_vex. So 9 distros are un-ported. Last commit 2026-06-26 (live), no DAG. This closes the "13 vs 4" open question raised in W34.

  • RHEL OVAL lives outside too. ovalRedhat.py BASE_URL is

www.redhat.com/security/data/oval/v2 — exactly the path the 미래아카데미 legal page lists. labrador-scrapers has only rhel_vex_crawler (CSAF/VEX). The W34 tension (Red Hat moved off OVAL) is still unresolved and now blocks porting, not just the legal table.

  • *crawler-lib-\ are long-running containers, not DAG tasks.** They self-schedule

inside app/main.py (dotnet SCHEDULE_INTERVAL_HOURS=4), and their images use foreign namespaces (labrador/, iotcube/, labradorlabs/), never devlabrador/. None appear in dags/envs/images.py. Porting them means removing the resident loop and externalizing the incremental cursor.

  • golang and java are duplicated. raw_lib_go_incremental (*/30) and

raw_lib_maven_incremental (:15 hourly) run the new devlabrador/labrador-raw-scraper, while crawler-lib-golang (2026-07-09) and crawler-lib-java (2026-07-14) are still maintained. maven_central_crawler (daily 13:00) runs the scrapers component on top of that.

  • Porting is convention-driven. scripts/publish_all_images_parallel.py globs

etl_components/**/Dockerfile, derives devlabrador/<dirname> from the directory name and the tag from version.txt, and buildx-pushes amd64+arm64. There is no CI config file in the repo. So a port = correct directory layout + Dockerfile + version.txt + a DAG, and build/publish attaches itself.

  • Two source-list corrections. GHSA is implemented as HTML scraping of

github.com/advisories, not the api.github.com/graphql the legal page graded. GitLab Advisory in labrador-scrapers/gitlab_advisory_crawler already uses the MIT gitlab-org/advisories-community, so the 상-grade gemnasium-db issue is already resolved in that component.

  • Superseded / out of scope, confirmed by last-commit date: tool/crawler-license

(2025-07-14, replaced by the license_crawler component), crawler-vuln-commiturl (2025-07-22), crawler-code-vuln (2025-07-23), crawler-lpp (2025-10-13), batch-statisticsdb (2025-04-24, SFR-069 candidate). tool/tool-synchronizer (2026-01-19) is in scope — it is the GATH→DIST step the 외부망 architecture needs.

  • Consolidation target is an open decision. labrador-raw-scraper's README

states the "여러 source scraper를 하나의 통합 이미지" goal, so folding into labrador-scrapers runs against an in-flight migration. Page presents A (scrapers) / B (etl-platform) / C (병행) with effort and risk per the review-docs rule, and leaves the call to 엔진파트 협의.

  • Also flagged for pre-port cleanup: crawler-lib-swift has a PAT in git history

and tracks config.ini; the source is to be handed to the customer's git.

Earlier same-session work (architecture, not yet written up): confirmed build_container_operator (dags/operators/builders.py:79) already branches on Airflow Variable DEPLOYMENT_TYPE (standalone=DockerOperator / cluster=KubernetesPodOperator), so the customer's single server needs no new scheduler; and BTS v4's [D] 폐쇄망 mode (BTS_MODE=download / BTS_MODE=import with HOST_DOWNLOAD_PATH) maps onto the 망연계 반입 directory without Updater code changes. User-stated build constraints: crawler server ×1, DB servers ≥2 (GATH/DIST split possible), binlog→망연계 파일→내부망 BTS, 순수 자체 수집 per SFR-064, source handed over with customer git ownership.

2026-09-07 — Correct past tense and disconnected resume prose

  • The user rejected 담당합니다 in a description of completed responsibilities and asked for similar awkward endings and clipped sentences to be corrected throughout the resume. The requested style is connected, natural professional Korean, not a sequence of mechanically shortened statements. Applied the existing Korean clear-writing and shared humanizer rules to this explicit revision; no new interview or optional scoring gate was needed.
  • Updated career/맞춤이력서/빗썸-Data-Engineer/빗썸_이력서_경력기술서_한국어윤문_2026-09-07.docx and its existing PDF in place. Prior versions are preserved as 문장흐름수정-QA-2026-09-07/before.docx and before.pdf. The older user-authored final, Google Docs and comparison pages were not changed. Comparison HTML is now historical and must not replace the corrected text without reconciling these edits.
  • Edited 28 of 164 paragraphs: corrected the leadership paragraph to past tense, connected project participation with the design-review workflow, completed fragmentary role descriptions, joined related actions, reduced repeated endings, and connected before/after result sentences. Current professional identity and future intentions retain their appropriate tense. Metrics and ownership boundaries remain unchanged.
  • Verification: every paragraph preserves its numeric and English-token multisets; the only changed DOCX ZIP part is word/document.xml, preserving photo, fonts/styles and hyperlink relationships. All 164 paragraph units were found in the final PDF after whitespace normalization, and all ten PDF URI links remain. Strict voice lint: BAN 0 / STRUCT 0 / WARN 0. Result-only achievement check passes (6 detected quantified lines, required 5); full plain-text check flags 9 introduction, role, action or technology entries without numbers. Manually classified those as non-result prose and retained them without adding unsupported metrics; the full check is not an unconditional pass.
  • Layout: the first render pushed military service onto an almost-empty fifth page. Reduced after-spacing by 1 pt and capped before-spacing at 4 pt across 34 page-2 paragraphs, without changing font sizes or line heights. Re-rendered through the documents renderer using installed LibreOffice and personally inspected all four final page PNGs: no clipped text, missing Korean glyphs or split project tables. Word and live Google Docs pagination remain unverified.
  • Evidence: 문장흐름수정-QA-2026-09-07/{changes.json,verification.json,readback.md,final/}. Final DOCX SHA256 503b78b3210d890a9b58c98b79aee423e869f5ca1e6b97388966727ff65facca; PDF SHA256 539949ab5612f2be996a3bde7124a1d9b50e2515f16f884f269afc6c1f29613b. The sibling-career JSON edit triggered an LSP cwd-scope warning; successful JSON parsing and saved-document verification cover the actual file. No source code, public publication, submission or commit was requested or performed.

2026-09-07 — Apply Korean clear-writing to the current Bithumb resume

  • User requested natural Korean for the current resume. Used korean-clear-writing, the shared tailoring/humanizer guidance and document/PDF workflows. Simplified repeated connectors, abstract constructions and redundant motivation wording without strengthening intent, ownership or technical claims. No new company research, metrics or personal motives were added.
  • Source: application-root 빗썸_이력서_경력기술서_최종본_2026-09-07_NotoSansKR.docx, verified against the current final PDF. Preserved the user's newer five-month DML observation, approximately twenty customer environments and 2010.07 military start. Earlier Markdown/alternative revisions must not overwrite these facts.
  • Separate deliverables in career/맞춤이력서/빗썸-Data-Engineer/: 빗썸_이력서_경력기술서_한국어윤문_2026-09-07.docx and .pdf. Rewrote 29 of 164 OOXML paragraph units in place, including text inside inline content controls. Each paragraph retains its numeric-token sequence and English-token multiset. Original image bytes and ten hyperlink targets match; DOCX package integrity passes.
  • Layout: preserved fonts, page margins and achievement/project tables. To retain four pages after text reflow, reduced six project tables' vertical padding from 65 to 50 twips and six spacer paragraphs' after-spacing from 5 to 3 points. The first five-page QA render is obsolete; 한국어윤문-QA-2026-09-07/final/ is authoritative. Personally inspected all four final page PNGs: Korean glyphs render correctly, no clipped text or split project tables. Actual Word/Google Docs pagination was not tested.
  • Final PDF: four A4 pages, all 164 source paragraph units present after whitespace normalization, ten URI links retained. Title-border sanitizer check passes. Strict human-voice lint passes for the generated readback and eight linked portfolio pages (BAN 0 / STRUCT 0 / WARN 0). Full achievement lint reports part1=16, total=27, and two missing-number findings: both are introduction narratives describing scope, not standalone result claims. Manually reviewed and retained them; the full lint is not represented as an unconditional pass. No numbers were invented to silence it.
  • Reused the unmodified comparison generator for 빗썸_한국어윤문_문장비교_2026-09-07.html: 29 changed units, zero number mismatches, pair-specific notes. Isolated browser checks passed selection, custom text, JSON export, reload persistence, reset and unchanged-row filtering. No JavaScript page errors or horizontal overflow at 375/768/1280 px; screenshots saved in QA. Parent inspected the full desktop capture; no independent UI-review pass is claimed. The older chooser and the user's existing choices were not changed.
  • Source SHA256 remains DOCX 767e6ba120077c987aef0c570372fc5a1b907f296a6ffc11621e9a9562afe8b1, PDF e2483c33f86ba40635b5999988736cc11fb093beb834036c0a4db2c9882b2049. Output SHA256: DOCX fa2a670b659962a5a8163a84344f589e1ea98ff6244370f18a79ea84453c3fe3, PDF dd4ee5553d663d10f97d5286a1aeab90d3efddb79d8368e3071195445fb3c25c. Exact edits, explanatory notes, readback and render evidence are in 한국어윤문-QA-2026-09-07/.
  • The readback-file edit triggered the known sibling-career-path LSP scope warning, not a content diagnostic; document linters checked the actual saved file. No Python or UI source was changed. No original replacement, new score, Google Docs mutation, public publication, commit or submission occurred.

2026-09-07 — Create a Korean localization and prose-editing skill

  • User requested a reusable skill informed by the incident-review B/C pair at writing-comparison.pages.dev. Read the public application/sample data and linked upstream entrypoints; generic web-reader access failed but public HTTP retrieval worked. No browser visual QA was claimed.
  • Created canonical skills/korean-clear-writing/ with SKILL.md, Codex UI metadata, authored calibration examples, and source observations. Covers translation, Korean polishing, optional scan-friendly structure, and review-only boundaries. Separately guards numbers, actors, modality, sequence, deadlines, verification and technical identifiers.
  • Do not blindly imitate later sample variants: observed added verification scope and possible deadline drift. Did not import upstream code, complete corpus, runtime banners, fixed change percentages or detector claims. Skill is self-contained and needs no Superloopy installation.
  • Installed discoverability through a new symlink at /Users/james/.codex/skills/korean-clear-writing to the canonical repository directory; no existing skill or Claude configuration overwritten. Runtime catalog refresh was not asserted.
  • Validation: bundled quick_validate.py reports Skill is valid!; manually checked calibration relations and reviewed discovery boundaries. This is author validation, not an independent behavioral benchmark. Source intake and concept note linked into the wiki indexes.
  • No resume, final PDF, public website or application submission was changed; no commit created.

2026-09-07 — 문장 비교·선택 page for the Bithumb resume

  • The user pointed at a side-by-side writing-comparison site

(writing-comparison.pages.dev) and asked whether reviewing the resume as "human vs AI language" that way would help, then asked for it ("만들어줘봐 그리고 비교해서 페이지좀 만들어줘봐"). Judgment: useful, but for a resume the unit is the paragraph and the decision is a choice, so the page is a paragraph-aligned chooser with diff as a helper, labelled "내 문장 vs 다듬은 문장" rather than "human vs AI" (both sides went through agent drafts and user edits).

  • Built scripts/resume_forms/build_compare_page.py (reusable): extracts

paragraph units from both DOCX files including table cells, labels them by Heading1/Heading2/table title/row label, requires identical unit counts, computes a token-level difflib diff, compares numeric-token multisets per paragraph, flags AGENTS rule-10 words and the "X가 아니라 Y" pattern, and embeds everything in one self-contained HTML (no external assets). The page offers 바뀐 문단만 보기, diff/number highlight toggles, font size, per-row 왼쪽 유지 / 오른쪽 채택 / 직접 수정 radios with a textarea, a memo field, optional "참고 의견" per row, a "비교 요약" box, localStorage persistence, keyboard [ ] 1 2 3, and JSON export / clipboard copy. Personal data is present, so the output stays in the Drive application folder and is not published.

  • First run: left 빗썸_이력서_경력기술서_최종본_2026-09-07.docx (user's own

edit, 13:41), right ..._문장다듬기_2026-09-07.docx (Codex prose pass). 168 units, 42 changed, numbers identical in all 42, no banned words on either side. Output 빗썸_문장비교_2026-09-07.html; inputs kept under 문장비교-2026-09-07/ (참고의견.json, 비교요약.txt, 화면-확인.png). Rendered in headless Chrome and inspected.

  • Reviewer notes (42, Claude): the right side mostly splits long sentences,

joins before→after into one clause, unifies arrow notation in the results table, and turns noun lists into sentences; those are safe to accept. It also dropped several of the user's own intent sentences in 소개 and 지원동기 (#9, #10, #62, #63, #64: "직접 수정해 왔다", "각 조직이 필요한 데이터를 제때 쓸 수 있게 돕고 싶다", "런북에 누락의 이유들을 기록") and shifted meaning in #45 (진행→개발), #91 (원인별 대응→재검사 방법), #101 (설계·구현→설계), #115 (개선→수정). The notes recommend keeping the left as the base for the five 소개/지원동기 paragraphs and choosing by fact for the four shifted ones. No choice was made for the user.

  • Published copy (user request "html은 llm-wiki 문서에 넣어줘서 보게해줘 ...

무조건 push까지"): human/career/bithumb-compare-2026-09-07.html, linked from the career status pages, live at https://llm-wiki.hwlabs.dev/career/bithumb-compare-2026-09-07.html (HTTP 200 right after the push). Because W32 found the live site serves without Cloudflare Access, the phone number and e-mail inside the embedded data were replaced with [전화 생략] / [이메일 생략] in the published copy only; the Drive copy is unchanged. Choices made on the site stay in that browser's localStorage; export the JSON from wherever the choosing was done.

  • Second comparison page, published on request: another agent session

produced 빗썸_이력서_경력기술서_한국어윤문_2026-09-07.docx/.pdf (Korean polish of the Noto Sans KR 최종본) and ran build_compare_page.py on it (빗썸_한국어윤문_문장비교_2026-09-07.html, 164 units, 29 changed, 0 number mismatches, 29 notes, 16:05; QA under 한국어윤문-QA-2026-09-07/). Copied to human/career/bithumb-compare-korean-polish-2026-09-07.html with the same contact redaction, linked from the career status pages. Not reviewed here beyond the counts; the notes are that session's.

  • Next: when the user hands over the exported JSON, rebuild the DOCX (Noto

Sans KR copy) with the chosen texts at the same unit indices, re-render the PDF, and re-run the voice and numbers checks. A merge script for that JSON is not written yet.

2026-09-07 — Requested scores only for the final PDF

  • User explicitly requested scoring without edits. PDF SHA256 remains e2483c33f86ba40635b5999988736cc11fb093beb834036c0a4db2c9882b2049; used the four pages inspected in the immediately preceding watermark check and re-read the preserved posting and existing perspective rubric. No application artifact changed.
  • Single-agent judgment scores, not independent reviewers or the deterministic quality gate: inclusion 90 (28/22/17/14/9), posting fit 82 (must-haves 56, DW linkage 12, preferences 4, first-page selection 10), CEO 86 (23/23/17/15/8), CTO 89 (23/23/16/13/14), technical lead 89 (23/24/17/16/9), design 85 (23/21/14/13/14). Component order follows the existing gstack-종합검토-2026-09-07/review-scope.md.
  • Judgment rationale: clear omission/connection/customer-delivery outcomes and project operating detail; cloud DW/Lakehouse/streaming and professional finance evidence remain limited; motivation demonstrates transferability more strongly than company-specific choice; page 2 is dense and page 4 has comparatively large lower whitespace. Exact observation-log reproducibility and source-to-public-page equivalence were not freshly audited. No aggregate deterministic score or hiring probability asserted.

2026-09-07 — Read-only watermark inspection of the Claude-exported final PDF

  • User requested checking the final PDF for watermarks after continuing edits with Claude. Inspected application-root 빗썸_이력서_경력기술서_최종본_2026-09-07.pdf, not older QA renders. SHA256: e2483c33f86ba40635b5999988736cc11fb093beb834036c0a4db2c9882b2049.
  • Rendered and personally inspected all four pages: no visible watermark or generated-by attribution. Inspected PDF metadata/XMP, optional-content groups, annotations, text traces and object dictionaries: no watermark/stamp objects, optional layers, embedded files, invisible-render-mode text, low-opacity text below 0.2 or tested zero-width characters found. No claim of exhaustive steganographic detection.
  • Metadata identifies Writer / LibreOffice, not Claude or Anthropic. The sole Claude/ChatGPT keyword hit is the intentional skills entry about API and PR-review-tool experience, not document authorship or a watermark. Original PDF was not edited or re-exported.

2026-09-07 — Achievement table and whitespace correction

  • User found standalone achievement paragraphs confusing and requested a table plus consistent whitespace. Created a new local MD/DOCX revision rather than overwriting the review-applied source.
  • Achievement table: item / result / action and verification, four data rows, 34/34/106 mm columns, pale-blue header and thin grid. Added intentional line breaks in the DB-error label and daily-to-monthly result to avoid orphan syllables. Facts and figures unchanged.
  • Layout tokens: 18 mm page margins; section headings 10/6 pt before/after; body 10 pt, 1.14 line spacing and 4 pt after; table line spacing 1.10–1.12, vertical padding 3.25 pt (4.25 pt for achievements), horizontal padding 5.25 pt. Aligned tables to the same text edges and retained three whole project tables per project page.
  • Initial render put education and military service on page 4 but made it too dense. Final arrangement places education at the bottom of page 1 and military service on page 4. Page 2 retains career and motivation. No content removed to force pagination.
  • Final render inspected on every page: four A4 pages, no clipping, overlapping content or split project tables. Content-bottom positions changed from 543.1/692.2/658.2/561.1 pt to 733.1/672.0/723.8/672.5 pt; cross-page spread reduced from 149.1 to 61.1 pt. Footer excluded from measurements. QA folder: application 표여백정리-QA-2026-09-07/final/.
  • Checks passed: all six project-table texts identical, other nonempty body paragraphs identical after excluding the eight replaced achievement paragraphs, original photo bytes identical, ten external links retained, no comments/tracked/hidden text, title sanitizer clean, strict voice lint 0/0/0 and achievement-number checker pass. Local Korean font fallback remains AppleSDGothicNeo; native Word/Google Docs pagination was not verified.
  • MD SHA256 007a6dbd355298dce36ba1f5a3ce454ec4de39d9a9be345976186df7ceba712e; DOCX SHA256 2b87f6024f3f016fc8b4b42a4b97fb145c6c058424ca8a454a0b9d9d2d949374. Prior source DOCX remains e1bd59893d3139df85fb0d47e2895f98b431b3db3ce992e9094ba9777a853c4a.
  • No commit, submission, public portfolio change, Google Docs edit or independent rescore. QA PDF is internal; deliver editable DOCX.

2026-09-07 — PDF of the user's final DOCX (resumed after the Codex cutoff)

  • The Codex session 01a079b7-759e-7322-939b-97eedfb1342d ended on its token

limit right after the user asked "빗썸_이력서_경력기술서_최종본_2026-09-07.docx 이거 pdf로 만들어줘봐 디자인은 똑같이". It had rendered a 5-page LibreOffice PDF into 최종본-PDF-QA-2026-09-07/ (14:07) and stopped before checking or handing it over. Claude picked the task up here.

  • Diagnosis: the DOCX (SHA-256 33088423…, Google Docs export, no explicit

page break before 학력) paginates as 1 소개·성과·기술 / 2 경력·지원동기 / 3 학력·병역 alone / 4–5 경력기술서, because 경력기술서 carries pageBreakBefore and the Google Docs round trip flattened the earlier exact 11.5pt line spacing back to auto 1.15, which is tall for Arial Unicode MS.

  • Deliverables in career/맞춤이력서/빗썸-Data-Engineer/:

빗썸_이력서_경력기술서_최종본_2026-09-07.pdf (4 pages, recommended) and 빗썸_이력서_경력기술서_최종본_2026-09-07_원본그대로_5쪽.pdf (as-is). The 4-page PDF comes from a render-only copy (최종본-PDF-QA-2026-09-07/4쪽/ PDF용_줄간격조정_사본.docx): paragraphs from 경력 to 병역 set to exact 11.5pt line spacing and four empty spacer paragraphs dropped. No text, font size, table, link or photo change; the user's DOCX hash is unchanged.

  • Checks: text identical between the two PDFs ignoring page numbers; 10 links

in both; Arial Unicode MS embedded (installed locally); all four 4-page PNGs inspected, 학력 table and 병역 line sit at the bottom of page 2 without clipping, projects 1–3 and 4–6 unsplit on pages 3–4. Native Word/Google Docs pagination not verified. Record: 최종본-PDF-QA-2026-09-07/4쪽/verification.json.

  • Also this turn: merged origin/main (study chapters only, disjoint files),

committed the uncommitted Codex notes from 2026-09-05..07 (W36 entries, W37, two sources, hyunwook.md and library-missing-improvements.md notes, active-context) and pushed. _workspace/2026-09-04-00x/ stays untracked.

  • Font follow-up (same day): the user found the type odd. Diagnosis: Korean

ran in Arial Unicode MS (single weight, synthetic bold, wide spacing) and Latin in Arimo, because the 09-07 Codex session had swapped the DOCX from the form's Noto Sans KR to Arial Unicode MS to get a local render, and the Google Docs round trip kept that. The user chose the recommended fix: restore Noto Sans KR. Installed the Google Fonts variable file via brew install --cask font-noto-sans-kr, found LibreOffice picked its Thin default instance, so built static Regular/Medium/Bold instances with fontTools varLib.instancer into ~/Library/Fonts and removed the variable file. Render copy: every Arial Unicode MS/Arimo/Arial rFonts in all word/*.xml parts → Noto Sans KR; 경력–병역 paragraphs exact 11.5pt with the four empty spacers dropped; all other paragraphs with runs ≤ 11pt exact 12pt (headings untouched). Result 4 pages, fonts NotoSansKR-Regular/Bold only, 10 links, text identical to the as-is PDF; all four pages inspected. The earlier Arial Unicode MS 4-page PDF moved to 최종본-PDF-QA-2026-09-07/4쪽/이전-ArialUnicodeMS/. The refonted copy is also saved top-level as 빗썸_이력서_경력기술서_최종본_2026-09-07_NotoSansKR.docx so the user can keep editing in Google Docs (which has Noto Sans KR natively) without the font drifting back.

  • Open: which PDF the user submits; submission date; copy of the submitted

PDF into 최종 이력서/{날짜}/빗썸/ and the three-place status update.

2026-09-07 — Revise the whole Bithumb resume's prose, preserving the original

  • User provided a GPTZero report and then requested that the whole document sound less AI-written, with the original retained. Report classification was AI Probability 75%, moderately confident; it is not a measured fraction of AI-authored text. The scan contained corrupted Korean strings absent from the latest DOCX. No new upload or detector rescan was performed.
  • Used the latest user-edited 최종본_2026-09-07.docx (13:41), SHA-256 33088423a69dbdd024376b0c1d792a36be6e7f3ced11b7c6800c21d260586ef8, rather than the older Markdown or earlier finalization snapshot. It contains the user's five-month DML zero-error observation, approximately 20 customer environments and military start 2010.07. These are user-edited statements; exact DML observation dates/log aggregation remain unverified.
  • Saved a byte-identical input snapshot at 문장다듬기-QA-2026-09-07/수정전-원본.docx. Created a new 빗썸_이력서_경력기술서_문장다듬기_2026-09-07.docx and a reading Markdown. Original file hash is unchanged after completion.
  • Rewrote 42 paragraphs across introduction, representative achievements, career scope/operating examples, motivation and all six projects. Introduction is 429 characters; motivation 486 (excluding paragraph separators). Removed repeated intentions and abstract transitions; retained the approved career tag, project-specific failure details, ownership boundaries, actual measurements and unmeasured CPU/response-time limitations. Personal motivation remains grounded in the September 4 interview; no finance-industry or new stack experience added.
  • Compared each paragraph's numerical-token multiset before/after; all preserved. Every non-document.xml ZIP part is byte-identical, including media and all 10 hyperlink relationships. Paragraph-level before/after text is in 문장별-변경내역.json.
  • Render iterations: the user's latest automatic line spacing initially produced six pages. Restored explicit body line spacing (12pt; 11.5pt in career/motivation/education/military) and compacted empty spacer paragraphs. Restored the original header paragraph properties after an intermediate render clipped the inline portrait. Only 문장다듬기-QA-2026-09-07/final/ is accepted: four pages, full portrait, education/military on page 2, three complete project tables each on pages 3 and 4. All four PNGs inspected; no clipping/overlap observed. Native Word/Google Docs pagination remains unverified.
  • Strict voice check passes for draft plus eight linked portfolio pages (BAN/STRUCT/WARN all zero). Full achievement-format check reports three unquantified context paragraphs (introduction 2–3 and project 6 problem); manually classified, without inventing numbers or modifying the checker. Separately extracted actual achievement sections pass (part1=7, total=11, no_number=0). These checks do not guarantee natural prose or an AI-detector result.
  • Final DOCX SHA-256 2622b5059042f7b7d6380fb9040cd9722c8baeea692e23dd016f58c8751566c3. Evidence: 문장다듬기-QA-2026-09-07/verification.json, change log and final render. No original overwrite, Google Docs update, submission, external upload, commit or new review score.

2026-09-07 — Complete the user-edited Bithumb final DOCX

  • User corrected the resume target from Remember to Bithumb. Recovered the actual pending request from session 01a07971-6c2e-78b1-b717-519f2ea8b8cf: the user had personally edited the document and requested a final DOCX. The previous session stopped after source backup/render when credits ran out.
  • Source: career/맞춤이력서/빗썸-Data-Engineer/빗썸_이력서_경력기술서_소개보강_2026-09-07.docx, SHA-256 e7bc1f80ce3277e8edd06d2eb8ac144134e9638e2810966516da51e76bab0c2c. This is newer than its corresponding Markdown. Preserved the prior snapshot under 최종본-QA-2026-09-07/사용자수정-원본.docx.
  • Created 빗썸_이력서_경력기술서_최종본_2026-09-07.docx, SHA-256 ed872446beabb69de2554f0b4e5d6b6309c77656b1464641c77a8d9be37eb48f. Initial render had five pages with education/military alone on page 3. Changed only paragraph spacing for career, motivation, education and military: body 11.5pt exact line spacing/2pt after; headings 6pt before/4pt after. Font sizes, text order and every text node are unchanged.
  • Verified every other ZIP part byte-for-byte against the user source, preserving all photos, relationships and links. No tracked changes, hidden text or comment references. Strict voice check: BAN 0 / STRUCT 0 / WARN 0. Plain-paragraph number checker: 33 quantified lines, eight unquantified narrative/role/action/tool findings; manually classified, no text rewritten and no automatic full pass claimed.
  • Rendered using the documents renderer and native LibreOffice; inspected all four release PNGs. Education/military now fit on page 2, three complete project tables on each of pages 3 and 4; no clipping or overlap observed. Native Word/Google Docs pagination unverified. Evidence: 최종본-QA-2026-09-07/final-verification.json and release/.
  • User-edited facts include approximately 20 customer environments and military start 2010.07. Preserved as supplied; differences from older wiki evidence are recorded in the linked source note and profile summary. No new independent fact audit, Google Docs update, submission, PDF archive copy or commit.

2026-09-07 — Strengthen the Bithumb introduction without repeating achievements

  • User asked to expand the introduction and make it more compelling without duplication. Created 빗썸_이력서_경력기술서_소개보강_2026-09-07.md and .docx in the application folder, preserving the prior files.
  • Expanded 286 to 535 characters in three paragraphs: security research and interpreting affected products/versions; why collection growth broadened responsibility into common execution/DB/distribution; designing the binlog batch path for customer replica-connection constraints and investigating unfamiliar source/protocol behavior. Reused the existing career tag. Did not repeat representative before/after metrics or the motivation's omission/runbook narrative.
  • Sources: ai/sources/career/2026-07-16-resume-introduction-feedback.md, ai/wiki/people/hyunwook.md, ai/wiki/projects/data-platform-systems-engineering.md, and the 2026-09-04 Bithumb interview. Transitions are agent-composed from these facts; no new user motives, metrics, ownership scope, or finance-industry experience were added.
  • Expanded introduction required education to move from page 1 to page 2. Retained military service on page 4 and explicit career/detail page breaks. The source DOCX read in this turn contains Google Docs content controls and Arial Unicode MS formatting; edited the OOXML text directly to preserve those other sections.
  • Render iteration exposed unsuitable local font substitution when using Arial/Noto/Apple/Nanum mappings. Final document uses Arial Unicode MS (verified embedded in the QA PDF), 9.5 pt for previously 10 pt body runs, and explicit 12 pt line spacing for text up to 11 pt. Title sanitizer removed two leading paragraph border residues; final check passes. Only 소개보강-QA-2026-09-07/release/ is the accepted render; intermediate renders are rejected.
  • Manual QA: inspected all four final page PNGs. Introduction, four achievement rows and skills fit on page 1; career, motivation and education fit on page 2; three unsplit project tables on each of pages 3 and 4; no clipping or overlap observed. Native Word/Google Docs rendering remains unverified.
  • Content checks: every non-introduction top-level XML text block is preserved (allowing education/military reordering), photo bytes and 10 hyperlink targets match the source. Strict voice lint passes for the draft and 8 linked portfolio pages (0/0/0). Full achievement checker reports two NO_NUMBER introduction paragraphs; these describe career scope and implementation approach, not new measurable outcomes. No numbers were added merely to satisfy the heuristic. Separately extracted achievement-bearing sections pass (part1=26, total=35, no_number=0); the checker itself was not modified. Do not claim the full checker passed.
  • Evidence: 소개보강-QA-2026-09-07/verification.json. DOCX SHA-256 76a02b01043a2c4d2f59214403321c7cb41e5ef00e2790da4930f80da1ef7320; MD SHA-256 475c83972e8223251de548e31ed699f24866ab4d83577df8caddc2564d58f0a4.
  • No Google Docs update, submission, independent rescore, source-code edit, or commit.

2026-09-07 — Resume the interrupted table and spacing revision

  • Recovered prior session 01a07910-3872-7803-9e31-bac317169d4b. Last user request was to turn representative achievements into a table and correct inconsistent whitespace. The session saved 표여백정리_2026-09-07 MD/DOCX and rendered pages, but stopped before final verification, worklog update, and handoff.
  • Retained the saved design: four achievements in an 항목 / 성과 / 조치·검증 table, A4 with 18 mm margins, education on page 1, career/motivation on page 2, projects 1–3 on page 3, and projects 4–6 plus military service on page 4. No additional resume text or formatting edits were needed after visual inspection.
  • Fresh rendering used the documents skill renderer with the bundled Python runtime. Bundled headless LibreOffice omitted Korean glyphs; that output at 표여백정리-QA-2026-09-07/resumed/ is invalid. Re-ran the same renderer with installed /Applications/LibreOffice.app/Contents/MacOS/soffice; verified all four new PNGs at resumed-native/. Korean text renders correctly there, with no clipped text, overlapping elements, or split project tables. Word/Google Docs pagination remains unverified; local font substitution still applies.
  • Structural verification passes: 10 tables, 6 project tables with unchanged cell content against the comprehensive-review revision, 4 achievement rows, identical photo bytes, 10 preserved hyperlink relationships, and no tracked/hidden/comment elements. Title sanitizer check passes. Strict voice lint passes for the draft and 8 linked portfolio pages (BAN 0 / STRUCT 0 / WARN 0); achievement format check passes (part1=27, total=36, no_number=0).
  • Evidence: 표여백정리-QA-2026-09-07/resumed-verification.json. DOCX SHA-256 2b87f6024f3f016fc8b4b42a4b97fb145c6c058424ca8a454a0b9d9d2d949374; MD SHA-256 007a6dbd355298dce36ba1f5a3ce454ec4de39d9a9be345976186df7ceba712e.
  • Deliver the existing editable DOCX. No live Google Docs modification, submission, new review scores, source-code edits, or commit.

2026-09-07 — Bithumb omission/error narrative and DML highlight

  • User requested that the RubyGems-only highlight explain how omissions and errors were detected through alerts/checks, classified, and addressed in code and runbooks. Also requested adding the DML connector's connection-issue improvement.
  • Source was the latest local v9 표형개선_2026-09-05.md, which contains the user's quoted text verbatim. Created a dated revision; older application files, existing W36 changes, and live Google Docs were preserved.
  • Updated introduction, first achievement, project 1 title/actions/result, and project 5 title. Added a separate DML highlight after the omission/error row. No changes to unrelated achievements, career dates, role boundaries, motivation, education, photo, or technology claims.
  • Evidence: existing crawler improvement/repo notes document warning/error distinctions, retry/completion errors and registry checks; the user supplied the operating-narrative clarification. RubyGems 48 gems / 1,310 versions and 101 to 4 candidates remain a backfill/recheck example, not an overall recurrence metric. The 11,254 figure remains detected missing products, not all-backfilled products.
  • DML wording uses DML 커넥터(Broker) to connect the user's term to the existing component name. Preserved 80+ crawlers, bounded queue / connection pool, 3–4 lock/connection errors per day before, and zero during the previously documented four-month observation.
  • Reused render_bithumb_v9.py through runpy, overriding only STEM to the new dated Markdown. No source-code edits. After generation, applied keep_with_next to all project-table rows except the last to prevent an orphaned final row; serialized using the existing package-cleaning helper.
  • Validation: human-voice lint BAN 0 / STRUCT 0 / WARN 0 for the resume and eight linked portfolio pages; achievement checker passes with zero missing-number findings. DOCX ZIP/reopen, four highlight rows, six project tables, 42 project-field values, original photo byte identity, and absence of hidden/tracked text pass.
  • Manual QA: rendered with the documents skill's render_docx.py and inspected every page. Final is four A4 pages, all four highlights and skills on page 1, projects 1–3 on page 3, projects 4–6 on page 4, no split project tables or clipped text. Noto Sans KR is not installed on this Mac, so the local renderer uses font fallback; Word/Google Docs pagination may differ. QA images/PDF remain in /private/tmp/bithumb-achievements-F8D7IG/final/.
  • Tool limitation: the Markdown edit succeeded but the LSP hook rejected the sibling career path as outside the wiki cwd. This is a path-scope diagnostic limitation; the file was checked with the repository's document linters and artifact checks instead.
  • No commit, submission, public portfolio change, or new Google Doc.
  • Markdown SHA-256: c1b61207a91449322ae40aa058204e5770676601f6fb8c826ac4d267caa970ea.
  • DOCX SHA-256: 1aafeeacaa12d7d09f3e54178a75ee1cf96169bf07bcbdeecdb99e3b36bf818a.

2026-09-07 — Bithumb motivation expansion

  • User feedback, verbatim: "지원동기가 너무 약해... 좀 더 풍성하고 멋드러지게 써봐".
  • Expanded motivation from one short paragraph to three paragraphs: finance-domain interest and role fit; concrete omission detection, code/runbook changes and customer loading checks; security background and a scoped contribution proposal.
  • Personal motives and the 2021 Upbit personal-project boundary come from ai/sources/career/interviews/2026-09-04-bithumb-18.md Q1–Q3. Incident detail comes from that interview's Q4 round 2 and the user's 2026-09-07 clarification. Role expectations come from the preserved Bithumb posting. No new company claims or personal anecdotes were added.
  • The sentences proposing source-to-load checks, alert/reprocessing improvements and code fixes are agent-composed connections between the existing motives, verified work and posting. They remain draft language for the user's own edit, not newly confirmed personal commitments.
  • Removed the scout-channel opening; kept the distinction between professional security-data work and personal financial-data exposure. No production finance, streaming or DW experience was added.
  • Created dated 지원동기보강_2026-09-07.md and .docx; previous versions preserved. Content diff is confined to motivation, plus removal of one trailing blank line. All representative achievements, project tables, and original photo remain unchanged.
  • Validation: strict voice lint 0/0/0; achievement checker passes with zero missing-number findings. Verified all three paragraphs in DOCX, unchanged table text/photo, and package/reopen. Rendered and inspected all four A4 pages; motivation, education and military service fit on page 2. Local font fallback limitation remains as above. QA artifacts: /private/tmp/bithumb-motivation-JFLIM2/final/.
  • No Google Doc edit, submission, commit, or new persona review.

2026-09-07 — Requested gstack-inspired full resume review

  • User requested item inclusion appropriateness, posting fit, CTO/technical-lead/CEO perspectives, overall design, then explicitly added missing-item review. Reviewed the latest motivation-expanded Markdown/DOCX without changing either.
  • Application review folder: career/맞춤이력서/빗썸-Data-Engineer/gstack-종합검토-2026-09-07/; main Korean report 종합리뷰.md, frozen rubric review-scope.md, three independent reports, review-manifest.json, quality-gate.md, evidence ledger, and four-page QA render.
  • Installed gstack root routing and CEO/engineering/design principles were read and adapted to this document task. No native resume scoring workflow exists in gstack. No software implementation, upgrade, automatic commit, or remote artifact sync was authorized or performed. Startup reported telemetry/artifact sync off. gstack source HEAD 394db326f2d3aaccd4804fe846b82aaa7d189dee.
  • Frozen wiki HEAD 04352f6283d004ba38c90c73039e1f1d3d8025be; MD SHA-256 979b6dacd1d3748a0085c91a93828e921e7198dabf86858cb7928f0d90ba3602; DOCX SHA-256 52a484b981bdbe277a1bbf8e0ca7cc6a4d5b0cf56ede833ce51ec6e1fd1e07ba. Artifact hashes, not the wiki commit alone, identify the external career document.
  • Fresh independent CEO/CTO/lead reviewers completed: CEO83/100, CTO87/100, lead84/100; CEO also scored inclusion86/100. JD/design workers produced evidence but hit a workspace-credit limit before final scores, so their lanes are INCONCLUSIVE. Parent read the posting/resume, viewed all four newly rendered pages, and completed JD80/design82 explicitly as parent judgments, not independent scores. All scores use declared component weights and are not hiring probabilities.
  • Main findings: keep omission/error loop and DML upfront; reduce introduction/motivation/project repetition; strengthen DML observation dates/error aggregation/recovery boundary; distinguish Ruby101-to4 candidate reduction from recovered omissions and 1,310 full-version UPSERT rows from newly missing versions; clarify the approximately one-hour latency measurement boundary.
  • Source-ready additions: Broker request-id/latency/active-pending observations, the completed 12-ecosystem onboarding/improvement-history documentation package (team output, not sole authorship), weekly global-index reconciliation/requeue rationale, and file-level batch recovery boundary. User confirmation needed for team-lead decision outcomes, personal Bithumb rationale, exact measurement windows and recovery-completion criteria. No finance/streaming/DW/Lakehouse production claims added.
  • Source reconciliation: older Ruby nondeployment suspicion is superseded by W29 deployment/reconcile/weekly-cron evidence. The answer-bank phrase implying all11,254 found-and-collected must not override the latest detected-only wording. No underlying source notes were rewritten as part of this read-only resume review.
  • QA: four A4 pages rendered; parent inspected every page; no visible clipping, overlap or split project tables. DOCX has11 tables including6 project tables; no comments/tracked changes/hidden text found. Font fallback is observed (AppleSDGothicNeo plus LiberationSans/Serif instead of declared Noto Sans KR). Page2 is denser than other pages. Some page1 text extraction interleaves achievement labels/descriptions; no actual ATS failure asserted.
  • Strict human-voice checks pass for resume and report; achievement-format check passes. PDF contains10 hyperlink URIs; eight project-detail URLs return HTTP200 after redirects. Complete live-content equivalence and actual Google Docs/Word layout were not verified. QA PDF SHA-256 9377b171acc64ea7fc241140115d656408f9a6257f0f66ef618ea6ac7920d8b2.
  • Deterministic legacy scorer attempted with honest null unknowns: exit2, INVALID MANIFEST: evidence.claims_total must be a number. No atomic claim/metric census was completed; format-check counts were not substituted. The old canonical-HTML/1-to3-page gate also does not directly fit this DOCX merged artifact. No automatic total or95 pass is claimed. Independent persona scores also remain below95.
  • External career Markdown edits initially triggered the wiki-cwd LSP path-scope warning despite succeeding. Subsequent report edits used apply_patch with the review directory as cwd; Markdown and JSON checks were used. Existing unrelated changes were preserved.
  • Final skeptical verification by a separate read-only agent: PASS for report honesty, arithmetic, source spot-checks and requested coverage; explicitly PARTIAL for the full independent-review process and legacy automatic gate. Bound to the same full wiki SHA and MD/DOCX hashes; record final-audit.md and immediate ledger entry. No review conclusions were presented as actual employer opinions.

2026-09-07 — Apply the requested review recommendations

  • User requested implementation of the comprehensive review. Created dated career/맞춤이력서/빗썸-Data-Engineer/빗썸_이력서_경력기술서_종합의견반영_2026-09-07.md and .docx; all prior drafts remain unchanged.
  • Intro reduced559→287characters and motivation860→611characters including whitespace; retained three grounded motivation paragraphs. Restored the user-approved short headline in both the header and introduction. No new personal motive or employer claim invented.
  • Reordered original projects1,5,4,2,3,6 to new1–6 and updated summary/year references. Promoted customer-ingestion incidents to the first-page achievements, keeping EXPLAIN measurements and limitations in project4.
  • Added source-backed Broker request-id/processing-time/active-pending observations, twelve-ecosystem onboarding/improvement-history documents explicitly as team output, weekly Ruby global-index reconciliation and requeue rationale, and the binlog-file recovery boundary. Added no new metrics or unverified production architecture.
  • Clarified Ruby1,310 rows as full-version reloads for48 gems, and candidate101→4 as including deletion exclusions. Replaced an ambiguous approximately one-hour end-to-end claim with the verified approximately hourly binlog-file batch cadence. Changed upgrade customer8 to approximately8 per raw wording. DML remains scoped to the previously stated four observed months; exact dates/log filter are still open.
  • Two nonblocking questions sent for personal Bithumb rationale and exact DML observation dates/aggregation. No answer was available before artifact completion; no inferred answer recorded. Team-lead decision anecdotes and stronger recovery guarantees were not invented.
  • Reused the existing builder through runpy with task-local function overrides, without editing Python source files. Representative achievements are sequential paragraphs to avoid two-column extraction interleaving. Applied Heading1/Heading2 roles, collapsed military table to one line, changed Latin font mappings toArial while retaining KoreanNotoSansKR, and kept the original profile photo bytes.
  • Title sanitizer found unused Title-style border residue; same-input --out was correctly rejected, then --in-place removed the residue and --check passed. Final sanitizedDOCX was freshly rendered and all fourA4 pages inspected. No clipping/overlap/split project tables;9tables/6projecttables,42field matches,18semantic heading references,0comments/tracked/hiddentext. English serif fallback eliminated; Korean locally falls back toAppleSDGothicNeo. FinalGoogleDocs/Word pagination is not asserted.
  • Validation: strict voice lint onMD plus8linked portfolio pages0/0/0; achievement format check passes(part1=27,total=36,no_number=0); four first-page achievements extract in order;10links retained. QA under 종합의견반영-QA-2026-09-07/final/, verificationJSON and Korean change notes in the application folder.
  • Connected document-session discovery returned none; GoogleDrive import/search/suggest tools were not exposed. NoGoogleDoc was modified. Deliver editableDOCX, not a new claimed nativeDoc or submissionPDF. No independent rescore or95gate was run for this revision.
  • MD SHA256 4219ad504f1e0dd1fd3ed8b1cc8fed3a51cda3449f80f2713ba7b8f7647ab92a; DOCX SHA256 e1bd59893d3139df85fb0d47e2895f98b431b3db3ce992e9094ba9777a853c4a. PriorDOCX SHA remains 52a484b981bdbe277a1bbf8e0ca7cc6a4d5b0cf56ede833ce51ec6e1fd1e07ba.

2026-09-09 — correct rejected portfolio step and architecture scope

  • The user identified library-table-redesign as still using gray four-step boxes and rejected the previous architecture styling. Ten procedural flows had been missed because the earlier process primitive was applied to only one page.
  • Added idempotent conversion in scripts/portfolio/build.mjs; all 11 current process lists share the approved outlined-number component. Added the remaining-legacy-flow check to the structural gate. Polished step descriptions on eight pages without changing source-backed body content.
  • Reworked all 36 SVGs and editable artifacts through the shared renderer: 72px cyan infrastructure symbols, orange primary responsibility boundaries, subdued secondary boundaries, unboxed external components, rounded connectors and adjusted topology layouts. Preserved all 257 nodes and 238 edges. Mermaid semantic definitions match the before state.
  • Verification: 33 process crops at three widths, 36 native diagram captures, final 159 page captures and six functional scenarios pass. Strict voice lint 0/0/0; 52 body sections outside steps/figures unchanged; all 175 original archive files match. New DML enlarge/download/keyboard-scroll/print interactions pass. Independent review verdicts are recorded in the correction evidence folder.
  • Browser runtime again returned no available browser. Configured Chromium was used for live local QA. Asked for the user's currently viewed URL; no public deployment or commit performed.
  • Final correction review: independent visual/CJK PASS (HIGH) and integrity APPROVE, no blockers. Current 254-file manifest matches. Ledger C01–C04 complete; screenshots and local preview links prepared.

2026-09-09 — stale architecture image follow-up

  • User screenshot showed the old three-card DML SVG beneath the new figure controls/caption. Current disk and local HTTP both returned the new six-node cyan schematic (SHA prefix 3594fd1d6335). Exact user URL remains unknown; Browser unavailable and known public URLs returned403, so browser cache vs different deployment is not confirmed.
  • Confirmed the delivery weakness with a controlled Playwright stale-response test: unchanged SVG URL loaded the old image (red). Added per-file SHA256 revision queries to all36 embedded SVG, enlargement, Mermaid and Excalidraw URLs in the canonical integrator (green). Replacement lookup strips queries so regeneration stays idempotent.
  • Browser verified36versioned images, enlargement, bothdownloads and localfile mode; DML regenerated a second time and the regression stillpasses. Structural checks53routes/1346links/175archivehashes pass. Evidence: ai/workspace/portfolio-redesign-2026-09-09/evidence/asset-refresh/. No visual redesign or publicdeployment performed in this follow-up.

2026-09-09 — publish portfolio to its actual Cloudflare domain

  • User explicitly authorized main push and identified https://portfolio.hwlabs.dev/ as the Cloudflare site serving human/portfolio. This resolves the earlier URL ambiguity: local-only changes had not yet reached this deployment.
  • Committed the complete portfolio redesign, all36schematics and editable outputs, all11process timelines, Korean copy/result presentation, source generators/dependencies, immutable175-fileoriginal snapshot and image revision URLs. Commit: 643496632b4d4847cd1bad1f109e2555564e9d04 (portfolio: publish editorial redesign and architecture schematics); pushed main successfully from 4d0a3a62.
  • Updated public deployment guide to the confirmed domain and kept output directory human/portfolio. Unrelated career/resume/wiki edits remained in the working tree.
  • Public verification: all36SVG hashes exactly match local release; all53HTML pages match after decoding Cloudflare's email-protection links/spans and removing only its injected decoder. RawHTMLhash mismatch was the hosting transformation, not missing deployment. An initial Playwright API-request redirect timed out; canonical-URLcurl comparisons completed. A search assertion was corrected to target the DML card instead of assuming a global DML search has only one match. No product change was made for either QA issue.
  • Live Chromium verified desktop/mobile index, library timeline, DMLfigure, diagram enlargement and category/search/detail navigation. Production artifacts: ai/workspace/portfolio-redesign-2026-09-09/evidence/deployment/. Both main and origin/main point to the release commit.

2026-09-09 — Confluence MCP and portfolio content refresh

  • User requested Confluence integration and portfolio latest facts. Official Atlassian MCP registered in local Codex; OAuth and authenticated DT reads succeeded. No remote documents were changed.
  • Indexed 30 of 82 recently modified pages and read 11 relevant technical pages. Preserved sanitized versioned extraction in ai/sources/confluence/2026-09-09-portfolio-refresh.md.
  • Corrected RHEL from design-only to implemented/main-merged, trial-loaded and DEV-complete, keeping DIST conditional on engine testing. Updated physical model to CHANNEL_ID and VERSION_RANGE and package-level MODULARITYLABEL. Exact trial2,778,589facts also grounded in W35.
  • Added the22-collector inventory/20migration-candidate boundary and six authored operational guides to two existing portfolio entries. Preserved ownership and review/production limits.
  • Fresh53-page/159-screen QA,six interactions,36diagram geometry checks,semantic exports and strict Korean voice checks pass. Review/publication state: ai/workspace/portfolio-confluence-refresh-2026-09-09/index.md.
  • Publication completed: main 4aa331b26af8132453ac2048f4121f4bbffa9c38 pushed; https://portfolio.hwlabs.dev/ has all three refreshed pages. Public full section text matches release at375/1280; fresh SVG/PNG match and search/navigation pass. Both independent integrity and visual/CJK reviewers PASS. Receipt: ai/workspace/portfolio-confluence-refresh-2026-09-09/index.md.

2026-09-09 — User correction: portfolio project lifecycle

  • Direct user source supersedes older status documents: SeaweedFS RAW-storage project is Deprecated; Forgejo server reconfiguration and RHEL VEX development are complete. Preserved exact instruction in ai/sources/career/2026-09-09-portfolio-project-status-correction.md.
  • Updated canonical AI notes before catalog, three detail bodies and reproducible diagram status/captions. Retained all 52 URLs; Deprecated entry has archived-context notice and is excluded from related suggestions. Added completed/Deprecated badges using the existing shared primitive.
  • No completion date, replacement technology, final RAID selection or production rollout metric was invented. Existing historical design decisions remain labelled accordingly.
  • Build/node syntax, strict human voice,53-page/1,346-link/175-archive checks and36semantic exports pass. Fresh159screen/6interaction and36native diagram geometry checks pass. Manual badge-to-detail navigation passes for all three. Evidence: ai/workspace/portfolio-status-correction-2026-09-09/.
  • Lifecycle correction published on main 76a26b4df4ca81a67271073b28bcef8f40ea88ea. Both independent reviews PASS; live three-page375/1280 status, body and SVG checks PASS. Receipt: ai/workspace/portfolio-status-correction-2026-09-09/index.md.

2026-09-09 — Lifecycle badges and strongest-work selection

  • User confirms DB engine comparison review is complete but leadership decision is pending; source-governance review is complete while the surrounding project continues. Preserved direct instructions and updated canonical project summaries first.
  • Added lifecycle labels to all 52 catalog/detail entries. Kept completed work, active operation, publication/filing, pending decisions and Deprecated distinct. Owner-confirmed personal operations do not imply measured traffic or automatic uploads.
  • Added an overall strongest-four selection plus four entries in each of seven categories through native radio/CSS controls. Reused catalog outcomes; overall choices emphasize DB capacity, AWS cost, batch CDC throughput and crawler missing-data recovery.
  • Preserved all URLs, all 175 archive hashes and existing architecture assets. Structural/voice checks pass; final browser/review/publication receipt: ai/workspace/portfolio-featured-statuses-2026-09-09/index.md.
  • Published on main 1c29734eb6ba7353f451bc8e690f0e136dc62797. Both independent reviews PASS; final local159+24captures/seven scenarios pass. Production checks match all52detail bodies/statuses and exercise eight recommendation groups at375/1280. Unrelated career/wiki edits remain uncommitted. Receipt: ai/workspace/portfolio-featured-statuses-2026-09-09/index.md.
  • User clarified the category strip should look like the existing project filters: unboxed inactive text with adjacent counts. Reused the same .filters primitive and removed the separate outlined recommendation-label styles. Each recommendation count is four.
  • Local24-state QA at375/768/1280 verifies identical inactive/selected computed styles, native keyboard focus, independent lower-category filtering and no overflow. Publication/review receipt: ai/workspace/portfolio-featured-filter-2026-09-09/index.md.
  • Published main 2fd11e4cc30f0e5fa26cf5d9dd9f7ce4a41c9965. Independent integrity and visual/reference reviews PASS; public24states and native selection/style checks PASS.

2026-09-09 — Fix category selection across both lists

  • User reports category selection still leaves the full list displayed. Reproduced on production: top DB selected four recommendations while all52 catalog entries remained; lower DB filter showed7. Earlier independent filter behavior did not satisfy the request.
  • Replaced the two radio groups with a single native radio state shared by both label strips. CSS now filters both recommendation panels and full project lists, with synchronized selected/focus states and no new synchronization JavaScript.
  • Added failing-first category-qa.mjs regression: red52vs7, then green48 category/viewport/JS combinations, including reverse selection and search interaction. Evidence: ai/workspace/portfolio-category-link-2026-09-09/index.md.

2026-09-09 — Legacy OS package crawlers: first production DAG run, three failures, cutover

  • Repos: labrador-scrapers (source fixes), labrador-data-platform (DAG images),

labCrawl2 211.115.125.172:/product/crawler/crawler-container-vuln (legacy compose).

  • First production run of the 11 legacy_os_pkg_* DAGs: 2 done (mariner, archjson),

6 still collecting, 3 failed.

  • ovaloracle root cause was mine. The migration bumped xmltodict from the

legacy 0.12.0 to 0.13.0. From 0.13.0 the dict_constructor default changes from OrderedDict to plain dict, and dict is NOT a subclass of OrderedDict, so every isinstance(x, OrderedDict) branch in the legacy parsers returns False. ovalOracle.py:73 then hits raise TypeError() and yields 0 rows; ovalOracle.py:136 drops the platform criterion, leaving os_version unbound (that UnboundLocalError is caught and logged, so it is noise, not the fault). Measured against real Oracle OVAL data: 0.13.0 = TypeError at 0 rows, 0.12.0 = clean parse of 200,000 rows. Pin reverted in all 11 components.

  • Blast radius is ovalOracle.py only. containerOS.generateOrderDict and

layered_analyser.analyseDict have dict fallbacks; ovalRedhat.py tests (dict, OrderedDict). requests and beautifulsoup4 bumps are safe, but beautifulsoup4 must stay on 4.12.x because cvrf.py uses find(..., text=), removed in 4.13.

  • redhat failed on a gap in my adapter: redhat.py:207 calls

db.readSql(statement), which LegacyLabradorDB never implemented. Added it, returning raw rows (callers index positionally as rows[0][0]), synced across all 11 copies.

  • amazon failed on a transient DNS miss for alas.aws.amazon.com; resolution

from the crawler pod is fine now. Not a code defect — the legacy code has no request retry, so one miss ends the run.

  • Verified both fixes by building the images and running against datateamTestdb:

redhat exits 0 with repeated Insert Length: 500; ovaloracle reached real inserts into TB_CONTAINER_OS_VULN_V2.

  • Cutover done: stopped all 11 legacy compose services on labCrawl2 so the DAGs

are the sole collector. unless-stopped keeps them down; docker compose start reverses it. crawler-lpp and crawler-lib-golang-worker-* on the same host are unrelated and untouched.

  • Open: the fixes are NOT live — devlabrador/*:latest still carries the broken

build, and this machine has no Docker Hub credentials to push. Until pushed, ovaloracle collects nothing and the legacy container is stopped.

  • Also open: ovalOracle.start accumulates every row in memory and inserts once at

the end (no DB_FLUSH_SIZE flush, unlike rockyXML/cvrf/photon). Fedora, Mariner and Arch Linux refresh normally but have had no NEW rows since 2025-01-13, 2026-04-22 and 2026-04-29 — a source-side change, not a crawler fault.

  • Measure progress with LAST_UPDATED, never CREATED. containerOS.updateSet

passes exclude_cols=("CREATED", "LAST_UPDATED"), so CREATED is never touched by a duplicate-key upsert and MAX(CREATED) only reflects brand-new rows. Reading it as freshness made 9 healthy crawlers look dead; LAST_UPDATED carries on update CURRENT_TIMESTAMP and is the correct signal.

  • Post-cutover check at 05:30 UTC: 9 of 11 DAGs writing (alma/cvrf/ovalredhat 0-1 min,

photon 10, fedora 24, rockyxml 25 with 142 x ~5,000-row batches, mariner 34, archjson 36, amazon partial before its DNS failure). Only ovaloracle and redhat are dark, both waiting on the image push.

  • Detail and rationale: etl_components/legacy_os_pkg_vuln/README.md.
  • Published main d6f259fc9043a994dfe167862f92b37999238204. Both independent reviews PASS. Public48states, synchronized lists, keyboard/search and normal-motion no-JS detail navigation PASS. Removed global smooth-scroll behavior to resolve the reproduced category-focus/navigation race.

2026-09-09 — Data pipeline category terminology

  • User prefers 데이터 파이프라인 for the collection/delivery category. Updated canonical category/featured labels and generated index/ten detail breadcrumbs; IDs, tags, counts and behavior unchanged.
  • Structural53pages/1374links/175archives and strict voice pass; 48 shared-category cases and normal-motion detail navigation pass. Receipt: ai/workspace/portfolio-pipeline-label-2026-09-09/index.md.
  • Terminology release 77d650f114975c413de4f36e8cf4b92c16d3180c published. Both independent reviews, public48-state category QA and ten public breadcrumb checks PASS.

2026-09-09 — Legacy OS package crawlers: source-side fixes, merged to main

Five defects fixed in labrador-scrapers (etl_components/legacy_os_pkg_vuln/). Data format — column set and value semantics — deliberately unchanged. Algorithm files WERE edited this round, which the user explicitly authorized ("개선해야할거 개선해주고 (데이터 포멧 바꾸지말고)"), unlike the migration commit.

  • xmltodict pin restored (0.13.0 → 0.12.0, all 11). Root cause of the

ovaloracle failure; see the earlier W37 entry.

  • LegacyLabradorDB.readSql added (all 11). Root cause of the redhat failure.
  • Fedora source selection and loop termination. The archive and the freedif

mirror are mutually exclusive: archive serves EOL releases (≤F42 = 200, F43 = 404), the mirror serves current ones (F42 = 404, F43/44 = 200). The hardcoded start_version < 40 boundary went stale when 40–42 aged into the archive, so version 40 was looked up only on the mirror, returned 404 for every arch, tripped check_url == len(arches) and ended the loop — 43 and 44 were never reached. That is why no new Fedora row had appeared since 2025-01-13. Now every version tries both sources and the walk continues until three consecutive versions are empty. Verified with the real code: 38–42 via archive, 43–44 via mirror.

  • Azure Linux 3.0 added to Mariner. CBL-MarinerVulnerabilityData was renamed

AzureLinuxVulnerabilityData; the 301 still resolves, so 1.0/2.0 keep their stored URL values (no pointless churn on 7,570 existing rows) and only 3.0 uses the new address. 3.0 also breaks the filename pattern — cbl-mariner-3.0-oval.xml is 404, azurelinux-3.0-oval.xml is the real file — so a per-version URL table replaces {version} substitution. OS_TYPE stays 'Mariner' because the product matches on OS_TYPE+OS_VERSION. Verified: 3.0 parses 7,338 records against 2,252 (1.0) + 5,406 (2.0), roughly doubling coverage. The pre-existing PATCHED_VERSION='for' quirk reproduces, confirming format parity.

  • HTTP retry and intermediate flushing. containerOS.requests.gethttpGet

(3 retries, 1.5 backoff, 60s socket timeout) because a single DNS miss on alas.aws.amazon.com ended two whole amazon runs. Verified: NameResolutionError retries three times and gives up at 9s; a 13MB download is unaffected. downloadXmlGzip keeps urlopen on purpose — requests would auto-decode Content-Encoding: gzip and break gzip.decompress. Added DB_FLUSH_SIZE flushing to ovalOracle, fedora and mariner; ovalOracle had been holding every row in memory for one final insert, so any mid-run failure meant zero rows. Verified: 14 batches of 5,000 within 7 minutes, versus none until the very end.

  • Image version bumped 1.0.0 → 1.0.1 so the fixed build does not overwrite a tag

already in the registry. DAGs reference :latest, so dags/envs/images.py is unchanged.

  • Merged and pushed to labrador-scrapers main: 83dafc1 (fixes), 00f6ed6

(merge), 4844963 (version bump). Hooks bypassed as before — black/isort/pylint/ mypy/docstring do not pass on legacy code, and no Jira ticket exists.

  • Still open: images not pushed. This machine has no Docker Hub credentials, so

ovaloracle and redhat keep failing on the old :latest. Build/push helper is staged at the session scratchpad push_legacy_images.sh (targets only these 11 — scripts/publish_all_images_parallel.py would rebuild every component in the repo).

2026-09-11 — Airflow failure spike: distribution-DB replica outage plus a new cocoapods DAG bug

  • Trigger: the user reported "too many Airflow errors". Airflow runs on labCrawl1

(data-crawl-01, K8s namespace airflow, KubernetesExecutor, metadata DB in docker airflow-postgres-1 on the host). This was not recorded anywhere before; now in ai/repo-notes/labrador-data-platform.md (Operations section).

  • Failed task instances per day: baseline 4–18; 09-10 = 35, 09-11 = 29 (09-06 had

93, unrelated earlier incident). 63 failed + 45 upstream_failed in the last 48h.

  • Root cause 1 (bulk, resolved): MySQL replica lab-dist-main-r

(211.115.125.167:53306, Airflow conns DIST-R-OTHER) received a user SHUTDOWN at 2026-09-10 17:00:20 KST (docker stop, SIGKILL after 10s; the sibling lab-dist-source-r/53307 was stopped in the same second; docker events: kill 17:00:20, forced kill 17:00:30, die exit=137 17:00:33 — a manual docker stop/compose down, not a crash or OOM). Recreated via compose at 01:24 KST (source-r) and 08:57 KST (main-r), i.e. ~16h down. New server UUID on start (auto.cnf regenerated) — Needs confirmation whether that was intended. Error log: MySQLdb.OperationalError (2002) ... 211.115.125.167 (115) in 144 log lines; (1053) Server shutdown in progress at 17:xx. Affected every statistics_distributiondb* task plus license_crawler, hunter_crawler pod start timeouts around 21:03 KST. Since 09:00 KST 120 statistics tasks succeeded and no DB error recurred. Operator and reason: Needs confirmation (no sudo/auth log entry; compose dirs owned by hyunwook711, containers by labrador). Related: /data on data-replica is 94% full (19T/21T).

  • Root cause 2 (ongoing): the new cocoapods_crawler and

cocoapods_release_crawler DAGs (first run 09-10 16:41 KST, merge 0e45f9e feat/cocoapods-interval-guard) have never succeeded: 8 + 11 failures. The scraper (ai/labradorlabs/crawler/cocoapods.py:597) hard-codes /workspace/checkout, but build_container_operator mounts the PVC at /resources and the image has no /workspace, so os.mkdir raises FileNotFoundError. The hourly interval guard retries every hour after state=error. Fix belongs in labrador-scrapers (path) or the DAG (mount_path="/workspace"); not applied.

  • Chronic, pre-existing (not part of the spike): comp_file_tag_metadata

14/14 failed — connects to 172.30.1.203:43316 (conns DEV/test), a docker-bridge address on labCrawl1 that no longer answers; statistics_gatheringdb_library* SELECT_SPM 10/10 failed — table labradordb.TB_COMP_LIB_VERSION_SPM does not exist on GATH-R; cleanup_docker_images 14/14 failed (bash exit 1); binary_native_crawler 14 failed (upstream git clone failures); vuln_gitlab_advisory_crawler 14 failed — labrador_sqlmodel/core/_watchers.py:41 exit hook raises RuntimeError: cannot join thread before it is started.

  • Alerting is broken: smtp_host=localhost:25 from the scheduler pod is

Connection refused, so every failure email raises ConnectionRefusedError. watcher(alarm=True) therefore never reaches anyone.

  • Noise: two pods in Error (pypi-package-update-*ba2ndqat,

vuln-lib-raw-mapper-gitlab-*s8uqhcsk) exited 134 (terminate called without an active exception) after the task was already marked SUCCESS; the scheduler re-logs them as Failed events every few minutes. Deleting the pods stops the noise.

  • Node load: data-crawl-02 at 99% CPU (binary-et-processor 4.3 cores,

hunter-version 3.8, four npm-crawling parts ~2.5 each). No pod evictions.

  • No fixes applied; report handed to the user in Korean.

2026-09-11 — New-employer discovery after the user rejected repeated candidates

  • User explicitly asked for continuing latest/new leads, not the old shortlist.

Changed shared skill/workflow/recurring prompt to discovery first, with company-alias exclusions and separate datePosted versus first_seen_at. No Mac schedule registration or execution was verified/changed from WSL.

  • Screened Wanted 282 and Jumpit 78 distinct IDs in bounded lists. Read nine

Wanted details; excluded two Concentrix aliases already reviewed. Added seven employers: Jobis & Villains, SM Hi-Plus, DQ Lab, Chewpang, Woongjin Thinkbig, DeepSales, Gear2. Only Jobis (09-11) and SM (09-10) have recent channel registration; five older roles are first discoveries, not new posts.

  • Saved public observations and score/gap rationale under

ai/sources/career/2026-09-11-de-posting-scan-round2.md and ai/sources/career/2026-09-11-new-posting-observations.json. Updated shortlist, active context and Korean report; combined ranking now 31, unchanged old scores, Biginsight still unscored and Coxwave still closed.

  • Gear2 current JobKorea role band KRW 40m-80m, inclusive wage, due September

22; distinguish Wanted rolling deadline and NPS company averages. SM FY2024 financial loss, Jobis scope conflict and Woongjin reported H1 recovery are dated, not invented current financial health. No employee-review refresh.

  • No resume, application, recruiter contact, publication, commit or deployment.
  • Recovery: the next session found the unwritten builder and original public

snapshots in /tmp/, verified qualification/salary fields and cited public sources, and preserved scoped raw evidence in the wiki before rendering.

  • Completion validation: 31 Decimal totals/competition ranks and all 13 MD/HTML

table pairs pass; original 24 scored rows and historical research preserved. Voice BAN 0 / STRUCT 0 / WARN 0. Existing cached browser QA at 375/768/1280 confirms all 31 current links, horizontal table scrolling, new-candidate anchor and return navigation, with no overflow or JS errors. Desktop/mobile screenshots inspected. Corrected accidental single-tilde strikethrough in the new evidence paragraph before final QA. Receipt: ai/sources/career/2026-09-11-new-posting-validation.json.

2026-09-11 — Round-3 posting discovery after the GPT session stopped

  • The user reported that the GPT/Codex new-posting run stopped on a token

limit. Its round-2 output was already complete (report, sources, shortlist, worklog, active context, validation JSON) but uncommitted; committed it via git plumbing because git status/git diff on /mnt/g still SIGBUS (commit c4ada396, 46 files; the two raw JSON files over 1 MB and three screenshots over 1 MB were left uncommitted).

  • Continued discovery on the channels round 2 marked out of scope. Rallit

(sitemap, newest 45 positions) and Remember (sitemap, newest 380 postings) were read by title; Wanted tags 655/1025/10231 and Jumpit 19/7 were rechecked for IDs newer than the 14:25 snapshot; Saramin/JobKorea keyword lists were agency/SI noise. Programmers failed DNS; RocketPunch returned Cloudflare 403.

  • Added one employer: 레브잇 Product Engineer (Data), Wanted 385962, datePosted

09-11, fit 4 / finance 4 / culture 3? / salary 4 = 3.80, rank 9; combined ranking now 32 rows with old scores unchanged. Excluded 아이펙스 Data Architect (Remember 339966, 8-12 years, DW/DM + Kafka/Spark/Flink required) and 미리디 Rallit 4283/4369 (existing company; part lead 6+ years).

  • Sources: ai/sources/career/2026-09-11-de-posting-scan-round3.md and

-observations.json. Report MD edited and HTML re-rendered with the workflow's Python-Markdown recipe (wheel unpacked into the scratchpad since pip/uv are absent). Voice check on both files. No browser QA this round.

  • No application, resume, recruiter contact or publication.

2026-09-11 — Pipeline improvement proposals from Confluence/Jira (Atlassian MCP)

  • Read 13 DT/EN Confluence pages and 50 open DAT tickets through the official

Atlassian MCP (cloud id 8a64a655-...). Source extract: ai/sources/confluence/2026-09-11-pipeline-improvement-review.md.

  • Finding: the three causes of today's Airflow spike (replica stop without

runbook, dead SMTP alerting, new DAG never succeeding) are all already covered by existing pages — ETL 요구사항 R4, EPSS/CVE postmortems, GATH-M 백업 작업 시나리오 — and by open tickets DAT-3031, DAT-3390, DAT-2833/2830, DAT-3570. Gap is execution, not design.

  • Korean brief with 8 proposals ordered by cost/prerequisite:

human/briefs/2026-09-11-airflow-파이프라인-개선방안.md. No Confluence or Jira write performed.

2026-09-11 — LLM Wiki design refresh

  • User requested a wiki redesign after the recent portfolio design change.
  • Added a white/navy/cobalt library layout with a fixed desktop sidebar, mobile menu, home search, reviewed-note list, document rows, category/tag directories and reading-page table of contents.
  • Search combines terms, category and tag; URL state, recent-review sorting, pagination and explicit empty/reset states are implemented. No-JavaScript browsing retains the complete document list.
  • Replaced the all-pairs animated graph with an accessible, deterministic neighborhood view and a complete adjacent document list. Displayed node counts state the plotted subset.
  • Moved presentation code into scripts/wiki/; scripts/build-wiki.mjs regenerates the complete shared shell. Existing document addresses are retained.
  • The first full build hit unreadable existing HTML on the Drive mount. Added explicit --reuse-html-index support, preserving cached HTML records while rebuilding Markdown from current sources. The affected HTML content was not refreshed or repaired.
  • Browser verification covers desktop/tablet/mobile and search/navigation interactions. A screenshot-detected narrow-screen number wrap was corrected. Final evidence: ai/workspace/wiki-redesign-2026-09-11/evidence/.
  • Local output: human/index.html and human/wiki/. No commit, push or deployment. Unrelated initial workspace edits are preserved.