feat(gating): auto-update Base+ (absorbe #271) + override licence (Rust) #301

Closed
opened 2026-07-19 21:18:21 +00:00 by maximus · 1 comment
Owner

Cote Rust : auto-update passe Base+ (absorbe #271), purge des entrees mortes de FEATURE_TIERS, override features[] fail-closed, dev-override pour tester les tiers. Independant du reste (parallelisable).

Fichiers concernes

  • src-tauri/src/commands/entitlements.rs (modifier) — FEATURE_TIERS + is_feature_allowed/check_entitlement.
  • src-tauri/src/commands/license_commands.rs (modifier) — resolution features via chemin machine-binding + dev-override.
  • src-tauri/Cargo.toml (modifier) — Cargo feature dev-override (off par defaut).

Depends on

  • aucune (Rust independant, parallelisable)

Criteres d'acceptation

  • entitlements.rs : ("auto-update", &[EDITION_BASE, EDITION_PREMIUM]) ; commentaire « temporarily open » retire ; test free_allows_auto_update_temporarily -> free_denied_auto_update.
  • Purge des entrees mortes web-sync, cloud-backup, advanced-reports (aucun call-site ; advanced-reports->Premium contredit la matrice TS). Ne reste que auto-update.
  • Override features[] fail-closed en Free : les features sont resolues via le meme chemin machine-binding que l'edition (ignorees si current_edition downgrade a free), puis is_feature_allowed(f, ed) || features.contains(f).
  • Dev-override : Cargo feature dev-override (off par defaut, jamais dans le feature-set release) ; sous cette feature, current_edition lit SR_DEV_EDITION. Test que SR_DEV_EDITION n'a AUCUN effet feature-off.
  • #271 ferme superseded (deja fait).

Review caveats (/review-spec — a respecter)

  • CWE-863 : override features[] fail-closed en Free.
  • CWE-489 : dev-override derriere une Cargo feature dediee, PAS debug_assertions (activable sur un build release -> backdoor Premium).
  • Purger advanced-reports (contredit reports-advanced cote TS).

Decisions prises en planification

  • #271 absorbe ici.
  • Dev-override GARDE (Autopilot default) : utile pour tester les 3 tiers, sur car off par defaut hors dev.

Spec source

spec-decisions-feature-gating.md + spec-plan-feature-gating.md (racine, force-add ; verdict /review-spec jaune, corrections integrees).

Cote Rust : auto-update passe Base+ (absorbe #271), purge des entrees mortes de FEATURE_TIERS, override features[] fail-closed, dev-override pour tester les tiers. Independant du reste (parallelisable). ## Fichiers concernes - `src-tauri/src/commands/entitlements.rs` (modifier) — FEATURE_TIERS + is_feature_allowed/check_entitlement. - `src-tauri/src/commands/license_commands.rs` (modifier) — resolution features via chemin machine-binding + dev-override. - `src-tauri/Cargo.toml` (modifier) — Cargo feature `dev-override` (off par defaut). ## Depends on - aucune (Rust independant, parallelisable) ## Criteres d'acceptation - [ ] `entitlements.rs` : `("auto-update", &[EDITION_BASE, EDITION_PREMIUM])` ; commentaire « temporarily open » retire ; test `free_allows_auto_update_temporarily` -> `free_denied_auto_update`. - [ ] Purge des entrees mortes `web-sync`, `cloud-backup`, `advanced-reports` (aucun call-site ; advanced-reports->Premium contredit la matrice TS). Ne reste que `auto-update`. - [ ] Override features[] fail-closed en Free : les features sont resolues via le meme chemin machine-binding que l'edition (ignorees si current_edition downgrade a free), puis `is_feature_allowed(f, ed) || features.contains(f)`. - [ ] Dev-override : Cargo feature `dev-override` (off par defaut, jamais dans le feature-set release) ; sous cette feature, current_edition lit `SR_DEV_EDITION`. Test que `SR_DEV_EDITION` n'a AUCUN effet feature-off. - [ ] #271 ferme superseded (deja fait). ## Review caveats (/review-spec — a respecter) - CWE-863 : override features[] fail-closed en Free. - CWE-489 : dev-override derriere une Cargo feature dediee, PAS `debug_assertions` (activable sur un build release -> backdoor Premium). - Purger advanced-reports (contredit reports-advanced cote TS). ## Decisions prises en planification - #271 absorbe ici. - Dev-override GARDE (Autopilot default) : utile pour tester les 3 tiers, sur car off par defaut hors dev. ## Spec source spec-decisions-feature-gating.md + spec-plan-feature-gating.md (racine, force-add ; verdict /review-spec jaune, corrections integrees).
maximus added this to the planned-2026-07-19-feature-gating milestone 2026-07-19 21:18:21 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-07-19 21:18:21 +00:00
Author
Owner

Corrections /review-spec :

  • Purger les entrees mortes de FEATURE_TIERS : web-sync, cloud-backup, advanced-reports (aucun call-site ; advanced-reports->Premium contredit la matrice TS reports-advanced->Base+). Ne laisser que auto-update.
  • Override features[] fail-closed en Free : resoudre les features via le chemin machine-binding (ignorees si l edition downgrade a free) — CWE-863.
  • SR_DEV_EDITION derriere une Cargo feature dev-override (off par defaut), PAS debug_assertions (activable sur un build release -> backdoor Premium, CWE-489) + test que c est sans effet quand la feature est off.
Corrections /review-spec : - **Purger les entrees mortes** de `FEATURE_TIERS` : `web-sync`, `cloud-backup`, `advanced-reports` (aucun call-site ; `advanced-reports`->Premium **contredit** la matrice TS `reports-advanced`->Base+). Ne laisser que `auto-update`. - Override `features[]` **fail-closed en Free** : resoudre les features via le chemin machine-binding (ignorees si l edition downgrade a free) — CWE-863. - `SR_DEV_EDITION` derriere une **Cargo feature `dev-override`** (off par defaut), PAS `debug_assertions` (activable sur un build release -> backdoor Premium, CWE-489) + test que c est sans effet quand la feature est off.
maximus added
status:review
and removed
status:ready
labels 2026-07-21 02:36:23 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-07-21 12:17:22 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#301
No description provided.