Repository navigation
Commit 07150b3
fix(spec, core): give PluginSchema.version the loader grammar its describe declares, and enforce it as the ninth key (#17067)
* fix(spec, core): give PluginSchema.version the SemVer 2.0.0 grammar its describe declares
`PluginSchema.version` was `/^\d+\.\d+\.\d+$/` while its `describe()` said
"Semantic Version" without qualification — and SemVer 2.0.0 defines prerelease
and build metadata as parts of a semantic version. The declaration refused part
of what it declared, and `PluginLoader.isValidSemanticVersion`, the check the
boot path has always run, accepted the whole grammar.
The spec adopts the loader's spelling character for character rather than a
third grammar, so the two declarations converge exactly. Measured: it is a
strict superset of the regex it replaces, so nothing that parsed stops parsing.
With the spellings converged, `assertPluginContract` drops the `version`
exclusion it carried as a stopgap; `version` becomes the ninth enforced key.
On `ObjectKernel` nothing moves (`validatePluginStructure` still runs first and
still owns that refusal); on `LiteKernel`, which never ran the structural
checks, a malformed `version` is refused for the first time — the last key on
which the two kernels disagreed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
* docs(core): cite the shipped 17.4.0 enumeration by version, not as pending
A release landed between writing the changeset and merging main: the two
enforcement entries that enumerate eight keys and declare the `version`
exclusion shipped in @objectstack/core@17.4.0 rather than sitting unreleased.
They describe what that release did and stay as written; the supersession is
now stated by version.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
* fix(core): declare the LiteKernel narrowing with the BREAKING banner the gate reads
check-adr-0087-registration detects breaking-ness by matching /\*\*BREAKING/,
so a changeset that says "NARROWS" only in prose is scored non-breaking and its
ADR-0087 disposition marker is never judged at all. The core paragraph now
carries the banner in the phrasing the two 17.4.0 precedents for this exact
class use; both package levels stay minor and the spec paragraph is untouched.
Also corrects a test title that still counted eight keys: a version-less plugin
loads because `version` is `.optional()`, not because it is unenforced.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>1 parent 0da638c commit 07150b3
6 files changed
Lines changed: 259 additions & 64 deletions
File tree
- .changeset
- packages
- core/src
- spec/src/kernel
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
343 | 343 | | |
344 | 344 | | |
345 | 345 | | |
346 | | - | |
| 346 | + | |
347 | 347 | | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
354 | | - | |
355 | | - | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
356 | 359 | | |
357 | 360 | | |
358 | 361 | | |
| |||
364 | 367 | | |
365 | 368 | | |
366 | 369 | | |
367 | | - | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
368 | 380 | | |
369 | 381 | | |
370 | 382 | | |
371 | | - | |
372 | | - | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
373 | 387 | | |
374 | 388 | | |
375 | 389 | | |
| |||
477 | 491 | | |
478 | 492 | | |
479 | 493 | | |
480 | | - | |
| 494 | + | |
481 | 495 | | |
482 | | - | |
483 | | - | |
484 | | - | |
485 | | - | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
486 | 500 | | |
487 | 501 | | |
488 | 502 | | |
489 | 503 | | |
490 | 504 | | |
491 | | - | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
492 | 529 | | |
493 | 530 | | |
494 | 531 | | |
| |||
0 commit comments