feat(p10-1C-Go): tree-sitter-go AST extractor + chunker — Go 코드 색인 활성화 #151

Merged
altair823 merged 9 commits from feat/p10-1c-go into main 2026-05-20 10:16:12 +00:00
Owner

요약

1A-2 (Rust) + 1B (Python/TS/JS) 인프라 위에 Go AST 색인 활성화. 사용자 결정으로 1C 의 3 언어 (Go + Java + Kotlin) 를 2 PR 로 분할 — Go 가 method receiver / package convention 면에서 Java/Kotlin (JVM family) 과 다르므로. Java + Kotlin 은 후속 PR.

frozen design: docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md §1C.
task spec (frozen on merge): tasks/p10/p10-1c-go-ast-chunker.md.
plan: docs/superpowers/plans/2026-05-20-p10-1c-go-ast-chunker.md.

동결된 설계 결정

  • Symbol prefix = 소스 코드의 package 선언에서 추출 (design §3.4 그대로). 1B 의 workspace-path 변환과 다름 — Go 는 언어 자체에 package declaration 이 있어 그게 canonical source. tree-sitter-go 의 package_clause → package_identifier 에서 추출.
  • Method receiver 표현 (design 예시 정확 일치): chunk.(*MdHeadingV1Chunker).ChunkDoc (포인터), chunk.(MdHeadingV1Chunker).Name2 (value). tree-sitter-go 의 method_declaration.receiver field 의 parameter_declaration.type 슬라이스가 leading * 포함.
  • Test detection: func TestXxx(t *testing.T) 는 일반 fn 으로 emit (ranking 보정 영향은 본 task 범위 밖 — ranking brainstorm 보류 memory 따름).

변경

  • Workspace dep: tree-sitter-go = "0.25".
  • kebab-parse-code/src/go.rs: GoAstExtractor + PARSER_VERSION = "code-go-v1". function_declaration / method_declaration (receiver pointer detection) / type_declarationtype_spec 각 / glue (import / const / var). Glue grouping + <top-level> post-pass (1B Python 패턴).
  • kebab-chunk/src/code_go_ast_v1.rs: 1A-2 code-rust-ast-v1 near-duplicate (language-agnostic body 동일).
  • kebab-source-fs/src/media.rs: .goMediaType::Code("go").
  • kebab-app/src/lib.rs: dispatch allowlist 에 "go" 추가 + 4 match arm 활성화.
  • 회귀 테스트:
    • extractor: extractor_supports_only_media_code_go + go_units_match_design_3_4_symbols (chunk.Free, chunk.init, chunk.MdHeadingV1Chunker, chunk.(*MdHeadingV1Chunker).ChunkDoc, chunk.(MdHeadingV1Chunker).Name2, chunk.Stringer, chunk.<top-level>) + determinism
    • chunker: 6 tests including cross-chunker policy_hash_matches_md_heading_v1
    • snapshot: code_go_ast_snapshot + code_go_ast_chunks_are_deterministic
    • integration: go_file_ingests_and_searches_as_code_citation (chunk.ParseDoc)
  • docs: README + HANDOFF + ARCHITECTURE + SMOKE + tasks/INDEX (1C split: Go done / Java+Kotlin pending) + tasks/p10/INDEX + design §10.1.
  • chore: workspace version 0.11.1 → 0.12.0 (minor — dogfooding surface 확장).

검증

  • cargo test --workspace --no-fail-fast -j 1 → exit 0, all green.
  • cargo clippy --workspace --all-targets -- -D warnings → clean.
  • Manual SMOKE 확인 — symbol chunk.ParseDoc, citation.lang = "go", code_lang_breakdown: { "go": 1 }.

영향

  • wire schema additive (1A-2 의 Citation::Code / SearchHit.code_lang 이미 존재; 1C-Go 는 그 surface 위 lang "go" 확장).
  • frozen design 변경 없음 — §10.1 dated note 만 추가.
  • 기존 색인 데이터 invalidation 없음.

다음 PR (별도)

p10-1C-JavaKotlin — Java + Kotlin AST chunkers (code-java-ast-v1, code-kotlin-ast-v1). JVM family 공통 (package com.foo.bar 형식), 별 PR 진행 예정.

