Skip to content

Commit 4045eda

Browse files
committed
fix(spec): state the contract-first rule in words and drop a sweep batch ordinal in three migration entries
The two ui-list-view padded-name entries cited "AGENTS.md #0.1", a rule number from the renderer repository's contributor guide that names nothing in this repository's AGENTS.md. Their reason now states the rule the ruling cited: fix the metadata, not the renderer; off-spec metadata is refused where it is authored, never coerced into working. The notification/embed retirement entry named "its ui/ batch 14" of the v17 unknown-key strictness sweep. The sentence already says what that batch measured and decided, so the ordinal is dropped and the later back-reference reads "The sweep". Text only: no id, surface, from/to, matcher or comment moves. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
1 parent a918fe7 commit 4045eda

3 files changed

Lines changed: 8 additions & 4 deletions

File tree

‎packages/spec/src/migrations/entries/semantic/17.ui-notification-action-embed-config-retired.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const entry: SemanticMigration = {
1515
+ 'through a new ADR — carrier key and renderer first, vocabulary second)',
1616
reason:
1717
'Both shapes were published `@objectstack/spec/ui` vocabulary with NO AUTHORING DOOR. '
18-
+ 'The v17 unknown-key strictness sweep (its ui/ batch 14), which measured each ui/ '
18+
+ 'The v17 unknown-key strictness sweep, which measured each ui/ '
1919
+ 'file for an authoring door before closing any shape, measured them three ways on '
2020
+ '2026-08-03 and this retirement re-ran all '
2121
+ 'three against `origin/main` before removing anything, each with a positive control '
@@ -36,7 +36,7 @@ export const entry: SemanticMigration = {
3636
+ 'ADR-0033 trap where an AI author takes `EmbedConfigSchema` in the published bundle '
3737
+ 'as proof the platform serves iframes. Neither is stored metadata and neither has a '
3838
+ 'carrier, so no `sys_metadata` row can hold one and there is no source for the D2 '
39-
+ 'chain to rewrite; this entry is the D3 record. That batch deliberately did NOT close '
39+
+ 'chain to rewrite; this entry is the D3 record. The sweep deliberately did NOT close '
4040
+ 'them with `.strict()` — strictness is a property of a PARSE, and closing a shape nothing '
4141
+ 'parses buys only "a precisely-validated dead slot, the more convincing lie" (the lesson '
4242
+ 'of the datasource capability flags, whose `readOnly` was precisely validated and read '

‎packages/spec/src/migrations/entries/semantic/18.ui-list-view-groupbyfield-padded-refused.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ export const entry: SemanticMigration = {
3434
+ 'the same consequence, but it only runs where an app is validated against its object '
3535
+ 'definitions; the producer accepted the value regardless. ⛔ NOT a `.trim()`: a trimming '
3636
+ 'schema makes `\' stage\'` and `\'stage\'` silently equivalent, the consumer-tolerance '
37-
+ 'direction AGENTS.md #0.1 refuses — and on the REQUIRED kanban key the author cannot '
37+
+ 'direction the contract-first rule refuses (fix the metadata, not the renderer: '
38+
+ 'off-spec metadata is refused where it is authored, never coerced into working) — and '
39+
+ 'on the REQUIRED kanban key the author cannot '
3840
+ 'withdraw the value by omitting the key, so a normalising producer would be their only '
3941
+ 'feedback channel and it would say nothing. The narrowing is non-padded ONLY and '
4042
+ 'deliberately not the snake_case machine-name grammar `/^[a-z_][a-z0-9_]*$/` this package '

‎packages/spec/src/migrations/entries/semantic/18.ui-list-view-grouping-field-padded-refused.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ export const entry: SemanticMigration = {
2626
+ 'silent wrong answer that reads as a true statement about the data, which is why '
2727
+ 'nothing weaker than a parse refusal is honest here. ⛔ NOT a `.trim()`: a trimming '
2828
+ 'schema makes `\' a \'` and `\'a\'` silently equivalent, the consumer-tolerance '
29-
+ 'direction AGENTS.md #0.1 refuses. objectui\'s harvester trim stays as '
29+
+ 'direction the contract-first rule refuses (fix the metadata, not the renderer: '
30+
+ 'off-spec metadata is refused where it is authored, never coerced into working). '
31+
+ 'objectui\'s harvester trim stays as '
3032
+ 'defence-in-depth; nothing is removed there. The narrowing is non-padded ONLY and '
3133
+ 'deliberately not the snake_case machine-name grammar `/^[a-z_][a-z0-9_]*$/` this '
3234
+ 'package spells inline for object/field/tool NAMES: a grouping level is authored as '

0 commit comments

Comments
 (0)