www.git

www

~ Personal site — projects, posts, about. Built with sqzass.
git clone https://github.com/debuman/www.git
commit 2ec115cd8acb54f164e17089f99761be8722393f
parent f51b9910f0fbc511cc5a73008dcba4b5ec37629e
Author: sqzer <110329244+sqzer-x@users.noreply.github.com>
Date: Thu, 6 Aug 2026 20:02:15 +0900

Add a worklog

Commit messages carry the reasoning for each change, so the worklog carries what
they cannot: where a decision was reversed, where the same mistake recurred, and
what is still open.

Three things it records that would otherwise be lost. The reference site's
relationship changed three times and the current rule is neither "copy it" nor
"avoid it" — it is fix what measures worse. Two decisions were reversed, the
project page rewrite and the desaturation filter, and the second came back for a
different reason than it left. And the same fault was written three times, in the
card title, the rail label and the mosaic tiles: a box sized against one thing
and its text against another, which always clips somewhere and clips silently
when overflow is hidden.

It also records two checks that reported the wrong answer — scrollHeight against
a centred flex column, and exists() against a directory with no index — because
both let a real defect ship while looking green.

Diffstat:
MREADME.md | 2++
AWORKLOG.md | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 106 insertion(+), 0 deletion(-)

diff --git a/README.md b/README.md
@@ -5,6 +5,8 @@ Personal site — projects, technical posts, and an about page. English and Kore
 Built with [sqzass](https://github.com/sqzer-x/sqzass), deployed to GitHub Pages.
 No bundler, no package manager, no `node_modules`.
 
+작업 기록과 뒤집힌 결정은 [`WORKLOG.md`](WORKLOG.md)에 있습니다.
+
 ## Working on it
 
 ```bash
diff --git a/WORKLOG.md b/WORKLOG.md
@@ -0,0 +1,104 @@
+# 작업 기록
+
+커밋 메시지가 각 변경의 근거를 담고 있으므로, 여기 적는 것은 **거기서 안 보이는
+것** — 결정이 뒤집힌 자리, 되풀이된 실수, 아직 안 끝난 것 — 뿐이다.
+
+`git log --reverse`가 순서를 알려 준다. 이 문서는 순서가 아니라 형태를 남긴다.
+
+---
+
+## 참조 사이트(hahwul.com)와의 거리
+
+이 사이트는 hahwul.com을 보고 만들었고, 그 관계가 세 번 바뀌었다.
+
+1. **처음**: 정체성을 베끼지 말자고 제안했으나 사용자가 "구성은 동일하게, 배경과
+   디테일만 변형"으로 확정했다.
+2. **중간**: 완성 후 "너무 똑같다"는 지적이 두 번 나왔다. 채도(참조는 34%,
+   사용자의 다른 사이트들은 82~100%)와 바닥색(참조만 순수 중립)이 결정적
+   차이였고, 거기서부터 자기 색을 갖기 시작했다.
+3. **지금**: 특정 장치를 짚어 "이건 채용해"라고 지시하는 방식. 언어 토글, 리딩
+   레일, 플레이트 헤더, 프로젝트 모자이크, 탈색-호버가 그렇게 들어왔다.
+
+**운용 규칙:** 참조와 다르다는 것 자체는 결함이 아니다. **재서 우리 쪽이 나쁠
+때만** 고친다. 구조와 비율은 가져오되 장식·서체·카피는 가져오지 않는다.
+사용자가 특정 장치를 짚으면 그건 확정 지시다.
+
+## 뒤집힌 결정 둘
+
+**프로젝트 상세 페이지 재설계 → 되돌림.** 참조와 섹션 순서가 같다는 이유로
+문서형(명패–스펙–주장–영수증)으로 다시 지었는데 사용자가 "아까가 훨씬 나았어"로
+되돌렸다. 원래의 히어로–숫자띠–특징격자–터미널–CTA 구성이 확정이다.
+
+**그림 탈색 필터 제거 → 복원.** 참조에서 값만 그대로 가져온 것이라 한 번 걷어
+냈다가, 나중에 사용자가 직접 요청해 되살렸다. 근거가 달라졌다는 점이 중요하다 —
+지금은 "색은 평상시에 없고 손이 닿을 때만 나온다"는 이 시트 자신의 전제를
+그림까지 밀고 간 것이다.
+
+## 되풀이된 실수: 상자와 글자를 서로 다른 것에 매달았다
+
+**세 번 같은 방식으로 틀렸다.**
+
+| 자리 | 상자 | 글자 | 증상 |
+|---|---|---|---|
+| 하이라이트 카드 제목 | 컨테이너 폭 | `vw` | 950px 아래에서 디센더와 설명 둘째 줄이 잘림 |
+| 리딩 레일 라벨 | `line-height` | 글꼴 줄상자 | 라벨마다 1px씩 잘림 |
+| 모자이크 작은 타일 | 고정 비율 | `vw` | 740~1000px 구간에서 글이 상자를 넘침 |
+
+상자가 A를 따라 줄고 글자가 B를 따라 줄면, 두 곡선이 만나는 지점 아래에서
+반드시 넘친다. **`overflow: hidden`이 있으면 그 넘침이 조용히 잘림으로 나온다.**
+
+고친 방법: 카드는 `container-type: inline-size` + `cqw`, 레일은 `max-height` +
+`padding-bottom`, 모자이크는 좁은 폭에서 비율을 놓고 글이 높이를 정하게.
+
+**부속 교훈:** `-webkit-line-clamp`은 이 엔진에서 `display`가 `flow-root`로
+계산돼 죽는다. 그러면 `overflow: hidden`만 남아 `line-height` 높이에서 글자를
+자른다. 이 시트에는 더 이상 쓰지 않는다.
+
+## 측정을 믿지 말고 렌더를 믿을 것
+
+잘림을 "안 잘린다"고 두 번 잘못 보고했다.
+
+- `label.scrollHeight > label.clientHeight`로 넘침을 판정했는데, **가운데 정렬된
+  flex 열은 위로 넘친 내용을 스크롤로 보고하지 않는다.**
+- 죽은 링크 검사에서 `exists()`를 썼는데, `public/ko/`는 하위 갈래 때문에
+  디렉터리로 존재하지만 `index.html`이 없어 404였다. `is_file()`이라야 한다.
+
+둘 다 **폭을 바꿔가며 실제로 찍어 보고서야** 드러났다. 프록시 지표는 프록시일
+뿐이다.
+
+## 검사기가 잡는 것
+
+`sqzass`는 마크다운의 `@/` 링크·템플릿 변수·에셋 이름을 검증하지만 `[extra]`
+안과 템플릿이 조립한 주소는 검증하지 않는다. 그 구멍을 `tools/check.py`가 메운다.
+
+| 검사 | 무엇을 | 왜 생겼나 |
+|---|---|---|
+| `check_projects` | 카탈로그 ↔ 실제 페이지 양방향 | `[extra]`는 생성기가 안 읽는다 |
+| `check_preview` | 홈의 미리보기·모자이크 URL과 파일 | 어긋나면 조용히 안 나온다 |
+| `check_i18n` | 두 언어 키 집합 일치 | 안 맞으면 그 키를 처음 쓰는 날 터진다 |
+| `check_links` | 빌드된 HTML의 내부 링크 | 한국어 홈을 없앤 날 로고가 11장에서 404를 가리켰다 |
+
+`check_links`는 `public/`이 있어야 돌기 때문에 CI가 빌드 **뒤에** 한 번 더 부른다.
+`tools/stars.py`는 `content/` 전체를 훑는다 — 별 개수가 프로젝트 상세와 홈
+카탈로그 두 곳에 있어서 한쪽만 갱신되면 조용히 낡는다.
+
+세 검사기 모두 **일부러 깨뜨려 실패하는 것까지 확인**하고 커밋했다.
+
+## 아직 안 끝난 것
+
+- **`sqzass` PR #1이 열려 있다.** 목록에 날짜를 싣는 `PageRefCtx.date`이고,
+  Posts 원장이 그걸 쓴다. 머지되면 `.github/workflows/pages.yml`에서
+  `--branch feat/pageref-date` 한 줄을 지운다.
+- **그림 넉 장이 없다.** `uaf`·`udfx`·`usfx`·`doomsday`는 모자이크에서 색면으로만
+  선다. 커버가 생기면 홈 카탈로그에 `cover` 한 줄이면 들어온다. 참조 사이트와의
+  실제 거리는 구조가 아니라 이 그림들이다.
+- **글이 한 편뿐이다.** 그래서 홈의 Writing 목록이 비어 있다(맨 위 한 편은
+  카드로 올라가고 목록은 그 다음부터다). CSS로 메울 수 있는 문제가 아니다.
+- **프로젝트 타일 격자가 1349px 아래에서 3열 → 2열로 떨어지고** 그 뒤 컨테이너
+  안에서 70% 폭으로 뜬다. 실측된 결함이지만, 그 격자가 그렇게 짜인 이유를 적어
+  둔 주석을 깨지 않고 고치는 방법을 아직 못 찾았다.
+
+## 소유권
+
+셸은 root로 돌지만 데스크톱 세션은 `himesama`(UID 1000)다. 파일을 만지고 나면
+`chown -R himesama:himesama`를 돌려야 사용자가 편집할 수 있다.