🤖 Generated with Claude Code

## 요약 1A-2 (Rust) + 1B (Python/TS/JS) 인프라 위에 **Go** AST 색인 활성화. 사용자 결정으로 1C 의 3 언어 (Go + Java + Kotlin) 를 2 PR 로 분할 — Go 가 method receiver / package convention 면에서 Java/Kotlin (JVM family) 과 다르므로. **Java + Kotlin 은 후속 PR**. frozen design: `docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md` §1C. task spec (frozen on merge): `tasks/p10/p10-1c-go-ast-chunker.md`. plan: `docs/superpowers/plans/2026-05-20-p10-1c-go-ast-chunker.md`. ## 동결된 설계 결정 - **Symbol prefix = 소스 코드의 `package` 선언에서 추출** (design §3.4 그대로). 1B 의 workspace-path 변환과 다름 — Go 는 언어 자체에 `package` declaration 이 있어 그게 canonical source. tree-sitter-go 의 `package_clause → package_identifier` 에서 추출. - **Method receiver 표현** (design 예시 정확 일치): `chunk.(*MdHeadingV1Chunker).ChunkDoc` (포인터), `chunk.(MdHeadingV1Chunker).Name2` (value). tree-sitter-go 의 `method_declaration.receiver` field 의 `parameter_declaration.type` 슬라이스가 leading `*` 포함. - **Test detection**: `func TestXxx(t *testing.T)` 는 일반 fn 으로 emit (ranking 보정 영향은 본 task 범위 밖 — ranking brainstorm 보류 memory 따름). ## 변경 - **Workspace dep**: `tree-sitter-go = "0.25"`. - **`kebab-parse-code/src/go.rs`**: `GoAstExtractor` + `PARSER_VERSION = "code-go-v1"`. `function_declaration` / `method_declaration` (receiver pointer detection) / `type_declaration` 의 `type_spec` 각 / glue (`import` / `const` / `var`). Glue grouping + `<top-level>` post-pass (1B Python 패턴). - **`kebab-chunk/src/code_go_ast_v1.rs`**: 1A-2 `code-rust-ast-v1` near-duplicate (language-agnostic body 동일). - **`kebab-source-fs/src/media.rs`**: `.go` → `MediaType::Code("go")`. - **`kebab-app/src/lib.rs`**: dispatch allowlist 에 `"go"` 추가 + 4 match arm 활성화. - **회귀 테스트**: - extractor: `extractor_supports_only_media_code_go` + `go_units_match_design_3_4_symbols` (`chunk.Free`, `chunk.init`, `chunk.MdHeadingV1Chunker`, `chunk.(*MdHeadingV1Chunker).ChunkDoc`, `chunk.(MdHeadingV1Chunker).Name2`, `chunk.Stringer`, `chunk.<top-level>`) + determinism - chunker: 6 tests including cross-chunker `policy_hash_matches_md_heading_v1` - snapshot: `code_go_ast_snapshot` + `code_go_ast_chunks_are_deterministic` - integration: `go_file_ingests_and_searches_as_code_citation` (`chunk.ParseDoc`) - **docs**: README + HANDOFF + ARCHITECTURE + SMOKE + tasks/INDEX (1C split: Go done / Java+Kotlin pending) + tasks/p10/INDEX + design §10.1. - **chore**: workspace version `0.11.1 → 0.12.0` (minor — dogfooding surface 확장). ## 검증 - `cargo test --workspace --no-fail-fast -j 1` → exit 0, all green. - `cargo clippy --workspace --all-targets -- -D warnings` → clean. - Manual SMOKE 확인 — symbol `chunk.ParseDoc`, `citation.lang = "go"`, `code_lang_breakdown: { "go": 1 }`. ## 영향 - wire schema additive (1A-2 의 `Citation::Code` / `SearchHit.code_lang` 이미 존재; 1C-Go 는 그 surface 위 lang `"go"` 확장). - frozen design 변경 없음 — §10.1 dated note 만 추가. - 기존 색인 데이터 invalidation 없음. ## 다음 PR (별도) p10-1C-JavaKotlin — Java + Kotlin AST chunkers (`code-java-ast-v1`, `code-kotlin-ast-v1`). JVM family 공통 (`package com.foo.bar` 형식), 별 PR 진행 예정. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
altair823 added 9 commits 2026-05-20 10:03:36 +00:00
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Duplicate of code-rust-ast-v1 / code-{python,ts,js}-ast-v1 with language-agnostic
body unchanged. Cross-chunker policy_hash identity asserted vs md-heading-v1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces Go bail! arms with GoAstExtractor + CodeGoAstV1Chunker. Adds
go_file_ingests_and_searches_as_code_citation integration test — asserts
citation.lang=go, symbol=chunk.ParseDoc, code_lang=go.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors code_python_ast_snapshot / code_ts_ast_snapshot patterns. In-memory
CanonicalDocument (no kebab-parse-code dep — boundary §6.3 respected).

