Skip to content

docs(design): promote admin dashboard from proposed to partial#675

Merged
bootjp merged 3 commits intomainfrom
docs/admin-design-partial
Apr 26, 2026
Merged

docs(design): promote admin dashboard from proposed to partial#675
bootjp merged 3 commits intomainfrom
docs/admin-design-partial

Conversation

@bootjp
Copy link
Copy Markdown
Owner

@bootjp bootjp commented Apr 26, 2026

Per docs/design/README.md's lifecycle convention, the admin dashboard design doc is now "partial":

Independent of the in-flight slice 2 PRs (#669/#673) and the docs PR (#674) — this rename only reflects what is already on main today, plus an "Implementation status" table mapping each phase to the PR it landed in.

What this PR changes

  • git mv the design doc from 2026_04_24_proposed_admin_dashboard.md to 2026_04_24_partial_admin_dashboard.md so its history follows
  • Add an "Implementation status" header table indexing each phase to the PRs that landed it
  • List the outstanding open items so future readers know what is still owed against the original proposal:
    • AdminForward acceptance criterion 5 (rolling-upgrade compat flag) — deferred
    • S3 object browser — explicitly out of scope per Section 2 Non-goals
    • TLS cert hot-reload — restart-to-rotate is the documented model

When the rolling-upgrade flag lands, the doc gets renamed once more to 2026_04_24_implemented_admin_dashboard.md per the README's lifecycle convention.

Per docs/design/README.md's lifecycle convention, the admin dashboard
design doc is now "partial" — P1 (DynamoDB CRUD + AdminForward),
P2 (S3 buckets), and P3 (React SPA) have all shipped on main, with
P4 (operator docs in #674) the only remaining phase, and even then
its TLS / role / CSRF deliverables are already live in P1.

Renamed via git mv so the history follows. Added an
"Implementation status" table at the top of the doc indexing each
phase to the PRs that landed it, plus an explicit list of the
outstanding open items (rolling-upgrade compat flag, S3 object
browser, TLS cert hot-reload) so future readers know what is still
owed against the original proposal.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 26, 2026

Warning

Rate limit exceeded

@bootjp has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 38 minutes and 3 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 38 minutes and 3 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ef86b410-8963-4cab-a9e9-79f196a05c02

📥 Commits

Reviewing files that changed from the base of the PR and between ee521be and 25ee3dc.

📒 Files selected for processing (1)
  • docs/design/2026_04_24_partial_admin_dashboard.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/admin-design-partial

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 and usage tips.

@bootjp
Copy link
Copy Markdown
Owner Author

bootjp commented Apr 26, 2026

@claude review

@claude
Copy link
Copy Markdown

claude Bot commented Apr 26, 2026

Claude finished @bootjp's task in 2m 14s —— View job


Code Review

  • Gather context and understand request
  • Read the changed design doc
  • Verify lifecycle convention compliance (CLAUDE.md)
  • Review implementation status table accuracy
  • Check outstanding items section
  • Post final review

Overall, this is a clean lifecycle promotion — git mv is correct, the file is in the right place, and the structure (implementation status table + outstanding items + next-rename note) is exactly what the README convention calls for. One factual inaccuracy in the status table and one DoD note are worth fixing before merge.

Issues

1. P2 marked ✅ shipped but #669 and #673 are still in flight (medium)

The implementation status table reads:

P2 — S3 bucket list/create/delete/ACL, DescribeTable | ✅ shipped | #658 (read-only slice 1), #669 (write paths slice 2a), #673 (AdminForward integration slice 2b)

But the PR description says:

"Independent of the in-flight slice 2 PRs (#669/#673) … this rename only reflects what is already on main today"

Those two PRs aren't on main yet, so P2 write paths have not shipped. The table should either mark P2 as 🟡 (like P4) and note what's still pending, or split the row to distinguish what has landed (#658) from what is in flight (#669, #673). Leaving it as ✅ shipped is factually incorrect and will mislead future readers about the actual state of main.

Fix this →

2. P1 row claims criteria 1–6 shipped, but criterion 5 is explicitly listed as deferred (minor)

The P1 row reads:

P1internal/admin/ skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 acceptance criteria 1–6) | ✅ shipped

Section 8 of the doc itself defines the P1 DoD as: "Section 3.3.2 の受け入れ基準 1〜6 がすべてグリーンでない限り…マージしない". Yet the outstanding items section states that criterion 5 (rolling-upgrade compat flag) was deferred. The P1 cell implying criteria 1–6 all shipped is inconsistent with the explicit deferral. Suggest changing "acceptance criteria 1–6" to "acceptance criteria 1–4, 6 (criterion 5 deferred — see outstanding items)" to keep the table honest. Fix this →

Cosmetic notes (not blocking)

  • The **Last updated:** field (line 6) isn't part of the header convention defined in docs/design/README.md — it only specifies Status, Author, and Date. The field is useful context but sets a precedent other docs won't follow. Consider dropping it and relying solely on git log for revision history, which is what the README's "propose date" note already prescribes.
  • The Status header is considerably more verbose than the README's Status: <Proposed | Partial | Implemented> pattern. The extended prose is readable, but if phases shift the line will drift out of date independently of the table below it. The table already captures the same information more precisely.

What's right

  • git mv used correctly — rename history is preserved.
  • The "When the rolling-upgrade flag lands, rename to _implemented_" closing note is exactly the right forward-looking pointer for future maintainers.
  • The outstanding items section is well-structured: each item clearly states what is deferred and why, which makes future triage easy.
  • The docs/design/README.md index requires no update since it describes conventions rather than listing individual files.

Copy link
Copy Markdown

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

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: 1a5b65f26e

ℹ️ 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".

| Phase | Status | Landed via |
|---|---|---|
| **P1** — `internal/admin/` skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 acceptance criteria 1–6) | ✅ shipped | #634, #635, #644, #648 |
| **P2** — S3 bucket list/create/delete/ACL, DescribeTable | ✅ shipped | #658 (read-only slice 1), #669 (write paths slice 2a), #673 (AdminForward integration slice 2b) |
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 Mark P2 as in-progress until all referenced PRs are merged

docs/design/README.md requires status to be assigned conservatively from code already on main, but this row marks P2 as ✅ shipped while citing #669/#673, which this change’s own context describes as still in flight. That makes the lifecycle table misleading for readers who rely on it to understand what is actually landed versus pending, so P2 should remain in-progress until those slices are merged.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

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

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 elastickv Admin Dashboard design document to reflect its current "Partial" implementation status, detailing the progress of phases P1 through P4 and listing outstanding items. Feedback from the reviewer points out several inaccuracies in the status table, specifically regarding the completion of P1 and P2, and identifies a typo where DescribeTable should be DescribeBucket.


| Phase | Status | Landed via |
|---|---|---|
| **P1** — `internal/admin/` skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 acceptance criteria 1–6) | ✅ shipped | #634, #635, #644, #648 |
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.

