fix(rag): S3 NLI unavailable — hypothesis char budget + token-count fallback retry #184

Merged
altair823 merged 1 commits from fix/s3-nli-model-unavailable-diagnose into main 2026-05-26 09:17:15 +00:00
Owner

요약

S3 dogfood query 의 nli_model_unavailable consistent fail (313s) 의 root cause = mDeBERTa-v3 tokenizer 의 TruncationStrategy::OnlyFirst + 949-token hypothesis. hypothesis 단독이 max_length cap (512) 을 단독 초과 → premise 를 0 까지 잘라도 tokenizer 가 fit 불가 → wire nli_model_unavailable 로 over-classified.

Fix Option A — char-budget + token-count fallback retry + RC1-residual trait dispatch 정합. KR safe (token-count retry path) + graceful fallback (regression 0).

설계: docs/superpowers/specs/2026-05-26-s3-nli-model-unavailable-diagnose-spec.md (4 round APPROVE)
계획: docs/superpowers/plans/2026-05-26-s3-nli-model-unavailable-diagnose-plan.md (3 round ACCEPT)

변경 사항

kebab-nli

  • NliVerifier trait 확장: hypothesis_token_count(&str) -> Result<usize> method 추가 + default impl Ok(0) (backward-compat for MockNliVerifier).
  • OnnxNliVerifier::HYPOTHESIS_TOKEN_BUDGET = 256 inherent const.
  • OnnxNliVerifier::hypothesis_token_count overridetrait impl block 안 에 위치 (round-3 critic RC1-residual closure: inherent block 이면 vtable 미등록 → &dyn NliVerifier dispatch 시 default Ok(0) 호출 → KR silent NO-OP).
  • 신규 ignored test 2 — score_long_en_hypothesis_returns_err_without_pipeline_truncation + hypothesis_token_count_dispatches_correctly_via_dyn_trait (vtable dispatch pin via let v_dyn: &dyn NliVerifier = &v;).

