Skip to content

Commit 53c9070

Browse files
committed
Merge origin/main into claude/issue-20234-dead-citations-data-rest
Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
2 parents 57ce465 + 288611e commit 53c9070

116 files changed

Lines changed: 2917 additions & 1013 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
fix(spec): `os migrate meta` guidance for the `rest-*`, `analytics-*`, `view-*`, `package-*`, `object-*`, `sharing-*`, `audit-*`, `flow-*` and `http-*` migration entries states each lesson in words instead of citing tracker numbers
6+
7+
Clause-②: no
8+
9+
The ADR-0087 semantic entries of the `rest-*` family (the retired OpenAPI 3.1 block, the
10+
endpoint `handlerStatus` marker, the REST server's dead config keys and the REST plugin
11+
durations renamed with their unit), the `analytics-*` family (the retired query envelope,
12+
the unknown-key refusals on cubes, and the closed date-range vocabulary and two-bound
13+
window), the `view-*` family (the filter value shaped by its operator and its array and
14+
absent-value refusals, the retired view-management protocol, the page-size default and the
15+
judged overlay `options` bag), the `package-*` family (the explicit all-tenants uninstall,
16+
the retired unmounted contract-map entries and rollback response, and the strict wrapped
17+
install body), the `object-*` family (the array `sort` on object blocks, the converged grid
18+
`data`, the rule-array `defaultFilters` and the index unknown-key refusal), the `sharing-*`
19+
family (the retired `SharingExecutionContext` type and the reconciled rule recipients), the
20+
`audit-*` family (the audit-log action values no writer produced), the `flow-*` family (the
21+
retry count, the decision-branch and edge refusals, first-match edge branching and blank
22+
predicate slots) and the `http-*` family (the retired error counter and server runtime
23+
vocabulary) are printed by `os migrate meta` as the header, `why:` and `verify:` lines of a
24+
manual change. Their text sent the reader to issue-tracker, decision-batch and ruling-record
25+
numbers — some of which no longer resolve, and some in another repository — for what a
26+
ruling, measurement or fix had decided; it now says what was decided, in the sentence being
27+
read. ADR ids are kept. Two entries of other families are corrected the same way:
28+
`api-error-retry-after-unit-in-key` now dates the population ruling its clause describes,
29+
and `inline-grid-column-currency-scale-refused` names its two currency rulings by date
30+
instead of by record number.
31+
32+
Text only: no entry id, `from` / `to`, conversion or matching logic changes, and the chain
33+
rewrites exactly what it rewrote before. One entry's `surface` (the header line of
34+
`flow-edge-condition-evaluated-slot-source-required`) drops the two tracker numbers it
35+
carried and names nothing else differently. The generated migration registry,
36+
`spec-changes.json` and the protocol upgrade guide carry the same text.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
"@objectstack/spec": patch
3+
---
4+
5+
`liveness/state-counts.md` is replaced by `liveness/state-counts/<type>.md`: the generated liveness counts are one shard per governed type, and no total is committed anywhere.
6+
7+
Clause-②: no — no schema key moves, no accept set widens or narrows, no export changes. What changes is the layout of a generated table that ships in the tarball, and no count in it moves.
8+
9+
The ledgers ship inside this package (`files[]` includes `liveness`), so the changed tarball bytes are: `liveness/state-counts.md` removed, forty `liveness/state-counts/<type>.md` shards added (each carries exactly the row that file published for its type), and the prose in `liveness/README.md`, `liveness/book.json` and `liveness/translation.json` that named the removed file.
10+
11+
- **Where a count now lives.** A type's row is `liveness/state-counts/<type>.md`, byte-for-byte the row the single file carried. The table's total is not in any file: `pnpm --filter @objectstack/spec check:liveness` sums the shards when it reads them, prints the sum on its success line, and carries it in `--json` as `countsTotal`. At this release the sum is the total the removed file published: 940 live · 5 experimental · 1 live-elsewhere · 148 dead · 9 planned = 1103 classified.
12+
- **Why.** Every change that moved a liveness verdict rewrote the single file's total row, and GitHub's server-side merge runs no custom merge driver, so any two such changes in flight conflicted on that one line. With one file per type, changes that move different types touch different files.
13+
- **Anything that read `liveness/state-counts.md` from the published package** reads the shard for the type it wants, or sums the shards for the total. `gen:liveness-counts` rewrites only the shards whose counts moved and deletes the removed file if a merge brings it back; `check:liveness` fails while it is present.