high

The table indicates that P1 is fully shipped including acceptance criteria 1–6. However, criterion 5 (rolling-upgrade flag) is listed as deferred. According to repository rules, when a design document identifies a significant operational risk, such as the inability to perform rolling upgrades, it must also detail potential mitigation strategies, like implementing a temporary bridge or proxy mode. Please update the document to include these strategies.

Suggested change
| **P1**`internal/admin/` skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 acceptance criteria 1–6) | ✅ shipped | #634, #635, #644, #648 |
| P1 — internal/admin/ skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 criteria 1–4, 6) | ✅ shipped | #634, #635, #644, #648 |
References
  1. When a design document identifies a significant operational risk, such as the inability to perform rolling upgrades, it must also detail potential mitigation strategies, like implementing a temporary bridge or proxy mode.

# elastickv Admin Dashboard Design

**Status:** Proposed
**Status:** Partial — P1, P2, and P3 of the implementation plan have shipped; P4 ships its operator documentation alongside this rename.
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.

medium

The summary status claims that P2 has shipped and that P4 documentation is shipping alongside this rename. However, the PR description notes that P2 write paths (#669, #673) and P4 documentation (#674) are still in flight. The summary should be updated to accurately reflect the current state of the main branch.

Suggested change
**Status:** Partial — P1, P2, and P3 of the implementation plan have shipped; P4 ships its operator documentation alongside this rename.
Status: Partial — P1 and P3 have shipped; P2 is partially live (read-only), and P4 (operator docs) is in flight via #674.

**Status:** Partial — P1, P2, and P3 of the implementation plan have shipped; P4 ships its operator documentation alongside this rename.
**Author:** bootjp
**Date:** 2026-04-24
**Last updated:** 2026-04-26 (renamed from `_proposed_` to `_partial_` after P1 + P2 + P3 landed)
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.

medium

The update note states that P2 has landed, which contradicts the 'in flight' status of the S3 write paths. It should be clarified that only the read-only portion of P2 has landed.

Suggested change
**Last updated:** 2026-04-26 (renamed from `_proposed_` to `_partial_` after P1 + P2 + P3 landed)
Last updated: 2026-04-26 (renamed from proposed to partial after P1, P3, and P2-read-only landed)

| Phase | Status | Landed via |
|---|---|---|
| **P1** — `internal/admin/` skeleton, auth, DynamoDB list/create/describe/delete, AdminForward (Section 3.3 acceptance criteria 1–6) | ✅ shipped | #634, #635, #644, #648 |
| **P2** — S3 bucket list/create/delete/ACL, DescribeTable | ✅ shipped | #658 (read-only slice 1), #669 (write paths slice 2a), #673 (AdminForward integration slice 2b) |
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.

medium

The status for P2 is marked as 'shipped', but the implementation of S3 write paths (create/delete/ACL) is still in flight via #669 and #673. Additionally, DescribeTable appears to be a typo for DescribeBucket, as the DynamoDB equivalent was already covered in P1. This row should be updated to reflect the partial status and correct the typo.

Suggested change
| **P2** — S3 bucket list/create/delete/ACL, DescribeTable | ✅ shipped | #658 (read-only slice 1), #669 (write paths slice 2a), #673 (AdminForward integration slice 2b) |
| P2 — S3 bucket list/create/delete/ACL, DescribeBucket | 🟡 partial | #658 (read-only slice 1); #669 (write paths), #673 (AdminForward) in flight |

Two findings from claude review #675:

1. **P2 was marked ✅ shipped but #669 / #673 are still in flight.**
   PR description correctly noted slices 2a/2b haven't merged, but
   the table cell read "✅ shipped". Future readers reading the
   table alone would conclude main has the S3 write paths today,
   which is wrong. Fixed: P2 is now 🟡 partial with the in-flight
   PRs explicitly called out, mirroring the P4 row's shape.

2. **P1 row claimed criteria 1–6 but criterion 5 is in the
   outstanding items as deferred.** The two cells contradicted each
   other. Updated P1 to "criteria 1–4 + 6 (criterion 5 deferred —
   see outstanding items)" so the table is consistent with the
   outstanding-items section below.

The cosmetic notes (Last-updated field, verbose Status header) are
left for a future cleanup; they are not factually wrong, only
non-conforming to the README convention. Calling them out as a
follow-up rather than baking the precedent into this doc.
@bootjp
Copy link
Copy Markdown
Owner Author

bootjp commented Apr 26, 2026

@claude review

7617daf addresses both review findings:

  1. P2 status: now 🟡 partial — read-only slice 1 (admin: read-only S3 bucket endpoints (P2 slice 1) #658) landed, write paths (admin: S3 bucket write endpoints (P2 slice 2a) #669) and AdminForward integration (admin: AdminForward integration for S3 admin ops (P2 slice 2b) #673) explicitly noted as in flight. Future readers reading the table alone won't get a wrong picture of main.
  2. P1 criteria: changed 1–61–4 + 6 (criterion 5 deferred — see outstanding items) so the table is consistent with the outstanding-items section below.

Cosmetic notes (Last-updated field, Status verbosity) noted for a future cleanup — they're not factually wrong, just non-conforming to the README convention.

@claude
Copy link
Copy Markdown

claude Bot commented Apr 26, 2026

Claude finished @bootjp's task in 47s —— View job


Code Review (follow-up)

  • Gather context and understand request
  • Read the updated design doc (7617daf)
  • Verify P2 status fix
  • Verify P1 criteria fix
  • Check for remaining issues
  • Post final review

Review of 7617daf

Both targeted fixes landed correctly:

One remaining inconsistency that the fix commit didn't catch:

Lines 3 and 6 still describe P2 as fully shipped.

Line 3:

Status: Partial — P1, P2, and P3 of the implementation plan have shipped; P4 ships its operator documentation alongside this rename.

Line 6:

Last updated: 2026-04-26 (renamed from _proposed_ to _partial_ after P1 + P2 + P3 landed)

Both of these were not updated when P2 was demoted to 🟡 in the table. A reader who only skims the header will get the same incorrect impression the table now correctly avoids. Fix this →

Everything else is in good shape. Once lines 3 and 6 are aligned with the table, the document is internally consistent and ready to merge.

bootjp added a commit that referenced this pull request Apr 26, 2026
…ane label

Three substantive findings + one nit from claude review on #674:

1. **HS256 key size (high)**: said "≥ 32 raw bytes / 44 base64 chars"
   but the validator in internal/admin/config.go enforces exactly 64
   raw bytes. A 32-byte key fails startup with a confusing error.
   Updated to "exactly 64 raw bytes — 88 base64 chars (standard
   padding) or 86 (RawURLEncoding)". Operators copying the doc into
   key-generation tooling now produce a key that actually validates.

2. **Audit log sample (moderate)**: showed method=POST / path=... /
   status=201 / duration=8.2ms — none of those fields are emitted.
   The actual slog entries use operation= + a resource key
   (bucket= or table=). Replaced the example with two real shapes
   (leader-direct and forwarded), so an operator building a log
   parser against the documented contract finds matches.

3. **Cross-reference link (moderate)**: line 249 used the
   _partial_ filename for the design doc, but #675 (the rename PR)
   hasnt landed yet. Point to _proposed_ (matches main today)
   with an inline note that the link will follow once #675 lands.
   The intro paragraph at line 5 already used _proposed_, so this
   removes the inconsistency claude flagged.

4. **"data-plane" label nit**: /admin/api/v1/cluster is an admin-
   plane endpoint, not data-plane. "data-plane" implied the
   DynamoDB / S3 / Redis ports. Replaced with "admin".

The cosmetic Last-updated / Status verbosity items on #675 are
tracked separately.
bootjp added a commit that referenced this pull request Apr 26, 2026
…ane label

Three substantive findings + one nit from claude review on #674:

1. **HS256 key size (high)**: said "≥ 32 raw bytes / 44 base64 chars"
   but the validator in internal/admin/config.go enforces exactly 64
   raw bytes. A 32-byte key fails startup with a confusing error.
   Updated to "exactly 64 raw bytes — 88 base64 chars (standard
   padding) or 86 (RawURLEncoding)". Operators copying the doc into
   key-generation tooling now produce a key that actually validates.

2. **Audit log sample (moderate)**: showed method=POST / path=... /
   status=201 / duration=8.2ms — none of those fields are emitted.
   The actual slog entries use operation= + a resource key
   (bucket= or table=). Replaced the example with two real shapes
   (leader-direct and forwarded), so an operator building a log
   parser against the documented contract finds matches.

3. **Cross-reference link (moderate)**: line 249 used the
   _partial_ filename for the design doc, but #675 (the rename PR)
   hasnt landed yet. Point to _proposed_ (matches main today)
   with an inline note that the link will follow once #675 lands.
   The intro paragraph at line 5 already used _proposed_, so this
   removes the inconsistency claude flagged.

4. **"data-plane" label nit**: /admin/api/v1/cluster is an admin-
   plane endpoint, not data-plane. "data-plane" implied the
   DynamoDB / S3 / Redis ports. Replaced with "admin".

The cosmetic Last-updated / Status verbosity items on #675 are
tracked separately.
Latest claude review on #675 flagged that lines 3 and 6 still
described P2 as fully shipped:

  Line 3: "P1, **P2**, and P3 of the implementation plan have shipped"
  Line 6: "after P1 + **P2** + P3 landed"

But the status table I added in 7617daf correctly marks P2 as
🟡 partial (read-only slice 1 in #658 landed; write paths #669
and #673 still in flight). The header prose contradicting the
table is exactly the kind of inconsistency that triggers the
rename to `_partial_` in the first place — readers skimming the
top of the doc would conclude P2 was done.

Rewrote the Status line and the parenthetical on Last updated to
match the table, calling out P1 + P3 as fully shipped, P2 as the
read-only slice only, and P4 as TLS/role/CSRF live with the
operator doc landing now. Pointed readers at the per-phase status
table for the breakdown.

No other changes; the table itself was already correct.
@bootjp
Copy link
Copy Markdown
Owner Author

bootjp commented Apr 26, 2026

@claude review

Aligned the header prose with the P2 partial status table:

  • Line 3 (Status) now reads "P1 and P3 have shipped in full; P2 has shipped its read-only slice with the write path still in flight" instead of claiming P2 shipped fully.
  • Line 6 (Last updated parenthetical) now says "after P1, P3, and the read-only slice of P2 landed" instead of "P1 + P2 + P3".

Status table itself was already correct; this is prose-only.

Latest commit: 25ee3dc.

@claude
Copy link
Copy Markdown

claude Bot commented Apr 26, 2026

Claude finished @bootjp's task in 1m 34s —— View job


Code Review (follow-up on 25ee3dc)

  • Gather context and understand request
  • Read the updated design doc
  • Verify lines 3 and 6 prose fixes
  • Check for remaining issues
  • Post final review

Review of 25ee3dc

The prose-only fix resolves the last remaining inconsistency flagged in the previous round.

Line 3 (Status header):

Before: P1, P2, and P3 of the implementation plan have shipped
After: P1 and P3 have shipped in full; P2 has shipped its read-only slice with the write path still in flight

✅ Now accurately reflects main. The "See the status table below for the per-phase breakdown" pointer is a nice touch.

Line 6 (Last updated parenthetical):

Before: after P1 + P2 + P3 landed
After: after P1, P3, and the read-only slice of P2 landed

✅ Consistent with line 3 and the table.

Full document consistency check

Running through all phase references across the doc:

Location Before Now
Line 3 Status header P2 fully shipped ❌ P2 read-only slice only ✅
Line 6 Last updated P1+P2+P3 landed ❌ P1+P3+read-only P2 ✅
Line 12 P1 table row criteria 1–6 ❌ criteria 1–4+6; crit 5 deferred ✅
Line 13 P2 table row ✅ shipped ❌ 🟡 partial with in-flight callouts ✅
Line 15 P4 table row (no change needed) 🟡 mostly shipped, #674 in flight ✅

The DescribeTable in the P2 row is not a typo — Section 8's original Japanese plan (line 347) explicitly includes DescribeTable in P2 scope alongside the S3 operations. Since P1's describe is the basic schema fetch and P2 scope adds the full stats/row-count detail per the API design in Section 4.1, the label is correct as written.

What's right

  • The header, the Last Updated note, and the status table now tell a single coherent story.
  • The 🟡 partial granularity (separating "slice 1 landed" from "slice 2 in flight") is exactly the level of precision that makes the doc useful as a ship tracker.
  • The closing forward-pointer (when the rolling-upgrade flag lands, rename to _implemented_) remains accurate.

No remaining issues. This is ready to merge.

bootjp added a commit that referenced this pull request Apr 26, 2026
…ane label

Three substantive findings + one nit from claude review on #674:

1. **HS256 key size (high)**: said "≥ 32 raw bytes / 44 base64 chars"
   but the validator in internal/admin/config.go enforces exactly 64
   raw bytes. A 32-byte key fails startup with a confusing error.
   Updated to "exactly 64 raw bytes — 88 base64 chars (standard
   padding) or 86 (RawURLEncoding)". Operators copying the doc into
   key-generation tooling now produce a key that actually validates.

