Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Portable schema IDs cascade from the root document digest, so any root edit rotates every ID in generated output

Abierto
#117 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
julia, openapi

Línea de trabajo

Comienza en src/normalize.jl, en _portable_schema_ids, y rastrea cómo _content_digest, parent, pointer y keyword forman cada label. Conserva el manejo existente de los sufijos de colisión y asegúrate de que las modificaciones no relacionadas en la raíz no cambien los external- IDs; los IDs deben seguir siendo deterministas y cambiar cuando cambie el schema al que hacen referencia.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Generated clients embed a _SCHEMA_RESOURCE_DATA table keyed by https://openapi.invalid/schema/.json. The labels are content-derived, and the derivation chains every label back to the root document's digest. The practical effect is that editing one field anywhere in the root spec rotates every schema ID in the generated package. So for every update in the schemas the changes are massive in the autogenerated code.

The source of this problem is here

src/normalize.jl, _portable_schema_ids:

labels = Dict{Resources.ResourceId,String}(
primary.id => "root-" * first(_content_digest(primary.contents), 20),
)
...
seed = parent * "|" * pointer * "|" * keyword
labels[target] = "external-" * first(bytes2hex(SHA.sha256(seed)), 20)

_content_digest is sha256 over the canonical JSON of the whole root document, so it covers info.version, info.description, and every unrelated part of the spec.

Each external- label is then seeded on its parent label, which is the root label for first-level references and another derived label deeper down. So the root digest propagates transitively into every ID in the graph.

The fix entails decoupleing each label from the root digest, so an ID changes only when that schema changes:

  • Seed external- labels on the target resource's own _content_digest, rather than on the parent label. Collisions already have handling via the -2, -3 suffix loop in the remaining branch just below.
  • Or seed on the structural reference path from a stable root identifier (for example the spec's info.title) instead of the root's content hash.

Either keeps IDs stable under unrelated root edits while preserving determinism and uniqueness.

Lenguaje dominante
Julia
Estrellas
56
Forks
16
Merge medio
1 d 51 min
PR fusionados (30 d)
12

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de JuliaComputing/OpenAPI.jl

Todos los issues de JuliaComputing/OpenAPI.jl

Issues similares

Más issues de Julia

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.