verify:
- cargo test -p kebab-chunk --test code_go_ast_snapshot → 2/2
- cargo test --workspace --no-fail-fast -j 1 → 0 failures (all green)
- cargo clippy --workspace --all-targets -- -D warnings → clean
- SMOKE: chunk.ParseDoc symbol + code_lang_breakdown {"go": 1} 확인

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude-reviewer-01 approved these changes 2026-05-20 10:13:56 +00:00
claude-reviewer-01 left a comment
Member

회차 1 — Go AST extractor + chunker 활성화. 정확성·경계·테스트 모두 양호, APPROVE.

총평

1A-2 (Rust) / 1B (Python/TS/JS) 패턴을 충실히 미러링하며 Go 특유의 두 가지 결정(package prefix 를 workspace path 가 아닌 소스 AST 에서 추출, method receiver 포인터 여부를 텍스트 그대로 포함)을 정확히 구현했습니다.

검증 결과

  • tree-sitter-go 0.25 grammar 정합성: package_clause 는 fields 가 없고 children 배열(named)에 package_identifier 하나만 가짐 → child_by_field_name 대신 named_children() 순회가 올바름. method_declaration.receiver field → parameter_list → parameter_declaration.type field 경로 모두 grammar 스펙과 일치 확인.
  • 심볼 생성: chunk.(*MdHeadingV1Chunker).ChunkDoc (pointer receiver), chunk.(MdHeadingV1Chunker).Name2 (value receiver), chunk.Free, chunk.init, chunk. — design §3.4 모두 충족.
  • SourceType::Note: HOTFIXES 2026-05-19 invariant 준수.
  • 경계 (§6.3): kebab-chunk 에 tree-sitter 의존 없음, kebab-parse-code 에 store/embed/llm/rag 의존 없음 — cargo tree 확인.
  • 오프-스코프 변경 없음: 변경 파일 22개 전부 허용 범위(kebab-parse-code / kebab-chunk / kebab-source-fs / kebab-app / Cargo / docs / tasks). 다른 crate 미접촉.

테스트 결과

  • cargo test -p kebab-parse-code: 23 passed (3 new go tests 포함)
  • cargo test -p kebab-chunk: code_go_ast_snapshot + deterministic 포함 전 통과
  • cargo test -p kebab-source-fs: 전 통과
  • cargo test -p kebab-app --test code_ingest_smoke: 7/7 (go_file_ingests_and_searches_as_code_citation 포함)
  • 이전 PR 불변식 tests (twin_files_idempotent / file_deletion_auto_purge / reset_orphans / twin_files_fetch_span): 모두 통과
  • cargo test -p kebab-app --lib: 52/52
  • cargo clippy -p kebab-parse-code -p kebab-chunk -p kebab-source-fs -p kebab-app --all-targets -- -D warnings: 경고 0

칭찬

  • flush_glue 의 only_imports 구분: import-only 그룹은 , import+const/var 혼재 그룹은 즉시 으로 분류해 post-pass 없이 처리 — 1B 의 두-단계 post-pass 보다 단순해진 점이 좋습니다.
  • package prefix 소스-추출: Go 특성을 정확히 짚어 workspace path 변환 대신 AST 에서 추출. fallback 방어 코드까지 포함.
  • snapshot 경계 준수: code_go_ast_snapshot.rs 가 kebab-parse-code 를 dev-dep 으로 쓰지 않고 인라인 CanonicalDocument 를 직접 구성 — §6.3 boundary 를 테스트 코드까지 지킨 점이 일관됩니다.
  • 버전 cascade: 모든 21개 kebab-* crate 가 0.11.1 → 0.12.0 으로 올바르게 cascade됨.

