Skip to content

Mark KeyViz fanout design implemented#1079

Open
bootjp wants to merge 6 commits into
mainfrom
design/keyviz-fanout-implemented
Open

Mark KeyViz fanout design implemented#1079
bootjp wants to merge 6 commits into
mainfrom
design/keyviz-fanout-implemented

Conversation

@bootjp

@bootjp bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Author: bootjp

Summary

  • Promote the KeyViz cluster fan-out design doc from proposed to implemented.
  • Record the current implementation evidence and update references to the implemented doc name.

Validation

  • go test ./internal/admin
  • cd web/admin && npm test -- --run src/api/client.test.ts src/pages/KeyViz.test.ts
  • git diff --check

Summary by CodeRabbit

  • 新機能
    • KeyVizのクラスター・ファンアウト(Phase 2-C)が実装済みとして反映され、返却内容にfanout情報・競合表示が加わりました。
    • クラスタービューで、劣化状態・不一致(セル単位)・カウンターを反映した表示が利用できます。
  • テスト
    • gRPCシーケンステストの反復回数を調整しました。
  • ドキュメント
    • 設計書ステータス表記と参照リンクを実装版へ更新しました。

@bootjp

bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@bootjp, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ffdd9c0b-edd6-4f09-b8b3-0f8f4dc8e302

📥 Commits

Reviewing files that changed from the base of the PR and between f5cb41c and ae59fa7.

📒 Files selected for processing (4)
  • adapter/grpc_test.go
  • docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md
  • docs/design/2026_04_28_implemented_keyviz_adapter_labels.md
  • docs/design/2026_06_23_proposed_scaling_roadmap.md
📝 Walkthrough

Walkthrough

KeyViz Cluster Fan-outの実装済み仕様として、Raft識別子によるマージ、競合情報、wire形式を文書化し、関連参照を実装版へ統一した。整合性テストの反復回数も定数化して更新した。

Changes

KeyVizファンアウト実装仕様

