feat: dashboard Second Brain, essai 7 jours et vérification e-mail
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m14s
CI / Deploy production (on server) (push) Successful in 1m25s

Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-08-30 07:19:36 +00:00
parent 69c99e4f4f
commit 80ccc1f6de
95 changed files with 4158 additions and 618 deletions

View File

@@ -6,7 +6,7 @@ import {
isPageHumanStringKey,
} from './constants'
import { pageSpecV1Schema } from './schema'
import { validateSimExprRefs } from './sim-eval'
import { validateSimExprRefs, isValidSimParamId } from './sim-eval'
import type {
PageBlock,
PageSpecV1,
@@ -79,6 +79,13 @@ function validateSim(
if (sim.simId === 'generic-formula') {
const generic = sim as Extract<typeof sim, { simId: 'generic-formula' }>
const paramIds = new Set(generic.params.map((p) => p.id))
if (paramIds.size !== generic.params.length) {
out.push(issue('sim_duplicate_id', `${path}.params`, 'Duplicate param id'))
}
const computedIds = new Set(generic.computed.map((c) => c.id))
if (computedIds.size !== generic.computed.length) {
out.push(issue('sim_duplicate_id', `${path}.computed`, 'Duplicate computed id'))
}
for (const p of generic.params) {
if (p.min >= p.max) {
out.push(issue('sim_param_range', `${path}.params`, `Param "${p.id}": min >= max`))