2. **Audit log sample (moderate)**: showed method=POST / path=... /
   status=201 / duration=8.2ms — none of those fields are emitted.
   The actual slog entries use operation= + a resource key
   (bucket= or table=). Replaced the example with two real shapes
   (leader-direct and forwarded), so an operator building a log
   parser against the documented contract finds matches.

3. **Cross-reference link (moderate)**: line 249 used the
   _partial_ filename for the design doc, but #675 (the rename PR)
   hasnt landed yet. Point to _proposed_ (matches main today)
   with an inline note that the link will follow once #675 lands.
   The intro paragraph at line 5 already used _proposed_, so this
   removes the inconsistency claude flagged.

4. **"data-plane" label nit**: /admin/api/v1/cluster is an admin-
   plane endpoint, not data-plane. "data-plane" implied the
   DynamoDB / S3 / Redis ports. Replaced with "admin".

The cosmetic Last-updated / Status verbosity items on #675 are
tracked separately.
@bootjp bootjp merged commit a58fb54 into main Apr 26, 2026
9 checks passed
@bootjp bootjp deleted the docs/admin-design-partial branch April 26, 2026 13:40
bootjp added a commit that referenced this pull request Apr 26, 2026
…ane label

Three substantive findings + one nit from claude review on #674:

1. **HS256 key size (high)**: said "≥ 32 raw bytes / 44 base64 chars"
   but the validator in internal/admin/config.go enforces exactly 64
   raw bytes. A 32-byte key fails startup with a confusing error.
   Updated to "exactly 64 raw bytes — 88 base64 chars (standard
   padding) or 86 (RawURLEncoding)". Operators copying the doc into
   key-generation tooling now produce a key that actually validates.

2. **Audit log sample (moderate)**: showed method=POST / path=... /
   status=201 / duration=8.2ms — none of those fields are emitted.
   The actual slog entries use operation= + a resource key
   (bucket= or table=). Replaced the example with two real shapes
   (leader-direct and forwarded), so an operator building a log
   parser against the documented contract finds matches.

3. **Cross-reference link (moderate)**: line 249 used the
   _partial_ filename for the design doc, but #675 (the rename PR)
   hasnt landed yet. Point to _proposed_ (matches main today)
   with an inline note that the link will follow once #675 lands.
   The intro paragraph at line 5 already used _proposed_, so this
   removes the inconsistency claude flagged.

4. **"data-plane" label nit**: /admin/api/v1/cluster is an admin-
   plane endpoint, not data-plane. "data-plane" implied the
   DynamoDB / S3 / Redis ports. Replaced with "admin".

The cosmetic Last-updated / Status verbosity items on #675 are
tracked separately.
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