feat: Metal/CUDA GPU 전사와 Rust 오디오 백엔드 도입 - #250
Conversation
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head884f6b20c8cab6df236c9ab0ea8e6f4933f8e456. -
Head SHA:
884f6b20c8cab6df236c9ab0ea8e6f4933f8e456 -
Workflow run: 29396826480
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Docs (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Test: test_audio_library.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_audio_library.py"]
R3 --> V3["targeted test run"]
OpenCode Review Overview
Pull request overviewOpenCode cannot approve yet because required coverage evidence did not pass. Review outcome1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
Coverage evidenceCoverage evidence job did not run or did not publish coverage evidence. Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
|
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head4564c23998e315816ad4231525c6730e471bdef8. -
Head SHA:
4564c23998e315816ad4231525c6730e471bdef8 -
Workflow run: 29413351250
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Docs (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Test: test_audio_library.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_audio_library.py"]
R3 --> V3["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current heada7ea0fe9c15bab681a79deb37f486d745acacb15. -
Head SHA:
a7ea0fe9c15bab681a79deb37f486d745acacb15 -
Workflow run: 29423253758
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Docs (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Test: test_audio_library.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_audio_library.py"]
R3 --> V3["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
ba150431ce2c0ba0c5f6678c90d8820dad0739cd. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/codec-carver/actions/runs/29464678615/job/87515227818)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/codec-carver/actions/runs/29464678615/job/87515227818)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Docs (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Test: test_audio_library.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_audio_library.py"]
R3 --> V3["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current headc5b3e127ce3067fb3701a1cd713afe3108adfd5d. -
Head SHA:
c5b3e127ce3067fb3701a1cd713afe3108adfd5d -
Workflow run: 29468399831
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Docs (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Test: test_audio_library.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_audio_library.py"]
R3 --> V3["targeted test run"]
There was a problem hiding this comment.
🧹 Nitpick comments (1)
audio_library.py (1)
5683-5688: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
_description_drift_paths(Line 5746-5749)와 완전히 동일한 조건이 중복됨.
filename_description_status == "deferred" and validated_cached_filename_description(transcript) is None조건이 두 메서드에 그대로 복제되어 있습니다. 이 저장소는 과거에도 유사한 검증 로직이 여러 곳에 흩어져 있다가 한쪽만 수정되어 발생한 버그(정규화 전 word timestamp 검증 누락)가 있었으므로, 공용 헬퍼로 추출해 두 곳이 어긋나지 않도록 하는 편이 안전합니다.♻️ 제안 리팩터링
+ `@staticmethod` + def _is_deferred_without_validated_description(transcript: dict[str, Any]) -> bool: + """Defer only when no validated cached title can stand in for a stale status.""" + return ( + transcript.get("filename_description_status") == "deferred" + and validated_cached_filename_description(transcript) is None + )그리고 두 호출부를
self._is_deferred_without_validated_description(transcript)로 교체합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@audio_library.py` around lines 5683 - 5688, Extract the duplicated deferred-description condition into a shared helper named _is_deferred_without_validated_description, preserving the existing filename_description_status and validated_cached_filename_description checks. Replace the inline condition in both the shown flow and _description_drift_paths with calls to this helper so both paths use identical validation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@audio_library.py`:
- Around line 5683-5688: Extract the duplicated deferred-description condition
into a shared helper named _is_deferred_without_validated_description,
preserving the existing filename_description_status and
validated_cached_filename_description checks. Replace the inline condition in
both the shown flow and _description_drift_paths with calls to this helper so
both paths use identical validation.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4a34b6bd-c0f4-4ffa-bebc-15e91ea79cfb
📒 Files selected for processing (5)
audio_library.pyrust-core/src/lib.rstests/test_audio_library.pytests/test_ci_workflow.pytests/test_media_shrinker.py
🚧 Files skipped from review as they are similar to previous changes (4)
- tests/test_ci_workflow.py
- tests/test_media_shrinker.py
- tests/test_audio_library.py
- rust-core/src/lib.rs
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head82321facce5ae1774dffc2536374466c0b5c8818. -
Head SHA:
82321facce5ae1774dffc2536374466c0b5c8818 -
Workflow run: 30432320679
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 2
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (11 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (11 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head8b651b52603927fa79c83e7131afac07a705ec3d. -
Head SHA:
8b651b52603927fa79c83e7131afac07a705ec3d -
Workflow run: 30463600131
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 2
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (11 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (11 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
rust-toolchain.toml (1)
2-2: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRust toolchain을 정확한 버전으로 고정하세요.
channel = "stable"은 CI와 release build가 시점에 따라 다른 컴파일러를 사용할 수 있습니다. 재현 가능한 빌드를 위해 승인된 Rust 버전(예:1.x.y)을 명시하고 의도적으로 업데이트하는 편이 안전합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@rust-toolchain.toml` at line 2, Update the Rust toolchain configuration by replacing the floating channel value in rust-toolchain.toml with the approved exact Rust version in major.minor.patch format, so CI and release builds consistently use the same compiler.tests/test_audio_library.py (1)
6848-6850: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueAPI 테스트가
CliTests에 있습니다.
test_review_description_binds_title_to_gpu_word_timestamp_evidence는 CLI가 아니라AudioLibrary.review_description()을 직접 호출하므로AudioLibraryTests로 옮기는 편이 클래스 의도에 맞습니다. CLI 라우팅 검증은 이미test_main_routes_transcribe_stream_plan_and_apply가 담당합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/test_audio_library.py` around lines 6848 - 6850, Move test_review_description_binds_title_to_gpu_word_timestamp_evidence from CliTests to AudioLibraryTests, since it directly exercises AudioLibrary.review_description(). Keep CLI routing coverage in test_main_routes_transcribe_stream_plan_and_apply and preserve the existing test behavior.audio_library.py (2)
5540-5711: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value검증 단계를 헬퍼로 분리하면 이 메서드의 길이와 중첩을 줄일 수 있습니다.
현재 하나의 메서드에서 (1) inventory/SHA 확인, (2) MLX 전사 런타임 요구사항 검증, (3) segment-id 정규화와 word timestamp 증거 구성, (4) 의미 검증, (5) sidecar/summary 기록을 모두 수행합니다. 최소한 (2)와 (3)을 모듈 수준 함수(예:
validate_manual_review_transcript(),manual_review_evidence_items())로 분리하면 개별 단위 테스트도 쉬워집니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@audio_library.py` around lines 5540 - 5711, Refactor review_description by extracting the MLX transcript/runtime checks into a module-level validate_manual_review_transcript helper and the source-segment normalization, validation, and evidence construction into a manual_review_evidence_items helper. Keep their current validation behavior and error messages intact, then use the helpers from review_description while leaving semantic validation and persistence flow unchanged.
3116-3183: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win조사 목록과
KOREAN_TERM_RE판정을 루프 밖으로 끌어올리면 반복 비용을 줄일 수 있습니다.
grammar튜플은is_grounded()의 candidate 루프마다 새로 만들어지고,KOREAN_TERM_RE.fullmatch(source)는(start, skipped_grammar, source)조합마다 다시 평가됩니다. 조사 목록은 모듈 상수로, 한국어 판정은source_terms순회 전에 한 번만 계산해 두는 편이 좋습니다.♻️ 제안 리팩터
모듈 수준에 상수를 추가합니다.
CONTEXT_GRAMMAR_PARTICLES = ( "으로", "에서", "에게", "한테", "께서", "처럼", "보다", "하고", "하며", "해서", "하여", "도록", "은", "는", "이", "가", "을", "를", "에", "의", "도", "와", "과", "로", "만", )그리고
grounding_text is not None블록에서 한국어 여부를 미리 계산합니다.+ korean_source_terms = { + term for term in source_terms if KOREAN_TERM_RE.fullmatch(term) is not None + }- grammar = ( - "으로", - ... - "만", - ) + grammar = CONTEXT_GRAMMAR_PARTICLES semantic_reach: dict[tuple[int, bool], int] = {(0, False): 0} @@ elif ( - KOREAN_TERM_RE.fullmatch(source) is not None + source in korean_source_terms and KOREAN_TERM_RE.match(candidate[start:]) is not None ):🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@audio_library.py` around lines 3116 - 3183, Move the particle tuple out of the candidate-processing loop in is_grounded() into a module-level CONTEXT_GRAMMAR_PARTICLES constant, and replace the local grammar reference with it. Before iterating through source_terms, precompute the Korean terms whose KOREAN_TERM_RE.fullmatch() succeeds, then use that cached set for prefix handling instead of repeating the regex check for each start/state/source combination.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@audio_library.py`:
- Around line 3566-3569: Move the complete_missing_contextual_evidence() call
into the existing try block surrounding the schema-repair fallback so its
ValueError reaches literal_evidence_contextual_description() instead of escaping
analyze(). Preserve the pre-completion schema-repair candidate in a separate
variable, and pass that original candidate to the literal fallback while
retaining the completed candidate for subsequent processing.
---
Nitpick comments:
In `@audio_library.py`:
- Around line 5540-5711: Refactor review_description by extracting the MLX
transcript/runtime checks into a module-level validate_manual_review_transcript
helper and the source-segment normalization, validation, and evidence
construction into a manual_review_evidence_items helper. Keep their current
validation behavior and error messages intact, then use the helpers from
review_description while leaving semantic validation and persistence flow
unchanged.
- Around line 3116-3183: Move the particle tuple out of the candidate-processing
loop in is_grounded() into a module-level CONTEXT_GRAMMAR_PARTICLES constant,
and replace the local grammar reference with it. Before iterating through
source_terms, precompute the Korean terms whose KOREAN_TERM_RE.fullmatch()
succeeds, then use that cached set for prefix handling instead of repeating the
regex check for each start/state/source combination.
In `@rust-toolchain.toml`:
- Line 2: Update the Rust toolchain configuration by replacing the floating
channel value in rust-toolchain.toml with the approved exact Rust version in
major.minor.patch format, so CI and release builds consistently use the same
compiler.
In `@tests/test_audio_library.py`:
- Around line 6848-6850: Move
test_review_description_binds_title_to_gpu_word_timestamp_evidence from CliTests
to AudioLibraryTests, since it directly exercises
AudioLibrary.review_description(). Keep CLI routing coverage in
test_main_routes_transcribe_stream_plan_and_apply and preserve the existing test
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: fa051b95-5936-4749-87dd-80207885791d
📒 Files selected for processing (7)
README.mdaudio_library.pydocs/architecture/gpu-transcription-rust-backend.mdrust-core/src/lib.rsrust-core/src/main.rsrust-toolchain.tomltests/test_audio_library.py
🚧 Files skipped from review as they are similar to previous changes (2)
- docs/architecture/gpu-transcription-rust-backend.md
- README.md
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head0154205321e53b2860bef2c4575b2536eb54adb6. -
Head SHA:
0154205321e53b2860bef2c4575b2536eb54adb6 -
Workflow run: 30532669817
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
Speaker-aware MLX transcription update (
|
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30693838179
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30822816947
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30887790496
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30916466331
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30928352831
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30938020280
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c. -
Head SHA:
12fda4c7d5c0a98f6f96642a6c4eefe6ccd4318c -
Workflow run: 30960798865
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (12 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (12 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: ci.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: ci.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Test (7 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (7 files)"]
R4 --> V4["targeted test run"]
|
This mega branch is being retired as a merge candidate and preserved as read-only extraction evidence for #368. Exact source head |
변경 사항
전체 SHA-256, 최초 녹음 시각 증거, 알려진 장소, Sony TMK 마커를 보존하는 오디오 라이브러리 manifest를 추가했습니다.
YYYY-MM-DD_HH-MM-SS__장소?__전사설명__sha256-12.ext이름과 복구 가능한 exact-duplicate quarantine 계획을 생성합니다.Python API는 Apple MLX/Metal 또는 faster-whisper CUDA만 사용하며 Ollama와 CPU fallback을 사용하지 않습니다.
Rust backend가 병렬 inventory, 1 MiB bounded-buffer SHA-256, TMK 해석, dataless 단일-pass staging, 네이티브 iCloud eviction, 경로 검증, rollback 가능한 rename/quarantine를 담당합니다.
iCloud 원본은 시스템 scratch에 한 파일만 staging하며 같은 스트림에서 SHA-256을 계산합니다. 알려진 해시가 달라지면 전사를 중단합니다.
macOS dataless 파일은 Foundation
FileManager.startDownloadingUbiquitousItem으로 다운로드를 요청하고NSFileCoordinatoraccessor 안에서 copy-and-hash하여 현재 File Provider 요청을 유지합니다. 이미 local인 파일은 조정 오버헤드 없는 direct fast path를 사용합니다.전사와 inventory checkpoint가 durable해진 뒤 Rust
evict명령이FileManager.evictUbiquitousItem으로 local block을 해제합니다.brctl download/brctl evict에 의존하지 않으며, 선택적 eviction 오류는 전사 실패와 분리해 기록합니다.File Provider가 논리 크기만 노출하고 짧은/빈 EOF를 반환하면 Rust가
STAGE_SOURCE_NOT_READY로 거부하고, Python이 바이트 진행이 있는 동안만 bounded 재시도합니다.기본 greedy decoding과 opt-in
--word-timestamps를 제공하고, 0.5초 미만 WAV는 모델 호출 없이 품질 플래그를 남깁니다.긴 전사는 전체 trusted segment의 주제 밀도로 대표 설명을 추출합니다. 주제 점수는 유지하면서 출력 전용 한국어 군더더기를 제거하고 핵심어를 6개로 제한하며, 이미 유효한 시각·장소·SHA 표준명은 이후 휴리스틱 변경에도 보존합니다.
Rust 장소 추론은 한국 주소 단위 뒤의 숫자·공백·구두점·문자열 끝 경계를 요구해
배동오같은 연락처 이름의 부분 문자열을 장소로 오인하지 않습니다.--prefetch-workers와--prefetch-max-bytes는 총 staging 바이트를 제한하면서 worker 슬롯을 계속 재충전하는 rolling queue를 구성합니다. 선택 순서상 다음 파일이 준비되면 단일 GPU 전사를 즉시 시작해 남은 Rust stage와 중첩하고, 실제 중첩 횟수를prefetch_transcription_overlaps로 기록합니다. bounded pool 밖 순차 stage는 기존 future 종료를 기다리며, native eviction도 진행 중 prefetch가 있으면 뒤로 미뤄 FileProvider 경합을 막습니다. 첫 직렬 timeout canary도 실패하면 같은 배치의 나머지 장시간 fallback은 억제합니다.실 iCloud 최초 바이트 지연 210초를 근거로
--stage-stall-timeout-seconds기본값을 120초에서 420초로 높여 정상 다운로드의 오탐 실패를 방지합니다.병렬 prefetch가
TimeoutExpired로 끝나면 해당 항목만 직렬 staging으로 한 번 재시도하고, 일반 오류는 재시도하지 않습니다. run summary에 fallback 시도·회복 건수를 남깁니다.Strix가 지적한 12개 경계를 보강했습니다. SHA·manifest·mutation 경로를 Python과 Rust 양쪽에서 검증하고, 비상주 파일의 이전 SHA는 미검증 힌트로만 취급하며, 전사 캐시·계획 전에 현재 바이트를 다시 inspect/stage합니다. 상태·전사 파일은 소유자 전용 권한과 검증된 부모 디렉터리 FD 상대 생성·교체로 기록해 symlink TOCTOU를 차단하고, staging cleanup은 디렉터리 FD와 no-follow 검사로 제한하며, backend/ffprobe는 명시적 또는 고정 절대 경로만 허용합니다. stall 재시도에는 독립적인 총 실행 상한도 적용합니다.
전사 후 별도
describe단계가 고정 리비전mlx-community/gemma-4-e2b-it-4bit@238767527555cb75a05732a84dff5d6ba0dd6809를 MLX-VLM Python API로 한 번 로드해 파일명 주제를 생성합니다. 전사 원문은 프롬프트 지시로 신뢰하지 않고, 정보 밀도 기반 구간 선택·형식/범용어 품질 게이트·1회 교정 후 SHA sidecar에 캐시합니다. Ollama와 hosted inference 업로드는 사용하지 않습니다.재현 가능한 wheel 설치를 위해
mlx-vlm==0.6.4를 고정하고, 아직 PyPI에 배포되지 않은 공식 Gemma 4 오디오 가중치 배치 수정(PR #931)을 Codec Carver 런타임에서 좁게 backport합니다.최신 Strix 7건을 반영해 backend/ffprobe 실행 파일 allowlist·소유권·권한·SHA256 고정, 현재 inventory 기반 mutation 작업 재계산, Rust의 모든 audio/TMK 원본 실행 직전 재해시, journal SHA의 미검증 힌트 처리, Gemma 모델·revision allowlist와 tokenizer remote-code 차단, JSON prompt encoding과 전사 용어 grounding을 적용했습니다.
c81daee Strix가 새로 재현한 두 경계도 f414192에서 차단했습니다. Python은 backend가 반환한 scratch 경로를 직접 신뢰하지 않고 owner-only 디렉터리 FD에서
O_NOFOLLOW로 연 동일 파일의 실제 크기·SHA-256을 다시 계산해 GPU/TMK 전달 전에 backend·inventory 값과 대조합니다. Rust mutation은 루트 FD 배타 잠금,openat/mkdiratno-follow 순회, macOSrenameatx_np(RENAME_EXCL)/Linuxrenameat2(RENAME_NOREPLACE)와 동일 방식 rollback으로 교체했습니다.Gemma 파일명 생성은 중심 사상·결론·신뢰도·근거 segment ID를 먼저 검증한 뒤 별도 title pass를 수행합니다. 일반어 나열과 low-confidence 결과는 보류하고, 이전 keyword-only 캐시는 자동 승격하지 않습니다. 의미 분석이 명시적으로 실패한 녹음은 실패 이유를 checkpoint하고 keyword fallback으로 개명하지 않습니다.
hydrate-tmk --path를 반복 지정해 현재 bounded audio batch와 연결된 TMK만 current-byte SHA-256으로 재검증할 수 있습니다.근거 자료
docs/papers/2212.04356-whisper.pdf(SHA-2566337bde031b2f237547a977b022f831169a7e05b4d9047f29501166d83594566)docs/standards/NIST.FIPS.180-4.pdf(SHA-2560455b406d89648d20cbde375561e19c245b9815e894164c2670772e3d54deb82)검증
trust_remote_code=False로 실제 MLX/Metal 로드했습니다. v5 회귀 검증은 중심 사상과 구체적 목적을 함께 요구합니다. 인용 근거의 명시적 목적을 일반적인프로젝트 추진으로 축약한 결과와 목적이 빠진 제목은 거부하고, 전사 원문에 있는 대상·목적만으로 구성된 제목만 허용합니다.cargo test --all-targets: macOS 18 passed; Linux 17 passedcargo clippy --all-targets --all-features --locked -- -D warnings: passedcargo build --release --locked: passedobjc2제외 확인git diff --check: passedVOC-시스템-정말-중요한-시장-고객-정보설명 생성, 실패 0too_short_for_reliable_speech로 모델 추론을 생략하고무음-또는-전사불명으로 표준화NSFileCoordinator가isDownloadRequested=1,isDownloading=1을 유지해 dataless placeholder 3개를 Rust staging했으며,FileManager.evictUbiquitousItem뒤isDownloaded=0,isDownloading=0복귀 확인7a69bb842a2260b1e67a508ad4fb94a4a4179baf3a809b6f8342dca9218a17b2,965e8c64f7d9225579dfb60e92ec6ec0dfa3692d1a474b2bfb44a6bcf580f057,6fd0bab7669e994caac1d93b4b26ae7a81697272dde6d72bdddbc161611036cb,9e6ddd94b1f28d0b47a8d95a4bf3dc7e42d637e4d91e20ae81ddb66d66a333e0,b59e3d9465de7a163180ab5ed1ba413144ef8c5af00df32e64eb1b09c71c2c1b,5f066430beaa42fbb6f1971687eda36fd713570cf8f886bb3b4c32111516b35f,c01d37491bd8c9640105a72fd04bf6b1363a0535aa06502f860099fd02ba48b9,e39cdab3b1119411f201724b6c995ceb0dc385b25a6dbb12f97ca4435641c151,76d5deec9ac7df45c7c3b927c2ccbd6a9c8ce97cf46d453812123955e17f0681,5fa32264e7b3b254cd0d2cbe5f8bc06e5ba1407df1083edfd253886f225421ee,75f87befd86f0330837857a063ba61a669f66efc460cf3d0a7bb54304919926f,245d96129a709c477a211596523d320c9982962d154fd11f2a148374108a4e0e,e963800209d7e0627e9691c9cd5f799216eed1985e08cc347c270683b4475faabee17af8d1bf08efbd2d1f025438d55cf9f8832f3813696d0e02501780a0ab6c,9a5d759cd9655badb1702e6f641b49a78f2ca180973afee3c4369622d3336889f8048b1a34c6c8e696cb8f9052aaa2ca23ece4e1beb890bf75fee03af7ed969f입니다.772b7e7e16340709ecc9261941b2b184f090b9bbb67065c3a02f6f305d2792d1efaf2692b8dd32abad3c4a35f1c906389b60db5dbdc87ab4af74e0b835bc16b1, 연결 TMK SHA-256d0a6f922aefc257a63a29a32ebd7719f4bcb127285cbdbb9dbb4322ccf49dbf3, marker 0개20ef777682c1d921427fec9feb1ffc0b47d1fd90ea1e96da244a12585c0c9eca, 연결 TMK SHA-2569e3e40e2fcc230c0247d9fb19f7e1f92637720fcd5ea210be13ae8dfdef9a45d, marker 0개39b5616675e8c462c7e1c812252e2eca04daf635aff5a1c67cd75bbc73aa02da의사결정-1세대-2세대-3세대-질문-전략표준명을 생성했습니다.0d01d778bccdf03a392bb43b73086bc1d73ea779f10a11b5e1a7217515ae56f24d532655ed1cb4a725a7037b2d4a3acc52a0c694067986bcb631006e4e862eff입니다.too_short_for_reliable_speech로 처리했습니다. 이 실측에서 최초 4개만 prefetch하고 후속 파일을 직렬 처리하던 병목을 확인해 bounded rolling queue와 실패 canary 회로차단기를 추가했습니다. 개선 후 16파일 실배치는prefetched=16, 5,032,347바이트, 완료 16, 실패·fallback·eviction 실패 0으로 worker 슬롯 재충전을 실증했습니다. 추가 32파일 실배치는prefetched=32, 29,836,883바이트였고 최초 31개 성공·Rust stage 일시 실패 1개를 단일 120초 bounded retry로 회복해 최종 32개 모두 완료했습니다. fallback·eviction 실패는 0입니다. 이어서 64MiB 상한에 맞춘 20파일 실배치는prefetched=20, 67,092,837바이트, 완료 20, 실패·fallback·eviction 실패 0이었습니다. 다음 9파일 실배치도prefetched=9, 59,399,603바이트, 완료 9, 실패·fallback·eviction 실패 0이었습니다. 이어진 5파일 실배치는prefetched=5, 59,931,008바이트, 완료 5, 오류 0이었습니다. 다음 4파일 실배치는 병렬 prefetch 4개가 420초 timeout이었지만 bounded 직렬 fallback 4개가 모두 회복해 완료 4, 실패·eviction 실패 0이었습니다. 이후 4파일 실배치도 fallback 4/4 회복으로 전사 완료했고 eviction timeout 1개는 fresh inventory에서 materialized 0으로 복귀했습니다. worker=2의 2파일·44,140,052바이트 배치는 fallback 없이 완료 2였고, 다음 2파일·46,201,772바이트 배치는 1개 완료·1개 병렬/직렬 timeout 뒤 단일 재시도로 회복했습니다. 동일 크기선유동2로M4A 2개는 기존 SHA-256bee17af8…canonical과 일치해 GPU 재추론 없이 캐시 적중 2건으로 확인하고 복구 가능한 exact-duplicate quarantine에 격리했습니다. 최초 녹음과 동일 SHA727b47…인양평동4가.m4a·양평동4가 3.m4a도 각각 캐시 적중 후 격리했습니다. 실패 wave에서는 첫 직렬 canary timeout 후 후속 fallback 1개를 억제해 420초 추가 지연을 막았고, 성공 wave의 주소 파일은57-선유동2로를 표준명에 보존했습니다.prefetched=3,completed=3,failed=0을 달성했습니다. 병렬 timeout 1개는 bounded 직렬 fallback 1/1로 회복했고57-선유동2로주소를 표준명에 보존했습니다. 전사와 SHA-256 checkpoint는 모두 durable하며, 이 주소 파일의 선택적 iCloud eviction 1건만 FileProvider 거부로 로컬 블록이 남았습니다.39b561…전사 캐시와 일치해 GPU 재추론 없이cached=3,failed=0으로 확인했고 복구 가능한 quarantine에 격리했습니다. 선택적 eviction 3건은 FileProvider가 거부했지만 격리 적용 후 로컬 블록과 함께 활성 라이브러리에서 제거됐습니다.2라운드와무음-또는-전사불명설명으로 표준화했고completed=2,failed=1의 부분 성공 checkpoint를 보존했습니다.completed=3,failed=0이었고 세 전사명을 적용했습니다. ordered pipeline 커밋ba15043의 첫 실배치는 WAV 2개·104,421,024바이트를 fallback 2/2로 완료했습니다. 두 병렬 요청이 모두 timeout이어서 실제prefetch_transcription_overlaps=0을 정확히 기록했고 worker 상한 밖 stage는 발생하지 않았습니다.completed=2,failed=0,prefetch_transcription_overlaps=0을 기록했습니다.2025-11-24_22-32-00__무음-또는-전사불명__sha256-268d0cd30c49.wav와2026-05-13_10-29-06__4-2-양평동4가__이걸-배포-테스트__sha256-2fd72d14058e.m4a로 표준화했으며, 선택적 eviction 2건 실패는 durable 전사와 분리해 로컬 블록만 유지했습니다.completed=2,failed=0이었고, 선택적 eviction 1건 실패만 durable 전사와 분리해 기록했습니다. SHA-256은04d93e2e12fb611a6ab7e334967fe2cc57414e8feb337348153db143fd1da2ae,d807e3c6c2b0c7e39d1ddb02aeca3d1788a2f37f0da47dfd93973b6bec27c328입니다.공정설비-데이터연동-분석기법-GPT,비정형데이터분해-시장영향분석-화학공정이해-솔루션개발을 생성하고 각각 녹음시각·장소·SHA 결합 표준명으로 dry-run 후 적용했습니다.중심 사상 보정 (도입 c81daee, 보안 후속 f414192)
그래야·위해·목적·목표절의 원문 목적어를 생략할 수 없습니다.plan --refresh-standardized-path <정확한 상대경로>로 재계획할 수 있고, apply 시 현재 원본 바이트 SHA를 다시 검증합니다.04d93e2e12fb611a6ab7e334967fe2cc57414e8feb337348153db143fd1da2ae에서 키워드 나열 제목 대신바스고도화-상품화를 도출했습니다. 근거는 표준 화면S002, BAS 제품 화면S005, BAS 고도화S012, “그래야 상품화”S016입니다.안전성
--execute가 있어야 적용됩니다..codec-carver/quarantine/exact-duplicates/로 이동합니다..codec-carver와 transcript는 0700/0600 권한을 사용하고 상태 파일은 검증된 부모 디렉터리 FD에 상대적으로 원자 교체하며, 임시 staging은 예측 불가능한 소유자 전용 디렉터리이며 symlink component와 no-follow cleanup 경계를 검사합니다.eviction_failures에 남기되 이미 durable한 전사를 실패로 바꾸지 않습니다.Strix 경계 보강 (기존 6건, f414192 후속 2건)
/etc/passwd같은 scratch 외부 경로, symlink·directory, 위조 SHA/크기, 해시 중 변경을 fail-closed로 거부하며 전사기가 호출되지 않음을 회귀 테스트로 고정했습니다.최신 Strix 실행 경계 후속 (ced9653)
최신 Strix 4건 경계 보강 (e1ece23)
최신 Strix 7건 경계 보강 (eee0c47)
TMK 기반 bounded GPU 전사 (2519604)
FileRecord가 Sony TMK의 전체 순서형tmk_markers_seconds벡터를 SHA-256과 함께 보존하고 연결 오디오·전사 sidecar에 전파합니다.hydrate-tmk대상으로 남깁니다.66c8740은 native iCloud staging stderr·return code를 구조화된 실패 checkpoint에 보존하고, macOS helper 장애가 Rust 단위 테스트를 멈추지 않도록 native 호출 경계를 주입 가능하게 만들었습니다.cargo fmt,cargo clippy --all-targets -- -D warnings, release build 통과.Summary by CodeRabbit