@ogygie/core 0.16.0 → 0.18.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/package.json +1 -1
- package/src/manifest-owners.test.ts +11 -2
- package/src/manifest-owners.ts +13 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogygie/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Ogygie framework core: manifest/spec/error schemas, generic tenancy and gate tooling. Ships TypeScript sources — Ogygie products run tsx/vitest by construction (D1).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -265,8 +265,12 @@ describe("hasImplementation — ce qui prouve qu'une spec draft a déjà du code
|
|
|
265
265
|
}
|
|
266
266
|
});
|
|
267
267
|
|
|
268
|
-
it("une FEATURE skeleton dont le dossier existe a
|
|
269
|
-
|
|
268
|
+
it("une FEATURE skeleton dont le dossier existe n'a PAS de code déclaré — la branche spéculative de D26 porte un dossier avant la signature", () => {
|
|
269
|
+
// La preuve historique (« un dossier de feature naît avec son code ») est
|
|
270
|
+
// retirée : le générateur émet un dossier pendant que la spec attend sa
|
|
271
|
+
// validation, et le gate refusait l'état que le processus prescrit
|
|
272
|
+
// (FAILURES.md 2026-10-18). Le statut déclaré est la seule preuve.
|
|
273
|
+
expect(hasImplementation(owner("feature", "skeleton"), true)).toBe(false);
|
|
270
274
|
expect(hasImplementation(owner("feature", "skeleton"), false)).toBe(false);
|
|
271
275
|
});
|
|
272
276
|
|
|
@@ -277,4 +281,9 @@ describe("hasImplementation — ce qui prouve qu'une spec draft a déjà du code
|
|
|
277
281
|
expect(hasImplementation(owner("package", "skeleton"), true)).toBe(false);
|
|
278
282
|
expect(hasImplementation(owner("framework-package", "skeleton"), true)).toBe(false);
|
|
279
283
|
});
|
|
284
|
+
|
|
285
|
+
it("MUTATION : une entrée in-progress ou delivered dont la spec reste draft est le défaut que le gate attrape encore", () => {
|
|
286
|
+
expect(hasImplementation(owner("feature", "in-progress"), false)).toBe(true);
|
|
287
|
+
expect(hasImplementation(owner("feature", "delivered"), true)).toBe(true);
|
|
288
|
+
});
|
|
280
289
|
});
|
package/src/manifest-owners.ts
CHANGED
|
@@ -162,22 +162,24 @@ export function findSpecOwner(
|
|
|
162
162
|
* Does an implementation of this spec exist? The question the `draft` rule of
|
|
163
163
|
* the spec lifecycle rests on ("draft = no code yet").
|
|
164
164
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* gate REQUIRES
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
165
|
+
* The answer is the STATUS the map declares, and nothing else: an entry above
|
|
166
|
+
* `skeleton` claims code, a `skeleton` entry claims none — it is a proposal on
|
|
167
|
+
* the map. A folder on disk is NOT evidence. For a package it never was: the
|
|
168
|
+
* manifest gate REQUIRES the folder (MANIFEST_PACKAGE_NOT_FOUND), so reading it
|
|
169
|
+
* as code left a project stuck between two governed files. For a feature it
|
|
170
|
+
* used to be — a feature's folder was born with its code — until speculative
|
|
171
|
+
* execution (DECISIONS.md D26 of the framework repo): a generated feature has
|
|
172
|
+
* its folder on its branch while its spec is still `draft`, awaiting the human
|
|
173
|
+
* signature, and the gate refused the very state the process prescribes
|
|
174
|
+
* (framework FAILURES.md 2026-10-18). The status is what the author declares;
|
|
175
|
+
* the folder is what a generator or a session left there.
|
|
173
176
|
*
|
|
174
177
|
* Lives here rather than in the gate script for the reason the whole module
|
|
175
178
|
* exists: the rule travels with the versioned package, not with a copy each
|
|
176
179
|
* project keeps.
|
|
177
180
|
*/
|
|
178
|
-
export function hasImplementation(owner: SpecOwner,
|
|
179
|
-
|
|
180
|
-
return owner.kind === "feature" && folderExists;
|
|
181
|
+
export function hasImplementation(owner: SpecOwner, _folderExists: boolean): boolean {
|
|
182
|
+
return owner.status !== "skeleton";
|
|
181
183
|
}
|
|
182
184
|
|
|
183
185
|
/** What a refusal should suggest — both natures, never one that cannot exist. */
|