@ogygie/cli 0.11.0 → 0.11.2

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
@@ -15635,6 +15635,42 @@ var governedChecksumsByVersion = {
15635
15635
  "scripts/verify-specs.ts": "ccf09c04155e5e88fa9acd4a5db33c2c79e85923b2d92e8e866fe9cbc4cdf342",
15636
15636
  "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15637
15637
  },
15638
+ "0.11.0": {
15639
+ ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15640
+ "AGENTS.md": "816a00d69720702aa343a5010cc1ddcea8756f227e961785ab5a9f32962ce155",
15641
+ "CLAUDE.md": "785ee8d90e368806d8cf0b4d84a15f29d1dc961168bda86cf1a6c60a923c8c9b",
15642
+ "scripts/lint-interdits.ts": "d859e132b7020942a5211f5419b10045170dee6afba3f50ca5642570a5c4a683",
15643
+ "scripts/ogygie-design-brief.ts": "aba1585717b30808dd0bc8930a37a1ad2d83ee6869f969dbd06ca595e37a4a89",
15644
+ "scripts/ogygie-impact.ts": "825a47a51e940b2d8473714a417b4a75bad4eede35e3f4b34258bf6e181e98f4",
15645
+ "scripts/verify-contracts.ts": "725cae269e78ecdaa1923553c3097d8d96277824b5bd79a9a40284c6246036b7",
15646
+ "scripts/verify-manifest.ts": "1adca9edee11e54ccaf0511012411516c52c68a32f686ca320c7e437afb22c7c",
15647
+ "scripts/verify-specs.ts": "ccf09c04155e5e88fa9acd4a5db33c2c79e85923b2d92e8e866fe9cbc4cdf342",
15648
+ "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15649
+ },
15650
+ "0.11.1": {
15651
+ ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15652
+ "AGENTS.md": "816a00d69720702aa343a5010cc1ddcea8756f227e961785ab5a9f32962ce155",
15653
+ "CLAUDE.md": "785ee8d90e368806d8cf0b4d84a15f29d1dc961168bda86cf1a6c60a923c8c9b",
15654
+ "scripts/lint-interdits.ts": "d859e132b7020942a5211f5419b10045170dee6afba3f50ca5642570a5c4a683",
15655
+ "scripts/ogygie-design-brief.ts": "aba1585717b30808dd0bc8930a37a1ad2d83ee6869f969dbd06ca595e37a4a89",
15656
+ "scripts/ogygie-impact.ts": "825a47a51e940b2d8473714a417b4a75bad4eede35e3f4b34258bf6e181e98f4",
15657
+ "scripts/verify-contracts.ts": "725cae269e78ecdaa1923553c3097d8d96277824b5bd79a9a40284c6246036b7",
15658
+ "scripts/verify-manifest.ts": "1adca9edee11e54ccaf0511012411516c52c68a32f686ca320c7e437afb22c7c",
15659
+ "scripts/verify-specs.ts": "ccf09c04155e5e88fa9acd4a5db33c2c79e85923b2d92e8e866fe9cbc4cdf342",
15660
+ "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15661
+ },
15662
+ "0.11.2": {
15663
+ ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15664
+ "AGENTS.md": "816a00d69720702aa343a5010cc1ddcea8756f227e961785ab5a9f32962ce155",
15665
+ "CLAUDE.md": "785ee8d90e368806d8cf0b4d84a15f29d1dc961168bda86cf1a6c60a923c8c9b",
15666
+ "scripts/lint-interdits.ts": "20c32a6f3af4aa68b24fe37b25a2989f58e77fd96808c3853dc6fd98f4c9af84",
15667
+ "scripts/ogygie-design-brief.ts": "aba1585717b30808dd0bc8930a37a1ad2d83ee6869f969dbd06ca595e37a4a89",
15668
+ "scripts/ogygie-impact.ts": "f06cc8b4a46ddfbcfb32ba747c2454548ca49918123d04ab13d210b4a89c1fb9",
15669
+ "scripts/verify-contracts.ts": "9cd64c88dcc3b54b65bf1e1b7a68eb00353ee16f2a9ce8bca3c49ba063c2a08b",
15670
+ "scripts/verify-manifest.ts": "1adca9edee11e54ccaf0511012411516c52c68a32f686ca320c7e437afb22c7c",
15671
+ "scripts/verify-specs.ts": "04289dbeeb029703779757a2d8b58852c6b16414ab7503bf3223cfe4e9a4d45e",
15672
+ "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15673
+ },
15638
15674
  "0.2.0": {
15639
15675
  ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15640
15676
  "AGENTS.md": "ca73ab619d8c55fac11858d815bf5fbab6537ecebe7ae4123cbdeb3e3e36bf1a",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ogygie/cli",
3
- "version": "0.11.0",
3
+ "version": "0.11.2",
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",
@@ -17,7 +17,7 @@
17
17
  "access": "public"
18
18
  },
19
19
  "devDependencies": {
20
- "@ogygie/core": "0.11.0",
20
+ "@ogygie/core": "0.11.2",
21
21
  "@types/node": "^24.0.0",
22
22
  "esbuild": "^0.28.0",
23
23
  "tsx": "^4.20.0",
@@ -9,7 +9,8 @@
9
9
  * ogygie.manifest.json through @ogygie/core/shared-tables (mayUseRawDb), so a
10
10
  * feature earns the right to touch the database directly only by declaring, in
11
11
  * the manifest, that every table it owns is shared (AGENTS.md §Multi-tenant
12
- * rule 4). The policy itself is unit-tested with its mutations (D22) — this
12
+ * rule 4). The policy itself is unit-tested with its mutations (AGENTS.md
13
+ * workflow 7) — this
13
14
  * script only reports.
14
15
  */
15
16
  import { readdirSync, readFileSync, statSync } from "node:fs";
@@ -3,7 +3,7 @@
3
3
  * impact-analyzer-core): prints the blast radius of a change to delivered
4
4
  * code — who depends on it, which symbols they use, its routes, the tables it
5
5
  * owns and any outside reader of them, the tests to re-run, and WHAT THE
6
- * ANALYSIS COULD NOT SEE (D12).
6
+ * ANALYSIS COULD NOT SEE.
7
7
  *
8
8
  * The judgement lives in `@ogygie/core/impact`, where it is tested against an
9
9
  * in-memory repo and callable by other tools; this script is its collecting
@@ -54,7 +54,7 @@ function printSummary(report: ImpactReport): void {
54
54
  );
55
55
  console.log(`Tests à relancer : ${report.testCommand}`);
56
56
  // Always printed, ESPECIALLY when nothing was found: "no dependents" and
57
- // "I did not look there" read the same without it (D12).
57
+ // "I did not look there" read the same without it.
58
58
  console.log(`\nPérimètre — dossiers scannés : ${report.scope.scannedFolders.length}`);
59
59
  console.log(`Hors de portée de cette analyse :`);
60
60
  for (const limit of report.scope.outOfReach) console.log(` · ${limit}`);
@@ -1,14 +1,15 @@
1
1
  /**
2
- * @intent CI gate `pnpm ogygie:verify-contracts` (DECISIONS.md D29): from every
3
- * feature's `schemas.ts`, walk the WHOLE import graph and prove that nothing
4
- * with a runtime effect is reachable — the transitivity is the point, since
5
- * that is how the server came back into the browser bundle
6
- * (`orders/schemas.ts` → a sibling feature's `index.ts` → its data loader →
7
- * `node:fs`, FAILURES.md).
2
+ * @intent CI gate `pnpm ogygie:verify-contracts` (AGENTS.md §Structure, the
3
+ * CONTRACTS exception): from every feature's `schemas.ts`, walk the WHOLE
4
+ * import graph and prove that nothing with a runtime effect is reachable —
5
+ * the transitivity is the point, since that is how the server came back into
6
+ * the browser bundle (`orders/schemas.ts` → a sibling feature's `index.ts` →
7
+ * its data loader → `node:fs`, FAILURES.md).
8
8
  *
9
9
  * The decision logic lives in @ogygie/core/contract-purity, born with its
10
- * mutation tests (D22) — this script only reads the manifest, the disk, and
11
- * reports as OgygieError so an agent can fix without guessing.
10
+ * mutation tests (AGENTS.md workflow 7) — this script only reads the
11
+ * manifest, the disk, and reports as OgygieError so an agent can fix without
12
+ * guessing.
12
13
  */
13
14
  import { existsSync, readFileSync, statSync } from "node:fs";
14
15
  import { join } from "node:path";
@@ -24,7 +25,7 @@ import { ogygieError } from "@ogygie/core/errors";
24
25
  const ROOT = fileURLToPath(new URL("..", import.meta.url));
25
26
  const MANIFEST_PATH = "ogygie.manifest.json";
26
27
 
