wiki

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package wiki는 문서를 위키의 올바른 자리에 만드는 쓰기 계층이다. 커맨드가 아니라 capture, source, promote, new 같은 상위 계층이 부르는 순수 함수 모음이다. 이 패키지는 시계를 읽지 않는다. 날짜는 전부 호출자가 인자로 준다. 결정론이 ADR 0005의 골든 비교 전제다.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Create

func Create(wikiRoot string, cfg config.Config, stage Stage, date, slug string, fm map[string]any, body string) (string, error)

Create는 위키 루트 아래 단계에 맞는 자리에 문서를 만들고 만든 파일 경로를 반환한다. 도착지 디렉토리는 config의 page_dirs를 따른다. 기존 파일은 덮어쓰지 않는다. 디렉토리가 없으면 만든다.

func DirFor

func DirFor(cfg config.Config, stage Stage) (string, error)

DirFor는 단계에 대응하는 디렉토리를 page_dirs에서 찾는다. 대응은 stageDirs 표가 정한다. page_dirs에 없으면 기본값으로 조용히 떨어지지 않고 설정에 무엇을 추가해야 하는지를 알린다.

func FilePath

func FilePath(cfg config.Config, stage Stage, date, slug string) (string, error)

FilePath는 단계에 맞는 문서의 위키 루트 상대 경로를 만든다. context 문서는 날짜 접두사 없이 <슬러그>.md 이고 inbox와 sources 문서는 <날짜>-<슬러그>.md 다. 날짜는 YYYY-MM-DD 또는 연월까지만 아는 경우 YYYY-MM 이다. upstream 실제 파일명에서 확인한 규칙이다. 도착지 디렉토리는 config의 page_dirs가 진실원이다.

func Frontmatter

func Frontmatter(stage Stage, cfg config.Config) map[string]any

Frontmatter는 단계별 프론트매터 초기값을 만든다. config가 켠 속성만 채우고 꺼진 속성의 키는 아예 넣지 않는다. 단계별 기본값은 upstream 계약 meta/frontmatter-schema.md를 따른다. 날짜 필드는 호출자가 넣는다.

func Linkable

func Linkable(wikiRoot string, cfg config.Config) ([]string, error)

Linkable은 위키에서 링크 대상이 될 수 있는 문서의 슬러그를 정렬해 반환한다. 대상은 page_dirs 아래 .md 파일과 root_files이다. promote와 new가 게이트 판정에 쓴다.

func Slug

func Slug(title string) (string, error)

Slug는 제목에서 파일명으로 쓸 슬러그를 만든다. 공백과 구분자를 하이픈 하나로 바꾸고 연속 하이픈을 줄이며 앞뒤 하이픈을 없앤다. 파일시스템에서 문제가 되는 문자는 지운다. Windows가 tier 1 플랫폼이므로(ADR 0007) 예약 문자와 예약 파일명을 포함한다. 한글은 그대로 보존한다. 이 바이너리에는 LLM이 없으므로(ADR 0014) 기계적 음차나 번역을 하지 않는다. upstream 실제 파일명에 한글이 섞여 있으므로 허용이 계약이다.

만든 결과는 ValidateSlug를 통과한다. 명시 경로가 거절하는 이름을 파생 경로가 만들어내면 같은 규칙이 두 얼굴을 갖게 되므로 마지막에 같은 검사를 받는다.

func ValidateSlug

func ValidateSlug(slug string) error

ValidateSlug는 슬러그를 파일명으로 쓸 수 있는지 검사한다. 사용자가 직접 지정한 슬러그가 주 대상이다(ADR 0045).

파생 경로는 위험한 문자를 지우지만 명시한 값은 조용히 고치지 않고 거절한다. 사용자가 이름을 명시한 것은 그 이름을 원한다는 뜻이므로 도구가 말없이 다른 이름으로 바꾸면 사용자가 기대한 위키링크가 어긋난다.

소문자와 하이픈 정규화는 강제하지 않는다. 대문자, 공백, 한글은 파일을 못 만들게 하지 않으므로 통과시킨다. ADR 0020의 "사용자는 언제든 슬러그를 명시해 파생을 덮어쓸 수 있다"가 사는 자리이며, 덮어쓸 수 있는 것은 취향인 규칙 하나부터 셋까지이고 제약인 규칙 넷은 아니다.

Types

type Stage

type Stage string

Stage는 문서가 놓이는 단계다. 단계에 대응하는 디렉토리는 stageDirs 표가 정한다.

const (
	StageInbox   Stage = "inbox"
	StageSource  Stage = "source"
	StageContext Stage = "context"
	StageArchive Stage = "archive"
)

func StageForDir

func StageForDir(dir string) (Stage, bool)

StageForDir는 최상위 디렉토리 이름에 대응하는 단계를 반환한다. lint의 위치 검사가 이 조회를 써서 단계와 디렉토리의 대응이 두 벌이 되지 않게 한다(ADR 0031). 대응하지 않는 디렉토리면 false를 반환한다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL