@ogygie/cli 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -14649,9 +14649,14 @@ var HttpRouteSchema = external_exports.object({
14649
14649
  "Cache roots this mutation stales BEYOND its own path root (cross-feature dependency, read by the manifest-derived client \u2014 never guessed in a screen). Each value must be an existing feature name or route root"
14650
14650
  )
14651
14651
  });
14652
+ var SharedTableKindSchema = external_exports.enum(["reference", "ownerless"]);
14652
14653
  var DbTableDeclarationSchema = external_exports.union([
14653
14654
  external_exports.string(),
14654
- external_exports.object({ name: external_exports.string(), shared: external_exports.literal(true) })
14655
+ external_exports.object({
14656
+ name: external_exports.string(),
14657
+ shared: external_exports.literal(true),
14658
+ sharedKind: SharedTableKindSchema.optional()
14659
+ })
14655
14660
  ]);
14656
14661
  var FeatureManifestSchema = external_exports.object({
14657
14662
  name: FeatureNameSchema,
@@ -15569,6 +15574,18 @@ var governedChecksumsByVersion = {
15569
15574
  "scripts/verify-manifest.ts": "1adca9edee11e54ccaf0511012411516c52c68a32f686ca320c7e437afb22c7c",
15570
15575
  "scripts/verify-specs.ts": "ccf09c04155e5e88fa9acd4a5db33c2c79e85923b2d92e8e866fe9cbc4cdf342",
15571
15576
  "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15577
+ },
15578
+ "0.8.0": {
15579
+ ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15580
+ "AGENTS.md": "e44f635c0b203a0040098425f217c5a29c47e57280a3545b60d640aea0d59a70",
15581
+ "CLAUDE.md": "785ee8d90e368806d8cf0b4d84a15f29d1dc961168bda86cf1a6c60a923c8c9b",
15582
+ "scripts/lint-interdits.ts": "d859e132b7020942a5211f5419b10045170dee6afba3f50ca5642570a5c4a683",
15583
+ "scripts/ogygie-design-brief.ts": "aba1585717b30808dd0bc8930a37a1ad2d83ee6869f969dbd06ca595e37a4a89",
15584
+ "scripts/ogygie-impact.ts": "0dd3ff8cdd57e6cff0dfec1c669fce53fde9ae43f0784ed114771c83d1f8b357",
15585
+ "scripts/verify-contracts.ts": "725cae269e78ecdaa1923553c3097d8d96277824b5bd79a9a40284c6246036b7",
15586
+ "scripts/verify-manifest.ts": "1adca9edee11e54ccaf0511012411516c52c68a32f686ca320c7e437afb22c7c",
15587
+ "scripts/verify-specs.ts": "ccf09c04155e5e88fa9acd4a5db33c2c79e85923b2d92e8e866fe9cbc4cdf342",
15588
+ "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15572
15589
  }
15573
15590
  };
15574
15591
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ogygie/cli",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Ogygie framework CLI: deterministic scaffolding (init), governed-file upgrades (upgrade) and lockstep verification (check) for Ogygie products.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -22,7 +22,7 @@
22
22
  "tsx": "^4.20.0",
23
23
  "typescript": "^5.8.0",
24
24
  "zod": "^4.0.0",
25
- "@ogygie/core": "0.7.0"
25
+ "@ogygie/core": "0.8.0"
26
26
  },
27
27
  "scripts": {
28
28
  "typecheck": "tsc -p tsconfig.json",
@@ -381,22 +381,37 @@ par vigilance.
381
381
  tenant** (second rempart : même une requête buggée ne peut pas lire un
382
382
  autre tenant). Toute migration créant une table tenant inclut sa policy RLS —
383
383
  le template de migration l'impose.
384
- 4. Les tables de référentiel PARTAGÉ — connaissance universelle qu'aucun tenant
385
- ne possède, chargée par un script d'extraction depuis une source externe
386
- versionnée — sont déclarées explicitement au manifeste sous la forme objet
387
- `{ "name": "<table>", "shared": true }` (clé anglaise : le manifeste est
388
- machine-lisible). Elles échappent alors à la règle 3 (pas de colonne
389
- tenant, pas de policy RLS tenant) ET à la règle 2 : n'ayant aucune colonne
390
- sur laquelle filtrer, elles se lisent hors de `tenantDb`. Ce droit se paie
391
- comptant, et les gates le vérifient au lieu de faire confiance :
384
+ 4. Les tables SANS PROPRIÉTAIRE TENANT sont déclarées explicitement au manifeste
385
+ sous la forme objet `{ "name": "<table>", "shared": true, "sharedKind": "..." }`
386
+ (clés anglaises : le manifeste est machine-lisible). Elles échappent alors à
387
+ la règle 3 (pas de colonne tenant, pas de policy RLS tenant) ET à la règle 2 :
388
+ n'ayant aucune colonne sur laquelle filtrer, elles se lisent hors de
389
+ `tenantDb`.
390
+
391
+ **Deux natures, et une seule est écrivable par l'API** (D8). La nature se
392
+ déclare au manifeste, parce qu'une information de sécurité vit sur la carte :
393
+ - **`reference`** — connaissance universelle qu'aucun tenant ne possède,
394
+ chargée par un script d'extraction depuis une source externe versionnée.
395
+ **Côté API elle est en LECTURE SEULE** : seul le script d'extraction
396
+ l'alimente. C'est le défaut quand `sharedKind` est absent, et le sens
397
+ historique de `shared: true`.
398
+ - **`ownerless`** — donnée produite par l'API elle-même, sans propriétaire
399
+ parce qu'elle naît avant tout compte. **Sa feature l'écrit.** N'ayant pas
400
+ de tenant pour rempart, elle en porte un autre : ses lignes ne se lisent
401
+ que par un **secret non devinable** (jeton), jamais par un identifiant
402
+ énumérable ni séquentiel. Une table `ownerless` sans ce secret est une
403
+ violation — et comme aucun gate ne sait le vérifier, la spec de la feature
404
+ doit dire OÙ vit ce secret et comment il est produit.
405
+
406
+ Ce droit se paie comptant, et les gates vérifient ce qu'ils peuvent au lieu
407
+ de faire confiance :
392
408
  - une feature ne gagne l'accès brut à la base que si TOUTES ses tables sont
393
409
  partagées (lint-interdits, dérivé du manifeste) — une seule table tenant
394
410
  dans la même feature le lui retire ;
395
411
  - une table déclarée partagée qui porte encore la colonne tenant casse
396
- verify-manifest (`SHARED_TABLE_WITH_TENANT_COLUMN`) ;
397
- - côté API ces tables sont en LECTURE SEULE : seul le script d'extraction
398
- les alimente.
399
- La liste des tables partagées du produit est dans `AGENTS.product.md`.
412
+ verify-manifest (`SHARED_TABLE_WITH_TENANT_COLUMN`).
413
+ La liste des tables partagées du produit, avec leur nature, est dans
414
+ `AGENTS.product.md`.
400
415
 
401
416
  ### Template repository (le SEUL accès DB autorisé)
402
417
  ```ts