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
Track the deferred field/alias prefix scope as [1.10]
The prefix-truthfulness rule shipped covering TypeRef only. Extending it to
AliasedTypeExpression -- a field type or a type alias -- is a DECISION rather
than effort, and it roughly triples a migration that already touches 1,032
sites in 188 of 188 models, so it is filed with the measurement rather than
assumed.
NOTEBOOK records the rule, that it fires in both directions, and the JSON
fidelity defect it exposed: a keyword field that only ever held its default
value hid a round-trip loss.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: BACKLOG.md
+33Lines changed: 33 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -237,6 +237,8 @@ task files, so they were NOT physically reshuffled; this index carries the order
237
237
| 11 | Cross-context `tell` isolation seam | 5 | Largest item and the biggest corpus-migration risk. Needs a counting mode built and run under real resolution before the Error ships. Wants its own plan. |
238
238
|~~12~~|~~Two narrow-operand gaps~~| — |**Part 1 DONE `faf7551c0`** — and it was NOT false-positive-only as filed, it was a missed Error. Part 2 (`emittedMessageTypes`) split out and left last: genuinely advisory, genuinely a restructuring. |
239
239
240
+
| 13 |**[1.10]** Prefix truthfulness for fields/aliases | — | A DECISION, not effort. Shipped for `TypeRef` 2026-08-24; extending to `AliasedTypeExpression` roughly triples an already 1,032-site migration, so measure first. |
241
+
240
242
Three real dependency edges, not twelve: **4 ← 3**, **10 ← 9**, **11 ← 5**.
241
243
Everything else is independent and may be reordered by appetite. Items 10 and 11
242
244
each want an approved plan before implementation, per the standing rule.
@@ -898,6 +900,37 @@ each want an approved plan before implementation, per the standing rule.
898
900
replay at all. The cache-restore path is real and is now closed, but the timing observation
899
901
was not the proof it was presented as.
900
902
903
+
-**[1.10]****Does prefix truthfulness extend to a field's type and a type alias?**
904
+
— a DECISION, not effort. The check shipped 2026-08-24 (`cb05e3748`) covering
905
+
`TypeRef`: portlet types, invariant `requires`, a function's `requires`/`returns`.
906
+
A field's type (`two: Ctx.Cmd`) and a type alias (`type A is Ctx.Rec`) are
907
+
**`AliasedTypeExpression`** (`AST.scala:1958`) — a different node that carries its
908
+
own `keyword` and does NOT route through `checkRef`, so nothing checks them.
909
+
Verified against the staged binary: `record Holder is { two: Ctx.Cmd }` naming a
910
+
command draws zero errors.
911
+
912
+
**The requesting task asked for it** (`task/done/2026-08-24-reference-prefix-must-
913
+
match-declared-kind.md`): *"the rule is about `type_ref` generally — a field's
914
+
type, a `let`'s ascription, an `updates repository` … applying it everywhere at
915
+
once is the honest reading of the requirement."* It was deliberately NOT done,
916
+
and the reason is cost, measured rather than guessed: reactive-bbq alone holds
917
+
**283** portlet references and **542** aliased field references, so extending the
918
+
rule roughly TRIPLES a migration that already touches 1,032 sites in 188 of 188
919
+
models. That deserves its own estimate, not a ride-along.
920
+
921
+
**Pinned, so it cannot quietly become permanent**: `ReferencePrefixAndRepository
922
+
PortsTest` has a case named *"NOT yet cover a field's type, which is a different
923
+
AST node"*. If the scope widens, that test fails — which is the intended
924
+
direction; update it rather than narrowing the check back.
925
+
926
+
**What to decide:** whether a field typed by a record must read `two: record
927
+
Ctx.Cmd`. The argument for is Reid's own — the prefix exists to make a model
928
+
readable without chasing the declaration, and a field is where a reader most
929
+
often wants that. The argument against is that it is the single most common
930
+
syntactic position in the language, so the cost is not proportional to the
931
+
ambiguity being removed. Measure the corpus-wide count before choosing; the
932
+
542 above is one model.
933
+
901
934
### 2. Queued, needs a plan
902
935
903
936
#### Decided in `../RIDDL-Tools-To-Do-List.md` but never built
0 commit comments