quest'n'click 4.5.0 · r1

Construite pour quest'n'click 4.5.0, révision r1. Si elle est publiée, et laquelle est la courante, est dit par publication.json.

Provenance des assets

English · Type : procédure + référence · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 4.2.5

Une release dit d’où vient chaque image, son, voix et vidéo qu’elle livre, sous quelle licence, et prouve que les fichiers sont bien ceux que quelqu’un a relus. Cette page montre comment écrire provenance.json, le verrouiller après une relecture, et passer une release ou une release commerciale.

Ce que vous obtenez

Un provenance.json qui couvre chaque asset livré exactement une fois, un provenance.lock.json qui garde le SHA-256 et la taille de chaque fichier avec les déclarations sous lesquelles il a été relu, et une vérification de release qui échoue dès qu’un fichier ou une déclaration change sans nouvelle relecture.

Contexte et versions

Le dépôt du moteur (games/<id>/provenance.json) et le projet créé (game/provenance.json). Vrai à partir de 4.2.5 (le nom de commande quest-n-click). Le verrou date de 3.3.0, la vérification commerciale de 3.3.1, les fichiers de licence de l’archive livrée de 3.7.1.

Prérequis

Où lancer les commandes

Sur votre machine, à la racine du dépôt du moteur (npm run …) ou du projet créé (npx quest-n-click …, npm run release).

Étapes

  1. Écrire une entrée par source dans provenance.json. Un projet créé en a déjà une : les images de son modèle sont des emplacements dessinés à partir de formes, marqués placeholder.

    {
      "licences": { "allow": ["CC BY 4.0", "own work"] },
      "assets": [
        { "match": "img:*", "source": "Drawn for the game from the prompts in prompts.md", "author": "Wano",
          "licence": "CC BY 4.0", "status": "final" },
        { "match": "sfx:door_*.mp3", "source": "Recorded at home", "author": "Wano", "licence": "own work",
          "status": "final" }
      ]
    }
    

    Les champs sont dans la référence plus bas. Chaque asset doit correspondre à exactement une entrée.

  1. Vérifier la couverture.

    # dans le dépôt du moteur
    npm run provenance          # les assets par licence, et ce qui a changé depuis le verrou (code 1 : quelque chose à relire)
    npm run validate            # un jeu avec provenance.json : chaque asset couvert une fois, chaque entrée complète
    
    # dans le projet créé
    npx quest-n-click provenance
    npx quest-n-click validate
    
  1. Relire, puis verrouiller. Regardez chaque fichier et son entrée. Puis :

    # dans le dépôt du moteur
    npm run provenance -- --lock
    
    # dans le projet créé
    npx quest-n-click provenance --lock
    

    La commande refuse de verrouiller tant qu’un asset n’est pas couvert, est ambigu, a une entrée incomplète ou un fichier manquant (✖ … not locked: fix the provenance first).

  1. Passer les portes de release.

    # dans le dépôt du moteur
    npm run verify:release      # validate --release, weight --release, i18n status, voices check --release, playtests stricts
    npm run verify:commercial   # verify:release, puis validate --commercial, puis verify:dist
    
    # dans le projet créé
    npm run release                         # comprend validate --release
    npm run release -- --commercial         # avec validate --commercial en plus
    

Garantie · provenance-lock-detects-change · référencée · exécutée sur aff6caab7514 · portée vérifiée par son auteur (IA), pas relue Après --lock, un fichier dont les octets ont changé, un asset livré depuis, un fichier manquant ou une entrée dont la licence a été modifiée est signalé.

validate --release échoue sur chacun, un validate simple ne fait qu’avertir. Un motif ou un statut modifié est signalé comme une licence modifiée.

Limite · claims-not-truth Les vérifications disent que les déclarations sont complètes et permettent la release (ou la vente), pas qu’elles sont vraies. Une mauvaise licence écrite de bonne foi passe. La relecture avant --lock est le travail d’une personne.

Résultat attendu, et comment le vérifier

npm run provenance se termine par ✔ [<jeu>] provenance clean: every file is the one reviewed, et verify:release (projet créé : npm run release) passe. Ce qu’une exception laisse passer s’affiche en ℹ accepted: …, nommément, pas comme un avertissement à corriger.

Erreurs fréquentes

MessageCauseCorrection
✖ [<game>] no provenance.json: say where every asset comes from first (provenance), provenance.json › missing: a release says where every asset comes from (validate --release)Pas de fichierÉcrivez-le (étape 1)
<key>: no entry says where it comes from (provenance), provenance.json › <key>: no entry says where this asset comes from (validate)Aucun match ne couvre l’assetAjoutez une entrée, ou élargissez un motif
<key>: more than one entry matches (provenance), … more than one entry matches this asset; make the patterns disjoint (validate)Deux entrées couvrent l’asset, quel que soit leur ordreResserrez un motif
<match>: an entry needs match, source, licence and statusUne entrée incomplèteRemplissez les quatre champs
provenance.lock.json › missing: …Jamais verrouilléRelisez, puis étape 3
provenance.json › <key>: a placeholder would ship; replace it, or add a releaseExceptions entry that names it and says whyUn placeholder dans une releaseRemplacez le fichier et marquez-le final, ou ajoutez une entrée releaseExceptions
provenance.json › <licence>: not in licences.allow (…), used by n asset(s): …Une licence hors de la politiqueAutorisez-la, remplacez l’asset, ou exceptez-le nommément
provenance.json › releaseExceptions › …: a commercial release ships no exceptionverify:commercial refuse toute exceptionRemplacez l’asset
provenance.json › …: <licence> does not allow commercial use (or changes)Une licence NC ou ND dans une release commercialeRemplacez l’asset

