Skip to content

refactor(pipeline): split pipeline.ts (1658 lines) into per-surface modules #147

@liplus-lin-lay

Description

@liplus-lin-lay

purpose

src/pipeline.ts (1658 行) を per-surface モジュール群 (src/pipeline/*.ts) に分割する。 src/pipeline.ts は再エクスポートのみのバレルに縮退させ、 consumer (src/poller.ts / src/webhook.ts) の import 修正なしで完結させる。 読みやすさと修正局所性を上げ、 surface 単位での将来追加 (例: 新 GitHub event タイプ) の影響範囲を限定する。

premise

  • 単一ファイルに embedding pipeline / vector ID 生成 / ingest filter / hash utility / per-surface upsert (issue・release・doc・wiki・diff・comment) が同居している
  • consumer は poller.ts (cron 経由) と webhook.ts (event 経由) の 2 ファイルのみ
  • 両 consumer は from "./pipeline.js" で named import している (リスト確認済み)
  • src/types.ts の Record 型 / src/fts.tsupsertFtsRow / deleteFtsRow を依存先として使用

constraints

  • 動作変更なし (refactor のみ)
  • consumer 側 import 修正なし (barrel が backward-compat 保証)
  • type signature 変更なし
  • 既存 export は全て barrel 経由で publish され続けること
  • tsc --noEmit clean & wrangler deploy --dry-run pass

target files

新規 (src/pipeline/)

  • embedding.tsgenerateEmbedding, generateEmbeddingBatch, MAX_EMBEDDING_INPUT_CHARS, MAX_EMBEDDING_BATCH_SIZE, MAX_VECTORIZE_UPSERT_BATCH_SIZE
  • vector-id.tsstableVectorId (private), vectorId, releaseVectorId, docVectorId, wikiDocVectorId, diffVectorId, issueCommentVectorId, prReviewVectorId, prReviewCommentVectorId
  • ingest-filter.tsisBotSender, isBodyTooShort, MIN_COMMENT_BODY_CHARS
  • hash.tscomputeBodyHash, prepareEmbeddingInput, base64UrlEncode, base64UrlEncodeBytes (private), sha256Hex, prepareDiffEmbeddingInput, prepareCommentEmbeddingInput
  • types.ts — 共有型 (UpsertResult, DiffUpsertResult, CommentUpsertResult 等の per-module 跨ぎ)
  • embed-issue.tsprocessAndUpsertIssue, GitHubIssueData
  • embed-release.tsprocessAndUpsertRelease, GitHubReleaseData
  • embed-doc.tsprocessAndUpsertDoc, processAndUpsertWikiDoc
  • embed-diff.tsfetchCommitDetail, normaliseFileStatus (private), processAndUpsertCommitDiff, GitHubCommitDetail
  • embed-comment.tsingestIssueComment, ingestPRReview, ingestPRReviewComment, GitHubCommentData, GitHubPRReviewData, GitHubPRReviewCommentData

縮退

  • src/pipeline.ts — 全 export を pipeline/* から再エクスポートするバレル

expected outcome

  • src/pipeline.ts が ~30 行のバレルになる
  • src/pipeline/*.ts が 10 ファイル前後に分割される
  • src/poller.ts / src/webhook.ts の import 文は無変更
  • tsc --noEmit clean、 wrangler deploy --dry-run 成功

label

  • type: enhancement
  • maturity: ready

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions