Skip to content

docs: DEVEX-967 design proposal — API explorer command hyperlinks + pagination - #172

Open
jpage-godaddy wants to merge 1 commit into
mainfrom
cli-api-explorer-design
Open

docs: DEVEX-967 design proposal — API explorer command hyperlinks + pagination#172
jpage-godaddy wants to merge 1 commit into
mainfrom
cli-api-explorer-design

Conversation

@jpage-godaddy

Copy link
Copy Markdown
Collaborator

Summary

Design proposal for DEVEX-967: replaces the truncate-to-temp-file prototype (reverted during DEVEX-702) with a CLI-native "hyperlink" convention — truncated output points at a follow-up command via next_actions instead of a file on disk.

Highlights:

  • A shared Summary<T> truncation envelope living in gddy (not cli-engine), with a fixed rule for what a truncated section links to: standalone list command for 1:many, standalone get command for 1:1/many:1 — never "page 2 of the embedded copy."
  • New parameter/response/schema commands with per-entity identifier rules (short operation-scoped names for parameter/response, request body folded in as in: "body"; dotted-path or $ref-name ids for schema, which is the one atomic/terminal, never-truncated entity).
  • Renaming api describeapi operation get and api endpoint listapi operation list, since Endpoint is already structured as one method+path+operationId row (an OpenAPI operation, not a path grouping).
  • A .with_pagination(...) builder for cli-engine so --limit/--offset are opt-in per command (not shown in --help for commands that ignore them) with a command-level default page size — this requires a cli-engine release + version bump before gddy can use it.
  • Nested table human-rendering support is explicitly a non-goal here, deferred to a separate ticket.
  • Migration notes for DEVEX-716 (webhook) and DEVEX-717 (actions catalog), which have the same shape and current owners to coordinate with.

Nothing here is implemented yet — this is purely the design doc, meant to get stakeholder input before work starts. See the doc's "Open questions" section for the forks still unresolved (deprecation vs. clean break for the rename, max_limit overflow behavior, etc).

Test plan

N/A — documentation only, no code changes.

… handling [DEVEX-967]

Replaces the reverted truncate-to-temp-file prototype from DEVEX-702 with
a design based on next_actions, new parameter/response/schema entity
commands, and command-driven pagination.
Copilot AI review requested due to automatic review settings July 31, 2026 22:22

Copilot AI 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.

Pull request overview

Adds a design proposal document for DEVEX-967 describing how the Rust gddy CLI’s API explorer should replace temp-file truncation with a CLI-native next_actions hyperlink convention, and outlining related command/identifier/pagination changes.

Changes:

  • Document a shared Summary<T> truncation envelope in gddy and a consistent rule for truncation-driven navigation via next_actions.
  • Propose new API explorer drill-down commands (api parameter|response|schema ...) and renaming api describe/api endpoint to api operation ....
  • Propose opt-in, command-driven pagination via a cli-engine .with_pagination(...) builder (defaults + max limit behavior).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

| Operation | `getUser` (operationId) or path fragment | already stable today |
| Parameter | `limit` | not globally unique — scoped by the `--operation` flag on the command, not baked into the id itself. The request body folds in here too, as `in: "body"` (see below). |
| Response | `200` | same scoping rule: id is just the status code, `--operation` supplies the rest |
| Operation | `getUser` (operationId) | `--operation <id>` alone is enough — no `--domain` needed. `find_endpoint_exact` (`rust/src/api_explorer/mod.rs:275-294`) already resolves operations catalog-wide today, matching only by `operationId`/path (ambiguity is handled via `--method`, never domain), so `describe`/`call`/`parameter`/`response` all share the same assumption: operationId is globally unique. Nothing enforces that at generation time — `generate-api-catalog` only dedupes domain names (`main.rs:227-229`) — so this is a pre-existing gap this design inherits rather than introduces, worth a separate follow-up if it's ever hit in practice. |
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.

2 participants