코멘트 (inline 참조)

  • go.rs: grammar 접근 방식 정합성 확인 (칭찬).
  • go.rs: pointer receiver 텍스트 추출 ���확성 확인 (칭찬).
  • go.rs: glue.retain 에 edge case 설명 주석 추가 제안 (minor, 비필수).
  • ARCHITECTURE.md: 1B symbol path 테이블 행에 Go 의 소스-추출 prefix 설명 누락 — 다음 PR (JavaKotlin) 에서 일괄 갱신 권장 (minor).
회차 1 — Go AST extractor + chunker 활성화. 정확성·경계·테스트 모두 양호, APPROVE. ## 총평 1A-2 (Rust) / 1B (Python/TS/JS) 패턴을 충실히 미러링하며 Go 특유의 두 가지 결정(package prefix 를 workspace path 가 아닌 소스 AST 에서 추출, method receiver 포인터 여부를 텍스트 그대로 포함)을 정확히 구현했습니다. ## 검증 결과 - **tree-sitter-go 0.25 grammar 정합성**: package_clause 는 fields 가 없고 children 배열(named)에 package_identifier 하나만 가짐 → child_by_field_name 대신 named_children() 순회가 올바름. method_declaration.receiver field → parameter_list → parameter_declaration.type field 경로 모두 grammar 스펙과 일치 확인. - **심볼 생성**: chunk.(*MdHeadingV1Chunker).ChunkDoc (pointer receiver), chunk.(MdHeadingV1Chunker).Name2 (value receiver), chunk.Free, chunk.init, chunk.<top-level> — design §3.4 모두 충족. - **SourceType::Note**: HOTFIXES 2026-05-19 invariant 준수. - **경계 (§6.3)**: kebab-chunk 에 tree-sitter 의존 없음, kebab-parse-code 에 store/embed/llm/rag 의존 없음 — cargo tree 확인. - **오프-스코프 변경 없음**: 변경 파일 22개 전부 허용 범위(kebab-parse-code / kebab-chunk / kebab-source-fs / kebab-app / Cargo / docs / tasks). 다른 crate 미접촉. ## 테스트 결과 - cargo test -p kebab-parse-code: 23 passed (3 new go tests 포함) - cargo test -p kebab-chunk: code_go_ast_snapshot + deterministic 포함 전 통과 - cargo test -p kebab-source-fs: 전 통과 - cargo test -p kebab-app --test code_ingest_smoke: 7/7 (go_file_ingests_and_searches_as_code_citation 포함) - 이전 PR 불변식 tests (twin_files_idempotent / file_deletion_auto_purge / reset_orphans / twin_files_fetch_span): 모두 통과 - cargo test -p kebab-app --lib: 52/52 - cargo clippy -p kebab-parse-code -p kebab-chunk -p kebab-source-fs -p kebab-app --all-targets -- -D warnings: 경고 0 ## 칭찬 - flush_glue 의 only_imports 구분: import-only 그룹은 <module>, import+const/var 혼재 그룹은 즉시 <top-level> 으로 분류해 post-pass 없이 처리 — 1B 의 두-단계 post-pass 보다 단순해진 점이 좋습니다. - package prefix 소스-추출: Go 특성을 정확히 짚어 workspace path 변환 대신 AST 에서 추출. fallback <unknown> 방어 코드까지 포함. - snapshot 경계 준수: code_go_ast_snapshot.rs 가 kebab-parse-code 를 dev-dep 으로 쓰지 않고 인라인 CanonicalDocument 를 직접 구성 — §6.3 boundary 를 테스트 코드까지 지킨 점이 일관됩니다. - 버전 cascade: 모든 21개 kebab-* crate 가 0.11.1 → 0.12.0 으로 올바르게 cascade됨. ## 코멘트 (inline 참조) - go.rs: grammar 접근 방식 정합성 확인 (칭찬). - go.rs: pointer receiver 텍스트 추출 ���확성 확인 (칭찬). - go.rs: glue.retain 에 edge case 설명 주석 추가 제안 (minor, 비필수). - ARCHITECTURE.md: 1B symbol path 테이블 행에 Go 의 소스-추출 prefix 설명 누락 — 다음 PR (JavaKotlin) 에서 일괄 갱신 권장 (minor).
@@ -0,0 +173,4 @@
if sub.kind() == "package_identifier" {
return Some(src[sub.start_byte()..sub.end_byte()].to_string());
}
}

