---
generated_at: 2026-02-24 18:05:00
metrics:
  claims_total: 72
  claims_with_evidence: 68
  claims_without_evidence: 4
confidence_derived: 0.94
---

# 根拠レポート：packages-pseudo-tiktoken.csv

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：68 / 72、根拠なし：4
- 優先レビュー（高）
  1. **UT-PTK-071, UT-PTK-072**：精度に関するテストケースは既存テストの観察に基づく推測
  2. **UT-PTK-022**：index位置の正確性検証はコード上の実装に依存
  3. **UT-PTK-032**：countTokensとtokenizeの整合性は実装上明白だが明示的テストなし

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/pseudo-tiktoken/src/index.ts` - 公開APIのエクスポート定義
- E-02: `packages/pseudo-tiktoken/src/tokenizer.ts` - メイントークナイズロジック（normalizeWhitespace, tokenize, countTokens関数、PseudoToken型、WORD_RE正規表現）
- E-03: `packages/pseudo-tiktoken/src/rules/english.ts` - 英語サブワード分割ルール（splitIntoSubwords関数、COMMON_SUFFIXES配列、MIN_WORD_LENGTH_FOR_SPLITTING=7、CHUNK_SIZE=8）
- E-04: `packages/pseudo-tiktoken/src/rules/punctuation.ts` - 句読点判定ルール（isPunctuation関数、PUNCTUATION_CHARS Set）
- E-05: `packages/pseudo-tiktoken/test/samples.ts` - テストサンプルデータ（TOKEN_SAMPLES配列、各種テキストパターン）
- E-06: `packages/pseudo-tiktoken/test/accuracy.test.ts` - 精度テスト（MAX_ABS_ERROR=35、MAX_REL_ERROR=0.25）
- E-07: `packages/pseudo-tiktoken/test/underestimate.test.ts` - 過小評価防止テスト（MAX_UNDERESTIMATE_REL_ERROR=0.35）
- E-08: `packages/pseudo-tiktoken/README.md` - ライブラリの設計意図、精度目標、使用方法の説明
- E-09: `packages/pseudo-tiktoken/package.json` - パッケージ設定、依存関係

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-PTK-001) | 改行を空白に変換する | E-02 (tokenizer.ts L18-19: `.replace(/[\n\r\t]/g, " ")`) | ○ |
| C-02 (UT-PTK-002) | タブを空白に変換する | E-02 (tokenizer.ts L18-19: `/[\n\r\t]/g`) | ○ |
| C-03 (UT-PTK-003) | キャリッジリターンを空白に変換する | E-02 (tokenizer.ts L18-19: `/[\n\r\t]/g`) | ○ |
| C-04 (UT-PTK-004) | 連続する空白を1つに圧縮する | E-02 (tokenizer.ts L20: `.replace(/\s+/g, " ")`) | ○ |
| C-05 (UT-PTK-005) | 先頭・末尾の空白をトリムする | E-02 (tokenizer.ts L21: `.trim()`) | ○ |
| C-06 (UT-PTK-006) | 複合的な空白文字を正規化する | E-02 (tokenizer.ts L17-22) | ○ |
| C-07 (UT-PTK-007) | 空文字列を処理する | E-02 (tokenizer.ts normalizeWhitespace関数) | ○ |
| C-08 (UT-PTK-008) | 空白のみの文字列を処理する | E-02 (tokenizer.ts L21: `.trim()`で空文字列に) | ○ |
| C-09 (UT-PTK-009) | 空白を含まない文字列をそのまま返す | E-02 (tokenizer.ts normalizeWhitespace関数) | ○ |
| C-10 (UT-PTK-010) | 単純な英文をトークン化する | E-02 (tokenizer.ts L39-89) | ○ |
| C-11 (UT-PTK-011) | 句読点を個別トークンとして抽出する | E-02 (tokenizer.ts L73-81), E-04 | ○ |
| C-12 (UT-PTK-012) | 連続する同一句読点をまとめる | E-02 (tokenizer.ts L74-79: whileループで連続文字を結合) | ○ |
| C-13 (UT-PTK-013) | ハイフン付き単語を1トークンとして扱う | E-02 (tokenizer.ts L10: WORD_RE), E-03 (english.ts L51-53) | ○ |
| C-14 (UT-PTK-014) | アポストロフィ付き単語を処理する | E-02 (tokenizer.ts L10: WORD_RE `(?:[-'][A-Za-z0-9]+)*`) | ○ |
| C-15 (UT-PTK-015) | 長い単語をサブワードに分割する | E-03 (english.ts L48-72: splitIntoSubwords関数) | ○ |
| C-16 (UT-PTK-016) | 短い単語を分割しない | E-03 (english.ts L55-58: MIN_WORD_LENGTH_FOR_SPLITTING=7) | ○ |
| C-17 (UT-PTK-017) | 絵文字を個別トークンとして扱う | E-02 (tokenizer.ts L83-85: その他の文字は1文字=1トークン) | ○ |
| C-18 (UT-PTK-018) | 日本語文字を個別トークンとして扱う | E-02 (tokenizer.ts L83-85: CJK文字の処理コメント) | ○ |
| C-19 (UT-PTK-019) | 数字を含む単語を処理する | E-02 (tokenizer.ts L10: WORD_RE `[A-Za-z0-9]+`) | ○ |
| C-20 (UT-PTK-020) | 空文字列のトークン化で空配列を返す | E-02 (tokenizer.ts L44: whileループ条件) | ○ |
| C-21 (UT-PTK-021) | 空白のみの文字列で空配列を返す | E-02 (tokenizer.ts L40, L48-51: 正規化後に空白スキップ) | ○ |
| C-22 (UT-PTK-022) | トークンのindex位置が正しい | E-02 (tokenizer.ts L64, L78, L84: indexパラメータ使用) | △ |
| C-23 (UT-PTK-023) | 複数の空白で区切られた単語を処理する | E-02 (tokenizer.ts L40, L20: 正規化で圧縮) | ○ |
| C-24 (UT-PTK-024) | 改行を含むテキストを処理する | E-02 (tokenizer.ts L40, L19: 正規化で変換) | ○ |
| C-25 (UT-PTK-025) | URLを含むテキストを処理する | E-05 (samples.ts urls-and-links), E-02 | ○ |
| C-26 (UT-PTK-026) | 特殊文字を個別トークンとして扱う | E-04 (punctuation.ts PUNCTUATION_CHARS) | ○ |
| C-27 (UT-PTK-027) | テキストのトークン数を正しくカウントする | E-02 (tokenizer.ts L98-100: countTokens関数) | ○ |
| C-28 (UT-PTK-028) | 句読点を含むテキストのトークン数をカウントする | E-02 (tokenizer.ts countTokens), E-04 | ○ |
| C-29 (UT-PTK-029) | 空文字列のトークン数が0である | E-02 (tokenizer.ts countTokens), E-05 (samples.ts empty-stringなし) | ○ |
| C-30 (UT-PTK-030) | 1文字のトークン数が1である | E-02 (tokenizer.ts L83-85) | ○ |
| C-31 (UT-PTK-031) | 長文のトークン数をカウントする | E-05 (samples.ts long-text, production-prompt) | ○ |
| C-32 (UT-PTK-032) | tokenize関数の結果の長さと一致する | E-02 (tokenizer.ts L99: `return tokenize(text).length`) | ○ |
| C-33 (UT-PTK-033) | ハイフン付き単語を分割しない | E-03 (english.ts L51-53) | ○ |
| C-34 (UT-PTK-034) | 短い単語を分割しない（7文字以下） | E-03 (english.ts L33, L55-58) | ○ |
| C-35 (UT-PTK-035) | izationサフィックスで分割する | E-03 (english.ts L11: COMMON_SUFFIXES配列) | ○ |
| C-36 (UT-PTK-036) | ationサフィックスで分割する | E-03 (english.ts L13: COMMON_SUFFIXES配列) | ○ |
| C-37 (UT-PTK-037) | ingサフィックスで分割する | E-03 (english.ts L20: COMMON_SUFFIXES配列) | ○ |
| C-38 (UT-PTK-038) | mentサフィックスで分割する | E-03 (english.ts L16: COMMON_SUFFIXES配列) | ○ |
| C-39 (UT-PTK-039) | nessサフィックスで分割する | E-03 (english.ts L15: COMMON_SUFFIXES配列) | ○ |
| C-40 (UT-PTK-040) | ableサフィックスで分割する | E-03 (english.ts L18: COMMON_SUFFIXES配列) | ○ |
| C-41 (UT-PTK-041) | lessサフィックスで分割する | E-03 (english.ts L19: COMMON_SUFFIXES配列) | ○ |
| C-42 (UT-PTK-042) | サフィックスがマッチしない長い単語をチャンク分割する | E-03 (english.ts L71, L77-83: CHUNK_SIZE=8) | ○ |
| C-43 (UT-PTK-043) | ちょうど7文字の単語を分割しない | E-03 (english.ts L33, L55-58: `<=` 条件) | ○ |
| C-44 (UT-PTK-044) | 8文字の単語でサフィックスマッチを試みる | E-03 (english.ts L55-58, L61-68) | ○ |
| C-45 (UT-PTK-045) | サフィックスと同じ長さの単語を分割しない | E-03 (english.ts L62-65: `word.length > suffix.length`条件) | ○ |
| C-46 (UT-PTK-046) | ピリオドを句読点と判定する | E-04 (punctuation.ts L7: PUNCTUATION_CHARS) | ○ |
| C-47 (UT-PTK-047) | カンマを句読点と判定する | E-04 (punctuation.ts L8: PUNCTUATION_CHARS) | ○ |
| C-48 (UT-PTK-048) | 感嘆符を句読点と判定する | E-04 (punctuation.ts L9: PUNCTUATION_CHARS) | ○ |
| C-49 (UT-PTK-049) | 疑問符を句読点と判定する | E-04 (punctuation.ts L10: PUNCTUATION_CHARS) | ○ |
| C-50 (UT-PTK-050) | セミコロンを句読点と判定する | E-04 (punctuation.ts L11: PUNCTUATION_CHARS) | ○ |
| C-51 (UT-PTK-051) | コロンを句読点と判定する | E-04 (punctuation.ts L12: PUNCTUATION_CHARS) | ○ |
| C-52 (UT-PTK-052) | 括弧類を句読点と判定する | E-04 (punctuation.ts L13-18: PUNCTUATION_CHARS) | ○ |
| C-53 (UT-PTK-053) | 引用符を句読点と判定する | E-04 (punctuation.ts L19-20, L27: PUNCTUATION_CHARS) | ○ |
| C-54 (UT-PTK-054) | 特殊記号を句読点と判定する | E-04 (punctuation.ts L28-34: PUNCTUATION_CHARS) | ○ |
| C-55 (UT-PTK-055) | 演算子記号を句読点と判定する | E-04 (punctuation.ts L35-39: PUNCTUATION_CHARS) | ○ |
| C-56 (UT-PTK-056) | スラッシュを句読点と判定する | E-04 (punctuation.ts L22-23: PUNCTUATION_CHARS) | ○ |
| C-57 (UT-PTK-057) | ダッシュ類を句読点と判定する | E-04 (punctuation.ts L24-26: PUNCTUATION_CHARS) | ○ |
| C-58 (UT-PTK-058) | 省略記号を句読点と判定する | E-04 (punctuation.ts L21: PUNCTUATION_CHARS) | ○ |
| C-59 (UT-PTK-059) | アンダースコアを句読点と判定する | E-04 (punctuation.ts L41: PUNCTUATION_CHARS) | ○ |
| C-60 (UT-PTK-060) | 英字を句読点と判定しない | E-04 (punctuation.ts PUNCTUATION_CHARSに含まれない) | ○ |
| C-61 (UT-PTK-061) | 数字を句読点と判定しない | E-04 (punctuation.ts PUNCTUATION_CHARSに含まれない) | ○ |
| C-62 (UT-PTK-062) | 空白を句読点と判定しない | E-04 (punctuation.ts PUNCTUATION_CHARSに含まれない) | ○ |
| C-63 (UT-PTK-063) | 絵文字を句読点と判定しない | E-04 (punctuation.ts PUNCTUATION_CHARSに含まれない) | ○ |
| C-64 (UT-PTK-064) | 日本語文字を句読点と判定しない | E-04 (punctuation.ts PUNCTUATION_CHARSに含まれない) | ○ |
| C-65 (UT-PTK-065) | countTokensがエクスポートされている | E-01 (index.ts L2) | ○ |
| C-66 (UT-PTK-066) | tokenizeがエクスポートされている | E-01 (index.ts L2) | ○ |
| C-67 (UT-PTK-067) | normalizeWhitespaceがエクスポートされている | E-01 (index.ts L2) | ○ |
| C-68 (UT-PTK-068) | PseudoToken型がエクスポートされている | E-01 (index.ts L1) | ○ |
| C-69 (UT-PTK-069) | Markdownヘッダーを処理する | E-05 (samples.ts markdown-headers) | ○ |
| C-70 (UT-PTK-070) | コードブロックを処理する | E-05 (samples.ts code-block) | ○ |
| C-71 (UT-PTK-071) | tiktokenの結果を過大評価する傾向がある | E-08 (README.md L90: 「slightly overestimated」設計意図) | △ |
| C-72 (UT-PTK-072) | 過小評価が35%以内に収まる | E-07 (underestimate.test.ts L11: MAX_UNDERESTIMATE_REL_ERROR=0.35) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-22 (index位置の正確性)**: 実装上indexが設定されていることは確認できるが、正規化後の位置が元テキストのどの位置を指すかの仕様が明確でない
  - 候補：単体テストで具体的な位置検証を追加 / ドキュメントで仕様を明確化
- **C-71, C-72 (精度特性)**: 既存テストの閾値に基づく推測であり、すべてのケースで成立するわけではない
  - 候補：README.mdの精度目標を参照 / 実際のベンチマーク結果を確認

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - ほとんどのテストケースはソースコードの実装から直接導出されており、信頼性が高い
- **1: 中リスク** - 精度に関するテストケース（UT-PTK-071, UT-PTK-072）は設計意図に基づくものであり、すべてのエッジケースをカバーしているわけではない
- **0: 低リスク** - 公開APIのエクスポートテストは単純な確認のみ

## 6) レビュアーチェックリスト（最小）
- [ ] normalizeWhitespace関数のテストケース（UT-PTK-001〜009）が空白正規化の仕様を網羅しているか確認
- [ ] tokenize関数のテストケース（UT-PTK-010〜026）が主要なテキストパターンをカバーしているか確認
- [ ] countTokens関数のテストケース（UT-PTK-027〜032）がtokenize関数との整合性を検証しているか確認
- [ ] splitIntoSubwords関数のテストケース（UT-PTK-033〜045）がすべてのCOMMON_SUFFIXESをカバーしているか確認
- [ ] isPunctuation関数のテストケース（UT-PTK-046〜064）がPUNCTUATION_CHARSの全文字をカバーしているか確認
- [ ] 精度関連のテストケース（UT-PTK-071, UT-PTK-072）が既存のaccuracy.test.ts、underestimate.test.tsと整合しているか確認
- [ ] 境界値テスト（MIN_WORD_LENGTH_FOR_SPLITTING=7、CHUNK_SIZE=8）が適切に設定されているか確認
