feat(api)!: standardize list RPCs on opaque page tokens
@gmenher ya está trabajando en esto.
Desde el 15/9/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
User Story
As an API or SDK client, I want every list operation to expose consistent continuation tokens, so that I can enumerate resources completely and safely while the underlying collection changes.
Problem Statement
OpenShell list RPCs currently use inconsistent pagination. Several accept limit and offset but return no total, continuation token, or truncation signal. Other public list RPCs have no pagination fields at all. A client cannot reliably distinguish a complete result from a truncated page, and offset-based paging is unstable when records are inserted or removed between requests.
Impact / Why This Matters
Clients must guess that a full-sized response implies another page, manually advance offsets, and risk omissions or duplicates under concurrent mutation. SDK authors repeat this logic differently, and callers cannot build dependable inventory, cleanup, or reconciliation workflows.
Proposed Design
Adopt one public list contract across gateway resources:
- Requests use
page_sizeand an opaquepage_token. - Responses include
next_page_token, empty only when enumeration is complete. - Tokens bind the query scope and ordering needed to continue safely.
- Each resource defines a stable deterministic order.
- SDK iterators follow tokens until completion while still allowing callers to fetch one page.
- Invalid, expired, or query-mismatched tokens return documented errors.
The token encoding and persistence implementation remain internal.
Acceptance Criteria
- Every public List RPC either implements the standard pagination contract or explicitly documents why its result set is bounded.
- Paginated requests use consistent field names and validation limits.
- Responses expose
next_page_token; clients never infer completion from page length. - Ordering and concurrent insertion/deletion semantics are documented.
- Rust, Python, TypeScript, and Go SDKs expose consistent one-page and full-iteration behavior.
- Regression tests enumerate more than one page without omission or duplication.
- Offset-based fields are removed or migrated with reserved names/tags and documented breaking-change guidance.
Alternatives Considered
Keep offset pagination and add total_size. This signals truncation but remains unstable during concurrent mutation and makes totals potentially expensive. Add only a truncation boolean. This still leaves clients without a safe continuation mechanism. Leave smaller lists unpaginated. This creates another permanent API exception and unbounded growth risk.
Agent Investigation
Current public list requests and responses in proto/openshell.proto use several combinations of limit, offset, and no pagination. Internal persistence pagination and full-table iteration are tracked separately in #2802.
Related: #2565, #2802. Source audit: https://gist.github.com/mrunalp/e80942c1544a0225ee588796a41ab30b.
- Lenguaje dominante
- Rust
- Estrellas
- 8.7k
- Forks
- 1.3k
- Merge medio
- 2 d 6 h
- PR fusionados (30 d)
- 297
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de NVIDIA/OpenShell
-
area:docs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
-
state:triage-needed
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
area:cli state:validated
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
state:triage-needed
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
area:build spike state:review-ready state:stale
Dificultad 2/5 Medio día Aptitud para principiantes 68/100
Todos los issues de NVIDIA/OpenShell
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
state:needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
zed-industries/zed#64680 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
RustPython/RustPython#8802 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
TheLarkInn/aipm#2390 ·