oracle-clue 0.1.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- oracle_clue-0.1.0a1/MANIFEST.in +4 -0
- oracle_clue-0.1.0a1/NOTAS-DE-RELEASE.md +22 -0
- oracle_clue-0.1.0a1/PKG-INFO +69 -0
- oracle_clue-0.1.0a1/README.md +54 -0
- oracle_clue-0.1.0a1/docs/arquitectura.md +56 -0
- oracle_clue-0.1.0a1/docs/hallazgos.schema.json +204 -0
- oracle_clue-0.1.0a1/docs/triage.schema.json +61 -0
- oracle_clue-0.1.0a1/oracle_clue/__init__.py +1 -0
- oracle_clue-0.1.0a1/oracle_clue/cli.py +253 -0
- oracle_clue-0.1.0a1/oracle_clue/schemas/hallazgos.schema.json +204 -0
- oracle_clue-0.1.0a1/oracle_clue/schemas/triage.schema.json +61 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/PKG-INFO +69 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/SOURCES.txt +20 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/dependency_links.txt +1 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/entry_points.txt +2 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/requires.txt +1 -0
- oracle_clue-0.1.0a1/oracle_clue.egg-info/top_level.txt +1 -0
- oracle_clue-0.1.0a1/pyproject.toml +32 -0
- oracle_clue-0.1.0a1/setup.cfg +4 -0
- oracle_clue-0.1.0a1/tests/test_cli.py +142 -0
- oracle_clue-0.1.0a1/tests/test_contract.py +54 -0
- oracle_clue-0.1.0a1/tools/verify_installed.py +43 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Oracle Clue 0.1.0a1
|
|
2
|
+
|
|
3
|
+
Primer corte alpha: contexto reproducible y validación de informes externos. **No incluye revisión automática con IA.**
|
|
4
|
+
|
|
5
|
+
- `oracle-clue preparar`: diferencia entre commits y contexto explícito, sin cambiar archivos del repositorio ni ejecutar pruebas/proveedores.
|
|
6
|
+
- `oracle-clue validar`: contratos de informe/triage, vigencia de contexto, ids y ubicaciones en el diff.
|
|
7
|
+
- Límites de tamaño y omisiones declaradas de binarios, enlaces y rutas conocidas de credenciales.
|
|
8
|
+
- Wheel con schemas incluidos, sdist y SHA256SUMS.
|
|
9
|
+
|
|
10
|
+
## Validación
|
|
11
|
+
|
|
12
|
+
Contratos positivos/negativos, repos Git temporales con defectos sembrados y CLI instalada fuera del checkout. Los resultados exactos quedan en `20261002-212339-prototipar`. La instalación se prueba en Linux. No se afirma evaluación de precisión de IA ni autenticación de personas.
|
|
13
|
+
|
|
14
|
+
## Publicación manual en PyPI
|
|
15
|
+
|
|
16
|
+
Los artefactos probados están adjuntos al release y en `dist/`. Verificar SHA256SUMS y publicar con las credenciales del mantenedor:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
uv publish dist/oracle_clue-0.1.0a1-py3-none-any.whl dist/oracle_clue-0.1.0a1.tar.gz
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Este release no implica que ya esté en PyPI. Tras subirlo, comprobar `uvx --from oracle-clue==0.1.0a1 oracle-clue --version` en un entorno limpio.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: oracle-clue
|
|
3
|
+
Version: 0.1.0a1
|
|
4
|
+
Summary: Contexto reproducible y validación de informes para revisión de cambios Git
|
|
5
|
+
Project-URL: Repositorio, https://github.com/Segtem/oracle-clue
|
|
6
|
+
Project-URL: Issues, https://github.com/Segtem/oracle-clue/issues
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: Natural Language :: Spanish
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
Requires-Dist: jsonschema<5,>=4.23
|
|
15
|
+
|
|
16
|
+
# Oracle Clue — 0.1.0a1 (alpha)
|
|
17
|
+
|
|
18
|
+
CLI local para preparar contexto reproducible y validar informes externos de revisión de cambios Git. Funciona por separado de Oracle Factory y no requiere una GitHub App ni una dependencia en cada repositorio revisado.
|
|
19
|
+
|
|
20
|
+
**Este primer corte no llama a un modelo ni encuentra defectos automáticamente.** Entrega el contexto y las comprobaciones de integridad sobre los que se construirá ese revisor. Nunca aprueba, edita código ni fusiona cambios.
|
|
21
|
+
|
|
22
|
+
## Instalación
|
|
23
|
+
|
|
24
|
+
La publicación en PyPI queda a cargo del mantenedor. El release de GitHub incluye el wheel probado:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uv tool install https://github.com/Segtem/oracle-clue/releases/download/v0.1.0a1/oracle_clue-0.1.0a1-py3-none-any.whl
|
|
28
|
+
oracle-clue --version
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Requiere Git y Python >=3.11. Después de publicar esta versión en PyPI, se podrá instalar con `uv tool install oracle-clue==0.1.0a1`.
|
|
32
|
+
|
|
33
|
+
## Preparar una revisión
|
|
34
|
+
|
|
35
|
+
Con los cambios confirmados en Git, seleccionar una base que difiera de HEAD. `HEAD~1` compara el último commit con su padre:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
oracle-clue preparar --repo ./mi-proyecto --base HEAD~1 --salida contexto.json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
La salida debe estar fuera de la carpeta revisada y ser un archivo nuevo. Sin `--salida`, el JSON se imprime por stdout. Para incluir archivos de contexto explícitos, agregar `--contexto spec.md --contexto evidencia/pruebas.txt`; sus rutas se resuelven desde la raíz del repo.
|
|
42
|
+
|
|
43
|
+
El paquete contiene commits base/HEAD, diff por archivo, contenido anterior/actual, rangos por lado y huellas del diff y contexto. Las mismas entradas producen el mismo JSON. `diff_sha256` corresponde a la representación Git raw sin abreviar (rutas, modos e ids de blobs); `context_sha256` abarca además texto, parches, omisiones y archivos seleccionados.
|
|
44
|
+
|
|
45
|
+
Rechaza cambios versionados sin commit, base inexistente, diff vacío y entradas demasiado grandes. El límite es 200 archivos, 256 KB por archivo y 1 MB para el paquete serializado compacto. Declara omisiones de binarios, enlaces, submódulos y rutas de credenciales conocidas. El filtro no garantiza que otros archivos no contengan secretos; el operador revisa el contexto antes de entregarlo a un proveedor. Clue no envía estos datos a la red.
|
|
46
|
+
|
|
47
|
+
## Validar un informe externo
|
|
48
|
+
|
|
49
|
+
Una persona o un proveedor externo produce el informe conforme a [hallazgos.schema.json](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/hallazgos.schema.json). Los hallazgos conservan el estado `pendiente` y las huellas deben corresponder al paquete:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
oracle-clue validar informe.json --paquete contexto.json --repo ./mi-proyecto
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
La CLI vuelve a recolectar el contexto actual y compara el paquete completo; verifica schema, huellas, ids únicos, rutas y rangos de línea del lado correcto del diff. Si hubo omisiones, exige un informe `incompleto` con limitaciones. Un informe vacío nunca equivale a aprobación.
|
|
56
|
+
|
|
57
|
+
El triage humano se guarda separado, según [triage.schema.json](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/triage.schema.json). `validar` acepta `--triage decisiones.json` para comprobar el hash exacto del informe, fechas, ids referenciados y decisiones no duplicadas. No crea decisiones ni autentica al revisor o a quien figura como actor.
|
|
58
|
+
|
|
59
|
+
## Qué sigue
|
|
60
|
+
|
|
61
|
+
Adaptador de IA de solo lectura, evaluación con defectos sembrados y cambios limpios, e integración opcional con Factory/GitHub. La [arquitectura](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/arquitectura.md) distingue el flujo previsto del alcance de este alpha. Oracle conserva su función separada: evaluar evidencia contra requisitos acordados.
|
|
62
|
+
|
|
63
|
+
## Pruebas
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
uv run python -m unittest discover -s tests -v
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Las pruebas crean repos temporales, siembran un defecto y verifican que el paquete lo contiene y que un informe fixture apunta al cambio correcto. Comprueban también omisiones, límites, contexto modificado y contratos inválidos. No miden todavía precisión de un modelo.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Oracle Clue — 0.1.0a1 (alpha)
|
|
2
|
+
|
|
3
|
+
CLI local para preparar contexto reproducible y validar informes externos de revisión de cambios Git. Funciona por separado de Oracle Factory y no requiere una GitHub App ni una dependencia en cada repositorio revisado.
|
|
4
|
+
|
|
5
|
+
**Este primer corte no llama a un modelo ni encuentra defectos automáticamente.** Entrega el contexto y las comprobaciones de integridad sobre los que se construirá ese revisor. Nunca aprueba, edita código ni fusiona cambios.
|
|
6
|
+
|
|
7
|
+
## Instalación
|
|
8
|
+
|
|
9
|
+
La publicación en PyPI queda a cargo del mantenedor. El release de GitHub incluye el wheel probado:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv tool install https://github.com/Segtem/oracle-clue/releases/download/v0.1.0a1/oracle_clue-0.1.0a1-py3-none-any.whl
|
|
13
|
+
oracle-clue --version
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Requiere Git y Python >=3.11. Después de publicar esta versión en PyPI, se podrá instalar con `uv tool install oracle-clue==0.1.0a1`.
|
|
17
|
+
|
|
18
|
+
## Preparar una revisión
|
|
19
|
+
|
|
20
|
+
Con los cambios confirmados en Git, seleccionar una base que difiera de HEAD. `HEAD~1` compara el último commit con su padre:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
oracle-clue preparar --repo ./mi-proyecto --base HEAD~1 --salida contexto.json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
La salida debe estar fuera de la carpeta revisada y ser un archivo nuevo. Sin `--salida`, el JSON se imprime por stdout. Para incluir archivos de contexto explícitos, agregar `--contexto spec.md --contexto evidencia/pruebas.txt`; sus rutas se resuelven desde la raíz del repo.
|
|
27
|
+
|
|
28
|
+
El paquete contiene commits base/HEAD, diff por archivo, contenido anterior/actual, rangos por lado y huellas del diff y contexto. Las mismas entradas producen el mismo JSON. `diff_sha256` corresponde a la representación Git raw sin abreviar (rutas, modos e ids de blobs); `context_sha256` abarca además texto, parches, omisiones y archivos seleccionados.
|
|
29
|
+
|
|
30
|
+
Rechaza cambios versionados sin commit, base inexistente, diff vacío y entradas demasiado grandes. El límite es 200 archivos, 256 KB por archivo y 1 MB para el paquete serializado compacto. Declara omisiones de binarios, enlaces, submódulos y rutas de credenciales conocidas. El filtro no garantiza que otros archivos no contengan secretos; el operador revisa el contexto antes de entregarlo a un proveedor. Clue no envía estos datos a la red.
|
|
31
|
+
|
|
32
|
+
## Validar un informe externo
|
|
33
|
+
|
|
34
|
+
Una persona o un proveedor externo produce el informe conforme a [hallazgos.schema.json](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/hallazgos.schema.json). Los hallazgos conservan el estado `pendiente` y las huellas deben corresponder al paquete:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
oracle-clue validar informe.json --paquete contexto.json --repo ./mi-proyecto
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
La CLI vuelve a recolectar el contexto actual y compara el paquete completo; verifica schema, huellas, ids únicos, rutas y rangos de línea del lado correcto del diff. Si hubo omisiones, exige un informe `incompleto` con limitaciones. Un informe vacío nunca equivale a aprobación.
|
|
41
|
+
|
|
42
|
+
El triage humano se guarda separado, según [triage.schema.json](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/triage.schema.json). `validar` acepta `--triage decisiones.json` para comprobar el hash exacto del informe, fechas, ids referenciados y decisiones no duplicadas. No crea decisiones ni autentica al revisor o a quien figura como actor.
|
|
43
|
+
|
|
44
|
+
## Qué sigue
|
|
45
|
+
|
|
46
|
+
Adaptador de IA de solo lectura, evaluación con defectos sembrados y cambios limpios, e integración opcional con Factory/GitHub. La [arquitectura](https://github.com/Segtem/oracle-clue/blob/v0.1.0a1/docs/arquitectura.md) distingue el flujo previsto del alcance de este alpha. Oracle conserva su función separada: evaluar evidencia contra requisitos acordados.
|
|
47
|
+
|
|
48
|
+
## Pruebas
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv run python -m unittest discover -s tests -v
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Las pruebas crean repos temporales, siembran un defecto y verifican que el paquete lo contiene y que un informe fixture apunta al cambio correcto. Comprueban también omisiones, límites, contexto modificado y contratos inválidos. No miden todavía precisión de un modelo.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Arquitectura de Oracle Clue
|
|
2
|
+
|
|
3
|
+
Estado 0.1.0a1: implementados `preparar` (diff entre commits, con árbol versionado limpio) y `validar` (informe externo y triage opcional). `review`, adaptadores, configuración automática e integración con Factory/GitHub siguen siendo diseño futuro.
|
|
4
|
+
|
|
5
|
+
## Propósito y frontera
|
|
6
|
+
|
|
7
|
+
Clue encuentra riesgos concretos introducidos por un cambio y prepara evidencia para el triage humano. El flujo de desarrollo completo pertenece a Oracle Factory. Clue no reemplaza pruebas, revisión humana, Oracle ni al agente que implementa.
|
|
8
|
+
|
|
9
|
+
## Ejecución
|
|
10
|
+
|
|
11
|
+
- La herramienta se instala una vez en el entorno del desarrollador o se ejecuta desde su checkout de desarrollo. Los repos revisados no instalan Clue como dependencia obligatoria.
|
|
12
|
+
- Entrada conceptual: `clue review --repo <ruta> --base <ref> [--change <id>] [--provider codex|claude]`. La ruta por defecto será el cwd.
|
|
13
|
+
- La CLI recolecta datos Git y archivos explícitos; invoca el adaptador seleccionado en modo de solo lectura; valida el informe; imprime Markdown y conserva JSON.
|
|
14
|
+
- `.oracle-clue.toml` será opcional y declarará rutas de contexto, comandos de test sugeridos y convenciones locales. Sus comandos requieren aceptación explícita del operador antes de ejecutarse.
|
|
15
|
+
|
|
16
|
+
## Flujo de análisis
|
|
17
|
+
|
|
18
|
+
1. Resolver repo, HEAD, base y diff. Rechazar base inexistente y diff vacío; limitar tamaño y excluir binarios/secretos conocidos.
|
|
19
|
+
2. Asociar el cambio con una tarea o paquete OpenSpec por id explícito o metadatos, sin inferir aprobación.
|
|
20
|
+
3. Reunir spec aceptada, archivos cambiados, reglas y evidencia de tests que el operador entregue. El primer prototipo no ejecuta pruebas.
|
|
21
|
+
4. Pedir al proveedor solo defectos plausibles introducidos por el diff. Cada afirmación debe enlazar evidencia y ubicación.
|
|
22
|
+
5. Validar schema, archivo/rango de línea contra el diff y registrar hash de base, HEAD y diff. Invalidar el reporte si alguno cambia.
|
|
23
|
+
6. Dejar cada hallazgo en estado pendiente hasta que una persona lo corrija, descarte con motivo o acepte como riesgo.
|
|
24
|
+
|
|
25
|
+
## Interfaz de proveedor
|
|
26
|
+
|
|
27
|
+
Un adaptador recibe un paquete serializado y devuelve JSON conforme al schema. El primer adaptador de prueba puede llamar a `codex exec` en modo read-only; después se compara Claude CLI usando el mismo corpus. Clue no entrega permisos de escritura al proveedor. La revisión no debe fallar silenciosamente a un proveedor alternativo ni esconder su identidad, modelo o errores.
|
|
28
|
+
|
|
29
|
+
## Esquema de hallazgos
|
|
30
|
+
|
|
31
|
+
`docs/hallazgos.schema.json` fija el formato. Clases iniciales: bug, seguridad, regresión, discrepancia_con_spec y pregunta. Severidad y confianza son campos separados; una confianza baja no se presenta como hallazgo confirmado. Cada elemento debe incluir título, explicación breve, archivo/líneas, lado base/head del diff, escenario activador, evidencia observable y recomendación de verificación (`verification`). No permitir que el modelo escriba o autoaplique parches.
|
|
32
|
+
|
|
33
|
+
## Evaluación del prototipo
|
|
34
|
+
|
|
35
|
+
Preparar cambios de prueba con defectos conocidos y cambios limpios. Registrar defectos sembrados detectados, falsos positivos, ubicaciones correctas y defectos repetidos entre proveedores. No declarar éxito por elocuencia: el criterio es utilidad accionable para una persona.
|
|
36
|
+
|
|
37
|
+
## Evolución posterior
|
|
38
|
+
|
|
39
|
+
1. Generador determinista del paquete de revisión y pruebas.
|
|
40
|
+
2. Adaptador de agente local, schema validado y reportes vinculados a hash.
|
|
41
|
+
3. Triage humano persistente en Trackertast/Factory.
|
|
42
|
+
4. Integración GitHub opcional que publica el reporte en PR; sigue sin aprobar ni fusionar automáticamente.
|
|
43
|
+
|
|
44
|
+
## Frontera entre el modelo y la decisión humana
|
|
45
|
+
|
|
46
|
+
El adaptador entrega hallazgos pendientes. La CLI completa la identidad del proveedor, modelo (o `null` si no se informa), hashes de commit/diff/contexto y estado de ejecución con datos comprobados; esos metadatos no se toman como afirmaciones del modelo. `review_status: incompleto` requiere explicar limitaciones; un informe vacío o incompleto no equivale a aprobación.
|
|
47
|
+
|
|
48
|
+
El informe es inmutable. El triage humano vive en `docs/triage.schema.json`, enlazado por el hash del informe, con id de hallazgo, decisión, motivo, actor y fecha. El schema del informe rechaza estados corregido/descartado/riesgo_aceptado. Guardar un nombre de actor no autentica una identidad: esa garantía requiere el canal humano de Factory o GitHub.
|
|
49
|
+
|
|
50
|
+
La validación futura debe comprobar también lo que JSON Schema no garantiza: ids únicos; `start_line <= end_line`; rutas relativas dentro del checkout; rangos pertenecientes al lado correcto del diff; referencias a hallazgos existentes y decisiones vinculadas al informe vigente. El hash del contexto incluirá spec, reglas y evidencia de pruebas seleccionadas, además del diff. Un contexto cambiado exige otra revisión. La confianza declarada por el modelo no es una probabilidad calibrada.
|
|
51
|
+
|
|
52
|
+
Ejecutar un agente desde una CLI local no implica inferencia local: Codex/Claude pueden enviar contexto al proveedor que tengan configurado. El operador elige proveedor y alcance de archivos. El paquete debe declarar omisiones y truncamientos; no prometer detección infalible de secretos ni analizar repos completos por defecto.
|
|
53
|
+
|
|
54
|
+
## Verificación del contrato
|
|
55
|
+
|
|
56
|
+
`tests/test_contract.py` valida ambos schemas y casos positivos/negativos. Requiere `jsonschema` (solo para pruebas): `uv run --with jsonschema python -m unittest discover -s tests -v`. Los tests de CLI agregan recolección y validación sobre repos temporales. Todavía no existe análisis automático ni evaluación de precisión de un modelo.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:oracle-clue:review:v1",
|
|
4
|
+
"title": "Oracle Clue review report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"repo",
|
|
9
|
+
"base",
|
|
10
|
+
"head",
|
|
11
|
+
"diff_sha256",
|
|
12
|
+
"provider",
|
|
13
|
+
"findings",
|
|
14
|
+
"context_sha256",
|
|
15
|
+
"review_status",
|
|
16
|
+
"limitations"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"schema_version": {
|
|
20
|
+
"const": "oracle-clue.review/v1"
|
|
21
|
+
},
|
|
22
|
+
"repo": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"base": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
|
|
29
|
+
},
|
|
30
|
+
"head": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
|
|
33
|
+
},
|
|
34
|
+
"diff_sha256": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
37
|
+
},
|
|
38
|
+
"provider": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"model"
|
|
43
|
+
],
|
|
44
|
+
"properties": {
|
|
45
|
+
"name": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"minLength": 1
|
|
48
|
+
},
|
|
49
|
+
"model": {
|
|
50
|
+
"type": [
|
|
51
|
+
"string",
|
|
52
|
+
"null"
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"additionalProperties": false
|
|
57
|
+
},
|
|
58
|
+
"findings": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"required": [
|
|
63
|
+
"id",
|
|
64
|
+
"kind",
|
|
65
|
+
"severity",
|
|
66
|
+
"confidence",
|
|
67
|
+
"title",
|
|
68
|
+
"explanation",
|
|
69
|
+
"location",
|
|
70
|
+
"trigger",
|
|
71
|
+
"evidence",
|
|
72
|
+
"status",
|
|
73
|
+
"verification"
|
|
74
|
+
],
|
|
75
|
+
"properties": {
|
|
76
|
+
"id": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"minLength": 1
|
|
79
|
+
},
|
|
80
|
+
"kind": {
|
|
81
|
+
"enum": [
|
|
82
|
+
"bug",
|
|
83
|
+
"seguridad",
|
|
84
|
+
"regresion",
|
|
85
|
+
"discrepancia_con_spec",
|
|
86
|
+
"pregunta"
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"severity": {
|
|
90
|
+
"enum": [
|
|
91
|
+
"critica",
|
|
92
|
+
"alta",
|
|
93
|
+
"media",
|
|
94
|
+
"baja",
|
|
95
|
+
"informativa"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
"confidence": {
|
|
99
|
+
"type": "number",
|
|
100
|
+
"minimum": 0,
|
|
101
|
+
"maximum": 1
|
|
102
|
+
},
|
|
103
|
+
"title": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"minLength": 1
|
|
106
|
+
},
|
|
107
|
+
"explanation": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"minLength": 1
|
|
110
|
+
},
|
|
111
|
+
"location": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"required": [
|
|
114
|
+
"file",
|
|
115
|
+
"start_line",
|
|
116
|
+
"side",
|
|
117
|
+
"end_line"
|
|
118
|
+
],
|
|
119
|
+
"properties": {
|
|
120
|
+
"file": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"minLength": 1
|
|
123
|
+
},
|
|
124
|
+
"start_line": {
|
|
125
|
+
"type": "integer",
|
|
126
|
+
"minimum": 1
|
|
127
|
+
},
|
|
128
|
+
"end_line": {
|
|
129
|
+
"type": "integer",
|
|
130
|
+
"minimum": 1
|
|
131
|
+
},
|
|
132
|
+
"side": {
|
|
133
|
+
"enum": [
|
|
134
|
+
"base",
|
|
135
|
+
"head"
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"additionalProperties": false
|
|
140
|
+
},
|
|
141
|
+
"trigger": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"minLength": 1
|
|
144
|
+
},
|
|
145
|
+
"evidence": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"minLength": 1
|
|
148
|
+
},
|
|
149
|
+
"related_requirement": {
|
|
150
|
+
"type": [
|
|
151
|
+
"string",
|
|
152
|
+
"null"
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
"status": {
|
|
156
|
+
"const": "pendiente",
|
|
157
|
+
"description": "La revisión del modelo nunca contiene decisiones humanas."
|
|
158
|
+
},
|
|
159
|
+
"verification": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"minLength": 1
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"additionalProperties": false
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"context_sha256": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
170
|
+
},
|
|
171
|
+
"review_status": {
|
|
172
|
+
"enum": [
|
|
173
|
+
"completo",
|
|
174
|
+
"incompleto"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"limitations": {
|
|
178
|
+
"type": "array",
|
|
179
|
+
"items": {
|
|
180
|
+
"type": "string",
|
|
181
|
+
"minLength": 1
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
"additionalProperties": false,
|
|
186
|
+
"allOf": [
|
|
187
|
+
{
|
|
188
|
+
"if": {
|
|
189
|
+
"properties": {
|
|
190
|
+
"review_status": {
|
|
191
|
+
"const": "incompleto"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"then": {
|
|
196
|
+
"properties": {
|
|
197
|
+
"limitations": {
|
|
198
|
+
"minItems": 1
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:oracle-clue:triage:v1",
|
|
4
|
+
"title": "Decisiones humanas sobre un informe Oracle Clue",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"report_sha256",
|
|
9
|
+
"decisions"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"schema_version": {
|
|
13
|
+
"const": "oracle-clue.triage/v1"
|
|
14
|
+
},
|
|
15
|
+
"report_sha256": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
18
|
+
},
|
|
19
|
+
"decisions": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": [
|
|
24
|
+
"finding_id",
|
|
25
|
+
"status",
|
|
26
|
+
"reason",
|
|
27
|
+
"actor",
|
|
28
|
+
"at"
|
|
29
|
+
],
|
|
30
|
+
"properties": {
|
|
31
|
+
"finding_id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"minLength": 1
|
|
34
|
+
},
|
|
35
|
+
"status": {
|
|
36
|
+
"enum": [
|
|
37
|
+
"corregido",
|
|
38
|
+
"descartado",
|
|
39
|
+
"riesgo_aceptado"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"reason": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"minLength": 1
|
|
45
|
+
},
|
|
46
|
+
"actor": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1
|
|
49
|
+
},
|
|
50
|
+
"at": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"format": "date-time",
|
|
53
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"additionalProperties": false
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"additionalProperties": false
|
|
61
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.0a1"
|