Skip to content

fix(text): fail closed for unvalidated summary and retrieval selection - #515

Draft
seonghobae wants to merge 18 commits into
mainfrom
fix/no-heuristic-summarization
Draft

fix(text): fail closed for unvalidated summary and retrieval selection#515
seonghobae wants to merge 18 commits into
mainfrom
fix/no-heuristic-summarization

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Root cause

Protected main@90717c6e9954bf3b7a351137995ebe89975e46c2 기준으로 repository-owned text-selection policy 두 경로가 validated measurement/evaluation authority 없이 production decision을 만들고 있었습니다.

  1. summarize.py는 hand-curated English stopword, average term-frequency score, fixed five-sentence default, heuristic sentence split, earlier-position tie-break로 살아남는 transcript evidence를 선택했습니다.
  2. transcript_search.py는 local Unicode-regex token admission, Boolean-AND match, summed term-frequency Match.score, recording/timestamp tie-break로 검색 노출 순서를 결정했습니다.

Repository code search에서 production caller는 각 module/test 밖에 없었고, 기존 transcript-search performance PR들은 같은 unvalidated relevance semantics를 보존하므로 causal owner가 아닙니다.

TDD / repair

RED:

  • dbac11ca0f7187dddd03acbc7425978e255a6762: non-empty automatic summarization은 validated policy 없이는 fail closed하고 max_sentences에는 repository-authored default가 없어야 함.
  • c042d1884625b8b371708d9d6d0aade917e2903c: non-empty transcript tokenization/search도 validated retrieval policy 없이는 fail closed해야 함.

동일 non-force lineage에서 다음을 구현했습니다.

  • summary stopword/frequency score/sentence selection/tie rule/fixed output-length default 제거;
  • non-empty summarize_text / summarize_segmentsSummarizationPolicyUnavailable, empty-input lossless behavior는 유지;
  • transcript derived token count/relevance score/ranked ordering/tie-break 제거;
  • lossless transcript segment storage와 sidecar JSON loading은 유지하되 non-empty tokenize / TranscriptIndex.searchSearchPolicyUnavailable;
  • legacy heuristic assertions를 fail-closed/input-contract tests로 교체;
  • docs/product-technical-gap-baseline.md, architecture boundary, RCA doctoring, superseded token-fast-path evidence, CHANGELOG.md를 code-current하게 갱신;
  • NIST AI RMF 1.0과 NIST AI 600-1은 TEVV/governance 근거로만 APA 7 traceability에 연결하고 retrieval/summarization algorithm 근거로 과장하지 않음.

대체 BM25/vector/LLM ranker는 발명하지 않습니다. 재진입에는 명시적 algorithmic authority와 use-case-specific evaluation/calibration provenance가 필요합니다. 향후 RAG/model path라면 retrieval/response quality evaluation은 ContextualWisdomLab/fast-mlsirm, model execution/selection은 released ContextualWisdomLab/contextual-orchestrator contract 뒤에서 수행해야 합니다.

Protected-main non-force adoption

이 branch는 기존 main@a8e4956...에서 갈라진 뒤 protected main이 90717c6e...로 진행했습니다. intervening protected delta는 .github/workflows/ci.yml.github/workflows/fuzz.yml의 docs/Markdown trigger filtering뿐이며 text-selection source/docs/test와 겹치지 않습니다.

a2415ec79c285d664a0d97d9de3dfc12983a23d9는 기존 head b0324a867f0ec57d666a40dd363a66c01c0daac7를 first parent, protected main@90717c6e...를 second parent로 둔 정상 two-parent descendant입니다. Result tree에는 protected main의 두 workflow blob을 그대로 채택했고 branch ref는 force=false로 전진했습니다.

Fresh compare 결과 merge base는 정확히 90717c6e..., behind_by=0입니다. Protected-main-relative effective delta는 text-selection repair의 13개 source/test/docs path뿐이며 workflow 변경을 복제하거나 되돌리지 않았습니다.

Exact-head verification boundary

Exact current head: a2415ec79c285d664a0d97d9de3dfc12983a23d9.

이 head의 hosted workflows는 새로 시작됐고 현재 모두 non-terminal입니다: Scorecard 33790316358, OSV 33790316781, Security Scan 33790316172, CI 33790316184, fuzz 33790316206, SAST Semgrep 33790316181. Predecessor-head evidence는 이전하지 않습니다.

PR은 Draft를 유지합니다. Exact-head applicable checks의 실제 runner assignment/non-empty steps/terminal GREEN, current review/thread evidence, protected-path governance가 모두 충족된 뒤에만 Ready/normal merge를 검토합니다. Self-approval, bypass, no-op retrigger, force push, destructive rebase, gate weakening은 사용하지 않습니다.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae seonghobae changed the title fix(summary): fail closed without validated selection evidence fix(text): fail closed for unvalidated summary and retrieval selection Sep 2, 2026
@seonghobae seonghobae added documentation Improvements or additions to documentation priority: high High-priority or P1 work status: draft Draft pull request type: bug Defect or incorrect behavior labels Sep 2, 2026 — with ChatGPT Codex Connector
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation priority: high High-priority or P1 work status: draft Draft pull request type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant