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
{{ message }}
Repository navigation
Commit 23cb18d
Browse filesBrowse the repository at this point in the historyBrowse files
refactor(spec-liveness): the renderer's ledger evidence is in-repo under ui/; objectui becomes a retired realm that fails
objectui merged into this repo as ui/ (#25677), so the liveness ledger's
renderer evidence stops being cross-repo (objectstack#25712 item 1).
Reader (scripts/liveness/evidence.mts):
- `ui` joins REPO_ROOTS, so `ui/packages/...` pointers resolve like any
path: the file exists, a cited line is inside it, an anchored symbol is in
it, and the file names the key.
- `objectui` leaves FOREIGN_REALMS and becomes RETIRED_REALMS (objectui -> ui).
A path still attributed to it lands in a bucket of its own that the gate
fails on, whatever the row's status, printing the ui/ spelling as the
remedy. Counted as foreign, it would never fail. Read as local, it could
resolve against the wrong root, because both trees have packages/core/.
A path already spelled ui/ is local whatever prose precedes it.
Ledger (24 files): 374 objectui-attributed pointers in 164 rows are
re-rooted under ui/, and the `objectui [@sha]:` marker in front of each one
is dropped. verifiedAt is unchanged everywhere. 107 cross-repo rows become
in-repo. The one row that also cites cloud stays cross-repo, and the 56
undeclared scopes stay undeclared.
Line citations: of the 133 objectui `path:N` pointers, 6 named the same
lines in ui/, 66 named code that moved, 58 could not be checked against
today's file, and 3 were in deleted files. A clause is relocated only when
every line it cites (the pointer plus its bare `:N` follow-ons) is
byte-identical at exactly one offset, both at the cited objectui commit and
in today's file, so one clause never mixes old and new numbering. That gives
7 kept, 58 relocated, and 65 that drop the line from the pointer and keep
the reading as prose (`ui/p (:N at objectui @sha)`). Line numbers written
as prose inside a relocated clause (sibling `file.tsx:N` refs and "line N"
in eight rows) were relocated by the same rule.
Rows whose objectui reader is gone get no repoint and a dated note line:
- app.navigation.id: the useNavOrder clause (objectui#12059).
- view.list.hiddenFields and view.form.groups: the spec-bridge clauses
(objectui#6632).
- field.widget: the permission-facet-link registration (objectui#12998).
- field.externalId: the only pointer was deleted in objectui dc14bcb, so it
is now prose, and follow-up F23 owns finding the reader.
Key mention: 13 newly in-repo citations read a renamed key or delegate to
an anchored sibling: list.inlineEdit -> `editable`,
form.subforms -> `details`, page print members -> `print`,
chartConfig -> `chartConfigPresentation`, and flows.screens -> the
localized field keys. Each is a key-mention.baseline.json row that names the
spelling the file uses.
Tests: evidence and gate cases are retargeted from objectui to cloud/ee,
with new cases for the retired realm. The `path:NNN` contract test and the
line-citation floor are restored, as their own guard comments instruct once
that population is non-zero again. The README sections on the realm marker,
the commit pin, evidenceScope and the preview lookup now cite ui/.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
Copy file name to clipboardExpand all lines: packages/spec/liveness/README.md
+41-20Lines changed: 41 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,7 +72,7 @@ registry to fold it back onto — the override *is* its governance.
72
72
73
73
| Status | Meaning |
74
74
|---|---|
75
-
|`live`| Has a runtime consumer. Cite it in `evidence`, preferably anchored to the consuming symbol — `file#symbol` — with `file:line` as an optional convenience; for another repo's path, prefix the realm — `objectui: packages/app-shell/…` (see below). |
75
+
|`live`| Has a runtime consumer. Cite it in `evidence`, preferably anchored to the consuming symbol — `file#symbol` — with `file:line` as an optional convenience; the renderer is in this repo, cited `ui/packages/app-shell/…#Symbol`; for another repo's path, prefix the realm — `cloud: packages/…` (see below). |
76
76
|`experimental` / `planned`| Declared, intentionally not enforced yet. Also read from a spec `.describe()` marker like `[EXPERIMENTAL — not enforced]`. |
77
77
|`dead`| Parsed, no consumer **anywhere the census looked**. Tracked for **enforce-or-remove** (ADR-0049). A key that is dead here but enforced in a sibling repo is NOT `dead` — it is `live-elsewhere`, below. |
78
78
|`live-elsewhere`| Dead here by measurement, **genuinely enforced in a sibling repo** (#13483). Not deletable. The template is `manifest.runtime`, "ENFORCED AT THE CLOUD PUBLISH GATE, NOT ENFORCED AT LOAD" — its load side belongs to this repo's loader. A key whose consumer is the closed cloud runtime is `live` with a `cloud`-attributed pointer instead (`agent.json`'s `_note`). Carries its own gate-executable criteria — see the section below. Ledger-entry-only (no `.describe()` marker). |
@@ -116,22 +116,38 @@ enforce-or-remove instead of repointing at a plausible survivor.
116
116
117
117
**A path in another repo must say so**, or the gate will report it as rot —
118
118
attributed paths are counted and never resolved, so they cannot fail this check
119
-
(that boundary is deliberate: ~101 entries cite the renderer repo or the closed
120
-
cloud runtime, whose files are legitimately absent here):
119
+
(that boundary is deliberate: the closed cloud runtime's files are legitimately
"evidence":"carried onto the tool definition (cloud packages/service-ai/…/action-tools.ts) but no runtime here"
125
125
```
126
126
127
-
A realm marker (`objectui`, `cloud`, `ee`) attributes the paths that follow it,
128
-
up to the next clause boundary (`;` or `)`), so a string can cite both repos —
127
+
A realm marker (`cloud`, `ee`) attributes the paths that follow it, up to the
128
+
next clause boundary (`;` or `)`), so a string can cite both repos —
129
129
`framework` switches back explicitly. `packages/services/service-ai/…` is always
130
130
treated as foreign: that is the closed cloud runtime, and `packages/services/`
131
131
here ships every sibling service except it. A path that is not repo-rooted
132
132
(`app-shell/MetadataProvider.tsx`, `action-button/-group`) reads as prose and is
133
133
neither resolved nor reported.
134
134
135
+
**The renderer is not another repo.** objectui merged into this one as `ui/`
136
+
(#25677), so its files are cited like any other path — `ui/packages/app-shell/src/views/RecordDetailView.tsx#RecordDetailView`
137
+
— and held to the same standard: the file exists, a cited line is inside it, an
138
+
anchored symbol is in it, and the file names the key. `objectui` is a **retired**
139
+
realm marker (`RETIRED_REALMS` in `scripts/liveness/evidence.mts`): a path still
140
+
attributed to it FAILS, with its `ui/` spelling printed as the remedy. It cannot
141
+
stay foreign (counted, never resolved, it would never fail) and it cannot be read
142
+
as local either: both trees have a `packages/core/`, so `objectui: packages/core/…`
143
+
could pass on a file that never was the reader. A path already spelled `ui/…` is
144
+
local whatever prose precedes it, so a dated reading may keep naming the old repo —
145
+
`ui/packages/layout/src/NavigationRenderer.tsx (:961 at objectui @940ba24)` — and
146
+
that is exactly how #25712 re-rooted the 164 renderer rows: a `path:NNN` whose cited
147
+
block is byte-identical at one offset of today's file was relocated there; any other
148
+
line left the pointer and stayed behind as that dated prose, because a line read at
149
+
an old objectui commit is not a line of this checkout.
150
+
135
151
> This replaces the old advice to write objectui paths "as prose to avoid false
136
152
> stale-flags." That was a workaround for a parser bug — the check took
137
153
> `evidence.split(':')[0]` as the filename, so any prose made it fail. It flagged
@@ -171,9 +187,11 @@ Two rules, and the asymmetry between them is the point:
171
187
loudly instead.
172
188
173
189
Most entries predate the field and are simply undated; date them as you
174
-
re-verify rather than back-filling guesses. **For objectui-side evidence, pin
175
-
the commit** (`objectui @732b1bf`) — `action.undoable`'s reader line numbers had
190
+
re-verify rather than back-filling guesses. **For cloud-side evidence, pin the
191
+
commit** (`cloud @15f55df`) — `action.undoable`'s objectui reader line numbers had
176
192
already drifted by 28 lines one day after the issue citing them was filed.
193
+
Renderer evidence needs no pin since the merge (#25712): `ui/` is this checkout,
194
+
and the gate bounds its lines and anchors on every run.
177
195
178
196
### `producer` — a consumer is only HALF the call graph (#4837)
179
197
@@ -259,7 +277,11 @@ barrel package adds a blind spot, and the renderer repo is all barrels.
259
277
| Value | Means |
260
278
|---|---|
261
279
|`in-repo`| the call graph was closed inside this repo only |
262
-
|`cross-repo`| a named foreign realm was walked too — say **which**, in the evidence, and **pin the commit** (`objectui @c2fd1223`): `action.undoable`'s reader line numbers drifted 28 lines in one day (#3714) |
280
+
|`cross-repo`| a named foreign realm was walked too — say **which**, in the evidence, and **pin the commit** (`cloud @15f55df`): `action.undoable`'s reader line numbers drifted 28 lines in one day (#3714) |
281
+
282
+
`in-repo` covers `ui/` — the renderer is this repo since #25712, which moved the
283
+
scope of every re-rooted renderer row from `cross-repo` to `in-repo` (a row that
284
+
also cites `cloud` kept `cross-repo`; an undeclared scope stayed undeclared).
263
285
264
286
Absent = scope undeclared, a worklist row rather than a failure; the field is
265
287
younger than nearly every entry. A value outside the vocabulary FAILS, the same
@@ -397,16 +419,15 @@ the maintainer settled it directly:
397
419
398
420
**The mechanical rule, for the next sweep.** Before writing `"no runtime
399
421
consumer"` — or any wording that means it — **enumerate the metadata-admin preview
400
-
read points** for the type, in objectui, and say what you found. The population is
422
+
read points** for the type, under `ui/`, and say what you found. The population is
401
423
small, enumerable, and registered by type name, so this is a lookup and not a
0 commit comments