Fichiers ou données modifiés

Revenir en arrière

Un verrou est un fichier : sous git, git checkout -- provenance.lock.json ramène le précédent. Changer un fichier après un verrou n’est pas une erreur à annuler : relisez-le, puis verrouillez de nouveau.

Référence : provenance.json

Les entrées

assets: [{ match, source, licence, author?, url?, prompt?, status, note? }]

ChampFormeSens
matchune clé d’asset avec *img:<id d’image du manifeste>, sfx:<fichier>, music:<fichier>, voice:<fichier>, video:<fichier>
sourcetexteD’où il vient : un outil, une boutique, un fichier du dépôt
licencetexteCC BY 4.0, own work…
authortexte, facultatifExigé par verify:commercial
urltexte, facultatifOù vérifier la source (une page de boutique, une licence, un dépôt)
prompttexte, facultatifLe prompt de génération
statusfinal ou placeholderUn emplacement fait échouer une release, sauf exception
notetexte, facultatifLibre

Les clés correspondent aux fichiers construits : img:<id> → public/assets/img/<id>.webp, sfx:<fichier> → audio/sfx/<fichier>, music:<fichier> → audio/music/<fichier>, voice:<fichier> → audio/voices/<fichier>, video:<fichier> → video/<fichier>.

Politique de licences et exceptions

Ce que vérifie chaque commande

CommandeVérifie
npm run validateUn jeu qui a le fichier : chaque asset couvert par exactement une entrée, chaque entrée complète ; un verrou en désaccord n’est qu’un avertissement
npm run validate -- --releaseExige le fichier, la politique de licences et le verrou ; échoue sur un emplacement ou une licence non exceptés, et sur toute différence avec le verrou (fichier changé, asset livré depuis, fichier manquant, entrée modifiée)
npm run provenanceAffiche les assets par licence et ce qui a changé depuis le verrou ; code 1 quand quelque chose est à relire
npm run provenance -- --lockÉcrit provenance.lock.json : le SHA-256 et la taille de chaque fichier livré, avec les déclarations de son entrée (motif, licence, statut)
npm run verify:commercialverify:release, puis validate --commercial : aucune entrée releaseExceptions, aucun emplacement, aucune licence non commerciale ou sans modification (NC, ND), chaque entrée avec un author et une source vérifiable (une url, ou un fichier du dépôt cité dans source)

npm run new-game (dépôt du moteur) écrit un provenance.json pour les images qu’il emprunte au jeu d’exemple : que des emplacements, en CC BY 4.0. Le fichier du jeu d’exemple n’a aucune exception : tous ses assets sont en CC BY 4.0 depuis 3.7, et il passe verify:commercial. tests/fixtures/release-game y échoue exprès.

Ce que contient l’archive livrée (3.7.1)

Les vérifications ci-dessus lisent le graphe d’assets du jeu ; l’archive, c’est ce que Vite copie dans dist/, et dans le dépôt du moteur public/ est partagé par tous les jeux. Chaque build se termine donc par tools/dist.ts seal (un plugin Vite) : les assets qui ne sont pas à ce jeu sont retirés, et dist/licenses/ est écrit : la LICENSE du moteur, LICENSE-ASSETS (celle du jeu s’il en a une), CREDITS.md tiré de sa provenance, THIRD_PARTY_NOTICES.txt (la licence de chaque paquet dont le bundle a pris du code, celle de Workbox pour le service worker, l’OFL des polices) et assets-manifest.json (chaque fichier : chemin, auteur, source, licence, SHA-256, statut). Puis npm run verify:dist (une étape de npm run build, donc de la release) classe chaque fichier de dist/ : du code, un asset verrouillé dont les octets sont ceux relus, un fichier de données que le jeu nomme (ending.file), une police, une icône, une notice. Tout le reste échoue, de même qu’un fichier verrouillé ou une notice qui manque. La release joint le manifeste des assets à côté de l’archive.

Les budgets de poids et les vérifications de traduction que lancent les mêmes portes de release sont dans Images, Build et release et Traductions.

Limite · audit-is-different npm run audit (dépôt du moteur) est une autre vérification : elle tient les noms d’un projet privé hors du dépôt public. Elle ne dit rien des licences.

Références


Modifier la source de cette page · Signaler une erreur