[Good] extract_packagenamed_children()package_identifier 에 접근하는 방식이 tree-sitter-go 0.25 grammar 와 정확히 일치합니다. node-types.json 확인 결과 package_clausechildren 배열(named)에 package_identifier 하나만 가지므로, child_by_field_name("name") 대신 named_children() 를 순회하는 현재 코드가 올바릅니다. package_clausefields 가 없음을 grammar 스펙이 명시 — 방어적으로 필드 접근하지 않은 선택이 적절합니다.

**[Good]** `extract_package` 가 `named_children()` 로 `package_identifier` 에 접근하는 방식이 tree-sitter-go 0.25 grammar 와 정확히 일치합니다. node-types.json 확인 결과 `package_clause` 는 `children` 배열(named)에 `package_identifier` 하나만 가지므로, `child_by_field_name("name")` 대신 `named_children()` 를 순회하는 현재 코드가 올바릅니다. `package_clause` 에 `fields` 가 없음을 grammar 스펙이 명시 — 방어적으로 필드 접근하지 않은 선택이 적절합니다.
@@ -0,0 +254,4 @@
glue.retain(|(_, gs, _)| *gs < s);
flush_glue(&mut glue, &mut units, &mod_prefix);
let sym = join_symbol(&mod_prefix, &[], name);
units.push((sym, s, e, true));

[Good] receiver_type_text 에서 child_by_field_name("type") 으로 추출한 텍스트가 *MdHeadingV1Chunker (pointer_type) / MdHeadingV1Chunker (type_identifier) 그대로 포함됩니다. tree-sitter-go grammar 에서 parameter_declaration.type 필드가 _type union 이므로 pointer_type 노드일 경우 src[start..end] 슬라이스에 * 가 포함돼 있어 design §3.4 의 package.(*Receiver).Method 형식이 자연스럽게 생성됩니다. 테스트 chunk.(*MdHeadingV1Chunker).ChunkDocchunk.(MdHeadingV1Chunker).Name2 두 케이스로 포인터/값 receiver 모두 커버 — 완벽합니다.

**[Good]** `receiver_type_text` 에서 `child_by_field_name("type")` 으로 추출한 텍스트가 `*MdHeadingV1Chunker` (pointer_type) / `MdHeadingV1Chunker` (type_identifier) 그대로 포함됩니다. tree-sitter-go grammar 에서 `parameter_declaration.type` 필드가 `_type` union 이므로 `pointer_type` 노드일 경우 `src[start..end]` 슬라이스에 `*` 가 포함돼 있어 design §3.4 의 `package.(*Receiver).Method` 형식이 자연스럽게 생성됩니다. 테스트 `chunk.(*MdHeadingV1Chunker).ChunkDoc` 과 `chunk.(MdHeadingV1Chunker).Name2` 두 케이스로 포인터/값 receiver 모두 커버 — 완벽합니다.
@@ -0,0 +297,4 @@
let sym = join_symbol(&mod_prefix, &[], name);
units.push((sym, spec_s, spec_e, true));
}
}

