You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Flight ⑨ of the published-skills factual sweep (#13658). Five behavioral
claims verified FALSE against the implementation and corrected in place;
net -3 lines, token-neutral at the ratchet ceiling.
Claude-Session: https://claude.ai/code/session_01EnE7G31tqbxN1rqpQmzurT
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: skills/objectstack-upgrade/SKILL.md
+15-18Lines changed: 15 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -105,15 +105,15 @@ Everything below is the long form of those four steps.
105
105
`--from` is the protocol major the metadata was **authored** against, not the
106
106
one installed. Three sources, in order of authority:
107
107
108
-
1.**`manifest.protocol`** in the stack config (`'16.0.0'` → `--from 16`). This
109
-
is the declared answer and the kernel checks it at load time.
108
+
1.**`manifest.engines.protocol`** in the stack config (`'16.0.0'` → `--from
109
+
16`). The declared answer, checked by the boot handshake.
110
110
2.**The last `@objectstack/spec` major the project ever installed** — read the
111
111
lockfile history (`git log -p pnpm-lock.yaml | grep -m5 '@objectstack/spec'`)
112
112
when the manifest is absent or stale.
113
113
3.**Ask.** A manifest that says 16 on a project last touched two years ago is a
114
-
claim, not a measurement. If (1) and (2) disagree, the lower one is the safe
115
-
`--from` — the chain is idempotent, so replaying a hop that has already been
116
-
applied is a no-op, while skipping a hop loses its rewrites.
114
+
claim, not a measurement. If (1) and (2) disagree, settle it — ⛔ never
115
+
default to the lower one: a default flip ([3.3](#33-validate)) stamps its
116
+
constraint onto a source already past that major.
117
117
118
118
Arriving several majors late is the designed-for case. `os migrate meta --from 10`
119
119
replays every step in order; there is no penalty for lateness and no requirement
@@ -296,24 +296,21 @@ The shape in a protocol-16 project:
296
296
297
297
The chain deletes the key (`field-mapping-transform-removed`) and the schema
298
298
tombstones it, so the parse error *is* the prescription: the union had five
299
-
members and **no runtime ever executed any of them**, so nothing is lost by
300
-
deleting the key — but the customer wrote it because they wanted a
301
-
transformation, and that need is real even though the key never served it.
299
+
members and **no runtime ever executed any of them**. The customer wrote it
300
+
because they wanted a transformation, and that need is real regardless.
302
301
303
-
The prescription names two live targets, and choosing between them is the
304
-
business decision:
302
+
The prescription names one live target; the rest is the business decision:
305
303
306
304
| If the intent was… | The v17 home is… |
307
305
|:--|:--|
308
-
| per-row value shaping on an import |**Import mapping**`mapping.fieldMapping[].transform` — a flat string enum (`none`/`constant`/`map`/`split`/`join`/`lookup`) with settings in `params`, executed row by row by the REST import path. |
| per-row value shaping on an import |**Import mapping**`mapping.fieldMapping[].transform` — a string enum, settings in `params`; the REST import path runs `none`/`constant`/`map`/`split`/`join`, passes `lookup` to reference resolution, rejects `javascript` (400). |
307
+
| multi-source, multi-stage transformation |**nothing** — the L2 ETL layer retired at 17, unexecuted. Do it where it runs: warehouse ELT, a `flow`, a job. |
310
308
| nothing — the value was already correct | delete the key and record that the transformation never ran. |
311
309
312
-
That third row is not a joke and it is frequently the truth: the member never
313
-
executed, so the connector has been landing raw values for as long as it has
314
-
been running. Whether the downstream data is therefore wrong is a question only
315
-
the owner can answer, and it is exactly the kind of finding the report exists to
316
-
surface.
310
+
That third row is frequently the truth: the member never executed, so the
311
+
connector has been landing raw values for as long as it has been running.
312
+
Whether the downstream data is wrong is a question only the owner can answer —
313
+
exactly the kind of finding the report exists to surface.
317
314
318
315
<aid="decide-alone-or-ask"></a>
319
316
@@ -533,7 +530,7 @@ you must say which you expect:
533
530
invalid_type: `FieldMapping.transform` … was removed in @objectstack/spec
534
531
17.0.0 (ADR-0049) … Delete the key. The transform pipeline that IS
535
532
enforced is the import mapping's … Run `os migrate meta --from 16` to
536
-
rewrite it automatically.
533
+
list the mechanical edits for existing sources; apply them by hand.
0 commit comments