27
- /** One stable error code per rule broken (D11 — machine-readable = English). */
28
+ /** One stable error code per rule broken (English: machine-readable). */
28
29
  const ERROR_CODES: Record<ContractImpurityKind, string> = {
29
30
  RUNTIME_PACKAGE: "CONTRACT_IMPURE_PACKAGE",
30
31
  SERVER_SURFACE: "CONTRACT_REACHES_SERVER_SURFACE",
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * @intent CI gate `pnpm ogygie:verify-specs`: every `specs/<feature>.spec.md`
3
3
  * must carry a valid frontmatter (SpecFrontmatterSchema), the canonical FRENCH
4
- * sections in order (specs are human-facing documents — DECISIONS.md D11), and
5
- * respect the lifecycle rule (draft → no code, implemented → manifest says
6
- * "delivered"). Frontmatter is deliberately restricted to scalars and inline
7
- * arrays — the format is owned by @ogygie/core/spec (parseSpecFrontmatter),
8
- * which REFUSES what it cannot read (D22 hardening, born with its mutation
9
- * tests in packages/ogygie-core/src/spec.schema.test.ts) — this gate only
10
- * reports.
4
+ * sections in order (specs are human-facing documents, AGENTS.md principle 8
5
+ * keeps the machine-readable half in English), and respect the lifecycle rule
6
+ * (draft → no code, implemented → manifest says "delivered"). Frontmatter is
7
+ * deliberately restricted to scalars and inline arrays — the format is owned
8
+ * by @ogygie/core/spec (parseSpecFrontmatter), which REFUSES what it cannot
9
+ * read (a hardening born with its mutation tests in
10
+ * packages/ogygie-core/src/spec.schema.test.ts) — this gate only reports.
11
11
  * It also refuses any reference to a decision `D<n>` absent from the decision
12
- * files — DECISIONS.md (framework) and DECISIONS.product.md (product), one
13
- * GLOBAL numbering since the Phase 3 split — in a spec (frontmatter `refs` or
12
+ * files — DECISIONS.md (framework) and DECISIONS.product.md (product), which
13
+ * share ONE global numbering — in a spec (frontmatter `refs` or
14
14
  * body), in AGENTS.md or in AGENTS.product.md: a rule founded on a decision
15
15
  * nobody took is silent documentary drift. A decision id declared in BOTH
16
16
  * files is refused too (ambiguous citation). Logic and mutation tests in
@@ -34,7 +34,7 @@ import { ogygieError, type OgygieError } from "@ogygie/core/errors";
34
34
 
35
35
  const ROOT = new URL("..", import.meta.url).pathname;
36
36
  const SPECS_FOLDER = "specs";
37
- /** One global D<n> numbering across the two files (Phase 3 split, D10 rule 4). */
37
+ /** One global D<n> numbering across the two decision files. */
38
38
  const DECISIONS_FILES = ["DECISIONS.md", "DECISIONS.product.md"];
39
39
  /** Documents whose decision citations are checked, besides the specs. */
40
40
  const AGENTS_FILES = ["AGENTS.md", "AGENTS.product.md"];
@@ -77,7 +77,7 @@ for (const fileName of specFiles) {
77
77
  file: specPath,
78
78
  cause: parsedFrontmatter.problems.join(" ; "),
79
79
  suggestedFix:
80
- "Use `key: value` lines with scalars or INLINE arrays only, balanced quotes (D13) — see parseSpecFrontmatter in packages/ogygie-core/src/spec.schema.ts.",
80
+ "Use `key: value` lines with scalars or INLINE arrays only, balanced quotes — see parseSpecFrontmatter in packages/ogygie-core/src/spec.schema.ts.",
81
81
  });
82
82
  continue;
83
83
  }
@@ -146,7 +146,7 @@ for (const fileName of specFiles) {
146
146
  }
147
147
 
148
148
  if (frontmatter.status === "implemented") {
149
- // D13: an implemented spec has nothing left pending — deferred must be empty.
149
+ // An implemented spec has nothing left pending — deferred must be empty.
150
150
  if (frontmatter.deferred.length > 0) {
151
151
  report({
152
152
  code: "SPEC_IMPLEMENTED_WITH_DEFERRED",
@@ -172,7 +172,7 @@ for (const fileName of specFiles) {
172
172
  }
173
173
  }
174
174
 
175
- // --------------------------------------------- decision references (D28 lot)
175
+ // -------------------------------------------------- decision references
176
176
  // Independent of the frontmatter checks above: a spec whose format is broken
177
177
  // may also cite a phantom decision, and both deserve to be said in one run.
178
178
  const decisionIdsPerFile = DECISIONS_FILES.map((fileName) =>
@@ -4,7 +4,7 @@ status: draft
4
4
  depends_on: []
5
5
  priority: P1
6
6
  refs: []
7
- # Optionnel (D13) : comportements décrits mais bloqués par une feature à venir.
7
+ # Optionnel : comportements décrits mais bloqués par une feature à venir.
8
8
  # Une spec ne peut passer `implemented` que si cette liste est vide.
9
9
  # deferred: ["CODE_ERREUR (résumé) blockedBy:nom-de-la-feature"]
10
10
  ---
@@ -15,7 +15,8 @@ existe, pas comment elle est construite.
15
15
 
16
16
  # Comportements
17
17
  (prose en français ; codes d'erreur, noms de schémas et valeurs d'enum
18
- directement en anglais — D11/D14, ex. « ALORS OgygieError ORDER_REFERENCE_ALREADY_USED »)
18
+ directement en anglais — AGENTS.md principe 8, ex. « ALORS OgygieError
19
+ ORDER_REFERENCE_ALREADY_USED »)
19
20
  - ÉTANT DONNÉ <contexte>
20
21
  QUAND <action>
21
22
  ALORS <résultat observable et vérifiable>