• v1.10.1 8eefdcb9da

    NoBaSe 1.10.1
    All checks were successful
    Intégration continue / ci (push) Successful in 2m22s
    nobase/tests 1510 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 2m20s
    Stable

    jlequen released this 2026-11-06 11:12:02 +00:00 | 0 commits to main since this release

    Français

    • Corrige une fausse alerte « Aucune sauvegarde réussie depuis N jours » : après une période
      sans modification (sauvegardes automatiques sautées, comme prévu), la première modification
      déclenchait l'alerte, comptée depuis la dernière sauvegarde, juste avant que la sauvegarde de
      rattrapage ne réussisse. Le délai est désormais compté depuis la première modification non
      sauvegardée.
    • L'historique des mises à jour (validation automatique d'une version) et la vérification des
      canaux de thèmes ne comptent plus comme des modifications du site.
    • Tests : étape access, alerte de sauvegarde (site inchangé puis modifié, modifications en
      attente, tenue de registre ignorée).

    English

    • Fixes a false “No successful backup for N days” alert after a quiet period: the delay now
      starts at the first unsaved change, not at the last backup. CMS bookkeeping (update history,
      theme channel checks) no longer counts as a site change.

    Fichier Taille SHA-256
    nobase-1.10.1.zip 1.25 Mo 00e79361944a5e033bd159d9ed79db4a869255e395146682574e6a5ca510aa3f
    nobase-update-1.10.1.zip 1.00 Mo 7f6f67d759a7e8101d2d8e01c3dde03092c5d1cae33950931423cdc562024133
    • nobase-1.10.1.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.10.1.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 71, commit 8eefdcb9daf6).
    Downloads
  • v1.10.0 36eeb645d7

    NoBaSe 1.10.0
    All checks were successful
    Intégration continue / ci (push) Successful in 2m13s
    nobase/tests 1507 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 2m20s
    Stable

    jlequen released this 2026-10-30 09:04:38 +00:00 | 1 commits to main since this release

    Français

    • API de publication par jetons (docs/api.md) : publier, programmer et
      illustrer des contenus depuis un script, un outil d'écriture ou une automatisation, sans
      navigateur (Authorization: Bearer nbt_…). Jetons créés dans Mon compte → Jetons d'API
      après confirmation d'identité : nom, droits (contenus, publication, suppression, médias), types
      de contenu, validité (1 an au plus) ; secret montré une seule fois, stocké seulement haché.
    • Sécurité : droits du jeton = droits cochés ∩ rôles du compte (recalculés à chaque requête), HTML
      libre toujours nettoyé, routes des contenus et des médias seulement (jamais comptes, sécurité,
      système, thèmes, sauvegardes, mises à jour), aucun cookie ni session, débit borné, jetons
      refusés signalés au pare-feu, audit au nom du jeton, alerte à la création, révocation par le
      propriétaire ou un administrateur, interrupteur Réglages système → Sessions → Jetons d'API
      (CMS_API_TOKENS=0). www/.htaccess transmet l'en-tête Authorization à PHP.
    • Tests : nouvelle étape api ; page Mon compte mesurée sur mobile.

    English

    • Token-based publishing API (docs/api.md): publish, schedule and illustrate
      content from a script or automation (Authorization: Bearer nbt_…). Tokens are created in
      My account → API tokens after identity confirmation, shown once, stored hashed.
    • Security: token rights = ticked scopes ∩ account roles, raw HTML always sanitised, content and
      media routes only, no cookie or session, rate limited, failures reported to the firewall,
      audited under the token's name, revocable by the owner or an administrator, site-wide switch.
    • Tests: new api step.

    Fichier Taille SHA-256
    nobase-1.10.0.zip 1.25 Mo 52b3d825c6b5f07bec391e81afde0b17b79cfa58a9d405a06755fa79a945766c
    nobase-update-1.10.0.zip 1.01 Mo af5223c8535cdd3d3dd3b7febfed1b3b07182a64f09d88cfca9f16731fdfa446
    • nobase-1.10.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.10.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 67, commit 36eeb645d750).
    Downloads
  • v1.9.0 41ab0287ee

    NoBaSe 1.9.0
    All checks were successful
    nobase/tests 1449 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 2m18s
    Stable

    jlequen released this 2026-10-30 09:02:06 +00:00 | 2 commits to main since this release

    Français

    • Mises à jour des thèmes indépendantes du CMS : chaque thème peut déclarer dans son
      theme.json son propre canal signé (update : adresse de l'index + clés publiques de son
      auteur). Le site vérifie le canal chaque jour, annonce les nouvelles versions (Thèmes → Mises à
      jour des thèmes
      , alerte e-mail) et les installe après validation (droit themes, 2FA,
      confirmation d'identité). Sécurité : clés de l'auteur figées à l'installation, index signé avec
      expiration et anti-rejeu, téléchargement anti-SSRF (adresse publique épinglée, sans
      redirection), empreinte du paquet, puis la même analyse que l'import (sans forçage).
    • Mise à jour sur place du thème actif (par le canal ou par import d'un .zip) : ancienne
      version archivée, réglages conservés, contrôle de santé du site juste après, retour automatique
      à l'ancienne version en cas de problème. Il n'est plus nécessaire d'activer un autre thème.
    • L'import compare les versions (installée → nouvelle), signale une version plus ancienne et un
      changement de canal ou de clés.
    • Compatibilité thème ↔ CMS : nobase_min et nobase_below dans theme.json. Un thème
      incompatible n'est ni importé, ni activé, ni proposé en mise à jour ; une mise à jour du CMS est
      bloquée tant que le thème actif ne la prend pas en charge.
    • Outil de l'auteur : tools/theme_release.py (keygen, release, index, verify) construit
      et signe les versions d'un thème ; CHANGELOG.md permis à la racine d'un thème (notes de version).
    • Tests : nouvelle étape themes (faux canal signé : accès, parcours complet, canal hostile,
      compatibilité, version qui casse le site, import sur place) ; page Thèmes mesurée sur mobile.

    English

    • Theme updates independent of the CMS: each theme can declare its own signed channel in
      theme.json (update: index URL + its author's public keys). The site checks it daily,
      announces new versions and installs them after approval (themes permission, 2FA, identity
      confirmation). Author keys pinned at install, signed index with expiry and anti-replay,
      SSRF-safe download, package hash, then the full import analysis (no override).
    • In-place update of the active theme (channel or .zip import): previous version archived,
      settings kept, site health check, automatic rollback.
    • Import compares versions and flags downgrades and channel/key changes.
    • Theme ↔ CMS compatibility: nobase_min / nobase_below; incompatible themes are refused,
      and a CMS update is blocked while the active theme does not support it.
    • Author tool: tools/theme_release.py. Tests: new themes step.

    Fichier Taille SHA-256
    nobase-1.9.0.zip 1.23 Mo 450c28d828c28b58b2c9e49d008c3816f3045732677452370544224fa5a89464
    nobase-update-1.9.0.zip 1.00 Mo 07268597bc3cfb3c2d40c9aeb16e218699004584ed14701f887c4f2193afe16c
    • nobase-1.9.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.9.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 66, commit 41ab0287eeec).
    Downloads
  • v1.8.0 0a8aefe508

    NoBaSe 1.8.0
    All checks were successful
    nobase/tests 1376 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 2m9s
    Stable

    jlequen released this 2026-10-30 08:59:39 +00:00 | 3 commits to main since this release

    Français

    • PHP 8.3 minimum (8.1 auparavant, qui n'est plus maintenu depuis fin 2025) ; PHP 8.5
      conseillé
      (maintenance complète jusqu'à fin 2027, sécurité jusqu'à fin 2029). PHP 8.3 reçoit
      les correctifs de sécurité jusqu'à fin 2027 : passez à 8.5 quand votre hébergeur la propose
      (chez OVH : app.engine.version=8.5 dans le .ovhconfig du site). L'image Docker passe à
      php:8.5-apache (PHP_VERSION=8.3 pour tester la version minimale).
    • Code prêt pour PHP 8.5 : imagedestroy(), obsolète en 8.5 (sans effet depuis 8.0), n'est plus
      appelé. Suite de tests complète en PHP 8.5.12 et en PHP 8.3, sans aucun avertissement ni
      obsolescence (E_ALL).
    • Outils : Python 3.11 minimum pour les scripts de publication et de test (3.9 n'est plus
      maintenu).

    English

    • PHP 8.3 minimum (previously 8.1, unmaintained since late 2025); PHP 8.5 recommended.
      The Docker image uses php:8.5-apache (PHP_VERSION=8.3 to test the minimum).
    • PHP 8.5 ready: deprecated imagedestroy() calls removed; full test suite on PHP 8.5.12 and 8.3
      with no warning or deprecation. Tooling: Python 3.11 minimum.

    Fichier Taille SHA-256
    nobase-1.8.0.zip 1.22 Mo 33831da6696eb8f63ec2b18146b1176d50454c1be950ea4ce14e1144e9e72c9f
    nobase-update-1.8.0.zip 0.98 Mo 482d6b3b53df10ceea34822fda3e6f2f1ed43e78f45890f39680087fa0c5866c
    • nobase-1.8.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.8.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 65, commit 0a8aefe5084a).
    Downloads
  • v1.7.1 97b4487f0a

    NoBaSe 1.7.1
    All checks were successful
    Intégration continue / ci (push) Successful in 1m57s
    nobase/tests 1376 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 1m54s
    Stable

    jlequen released this 2026-10-30 07:17:38 +00:00 | 4 commits to main since this release

    Français

    • Plus aucun outil abandonné dans la chaîne de compilation du back-office :
      • deepmerge (dépendance du greffon Svelte de Vite, aucune version depuis 2023, faille
        GHSA-gcqx-w48m-w2h4 jamais corrigée) est remplacé par une fonction de fusion écrite pour NoBaSe,
        sans son code (admin-src/vendor/nobase-merge), sur le modèle du correctif proposé au greffon
        (sveltejs/vite-plugin-svelte#1415) ; testée à chaque make test (dont la pollution de prototype) ;
      • TypeScript 7 (7.0.2) vérifie désormais le code (svelte-check --tsgo) ; TypeScript 6.0,
        en maintenance officielle (correctifs de sécurité), reste installé parce que svelte-check
        s'en sert pour lire les fichiers Svelte ;
      • Node.js 26.13.0 (LTS) sur la forge au lieu de 22 ; empreintes tirées de SHASUMS256.txt
        après vérification de sa signature GPG ;
      • Chrome for Testing 156.0.8078.80 pour les tests navigateur.
    • Aucun changement pour les sites : le code installé (PHP) est le même qu'en 1.7.0, hormis le
      back-office recompilé.

    English

    • No unmaintained tool left in the admin build chain: deepmerge (no release since 2023,
      unfixed GHSA-gcqx-w48m-w2h4) replaced by NoBaSe's own merge function, modelled on
      sveltejs/vite-plugin-svelte#1415 and tested on every run; TypeScript 7 now type-checks the code
      (svelte-check --tsgo, TypeScript 6.0 kept for svelte-check, under official security maintenance);
      Node.js 26.13.0 LTS on the forge; Chrome for Testing 156.0.8078.80.
    • No change for sites besides the rebuilt admin area.

    Fichier Taille SHA-256
    nobase-1.7.1.zip 1.22 Mo 33dd9aad917a5e6112a7bc23a88d633f20a56dc69db894e99d7a3568adebdc91
    nobase-update-1.7.1.zip 0.98 Mo e039d3b1e6ac8ea2ac1faf1502ba5702e975e4880af3b1ee6d1a16219df40ebd
    • nobase-1.7.1.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.7.1.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 63, commit 97b4487f0a65).
    Downloads
  • v1.7.0 5d49ea3b29

    NoBaSe 1.7.0
    All checks were successful
    Intégration continue / ci (push) Successful in 1m57s
    nobase/tests 1376 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 1m56s
    Stable

    jlequen released this 2026-10-29 20:15:16 +00:00 | 5 commits to main since this release

    Français

    • Informations sur une adresse IP (whois intégré) : bouton Infos devant chaque adresse
      bloquée (Sécurité → Blocages). Titulaire du réseau et son adresse, nom et bloc d'adresses, pays,
      contact d'abus de l'hébergeur, dates, nom d'hôte inverse (confirmé ou non), lien vers la réponse
      brute. Données du registre qui fait autorité (ARIN, RIPE NCC, APNIC, LACNIC, AFRINIC) par le
      protocole RDAP, successeur du whois, choisi par l'annuaire de l'IANA.
    • Confidentialité et sécurité : adresse envoyée au registre seulement sur demande, jamais pour
      une adresse privée ; seuls les registres officiels sont contactés (HTTPS, redirections vers eux
      seulement, 8 s et 512 Ko au plus) ; textes du registre nettoyés et affichés comme du texte ;
      cache de 7 jours (data/cache/rdap/, sans les échecs passagers) ; débit limité ; droit security ; journal d'audit
      (security.ip_lookup).
    • Tests : étape access, faux registre RDAP (rdap.nobase.test) : contrôle d'accès, adresses
      invalides et privées, analyse d'une réponse de forme RIPE, cache, audit, redirections hostiles,
      réponse géante, réponse invalide, caractères de contrôle.

    English

    • IP address information (built-in whois): an Info button next to each blocked address
      (Security → Blocks) shows the network holder and address, network name and range, country, the
      host's abuse contact, dates, reverse host name (confirmed or not) and a link to the raw answer,
      from the authoritative registry (ARIN, RIPE NCC, APNIC, LACNIC, AFRINIC) over RDAP, the
      successor of whois, selected through the IANA bootstrap registry.
    • Privacy and security: the address is sent to the registry only on request, never for a
      private address; only the official registries are contacted (HTTPS, redirects to them only, 8 s
      and 512 KB max); registry text is sanitised and rendered as text; 7-day cache; rate limited;
      security permission; audit log entry.
    • Tests: access step, fake RDAP registry covering access control, invalid and private addresses,
      parsing, cache, audit, hostile redirects, oversized and invalid answers, control characters.

    Fichier Taille SHA-256
    nobase-1.7.0.zip 1.22 Mo 44f4f6c1b0ac135ca2687c9c18b8d0eed4d6dfd7e18fad2c09b3a45f144883ba
    nobase-update-1.7.0.zip 0.99 Mo 31ab133f1cc09e25820e466e89791e8424aae52df3a41983d90cbfdcbb771bce
    • nobase-1.7.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.7.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 61, commit 5d49ea3b29bc).
    Downloads
  • v1.6.0 7c8ef3638b

    NoBaSe 1.6.0
    All checks were successful
    Intégration continue / ci (push) Successful in 1m45s
    nobase/tests 1352 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 1m55s
    Stable

    jlequen released this 2026-10-29 19:20:15 +00:00 | 6 commits to main since this release

    Français

    • Rester connecté entre deux visites (Réglages système → Sessions, session_persistent,
      désactivé par défaut ; surcharge CMS_SESSION_PERSISTENT=1) : le cookie de session porte une
      expiration égale à la durée maximale d'une session, au lieu de disparaître à la fermeture du
      navigateur. Le back-office reste ouvert sur un téléphone ou dans l'application installée, même
      quand Android ferme Chrome en arrière-plan. Les contrôles côté serveur sont inchangés
      (inactivité, durée maximale, « déconnecter partout », changement de mot de passe) et les actions
      sensibles demandent toujours une confirmation d'identité. À éviter sur des ordinateurs partagés.
    • La déconnexion efface désormais aussi le cookie de session dans le navigateur (Max-Age=0).
    • Expiration après inactivité réglable jusqu'à 30 jours (7 jours auparavant), comme la durée
      maximale d'une session.
    • Tests : étape access, cookie de session avec et sans le réglage (attributs Expires/Max-Age
      réellement émis), contrôle d'accès du réglage, bornes de l'inactivité.

    English

    • Stay signed in between visits (System settings → Sessions, session_persistent, off by
      default; override CMS_SESSION_PERSISTENT=1): the session cookie expires with the maximum session
      lifetime instead of being dropped when the browser closes, so the admin area stays open on a phone
      or in the installed app. Server-side checks are unchanged and sensitive actions still require an
      identity confirmation. Avoid on shared computers.
    • Signing out now also clears the session cookie in the browser (Max-Age=0).
    • Expiry after inactivity can now be set up to 30 days (previously 7).
    • Tests: access step checks the session cookie with and without the setting, access control and
      inactivity bounds.

    Fichier Taille SHA-256
    nobase-1.6.0.zip 1.21 Mo 00c809a119ddd7ba8e7ff8090ebded5b8ed0982e99df266369bd4ba575bd0288
    nobase-update-1.6.0.zip 0.98 Mo dce6c419f34ff66e2a056f960d29a3490a0061c15daac0a2f15e66dfdc55db98
    • nobase-1.6.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.6.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 59, commit 7c8ef3638bd6).
    Downloads
  • v1.5.1 33cc33f37d

    NoBaSe 1.5.1
    All checks were successful
    Intégration continue / ci (push) Successful in 2m0s
    nobase/tests 1334 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 1m53s
    Stable

    jlequen released this 2026-10-29 18:48:09 +00:00 | 7 commits to main since this release

    Français

    • Installation du back-office comme application sur Android : l'invitation d'installation du
      navigateur n'est plus étouffée. Le back-office captait l'événement beforeinstallprompt et
      l'annulait (preventDefault()) pour le remplacer par son propre bouton, présent seulement dans
      les réglages de notifications ; sur Android, Chrome n'affichait alors ni bannière ni pastille
      « Installer l'application ». L'invitation de Chrome est rétablie, et le bouton « Installer
      l'application » apparaît aussi sur l'écran de connexion et dans le menu du compte (seulement si
      le navigateur propose l'installation et que l'application n'est pas déjà installée).
    • Nom court de l'application (sous l'icône de l'écran d'accueil) : le nom du site entier jusqu'à
      15 caractères, sinon les premiers mots qui tiennent ; plus jamais un mot coupé (« La
      Brigantine 2 » donnait « La Brigantin »).
    • Tests : vérifications de la PWA dans l'étape access (manifeste et icônes sans session, nom
      court, invitation du navigateur conservée).
    • Dépendances à jour, aucune vulnérabilité connue (npm audit : 0) : svelte 5.57.3, svelte-check
      4.7.7, vite 8.3.5, TypeScript 6.0.3 (dernière version acceptée par svelte-check ; la 7 ne l'est pas
      encore). deepmerge (utilisé par le greffon Svelte de Vite, compilation seulement) n'a aucune version
      corrigée de GHSA-gcqx-w48m-w2h4 (empoisonnement du prototype de l'objet renvoyé) : une copie corrigée
      est embarquée (admin-src/vendor/deepmerge, propriétés définies et non plus affectées) et imposée
      par overrides ; elle demande npm ≥ 10 (Node.js 22 le fournit ; make admin et make test
      l'indiquent clairement avec le npm 9 de Debian).
    • CI et publication : Node.js 22.23.4 (version de sécurité du 2026-10-20, au lieu de 22.23.3) et
      Chrome for Testing 156.0.8078.73 (au lieu de 155), SHA-256 figés.
    • Tests : le PHP de test n'utilise plus les domaines de recherche DNS du poste (LOCALDOMAIN) ;
      sur un réseau dont le DNS répond pour tout sous-domaine, les noms fictifs de l'étape calendars
      se résolvaient en adresse privée et l'anti-SSRF (à raison) les refusait.

    English

    • Installing the admin area as an app on Android: the browser's install prompt is no longer
      suppressed. The admin area caught beforeinstallprompt and cancelled it (preventDefault()) in
      favour of its own button, shown only in the notification settings; on Android, Chrome then showed
      no install banner or badge. Chrome's prompt is restored, and the “Install the app” button now also
      appears on the sign-in screen and in the account menu (only when the browser offers installation
      and the app is not installed yet).
    • App short name (under the home-screen icon): the full site name up to 15 characters,
      otherwise the first words that fit; a word is never cut anymore.
    • Tests: PWA checks in the access step (manifest and icons without a session, short name, browser
      prompt kept).
    • Dependencies up to date, no known vulnerability (npm audit: 0): svelte 5.57.3, svelte-check
      4.7.7, vite 8.3.5, TypeScript 6.0.3 (latest accepted by svelte-check). deepmerge (build only) has no
      fixed release for GHSA-gcqx-w48m-w2h4: a patched copy is bundled (admin-src/vendor/deepmerge) and
      enforced through overrides; it requires npm ≥ 10 (shipped with Node.js 22).
    • CI and release: Node.js 22.23.4 (security release) and Chrome for Testing 156.0.8078.73,
      pinned SHA-256.
    • Tests: the test PHP no longer uses the machine's DNS search domains (LOCALDOMAIN), so fictitious
      test host names cannot resolve to a private address on networks with wildcard DNS.

    Fichier Taille SHA-256
    nobase-1.5.1.zip 1.21 Mo df040876beb458c64e973bc1d9b4469a70b5f4f7f800a22cffb4c04888a940c1
    nobase-update-1.5.1.zip 0.98 Mo 1b87e5b12e70af8b72c7be53d621f76613711c60c3f984029f54e0d28f4dd4b9
    • nobase-1.5.1.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.5.1.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 57, commit 33cc33f37db8).
    Downloads
  • v1.5.0 22965577fb

    NoBaSe 1.5.0
    All checks were successful
    Intégration continue / ci (push) Successful in 1m52s
    nobase/tests 1323 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 2m6s
    Stable

    jlequen released this 2026-10-15 12:41:36 +00:00 | 8 commits to main since this release

    Français

    • Calendriers : état des jours sans période (onglet Statuts) : les demi-journées sans période
      peuvent prendre un statut du calendrier (ex. « Fermé ») au lieu d'être libres ; une période
      « Disponible » les rouvre. Appliqué partout de la même façon : affichage sur le site et sa légende,
      lecture publique (default_status), formulaires liés (refus dans un jour fermé, au demi-jour près),
      export iCal (les jours concernés deviennent des événements), vue du back-office. Un statut par
      défaut non public n'est jamais montré sur le site mais compte pour les formulaires. Sans réglage,
      rien ne change.
    • Nouveaux calendriers : statut « Disponible » (non occupé) proposé en plus d'Indisponible, Option
      et Fermé.
    • Canal de mise à jour réglable depuis la page Mises à jour (carte « Le site ne cherche pas les
      mises à jour tout seul » et Options avancées), avec un bouton « Utiliser le canal officiel » ;
      mêmes protections que dans Réglages système (droit Réglages système, double authentification,
      confirmation d'identité), vérification du canal aussitôt après l'enregistrement ; lecture seule
      pour les autres comptes ou si la valeur est imposée par le serveur.
    • Nouvelles installations : canal de mise à jour officiel prérempli (case à décocher dans
      /install, option --no-update-channel en ligne de commande). Les sites existants ne changent pas.
    • Vocabulaire unique « canal de mise à jour » dans le back-office et l'aide.

    English

    • Calendars: state of days without a period (Statuses tab): half-days without a period can take
      a status of the calendar (e.g. “Closed”) instead of being free; an “Available” period reopens them.
      Applied everywhere in the same way: display on the site and its legend, public read
      (default_status), linked forms (refused on a closed day, to the half-day), iCal export (those days
      become events), back-office view. A non-public default status is never shown on the site but counts
      for forms. Without this setting, nothing changes.
    • New calendars: “Available” status (not busy) offered in addition to Unavailable, Option and Closed.
    • Update channel can be set from the Updates page (“The site does not look for updates on its
      own” card and Advanced options), with a “Use the official channel” button; same protections as
      in System settings (System settings right, two-factor authentication, identity confirmation),
      channel checked right after saving; read-only for other accounts or when the value is imposed by
      the server.
    • New installations: official update channel pre-filled (checkbox to untick in /install,
      --no-update-channel on the command line). Existing sites do not change.
    • Single wording “update channel” in the back office and help.

    Fichier Taille SHA-256
    nobase-1.5.0.zip 1.21 Mo e612e93b5e96b18fc4acbefbe25d32c7e22bcd3f0ade2dda993c1d308dccf926
    nobase-update-1.5.0.zip 0.98 Mo 64added3cbe3e7da489e3fdfc28e937fdd18b75850c69e5aef00d625d97b30ec
    • nobase-1.5.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.5.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 54, commit 22965577fb49).
    Downloads
  • v1.4.0 6f569be220

    NoBaSe 1.4.0
    All checks were successful
    Intégration continue / ci (push) Successful in 1m35s
    nobase/tests 1273 vérification(s) réussie(s), 0 échec(s) ; NON EXÉCUTÉ : webauthn : navigateur headless inutilisable pour WebAuthn sur cet hôte : ERREUR (environnement de test) : bibliothèques système manquantes pour chrome-headless-s | mobile : navigateur headle
    Publication d'une version / release (push) Successful in 1m43s
    Stable

    jlequen released this 2026-10-15 09:53:10 +00:00 | 9 commits to main since this release

    Français

    • Calendriers de disponibilité au demi-jour (menu Calendriers, droit calendars : Administrateur et
      Éditeur) : périodes du matin ou de l'après-midi avec des statuts propres au site (couleur, public ou
      non, occupé ou non), note privée, chevauchements refusés avec la liste des conflits ou remplacés
      (raccourcis, découpés) à la demande, saisie à la souris, au doigt ou au clavier, historique,
      archivage, duplication, suppression avec archive de 90 jours, purge automatique des périodes
      terminées depuis plus d'un an. Affichage dans une page par un nouveau champ de genre « Calendrier » :
      rendu accessible sans JavaScript (un tableau par mois, état de chaque jour écrit, hachures pour
      l'indisponible), statuts publics seulement, jamais de note ; lecture publique
      /api/public/calendars/<id> mise en cache 5 minutes. Documentation : docs/calendriers.md.
    • Cache des pages : une page peut fixer sa propre échéance (calendrier : minuit suivant).
    • Formulaires liés à un calendrier : un champ « Dates du séjour » peut vérifier les dates dans un
      calendrier (demi-journées d'arrivée et de départ) et refuser l'envoi (message générique, rien de
      privé), l'accepter en le signalant, ou ne rien vérifier ; l'envoi ne modifie jamais le calendrier.
      Dans Messages reçus : « Créer une période à partir de ce message » (dialogue pré-rempli). Un clic
      sur le calendrier de la page remplit les dates.
    • Calendriers : iCal. Export par une adresse privée (/ical/<id>/<jeton>.ics, jeton stocké
      seulement haché, montré une fois, régénérable et révocable après confirmation d'identité, statuts
      choisis, jamais les notes, débit limité) ; import de 5 sources par calendrier (HTTPS, protection
      contre les requêtes vers le réseau interne, 2 Mo, récurrences bornées), synchronisées
      automatiquement ou à la demande, périodes importées en lecture seule, conflits comptés, alerte
      après trois échecs de suite (nouveau type « calendar_import »).
    • Formulaires : nouveau crochet form_validate (erreurs par champ ajoutées par une extension) et
      signalements (form_flag) visibles dans Messages reçus et dans l'e-mail de notification.
    • Statistiques : adresses IP exclues (Statistiques → Réglages de la mesure) : une liste d'IP ou de
      plages CIDR (sonde Uptime Kuma, poste du bureau…) qui ne sont plus comptées, ni comme visites ni
      dans les compteurs de requêtes (robots compris). Journal de sécurité et pare-feu inchangés pour elles.
    • Uptime Kuma reconnu comme sonde de disponibilité.
    • Corrigé : la page Statistiques débordait sur mobile quand le graphique avait des données
      (tableau accessible masqué mal contenu).

    English

    • Half-day availability calendars (Calendars menu, calendars right: Administrator and Editor):
      morning or afternoon periods with site-defined statuses (colour, public or not, busy or not),
      private note, overlaps refused with the list of conflicts or replaced (shortened, split) on
      request, entry by mouse, touch or keyboard, history, archiving, duplication, deletion with a
      90-day archive, automatic purge of periods that ended more than a year ago. Shown in a page
      through a new “Calendar” field kind: accessible rendering without JavaScript (one table per month,
      each day's state written out, hatching for unavailable), public statuses only, never a note; public
      read /api/public/calendars/<id> cached for 5 minutes. Documentation: docs/calendriers.md.
    • Page cache: a page can set its own expiry (calendar: next midnight).
    • Forms linked to a calendar: a “Dates of stay” field can check the dates in a calendar (arrival
      and departure half-days) and refuse the submission (generic message, nothing private), accept it
      with a flag, or check nothing; a submission never changes the calendar. In Received messages:
      “Create a period from this message” (pre-filled dialog). Clicking the calendar on the page fills
      in the dates.
    • Calendars: iCal. Export through a private address (/ical/<id>/<token>.ics, token stored
      hashed only, shown once, regenerable and revocable after identity confirmation, chosen statuses,
      never the notes, rate limited); import of 5 sources per calendar (HTTPS, protection against requests
      to the internal network, 2 MB, bounded recurrences), synchronised automatically or on demand,
      read-only imported periods, conflicts counted, alert after three failures in a row (new
      “calendar_import” type).
    • Forms: new form_validate hook (per-field errors added by an extension) and flags (form_flag)
      shown in Received messages and in the notification e-mail.
    • Analytics: excluded IP addresses (Analytics → Measurement settings): IPs or CIDR ranges (Uptime
      Kuma monitor, office computer…) that are no longer counted, neither as visits nor in request
      counters (bots included). Security log and firewall still apply to them.
    • Uptime Kuma recognised as an uptime monitor.
    • Fixed: the Analytics page overflowed on mobile when the chart had data (hidden accessible table).

    Fichier Taille SHA-256
    nobase-1.4.0.zip 1.20 Mo 106a29820a861338f2c0b99f2374dd2f19fa5621b31e524b6502534dec50dc22
    nobase-update-1.4.0.zip 0.97 Mo 7de57306a34f9f0ed57a4aeffb14d5a19e033c571ed70e5502e88cca0e162758
    • nobase-1.4.0.zip : paquet d'installation public, sans jeton (créez le vôtre : php app/cli/install.php --new-token, ou voir INSTALLATION.txt).
    • nobase-update-1.4.0.zip : paquet de mise à jour signé (Ed25519 + ECDSA P-256), installé depuis le back-office (Mises à jour) ou par le canal latest.json de la branche updates.
    • Signé par la clé cccd09dc81ef2c61 — empreinte SHA-256 cccd09dc81ef2c6173538eaf923ea4463eee78491c4a48cf622645e2658ff875 (comparez avec www/app/update-keys.json).
    • Construit et signé automatiquement par la forge (exécution n° 52, commit 6f569be220b5).
    Downloads