kebab-rag

  • MAX_NLI_HYPOTHESIS_CHARS_INITIAL = 1200 + MAX_NLI_HYPOTHESIS_CHARS_MIN = 150 const.
  • pub(crate) fn truncate_chars(s, budget) -> (String, bool) pure-fn — chars-only truncation arithmetic.
  • pub fn truncate_hypothesis_for_nli_with_budget(verifier, hypothesis) retry helper — char budget 절반화 (1200 → 600 → 300 → 150) + min floor 시 graceful bail!.
  • ask_multi_hop step 8.5 hook 의 callsite 수정: hypothesis-side truncate hook + explicit match + return self.refuse_nli_model_unavailable(...) 패턴 (round-2 plan critic CRITICAL #1 closure: ? 사용 금지 — wire error.v1 으로 빠지면 graceful fallback 약속 위반).
  • SpyNliVerifier 신규 helper (closure-based, 2-arg constructor: score_fn + token_count_fn).
  • 신규 §5.3 의 3 mock multi-hop test: long_en_synth_answer_truncated_before_nli_call (Right direction pin) + long_kr_synth_answer_retries_with_smaller_budget (KR safety + retry count) + unrelenting_token_overflow_falls_through_to_unavailable (graceful fallback).
  • 신규 §5.2 의 4 pure-fn boundary test (truncate_chars) — pipeline.rs::#[cfg(test)] mod tests.

tasks/HOTFIXES.md

신규 dated entry ## 2026-05-26 — S3 NLI unavailable — hypothesis truncate + token-count fallback (date-top convention, HOTFIX #15 직후, fb-41 우산 외부). Symptom / Root cause / Action / Amends 4-block. HOTFIX 번호 부여 안 함 (production behavior fix, fixture-issue HOTFIX #15 와 다름).

OMC team review process

Phase Reviewers Rounds Final verdict
spec analyst → critic + verifier 4 APPROVE (critic) / APPROVE (verifier)
plan planner → critic-plan + verifier-plan 3 ACCEPT_WITH_RESERVATIONS (critic) / APPROVE (verifier)
implementation executor 1 DONE

핵심 발견 (round-by-round):

  • Round-1 critic: H1 evidence chain 분리 + H2 Option B fabricated cons + H3 KR safety gap (1200 KR chars × 1 char/token = 1200 tokens >> 512 cap, fix 가 KR 에서 silent NO-OP) + H4 KR dogfood retest. 한국어 사용자 (= 본인) 의 fix 무용 가능성 발견.
  • Round-2 critic: RC1 NliVerifier trait method 누락 + RC2 SpyNliVerifier struct 결함 + RM1-4 self-consistency. RC1-residual subtle Rust trait dispatch issue — inherent impl 이면 vtable 미등록 → production silent NO-OP.
  • Round-1 plan critic: CRITICAL #1 ? propagation 모순 — graceful fallback 약속 정면 위반. 4 round spec review 가 missed 한 control-flow trace 결함. + MAJOR #2-4 (file count / helper 부재 / step 11 ambiguity).
  • Round-2 plan verifier: Gap 1 vtable dispatch test 부재 — Test 7 concrete type 호출이라 RC1-residual 버그 catch 못함. + Gap 2 dogfood config vacuous 위험.

검증

  • cargo test -p kebab-nli -j 1 → 11/11 pass + 7 ignored default skip.
  • cargo test -p kebab-rag -j 1 → 전체 pass (3 new mock multi_hop + 4 new boundary + 회귀 0).
  • cargo test --workspace --no-fail-fast -j 11313 pass (+7 new), 0 failed. 회귀 0 (HOTFIX #15 이미 fixed, no remaining flaky).
  • cargo clippy --workspace --all-targets -j 1 -- -D warnings clean (type_complexity allow on Arc aliases — closure-based spy 필수).

Manual smoke + Dogfood retest (사용자 머지 후)

  • cargo test -p kebab-nli --test inference -- --ignored --test-threads=1 — 신규 2 ignored test 의 manual smoke (network + model download + vtable dispatch RC1-residual pin).
  • dogfood EN + KR retest (spec §5.4 verbatim) — nli_threshold > 0 guard 사전 확인 + S3 EN + KR query retest → nli_verification_failed 또는 null (NOT nli_model_unavailable) 확인.

비범위

  • Token-count 기반 premise budget — MAX_NLI_PREMISE_CHARS = 1600 도 KR-heavy chunks 에서 동일 risk. 별 task §6 #1 후보 (v0.18.x candidate).
  • README/SMOKE 의 tracing 진단 안내 (RUST_LOG=debug + log file path) — 별 docs task §6 #7.
  • RefusalReason::NliInputTooLong 신규 variant — 별 wire schema task §6 #3.
  • gemma3:4b 의 4500-char 답변 자체 억제 — 별 LLM quality task §6 #6.

시험 항목 (Test Plan)

  • cargo test --workspace -j 1 — 1313 pass, 0 failed.
  • cargo clippy --workspace --all-targets -j 1 -- -D warnings clean.
  • kebab-nli trait extension + OnnxNliVerifier trait impl override (RC1-residual pin via vtable dispatch test).
  • kebab-rag retry helper + explicit match + return refuse pattern (CRITICAL #1 closure).
  • SpyNliVerifier helper + 3 mock multi-hop tests + 4 boundary tests.
  • HOTFIXES.md 신규 dated entry.
  • Wire schema / Cargo.toml version 0 변경.
  • Manual --ignored smoke (사용자 또는 후속 dogfood task).
  • Dogfood EN + KR retest (사용자 머지 후).

Assisted-by: Claude Code

## 요약 S3 dogfood query 의 `nli_model_unavailable` consistent fail (313s) 의 root cause = mDeBERTa-v3 tokenizer 의 `TruncationStrategy::OnlyFirst` + 949-token hypothesis. hypothesis 단독이 max_length cap (512) 을 단독 초과 → premise 를 0 까지 잘라도 tokenizer 가 fit 불가 → wire `nli_model_unavailable` 로 over-classified. Fix Option A — char-budget + token-count fallback retry + RC1-residual trait dispatch 정합. KR safe (token-count retry path) + graceful fallback (regression 0). 설계: docs/superpowers/specs/2026-05-26-s3-nli-model-unavailable-diagnose-spec.md (4 round APPROVE) 계획: docs/superpowers/plans/2026-05-26-s3-nli-model-unavailable-diagnose-plan.md (3 round ACCEPT) ## 변경 사항 ### kebab-nli - **`NliVerifier` trait 확장**: `hypothesis_token_count(&str) -> Result<usize>` method 추가 + default impl `Ok(0)` (backward-compat for `MockNliVerifier`). - **`OnnxNliVerifier::HYPOTHESIS_TOKEN_BUDGET = 256`** inherent const. - **`OnnxNliVerifier::hypothesis_token_count` override** — *trait impl block 안* 에 위치 (round-3 critic RC1-residual closure: inherent block 이면 vtable 미등록 → `&dyn NliVerifier` dispatch 시 default `Ok(0)` 호출 → KR silent NO-OP). - 신규 ignored test 2 — `score_long_en_hypothesis_returns_err_without_pipeline_truncation` + `hypothesis_token_count_dispatches_correctly_via_dyn_trait` (vtable dispatch pin via `let v_dyn: &dyn NliVerifier = &v;`). ### kebab-rag - **`MAX_NLI_HYPOTHESIS_CHARS_INITIAL = 1200`** + **`MAX_NLI_HYPOTHESIS_CHARS_MIN = 150`** const. - **`pub(crate) fn truncate_chars(s, budget) -> (String, bool)`** pure-fn — chars-only truncation arithmetic. - **`pub fn truncate_hypothesis_for_nli_with_budget(verifier, hypothesis)`** retry helper — char budget 절반화 (1200 → 600 → 300 → 150) + min floor 시 graceful `bail!`. - **`ask_multi_hop` step 8.5 hook 의 callsite 수정**: hypothesis-side truncate hook + explicit `match` + `return self.refuse_nli_model_unavailable(...)` 패턴 (round-2 plan critic CRITICAL #1 closure: `?` 사용 금지 — wire `error.v1` 으로 빠지면 graceful fallback 약속 위반). - `SpyNliVerifier` 신규 helper (closure-based, 2-arg constructor: score_fn + token_count_fn). - 신규 §5.3 의 3 mock multi-hop test: `long_en_synth_answer_truncated_before_nli_call` (Right direction pin) + `long_kr_synth_answer_retries_with_smaller_budget` (KR safety + retry count) + `unrelenting_token_overflow_falls_through_to_unavailable` (graceful fallback). - 신규 §5.2 의 4 pure-fn boundary test (truncate_chars) — `pipeline.rs::#[cfg(test)] mod tests`. ### tasks/HOTFIXES.md 신규 dated entry `## 2026-05-26 — S3 NLI unavailable — hypothesis truncate + token-count fallback` (date-top convention, HOTFIX #15 직후, fb-41 우산 외부). Symptom / Root cause / Action / Amends 4-block. HOTFIX 번호 부여 안 함 (production behavior fix, fixture-issue HOTFIX #15 와 다름). ## OMC team review process | Phase | Reviewers | Rounds | Final verdict | |---|---|---|---| | spec | analyst → critic + verifier | 4 | APPROVE (critic) / APPROVE (verifier) | | plan | planner → critic-plan + verifier-plan | 3 | ACCEPT_WITH_RESERVATIONS (critic) / APPROVE (verifier) | | implementation | executor | 1 | DONE | 핵심 발견 (round-by-round): - **Round-1 critic**: H1 evidence chain 분리 + H2 Option B fabricated cons + **H3 KR safety gap** (1200 KR chars × 1 char/token = 1200 tokens >> 512 cap, fix 가 KR 에서 silent NO-OP) + H4 KR dogfood retest. 한국어 사용자 (= 본인) 의 fix 무용 가능성 발견. - **Round-2 critic**: RC1 NliVerifier trait method 누락 + RC2 SpyNliVerifier struct 결함 + RM1-4 self-consistency. **RC1-residual subtle Rust trait dispatch issue** — inherent impl 이면 vtable 미등록 → production silent NO-OP. - **Round-1 plan critic**: **CRITICAL #1 `?` propagation 모순** — graceful fallback 약속 정면 위반. 4 round spec review 가 missed 한 control-flow trace 결함. + MAJOR #2-4 (file count / helper 부재 / step 11 ambiguity). - **Round-2 plan verifier**: Gap 1 vtable dispatch test 부재 — Test 7 concrete type 호출이라 RC1-residual 버그 catch 못함. + Gap 2 dogfood config vacuous 위험. ## 검증 - `cargo test -p kebab-nli -j 1` → 11/11 pass + 7 ignored default skip. - `cargo test -p kebab-rag -j 1` → 전체 pass (3 new mock multi_hop + 4 new boundary + 회귀 0). - `cargo test --workspace --no-fail-fast -j 1` → **1313 pass (+7 new), 0 failed**. 회귀 0 (HOTFIX #15 이미 fixed, no remaining flaky). - `cargo clippy --workspace --all-targets -j 1 -- -D warnings` clean (type_complexity allow on Arc<dyn Fn> aliases — closure-based spy 필수). ## Manual smoke + Dogfood retest (사용자 머지 후) - `cargo test -p kebab-nli --test inference -- --ignored --test-threads=1` — 신규 2 ignored test 의 manual smoke (network + model download + vtable dispatch RC1-residual pin). - dogfood EN + KR retest (spec §5.4 verbatim) — `nli_threshold > 0` guard 사전 확인 + S3 EN + KR query retest → `nli_verification_failed` 또는 null (NOT `nli_model_unavailable`) 확인. ## 비범위 - Token-count 기반 *premise* budget — `MAX_NLI_PREMISE_CHARS = 1600` 도 KR-heavy chunks 에서 동일 risk. 별 task §6 #1 후보 (v0.18.x candidate). - README/SMOKE 의 tracing 진단 안내 (`RUST_LOG=debug` + log file path) — 별 docs task §6 #7. - `RefusalReason::NliInputTooLong` 신규 variant — 별 wire schema task §6 #3. - gemma3:4b 의 4500-char 답변 자체 억제 — 별 LLM quality task §6 #6. ## 시험 항목 (Test Plan) - [x] cargo test --workspace -j 1 — 1313 pass, 0 failed. - [x] cargo clippy --workspace --all-targets -j 1 -- -D warnings clean. - [x] kebab-nli trait extension + OnnxNliVerifier trait impl override (RC1-residual pin via vtable dispatch test). - [x] kebab-rag retry helper + explicit match + return refuse pattern (CRITICAL #1 closure). - [x] SpyNliVerifier helper + 3 mock multi-hop tests + 4 boundary tests. - [x] HOTFIXES.md 신규 dated entry. - [x] Wire schema / Cargo.toml version 0 변경. - [ ] Manual `--ignored` smoke (사용자 또는 후속 dogfood task). - [ ] Dogfood EN + KR retest (사용자 머지 후). Assisted-by: Claude Code
altair823 added 1 commit 2026-05-26 09:13:26 +00:00
S3 dogfood query 의 `nli_model_unavailable` consistent fail root cause = mDeBERTa-v3 tokenizer 의 `OnlyFirst` strategy + 949-token hypothesis. 기존 char-budget 단독 fix 의 KR-extreme density 미해결 → token-count fallback retry + RC1-residual trait dispatch 정합.

핵심 변경:
- kebab-nli::NliVerifier: `hypothesis_token_count(&str) -> Result<usize>` trait method 추가 (default `Ok(0)` backward-compat). `OnnxNliVerifier` 가 *trait impl block* 안에서 real mDeBERTa tokenize override — vtable 등록 보장 (round-3 critic RC1-residual closure).
- kebab-rag::pipeline: `MAX_NLI_HYPOTHESIS_CHARS_INITIAL = 1200` + `MAX_NLI_HYPOTHESIS_CHARS_MIN = 150` const + `pub(crate) fn truncate_chars` pure-fn + `pub fn truncate_hypothesis_for_nli_with_budget` retry helper (char budget 반감 retry, min floor 시 graceful unavailable). step 8.5 hook 의 callsite explicit `match` + `return self.refuse_nli_model_unavailable` 패턴 (`?` 금지 — round-2 plan critic CRITICAL #1 closure).
- SpyNliVerifier 신규 helper (closure score_fn + hypothesis_token_count_fn, 2-arg constructor).
- §5.1 의 2 ignored test (EN-long err + vtable dispatch RC1-residual pin) + §5.2 의 4 boundary test (truncate_chars) + §5.3 의 3 mock multi-hop test (long_en_grounded / long_kr_retries / unrelenting_fallback). +7 new tests (2 ignored default skip).
- tasks/HOTFIXES.md 신규 dated entry `## 2026-05-26 — S3 NLI unavailable ...` — Symptom / Root cause / Action / Amends 4-block.
- spec + plan (`docs/superpowers/{specs,plans}/2026-05-26-s3-nli-model-unavailable-diagnose-*.md`) — 4 round spec + 3 round plan OMC reviewer ACCEPT 산출물.

검증:
- cargo test -p kebab-nli -j 1 → 11/11 pass + 7 ignored default skip.
- cargo test -p kebab-rag -j 1 → 19+3+3+... 전체 pass + 3 new mock + 4 new boundary.
- cargo test --workspace --no-fail-fast -j 1 → **1313 pass (+7 new)**, 0 failed. 회귀 0 (HOTFIX #15 이미 fixed, no remaining flaky).
- cargo clippy --workspace --all-targets -j 1 -- -D warnings clean (type_complexity allow on Arc<dyn Fn> type aliases).

KR safe (token-count retry path) + graceful fallback (min floor 시 기존 unavailable wire 유지, regression 0). Wire 영향 없음 (additive trait method). Cargo bump 불필요.

Refs:
- spec: docs/superpowers/specs/2026-05-26-s3-nli-model-unavailable-diagnose-spec.md (4 round APPROVE — analyst → critic + verifier × 4 rounds)
- plan: docs/superpowers/plans/2026-05-26-s3-nli-model-unavailable-diagnose-plan.md (3 round ACCEPT — planner → critic-plan + verifier-plan × 3 rounds)

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

회차 1 — S3 NLI unavailable fix 검토.

OMC team s3-nli-unavailable-diagnose 의 4 round spec + 3 round plan review 누적 closure 결과 — 본 PR 의 코드가 spec + plan 의 검증된 design 정확 reflect.

칭찬 (산문):

  1. RC1-residual silent NO-OP 회피 명시적 pinOnnxNliVerifier::hypothesis_token_counttrait impl block 안 에 위치 + spec §5.1 Test 7 의 vtable dispatch (let v_dyn: &dyn NliVerifier = &v;) 가 inherent-only 배치 regression 시 deterministic fail. round-3 spec critic 가 발견한 Rust trait dispatch micro-semantic 결함이 production code 에 자동 정합.

  2. ? propagation 금지의 graceful fallback 약속 보존 — round-2 plan critic 가 발견한 CRITICAL #1: ? 사용 시 wire error.v1 으로 빠짐 (graceful fallback 약속 위반). 본 PR 의 callsite 가 explicit match { Ok(x) => x, Err(e) => return self.refuse_nli_model_unavailable(...) } 패턴 + 기존 v.score() Err 분기와 대칭. wire answer.v1 + NliModelUnavailable refusal 유지 보장.

  3. KR safety token-count fallback retry — round-1 critic 가 발견한 KR-extreme density (1200 chars × 1 char/token > 512 cap) 가 char budget 절반화 retry (1200 → 600 → 300 → 150) + min floor 시 graceful fallback 으로 해결. 사용자 (한국어 화자) 의 KR corpus 사용 시 fix 가 silent NO-OP 가 안 됨.

  4. SpyNliVerifier 의 closure-based 2-arg constructor — round-2 verifier 가 발견한 Caveat (struct field-in-impl-block + Arc field mutation 불가) 모두 해결. new<F, G>(score_fn, count_fn) 패턴이 test 의 3 mock 시뮬레이션 (EN long / KR retries / unrelenting fallback) 모두 cover.

  5. NliVerifier trait 의 default impl backward-compathypothesis_token_count default Ok(0) 가 기존 MockNliVerifier 무수정 통과 보장. round-2 verifier Caveat 2 closure 의 zero-churn 정합.

  6. HOTFIXES.md 의 date-top convention + sibling pattern## 2026-05-26 — S3 NLI unavailable ... level-1 dated entry 가 HOTFIX #15 의 sibling. HOTFIX 번호 부여 안 함 (production behavior fix 의 정확한 분류).

  7. 9 test 의 multi-layer regression pin — §5.1 vtable dispatch (코드 수준 RC1-residual pin) + §5.2 pure-fn (산술 회귀) + §5.3 mock multi-hop (integration retry path + Right direction + graceful fallback). 모든 critical risk 가 deterministic test 로 enforced.

추가 actionable 없음. 1313 tests pass + 0 failed + clippy clean. Wire / Cargo 영향 0.

머지 OK. 머지 후 dogfood EN + KR retest 진행 — spec §5.4 의 사전 guard (nli_threshold > 0) 확인 후 S3 본래 케이스 + KR long-answer 시뮬레이션 → nli_model_unavailable 부재 + 실 nli_score finite float 확인.

다음 step: 머지 후 작업 2 (architectural defer items — kebab-normalize 흡수 / Extractor dispatch unification / kebab-source-fs dep lightening).

회차 1 — S3 NLI unavailable fix 검토. OMC team `s3-nli-unavailable-diagnose` 의 4 round spec + 3 round plan review 누적 closure 결과 — 본 PR 의 코드가 spec + plan 의 검증된 design 정확 reflect. 칭찬 (산문): 1. **RC1-residual silent NO-OP 회피 명시적 pin** — `OnnxNliVerifier::hypothesis_token_count` 가 *trait impl block 안* 에 위치 + spec §5.1 Test 7 의 vtable dispatch (`let v_dyn: &dyn NliVerifier = &v;`) 가 inherent-only 배치 regression 시 deterministic fail. round-3 spec critic 가 발견한 Rust trait dispatch micro-semantic 결함이 production code 에 자동 정합. 2. **`?` propagation 금지의 graceful fallback 약속 보존** — round-2 plan critic 가 발견한 CRITICAL #1: `?` 사용 시 wire `error.v1` 으로 빠짐 (graceful fallback 약속 위반). 본 PR 의 callsite 가 explicit `match { Ok(x) => x, Err(e) => return self.refuse_nli_model_unavailable(...) }` 패턴 + 기존 `v.score()` Err 분기와 *대칭*. wire `answer.v1 + NliModelUnavailable refusal` 유지 보장. 3. **KR safety token-count fallback retry** — round-1 critic 가 발견한 KR-extreme density (1200 chars × 1 char/token > 512 cap) 가 char budget 절반화 retry (1200 → 600 → 300 → 150) + min floor 시 graceful fallback 으로 해결. 사용자 (한국어 화자) 의 KR corpus 사용 시 fix 가 silent NO-OP 가 안 됨. 4. **SpyNliVerifier 의 closure-based 2-arg constructor** — round-2 verifier 가 발견한 Caveat (struct field-in-impl-block + Arc<Self> field mutation 불가) 모두 해결. `new<F, G>(score_fn, count_fn)` 패턴이 test 의 3 mock 시뮬레이션 (EN long / KR retries / unrelenting fallback) 모두 cover. 5. **NliVerifier trait 의 default impl backward-compat** — `hypothesis_token_count` default `Ok(0)` 가 기존 `MockNliVerifier` 무수정 통과 보장. round-2 verifier Caveat 2 closure 의 zero-churn 정합. 6. **HOTFIXES.md 의 date-top convention + sibling pattern** — `## 2026-05-26 — S3 NLI unavailable ...` level-1 dated entry 가 HOTFIX #15 의 sibling. HOTFIX 번호 부여 안 함 (production behavior fix 의 정확한 분류). 7. **9 test 의 multi-layer regression pin** — §5.1 vtable dispatch (코드 수준 RC1-residual pin) + §5.2 pure-fn (산술 회귀) + §5.3 mock multi-hop (integration retry path + Right direction + graceful fallback). 모든 critical risk 가 deterministic test 로 enforced. 추가 actionable 없음. 1313 tests pass + 0 failed + clippy clean. Wire / Cargo 영향 0. 머지 OK. 머지 후 dogfood EN + KR retest 진행 — spec §5.4 의 사전 guard (`nli_threshold > 0`) 확인 후 S3 본래 케이스 + KR long-answer 시뮬레이션 → `nli_model_unavailable` 부재 + 실 `nli_score` finite float 확인. 다음 step: 머지 후 작업 2 (architectural defer items — kebab-normalize 흡수 / Extractor dispatch unification / kebab-source-fs dep lightening).
altair823 merged commit b02ac8200e into main 2026-05-26 09:17:15 +00:00
altair823 deleted branch fix/s3-nli-model-unavailable-diagnose 2026-05-26 09:17:16 +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#184