[Minor / FYI] glue.retain(|(_, gs, _)| *gs < s) 는 unit_start() 의 doc-comment fold 가 s 를 glue 아이템보다 앞으로 당겼을 때 해당 glue 아이템을 drop 하는 경로가 있습니다. 실제 Go 코드에서는 import/const/var 와 뒤따르는 함수 사이에 doc 코멘트가 glue 아이템을 가로질러 역전되는 경우가 없어 문제 없고, go_units_match_design_3_4_symbolschunk.<top-level> 그룹을 정확히 검증합니다. 다만 이 케이스를 명시하는 주석 한 줄(// retain drops glue items that fall within the doc-comment fold range) 을 추가하면 미래 유지보수자에게 도움이 될 것입니다. 필수 수정은 아닙니다.

**[Minor / FYI]** `glue.retain(|(_, gs, _)| *gs < s)` 는 unit_start() 의 doc-comment fold 가 `s` 를 glue 아이템보다 앞으로 당겼을 때 해당 glue 아이템을 drop 하는 경로가 있습니다. 실제 Go 코드에서는 import/const/var 와 뒤따르는 함수 사이에 doc 코멘트가 glue 아이템을 가로질러 역전되는 경우가 없어 문제 없고, `go_units_match_design_3_4_symbols` 가 `chunk.<top-level>` 그룹을 정확히 검증합니다. 다만 이 케이스를 명시하는 주석 한 줄(`// retain drops glue items that fall within the doc-comment fold range`) 을 추가하면 미래 유지보수자에게 도움이 될 것입니다. 필수 수정은 아닙니다.

[Minor / FYI] | 1B symbol path | 테이블 행이 Python/TS/JS/Rust 만 기술하고 Go 는 누락돼 있습니다. Go 의 symbol prefix 는 workspace path 변환이 아닌 소스 내 package 선언에서 직접 추출 — 1B/1A-2 와 다른 특성인데, README 에는 설명이 있지만 ARCHITECTURE.md 에는 없습니다. 해당 행에 Go = 소스-추출 package prefix (package 선언 AST 노드, workspace path 변환 아님) 한 줄 추가를 권장합니다. 이 PR 에 포함하거나 JavaKotlin PR 에서 일괄 갱신해도 무방합니다.

**[Minor / FYI]** `| 1B symbol path |` 테이블 행이 Python/TS/JS/Rust 만 기술하고 Go 는 누락돼 있습니다. Go 의 symbol prefix 는 workspace path 변환이 아닌 **소스 내 `package` 선언에서 직접 추출** — 1B/1A-2 와 다른 특성인데, README 에는 설명이 있지만 ARCHITECTURE.md 에는 없습니다. 해당 행에 `Go = 소스-추출 package prefix (package 선언 AST 노드, workspace path 변환 아님)` 한 줄 추가를 권장합니다. 이 PR 에 포함하거나 JavaKotlin PR 에서 일괄 갱신해도 무방합니다.
claude-reviewer-01 reviewed 2026-05-20 10:14:53 +00:00
claude-reviewer-01 left a comment
Member

정정 (회차 1 review summary 손상 수정): 직전 review 의 inline 코멘트 목록 마지막 줄 "pointer receiver 텍스트 추출 ���확성 확인" 에서 '정'(U+C815) 이 세 바이트 replacement char 로 손상됐습니다. 올바른 텍스트는 "pointer receiver 텍스트 추출 정확성 확인" 입니다. 내용 변경은 없으며 review 판정 (APPROVE) 도 그대로입니다.

정정 (회차 1 review summary 손상 수정): 직전 review 의 inline 코멘트 목록 마지막 줄 "pointer receiver 텍스트 추출 ���확성 확인" 에서 '정'(U+C815) 이 세 바이트 replacement char 로 손상됐습니다. 올바른 텍스트는 "pointer receiver 텍스트 추출 정확성 확인" 입니다. 내용 변경은 없으며 review 판정 (APPROVE) 도 그대로입니다.
claude-reviewer-01 reviewed 2026-05-20 10:15:12 +00:00
claude-reviewer-01 left a comment
Member

Correction (review ID 263 body corruption): inline comment list, last line: '...pointer receiver ASCII 추출 [corrupted]확성 확인' should read '정확성 확인' (Korean: correctness). The U+C815 glyph (jeong) was corrupted to 3 replacement bytes by tea's stdin path. Review judgment (APPROVE) is unchanged.

Correction (review ID 263 body corruption): inline comment list, last line: '...pointer receiver ASCII 추출 [corrupted]확성 확인' should read '정확성 확인' (Korean: correctness). The U+C815 glyph (jeong) was corrupted to 3 replacement bytes by tea's stdin path. Review judgment (APPROVE) is unchanged.
altair823 merged commit 9c9e391b15 into main 2026-05-20 10:16:12 +00:00
altair823 deleted branch feat/p10-1c-go 2026-05-20 10:16:13 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: altair823-org/kebab#151