‎.gitattributes‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,25 @@
6767
# cleanly because they do not overlap, and the subtotal merges clean and WRONG
6868
# (seven cases in one day). Note it is the counts file, not the ledger — the
6969
# ledger's prose is hand-written and must never be resolved by regenerating.
70+
# #20361 sharded it into `….counts/`, one file per source directory, and stopped
71+
# committing its cross-directory totals — the same measured conflict as the
72+
# liveness counts below, in the same driver-less server-side merge.
7073
#
7174
# The liveness state table's counts joined at #7377 for the same reason, one file
7275
# over — 9 of its 30 rows had drifted from the gate before anyone re-ran the
73-
# documented snippet. Same split and the same caveat: `liveness/state-counts.md`
74-
# is the numbers and is driver-managed; `liveness/README.md` is the Notes prose —
76+
# documented snippet. Same split and the same caveat: `liveness/state-counts/` is
77+
# the numbers and is driver-managed; `liveness/README.md` is the Notes prose —
7578
# hand-written measurement of how each type got where it is — and is NOT.
7679
# Regenerating a Note would fabricate a verdict, which that README calls worse
7780
# than a missing row.
7881
#
82+
# #20361 then SHARDED those counts, one file per governed type, and stopped
83+
# committing a total: the single file's shared total row was rewritten by every
84+
# liveness PR, so in the driver-less server-side merge any two of them conflicted
85+
# and each landing left every other one `dirty`, with no CI run until a
86+
# merge-and-regenerate round. The cure is the one the header above records for
87+
# the three hottest artifacts; each gate sums its shards when it reads them.
88+
#
7989
# The elevation census page joined at #13646 — a generated `file:line` anchor
8090
# table whose correct merged values are on NEITHER side of a conflict (measured on
8191
# #13625: five conflicted anchors resolved to 4408/5771/6019/6382/6575 against
@@ -138,7 +148,7 @@
138148
# neither side.
139149

140150
packages/spec/spec-changes.json merge=os-regen
141-
packages/spec/liveness/state-counts.md merge=os-regen
151+
packages/spec/liveness/state-counts/** merge=os-regen
142152
packages/spec/authorable-surface/** merge=os-regen
143153
packages/spec/authorable-surface.base.json merge=os-regen
144154
packages/spec/authorable-defaults/** merge=os-regen
@@ -149,7 +159,7 @@ packages/spec/export-origins/** merge=os-regen
149159
packages/spec/declaration-map/** merge=os-regen
150160
packages/spec/api-surface-signatures.json merge=os-regen
151161
docs/protocol-upgrade-guide.md merge=os-regen
152-
docs/audits/2026-07-unknown-key-strictness-ledger.counts.md merge=os-regen
162+
docs/audits/2026-07-unknown-key-strictness-ledger.counts/** merge=os-regen
153163
content/docs/references/** merge=os-regen
154164
content/docs/permissions/system-context.mdx merge=os-regen
155165
skills/*/references/_index.md merge=os-regen

‎docs/audits/2026-07-unknown-key-strictness-ledger.counts.md‎

Lines changed: 0 additions & 267 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!-- GENERATED — DO NOT EDIT BY HAND. -->
2+
<!-- Regenerate: pnpm --filter @objectstack/spec gen:strictness-ledger -->
3+
4+
# `ai/` — unknown-key strictness counts (generated)
5+
6+
The object-site total of `packages/spec/src/ai/`, computed from the AST
7+
(`packages/spec/scripts/lib/strictness-ledger.ts`). The directory is untriaged:
8+
the ledger classifies it coarsely, per directory rather than per file, so this
9+
total is the one number measured here.
10+
11+
The verdicts, the evidence and the exemption rationales live in
12+
[the ledger itself](../2026-07-unknown-key-strictness-ledger.md) and are
13+
hand-written; **this file has no prose to preserve** and is regenerated whole.
14+
One file per directory, and no total across directories is committed anywhere:
15+
`check:strictness-ledger` sums the shards when it reads them. **Never
16+
hand-patch a number here** — fix the code or the verdict and regenerate.
17+
18+
## Site total (untriaged)
19+
20+
| Dir | Sites |
21+
|---|---|
22+
| `ai/` | 78 |

0 commit comments

Comments
 (0)