diff --git a/.agents/skills/publishing-tech-log-to-studio/SKILL.md b/.agents/skills/publishing-tech-log-to-studio/SKILL.md index ca3e86b..9228bca 100644 --- a/.agents/skills/publishing-tech-log-to-studio/SKILL.md +++ b/.agents/skills/publishing-tech-log-to-studio/SKILL.md @@ -61,11 +61,18 @@ aside[class*="studio-document-status"] ← 이것이 안 보이면 인증 실 ### 1. 기록을 읽고 무엇을 넣을지 정한다 `kind` 로 칸 목록이 정해진다. 어떤 `##` 제목이 Studio 의 어느 칸인지는 -[references/studio-form-map.md](references/studio-form-map.md). +[references/studio-form-map.md](references/studio-form-map.md), 그 칸이 서버에서 어떤 이름과 +자료형인지는 [references/studio-api.md](references/studio-api.md). **frontmatter 는 메타데이터고, 본문의 `##` 가 Studio 의 칸이며, 제목 아래 첫 문단이 `요약` 이다.** 계약에 없는 `##` 는 화면에 자리가 없어 통째로 사라진다. +**본문은 이제 화면으로 넣지 않는다.** 편집 화면의 본문이 블록 편집기로 바뀌어 블록 하나가 +` -
-
-``` - -`요약` · `본문 Markdown` · `관계 N 이유` 가 B형이다. A형만 찾으면 이 칸들이 조용히 안 채워진다. -**둘 다 본다.** +**위의 `label` 두 모양 이야기는 낡았다.** 지금 `label.studio-field` 가 감싸는 것은 제목과 요약 +둘뿐이고, 나머지 칸은 전부 `aria-label` 을 갖는다. xpath 로 `span` 을 뒤질 일이 없다. ```js -async function field(page, name) { - const a = page.locator(`xpath=//label[./span[normalize-space(.)="${name}"]]`) - .locator('textarea, input').first(); - if (await a.count()) return a; - const id = await page.locator(`xpath=//label[normalize-space(.)="${name}"]`) - .first().getAttribute('for'); - return id ? page.locator('#' + id) : null; -} +document.querySelector('input[aria-label="제목"]') +document.querySelector('textarea[aria-label="요약"]') +document.querySelector('input[aria-label="slug"]') +document.querySelector('input[aria-label="판단 기준 1 제목"]') +document.querySelector('textarea[aria-label="적용할 때 3"]') ``` -**본문 칸의 이름은 `본문` 이 아니라 `본문 Markdown` 이다.** +되풀이 칸을 늘리는 버튼은 `+ 판단 기준` · `+ 적용할 때` · `+ 예외와 주의` · `+ 예시` · +`+ 버전 추가` 다. 줄 수를 먼저 맞추고 값을 넣는 규칙은 그대로다. + +## 본문 칸이 사라졌다 — 블록 편집기다 + +**`본문 Markdown` 이라는 textarea 는 더 없다.** 본문은 `.studio-block-editor` 이고 블록 하나가 +`