Portable schema IDs cascade from the root document digest, so any root edit rotates every ID in generated output
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
- Área
- api, backend-api-design
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
- 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 JuliaComputing/OpenAPI.jl
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
JuliaComputing/OpenAPI.jl#128 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JuliaComputing/OpenAPI.jl#118 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
JuliaComputing/OpenAPI.jl#113 ·
Los mantenedores suelen responder en 1 día
-
stale
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
JuliaComputing/OpenAPI.jl#87 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
stale
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaComputing/OpenAPI.jl#73 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de JuliaComputing/OpenAPI.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
`default_linear_interpolation` is called with its arguments swapped, so its opt-outs never applyAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
SciML/OrdinaryDiffEq.jl#4684 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
SciML/Evolutionary.jl#182 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
jmejia8/Metaheuristics.jl#130 ·
-
Upgrade plan for Julia version?Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
exercism/julia-test-runner#164 · 1 comentario ·