@ogygie/cli 0.13.0 → 0.13.1

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
@@ -15836,6 +15836,18 @@ var governedChecksumsByVersion = {
15836
15836
  "scripts/verify-specs.ts": "04289dbeeb029703779757a2d8b58852c6b16414ab7503bf3223cfe4e9a4d45e",
15837
15837
  "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15838
15838
  },
15839
+ "0.13.1": {
15840
+ ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15841
+ "AGENTS.md": "74725a71e531502d4d4898518bad68e610a370bd410058b58e11220532dc327f",
15842
+ "CLAUDE.md": "785ee8d90e368806d8cf0b4d84a15f29d1dc961168bda86cf1a6c60a923c8c9b",
15843
+ "scripts/lint-interdits.ts": "20c32a6f3af4aa68b24fe37b25a2989f58e77fd96808c3853dc6fd98f4c9af84",
15844
+ "scripts/ogygie-design-brief.ts": "aba1585717b30808dd0bc8930a37a1ad2d83ee6869f969dbd06ca595e37a4a89",
15845
+ "scripts/ogygie-impact.ts": "f06cc8b4a46ddfbcfb32ba747c2454548ca49918123d04ab13d210b4a89c1fb9",
15846
+ "scripts/verify-contracts.ts": "9cd64c88dcc3b54b65bf1e1b7a68eb00353ee16f2a9ce8bca3c49ba063c2a08b",
15847
+ "scripts/verify-manifest.ts": "4e9caa31323442f7a5429e9cc2ae0a4d6407db6261b5744f51415c291236fb97",
15848
+ "scripts/verify-specs.ts": "03d58baa11822ad7ae67080f990f7a82f4f94d223b12777728b8b9ddd7ebd843",
15849
+ "tsconfig.base.json": "0f8919e9ed8bbc88e0308fa2fa91471dabb18d1df721bd78c04076597eba89a2"
15850
+ },
15839
15851
  "0.2.0": {
15840
15852
  ".github/workflows/ogygie-gates.yml": "48c40efe9fe66dd0f9c3b94287026d80eae9afd6782b5833fdf8846d8662babf",
15841
15853
  "AGENTS.md": "ca73ab619d8c55fac11858d815bf5fbab6537ecebe7ae4123cbdeb3e3e36bf1a",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ogygie/cli",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
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.13.0",
20
+ "@ogygie/core": "0.13.1",
21
21
  "@types/node": "^24.0.0",
22
22
  "esbuild": "^0.28.0",
23
23
  "tsx": "^4.20.0",
@@ -162,6 +162,13 @@ for (const feature of manifest.features) {
162
162
  }
163
163
 
164
164
  for (const dependency of feature.dependsOn) {
165
+ // A `package:<name>` dependency is resolved by the SCHEMA itself
166
+ // (superRefine, with its mutation test): by the time this loop runs the
167
+ // manifest has parsed, so such a dependency is known to name a declared
168
+ // package. Comparing it to FEATURE names instead would refuse a perfectly
169
+ // legal map — what a consumer project hit the day its first feature
170
+ // depended on a package.
171
+ if (dependency.startsWith("package:")) continue;
165
172
  if (!featureNames.has(dependency)) {
166
173
  report({
167
174
  code: "MANIFEST_UNKNOWN_DEPENDENCY",
@@ -29,7 +29,7 @@ import {
29
29
  parseKnownDecisionIds,
30
30
  } from "@ogygie/core/decision-refs";
31
31
  import { OgygieManifestSchema } from "@ogygie/core/manifest";
32
- import { findSpecOwner, SPEC_OWNER_FIX } from "@ogygie/core/manifest-owners";
32
+ import { findSpecOwner, hasImplementation, SPEC_OWNER_FIX } from "@ogygie/core/manifest-owners";
33
33
  import { ogygieError, type OgygieError } from "@ogygie/core/errors";
34
34
 
35
35
  const ROOT = new URL("..", import.meta.url).pathname;
@@ -130,9 +130,11 @@ for (const fileName of specFiles) {
130
130
  const ownerDir = owner?.folder === null || owner === undefined ? null : join(ROOT, owner.folder);
131
131
 
132
132
  if (frontmatter.status === "draft") {
133
+ // What counts as an implementation is the core's rule, not this script's:
134
+ // a package's folder is REQUIRED by the manifest gate, so its existence
135
+ // proves nothing (see hasImplementation).
133
136
  const implemented =
134
- (owner !== undefined && owner.status !== "skeleton") ||
135
- (ownerDir !== null && existsSync(ownerDir));
137
+ owner !== undefined && hasImplementation(owner, ownerDir !== null && existsSync(ownerDir));
136
138
  if (implemented) {
137
139
  report({
138
140
  code: "SPEC_DRAFT_ALREADY_IMPLEMENTED",