FAQ Manifest¶
Questions courantes autour du Dataset Manifest (SPEC-02, v0.8 brouillon).
Pourquoi un manifest ?¶
Le contrat Telemachus (SPEC-01 §3.1) déclare device_id, trip_id,
acc_periods et trip_carrier_states comme des champs
par-fichier, pas par-ligne. Il faut bien qu'ils vivent quelque
part. Avant SPEC-02, les producteurs les mettaient un peu où ils
voulaient (variable d'env, fichier de config, sidecar JSON ad-hoc…).
Le manifest normalise ce sidecar.
Où se trouve le manifest ?¶
À côté des parquet :
On préfère YAML (plus lisible). JSON avec le même schéma marche aussi.
Quelles colonnes peut-on omettre du parquet ?¶
Si le manifest les déclare, on peut les omettre :
| Colonne | Source dans le manifest |
|---|---|
device_id |
hardware.devices[0].name (dataset mono-device) |
trip_id |
Suffixe du nom de parquet, ou source.campaign + basename |
carrier_state |
Matché sur le trip_id via trip_carrier_states |
Pour un dataset multi-devices, device_id doit être soit
présent par ligne, soit encodé dans le nom de fichier
(<device>_*.parquet). Détails en SPEC-02 §4.1.
Comment le frame accéléromètre est-il appliqué ?¶
Pour chaque ligne au timestamp ts, le consommateur cherche la
première entrée acc_periods qui satisfait start ≤ ts ≤ end et
utilise son frame (raw, compensated ou partial). Si
acc_periods n'est pas déclaré, le défaut est raw (SPEC-01 §3.6).
Licences dataset¶
Le manifest porte un champ license (chaîne libre façon SPDX) et,
optionnellement, un license_warning. Les cas typiques :
| Licence | Republier modifié | Exemple manifest |
|---|---|---|
| CC-BY-4.0 | ✅ avec attribution | license: "CC-BY-4.0" |
| CC-BY-NC-ND-4.0 | ❌ ND interdit les dérivés | license: "CC-BY-NC-ND-4.0", license_warning: "Non-commercial, no derivatives" |
| CC0 | ✅ tout est permis | license: "CC0-1.0" |
| Interne / propriétaire | ❌ | license: "internal" |
Le tooling à venir ajoutera un champ
license_republish_derivative: {allowed,forbidden,academic} plus un
linter CI qui refuse de committer un parquet converti sous une
source forbidden. En attendant, c'est appliqué par convention —
voir Écrire un adapter → Piège licence.
Et les métadonnées par-ligne qui varient ?¶
Tout ce qui varie réellement ligne à ligne reste dans le parquet
(lat, ax_mps2…). Le manifest ne sert qu'aux métadonnées
par-fichier qui ne varient pas, ou aux métadonnées segmentées
dans le temps (acc_periods, historique de config) qui ne changent
qu'à des bornes grossières.
Mon manifest échoue la validation — où regarder ?¶
Lancer le validator avec sortie verbose :
ajv validate -s spec/schemas/telemachus_manifest_v0.8.json \
-d manifest.yaml --errors=text --all-errors
Les pièges classiques :
start: 2025-01-01(YAML l'auto-parse en date Python) → mettre des guillemets :"2025-01-01T00:00:00Z"n_trips: nullest accepté — la plupart des compteurs tolèrentnullpour dire « inconnu »- Énumération invalide pour
hardware.class(valeurs autorisées :research,commercial,consumer,prototype,smartphone) - Bloc requis absent :
dataset_id,schema_version, ousource