Layer / File(s) Summary
実装済みマージ・wire仕様の文書化
docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md
ステータスをimplementedへ変更し、Raft識別子による重複排除・合算、セル単位の競合、厳密な列統合、fanout応答形式、実装状況を記載した。
関連参照の実装版統一
docs/design/*, internal/admin/keyviz_*.go, main.go, scripts/rolling-update.env.example
提案版KeyVizファンアウト設計ドキュメントへの参照を、実装版ドキュメントへの参照へ変更した。
整合性テスト反復回数の整理
adapter/grpc_test.go, adapter/test_util.go
シーケンス整合性テストの反復回数をgrpcSequenceIterations定数へ置き換え、関連コメントを更新した。

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • bootjp/elastickv#687: KeyVizのfanout情報とセル単位の競合表示をSPAへ反映する変更が関連する。
  • bootjp/elastickv#720: RaftグループIDとリーダー項をKeyVizのwire・集約処理へ渡す変更が関連する。
  • bootjp/elastickv#824: conflicts[]によるセル単位の競合表現とSPA表示の変更が関連する。
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed KeyViz fanout designの提案版から実装版への更新を端的に表しており、変更内容の主旨と一致しています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the status of the KeyViz cluster fan-out design document from 'proposed' to 'implemented' and updates its implementation section to reflect the completed Phase 2-C MVP. It also renames all references to this design document across other design files, source code comments, and configuration templates to match the new filename. I have no feedback to provide as there are no review comments.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

`warnings` is a per-node array of structured non-fatal signals.
Today the only emitter is `catalog_divergence` (§4.4 — `Start`/`End`
disagree across nodes for the same `BucketID`). Adding a new

P3 Badge Stop documenting missing catalog-divergence warnings

Now that this document is promoted to implemented, this wire contract is misleading for clusters whose peers disagree on a bucket's Start/End: FanoutNodeStatus only serializes node, ok, and error, and repo search shows no catalog_divergence emitter, so clients will never receive the documented warnings array. Either the warning field/emitter needs to exist, or this implemented doc should not promise it.


All nodes use `keyvizStep` (default 1 s). The aggregator **bucket-
aligns** column timestamps to the nearest `keyvizStep` boundary
before pivoting, so two nodes whose flush goroutines fire fractions

P3 Badge Stop claiming fan-out aligns skewed columns

For nodes whose flush ticks are offset by sub-step jitter, this implemented doc promises the aggregator buckets timestamps to the keyvizStep boundary, but the current merge still uses exact ColumnUnixMs values (mergeKeyVizMatrices calls unionColumns, which keys by the raw timestamp, and Flush stamps s.now()). Those peers will produce adjacent columns instead of one merged window, so the implemented design should either describe the actual exact-timestamp behavior or add the alignment.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +367 to +371
Phase 2-C+ remains future work: extend the matrix rows with
`raftGroupID` and `leaderTerm`, replace §4.2's max-merge with the
canonical `(bucketID, raftGroupID, leaderTerm, windowStart)` merge,
and promote `conflict` from per-row to per-cell. That follow-up is
explicitly outside this Phase 2-C implemented slice.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Remove stale Phase 2-C+ future-work claim

This new implementation-status paragraph is already stale for the current tree: Phase 2-C+ is not future work here. KeyVizRow already carries raft_group_ids, leader_terms, and per-cell conflicts, mergeKeyVizMatrices performs the (bucketID, raftGroupID, leaderTerm, column) write merge, and docs/design/2026_05_25_implemented_keyviz_per_cell_conflict.md records that PR-3d is implemented. Leaving this as a future follow-up will send future reviewers/operators to plan an already-shipped wire shape instead of the implemented 2-C+ docs.

Useful? React with 👍 / 👎.

Comment on lines +362 to +364
- `internal/admin/keyviz_fanout_test.go`,
`internal/admin/keyviz_handler_test.go`, and SPA tests cover the
server and UI behavior while preserving the default single-node

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Correct the claimed SPA coverage

This overstates the current test evidence: web/admin/src/pages/KeyViz.test.ts only exercises parseBucketID, and web/admin/src/api/client.test.ts does not cover the fanout shape, degraded banner, conflict hatching, or cluster-view counter. Since this status block is now the implemented evidence for the feature, claiming SPA tests cover the UI behavior can cause future reviewers to skip adding the missing coverage or misjudge regressions in those paths.

Useful? React with 👍 / 👎.

@bootjp

bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

Addressed the latest review findings and CI blocker.

  • Updated the implemented KeyViz fan-out doc to match the current wire shape: no warnings field, exact column_unix_ms union, implemented Phase 2-C+ group/term merge, and accurate SPA test coverage.
  • Stabilized the grpc sequence tests that caused the failing test (ubuntu-latest) run by replacing the 9999-iteration loops with a bounded shared iteration count.

Verification:

  • git diff --check
  • go test ./internal/admin
  • go test -race ./adapter -run 'Test_consistency_satisfy_write_after_read_sequence|Test_grpc_transaction' -count=1 -v -timeout=3m\n- go test -race ./adapter -count=1 -timeout=8m\n\n@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: de739473d4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +362 to +365
Phase 2-C+ is also implemented: matrix rows carry `raft_group_ids`,
`leader_terms`, and per-cell `conflicts`; write merging uses the
canonical `(bucketID, raftGroupID, leaderTerm, column)` identity and
falls back to the legacy max-merge when a peer omits the group/term

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Reconcile the implemented merge-rule contract

When this promoted implemented design is used as the source of truth, this new Phase 2-C+ status note conflicts with the still-unchanged scope and merge-rule sections above: §2.2 still says raftGroupID/leaderTerm are not built and §4.2/§4.3 still describe write counters as max-merge, while the code now uses the group/term dedupe described here. Please update the earlier contract sections instead of appending a contradictory status note, or future work/tests can follow the obsolete max-merge behavior.

Useful? React with 👍 / 👎.

Comment on lines 310 to 311
The field is **always present** on every row in the response — even
when fan-out is disabled (single-node mode), `conflict` defaults to

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Do not promise false conflicts are serialized

For the normal no-conflict path described here, KeyVizRow.Conflict is tagged json:"conflict,omitempty" in internal/admin/keyviz_handler.go, so false values are omitted rather than emitted. Clients following this implemented wire contract could incorrectly depend on "conflict" in row being stable in single-node or clean fan-out responses; please either remove the “always present” guarantee or change the struct tag/encoder behavior to match it.

Useful? React with 👍 / 👎.

Comment on lines +243 to +246
divergence the operator should investigate; the current wire
contract does not emit a structured catalog-divergence warning, so
operators must correlate the row identity with peer status and the
route catalog when investigating that condition.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Document row metadata as local-first

For a symmetric list where node B's --keyvizFanoutNodes starts with node A, this implemented doc still directs operators to reason from the lowest-indexed configured node, but KeyVizFanout.Run prepends the local matrix before peer matrices and mergeRowInto copies Start/End only when a bucket is first seen, so node B will publish B's row metadata whenever it has the row. Operators investigating catalog divergence from this doc can inspect the wrong node/order; please state the local-first/then-peer-list behavior or change the merge to match the documented ordering.

Useful? React with 👍 / 👎.

@bootjp

bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

@codex review

対応しました。

  • Phase 2-C+ の raftGroupID / leaderTerm identity merge を、scope / merge-rule / bytes counter / wire format の各節に反映しました。
  • 古い「write は max-merge のみ」「group/term extension は未実装」という記述を、実装済みの group/term dedupe + legacy fallback 契約へ更新しました。
  • row metadata の取得順を、実装どおり local-first、その後 peer list order と明記しました。
  • conflictomitempty により false では省略されるため、常時出力保証を削除し、absent は false と扱う契約に直しました。

検証:

  • go test ./internal/admin -run 'TestMergeKeyVizMatrices|TestKeyVizFanout' -count=1 -timeout=180s
  • git diff --check
  • git verify-commit HEAD

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md (1)

2-2: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

implemented 化後の将来形を残さないでください。

Line 2で実装済みに昇格していますが、§6には「同じPRまたは直後のfollow-upで実装可能」という提案段階の文章が残っています。実装済みの挙動を記録する過去形へ更新してください。

As per coding guidelines, 「*_implemented_*.md は全マイルストーン実装済みの as-built record として保持する」必要があります。

🤖 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 `@docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md` at line 2,
Update §6 in the implemented design document to describe the completed behavior
in the past tense, removing future-state or proposal wording such as
implementation in the same PR or a follow-up. Preserve the document as an
as-built record with all milestones represented as implemented.

Source: Coding guidelines

🤖 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 `@docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md`:
- Around line 205-208: Update the documentation section describing aggregation
across distinct leaderTerm values to explicitly define the cell’s wire identity:
each leader_terms[j] must contain the maximum-contributing term selected by
resolveWrite(), while legacy fallback cases may use 0. Clarify that this
identity is separate from summing all per-term contributions.
- Around line 226-229: DNS aliases for the local node can bypass
isSelfFanoutNode and cause local rows to be merged twice. Update the
KeyVizFanout.Run/--keyvizFanoutNodes design contract to explicitly mark
self-referencing DNS aliases as unsupported, instructing callers not to
configure them unless self-node normalization and deduplication are implemented.

---

Outside diff comments:
In `@docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md`:
- Line 2: Update §6 in the implemented design document to describe the completed
behavior in the past tense, removing future-state or proposal wording such as
implementation in the same PR or a follow-up. Preserve the document as an
as-built record with all milestones represented as implemented.
🪄 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

Run ID: 4ddbe630-1baa-4304-b038-9551adc42678

📥 Commits

Reviewing files that changed from the base of the PR and between ce334d1 and f5cb41c.

📒 Files selected for processing (3)
  • adapter/grpc_test.go
  • adapter/test_util.go
  • docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md

Comment thread docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md
Comment thread docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f5cb41ce51

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +358 to +362
Phase 2-C+ is also implemented: matrix rows carry `raft_group_ids`,
`leader_terms`, and per-cell `conflicts`; write merging uses the
canonical `(bucketID, raftGroupID, leaderTerm, column)` identity and
falls back to the legacy max-merge when a peer omits the group/term
identity.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Update the checklist to match implemented merge

This section now states the Phase 2-C+ group/term merge is implemented, but the Five-lens checklist immediately below still describes the old conservative max-merge behavior and says the §9.1 canonical rule is only a future contract. Since this file is now the implemented reference, readers of the checklist get the opposite consistency contract for leader-term deployments; please update §8 to describe the current group/term sum plus legacy fallback.

Useful? React with 👍 / 👎.

Comment on lines +69 to +70
non-zero source omits group/term identity, the cell falls back
to the Phase 2-C legacy max-merge so mixed-version peers never

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Clarify mixed-version fallback in rollout notes

This fallback is the mixed-version behavior, but the rollout note earlier in this design still says an old node that omits new fields is treated as the merge-rule identity. In actual mergeKeyVizMatrices, missing raft_group_ids/leader_terms on a non-zero cell forces the legacy max-merge path, so mixed-version clusters may not get canonical per-term summation; please align the rollout note to avoid promising exact group/term dedupe during upgrades.

Useful? React with 👍 / 👎.

write hot path (`observeMutation`, `kv/sharded_coordinator.go:1841-1846`),
with proposed extensions for cluster fan-out
(`2026_04_27_proposed_keyviz_cluster_fanout.md`),
(`2026_04_27_implemented_keyviz_cluster_fanout.md`),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Mark implemented KeyViz extensions as shipped

After updating this reference to the implemented fan-out design, the surrounding roadmap still categorizes cluster fan-out together with implemented subrange sampling, hot-key top-K, and per-cell conflict as “proposed extensions.” That leaves the scaling roadmap contradicting the linked documents' status and can mislead readers trying to distinguish shipped KeyViz signals from future work; please split shipped items from genuinely proposed extensions or update the wording.

Useful? React with 👍 / 👎.

@bootjp

bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

@codex review

対応しました。

  • implemented KeyViz fan-out doc の §6 を as-built 記録へ更新し、提案段階の future/follow-up 表現を削除しました。
  • mixed-version fallback を実装どおりに明記しました。identity 欠落セルは legacy max-merge になり、全 contributor が group/term identity を送るまで exact per-term summation にはなりません。
  • leader_terms[j] / raft_group_ids[j]resolveWrite() が選んだ max-contributing identity であり、値そのものは distinct terms の合算であることを明記しました。fallback では max contributor の identity、未知 identity 由来なら 0 になります。
  • self を DNS alias / reverse-proxy alias で指定する構成は未対応として明記しました。local matrix と alias 経由の local fetch が二重 merge され得るためです。
  • Five-lens checklist と scaling roadmap の KeyViz shipped/proposed 区分を実装済み状態に合わせました。

検証:

  • go test ./internal/admin -run 'TestMergeKeyVizMatrices|TestKeyVizFanout' -count=1 -timeout=180s
  • rg -n "same PR|immediate follow-up|A follow-up will|The follow-up|conservative max-merge|once we extend|self.*harmless|proposed extensions for cluster fan-out|with proposed extensions" docs/design/2026_04_27_implemented_keyviz_cluster_fanout.md docs/design/2026_06_23_proposed_scaling_roadmap.md
  • git diff --check
  • git verify-commit HEAD

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0b825d735c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread adapter/grpc_test.go Outdated
_ "google.golang.org/grpc/health"
)

const grpcSequenceIterations = 256

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore the long sequence coverage

This new shared constant cuts both gRPC sequence consistency loops from 9,999 iterations to 256. In the normal CI/full-test path, these are the only long-running write-after-read and transactional put/get/delete sequence checks in this file, so regressions that only surface after many repeated operations or during mid-loop Raft churn are now much less likely to be exercised. Please keep the previous iteration count for the full test, or gate the shorter count behind an explicit short/fast mode.

Useful? React with 👍 / 👎.


- Phase 2-C (current): `(bucketID, raftGroupID, leaderTerm,
windowStart)` per design `2026_04_27_proposed_keyviz_cluster_fanout.md`
windowStart)` per design `2026_04_27_implemented_keyviz_cluster_fanout.md`

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Align label merge text with implemented fanout rules

This updated reference now points readers at the implemented fan-out design, whose §4 says writes use (bucketID, raftGroupID, leaderTerm, column) dedupe/sum with a legacy fallback, but this same section still says below that “writes still max-with-conflict” and only the bucketID shape changes. Anyone following the adapter-label design for fan-out interactions would preserve the old max-merge semantics and miss the shipped per-term summation/fallback behavior, so the surrounding merge-rule text should be updated with the link.

Useful? React with 👍 / 👎.

milliseconds — i.e. `time.Duration(--keyvizStep) / time.Millisecond`.
The wire form already carries timestamps as `column_unix_ms` so
millisecond-quantum arithmetic falls out naturally.
All nodes use `keyvizStep` (default 1 s), but the implemented

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Correct the KeyViz step default in the as-built doc

This as-built section still says the keyvizStep default is 1 second, but the shipped default is keyviz.DefaultStep = 60 * time.Second and the --keyvizStep flag uses that value. Operators relying on the implemented design will expect 1-second columns and may misread retention/window sizing or fan-out column alignment; please update this to the actual 60-second default or avoid hard-coding it here.

Useful? React with 👍 / 👎.

@bootjp

bootjp commented Jul 13, 2026

Copy link
Copy Markdown
Owner Author

@codex review

対応しました。

  • gRPC sequence tests は通常実行で 9999 iteration を維持し、testing.Short() のときだけ 256 iteration に短縮するように戻しました。
  • adapter-label design の fan-out merge 説明を、実装済みの (bucketID, raftGroupID, leaderTerm, windowStart) identity merge + legacy fallback に合わせました。
  • implemented fan-out design の keyvizStep default を実装どおり 60s に修正しました。

検証:

  • go test ./adapter -run 'Test_consistency_satisfy_write_after_read_sequence|Test_grpc_transaction' -count=1 -timeout=15m
  • go test -short ./adapter -run 'Test_consistency_satisfy_write_after_read_sequence|Test_grpc_transaction' -count=1 -timeout=5m
  • go test ./internal/admin -run 'TestMergeKeyVizMatrices|TestKeyVizFanout' -count=1 -timeout=180s
  • git diff --check
  • git verify-commit HEAD

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: ae59fa7b07

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@bootjp

bootjp commented Jul 14, 2026

Copy link
Copy Markdown
Owner Author

Current-head review refresh requested.

Latest head ae59fa7 already reconciles the KeyViz fanout merge contract:

  • cluster fanout §4.2/§4.3 describe group/term identity merge with legacy max-merge fallback
  • the Five-lens checklist describes max within one (bucketID, raftGroupID, leaderTerm, column) identity and sum across distinct terms
  • adapter-label §6 inherits the implemented fanout rule and keeps labels encoded into bucketID

CI is green on the latest head.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit: ae59fa7b07

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant