Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 12 additions & 48 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -94,53 +94,18 @@
# merge-and-regenerate round. The cure is the one the header above records for
# the three hottest artifacts; each gate sums its shards when it reads them.
#
# The elevation census page joined at #13646, when it was a generated `file:line`
# anchor table whose correct merged values were on NEITHER side of a conflict
# (measured on #13625: five conflicted anchors resolved to 4408/5771/6019/6382/6575
# against branch 4407/5770/… and main 4284/5647/…), so no text merge and no hand
# merge could reach them. ⚠️ It is routed as the FILE and NOT as
# `content/docs/permissions/**`: unlike `content/docs/references/**` above, which
# is generated whole, that directory is 22 hand-written prose pages around one
# generated one, and the glob would defer the prose to OURS. See
# NOT_DRIVER_MANAGED for that entry.
#
# This is also the row where the header's own warning is answered rather than
# accepted: `scripts/check-system-context-census.mjs` still reddens on every PR from
# the required `Lint & Repo Gates` job — it RE-DERIVES the census from the tree.
# While the page carried line anchors, that is what caught the stale anchors a merge
# left behind even when nothing conflicted, which was the majority case (#13625: 18
# anchors stale, 5 marked). The driver removes hand-merge rounds; it is never the
# only signal.
#
# ⚠️ #14064 CORRECTED the sentence that used to open that paragraph — "deferring is
# safe here BECAUSE the census gate re-derives". The gate re-derived the census and
# the anchors. It re-derives no PROSE, because prose is derived from nothing, and
# this page is the one routed path that carries both. So the argument was true and
# its domain was half the risk surface: the driver drops a side WHOLE, and on this
# page that side can carry hand-written paragraphs whose loss the gate is
# constitutionally unable to notice. Measured, not reasoned — deleting a 3-line
# anchor-free paragraph and running ten doc-family gates returned ten exit 0 over
# deleted documentation.
#
# #14064 kept the routing (the correct anchors were on neither side) and added the
# missing half: the row declares `mixed: 'line-anchors'` in
# scripts/regen-artifacts.mjs, and the driver refuses to defer SILENTLY when the
# incoming side carries anything but anchor numbers — it text-merges instead, and
# conflicts loudly if that cannot be done. The cheap case stayed cheap: of the last
# 25 main commits to this page when that was measured, 24 changed nothing but anchor
# numbers.
#
# Today (since #15921) the page carries `path#symbol` anchors and no line numbers,
# so the `line-anchors` comparator is the IDENTITY on it (measured on #16612:
# `extractLineAnchors(page).length === 0`, `blankAnchorLineNumbers(page) === page`).
# Every real edit therefore takes the text-merge branch, or conflicts loudly, by
# design; the renumbering case is gone because there is nothing left to renumber.
# What the census gate catches after a merge is now a symbol anchor that no longer
# resolves, a population that no longer matches, or a declared count that no longer
# equals the census. ⛔ The `mixed` field stays: it is what routes this row through
# the lossless check at all, and deleting it sends the row to the unconditional
# deferral, the silent deletion #14064 closed (reproduced on #16612). The row's
# comment in scripts/regen-artifacts.mjs carries the measurements.
# The elevation census page (`content/docs/permissions/system-context.mdx`) was
# routed here from #13646 to #22927 and is not any more: nothing on it is
# generated. It joined as a `file:line` anchor table whose correct merged values
# were on NEITHER side of a conflict, became a MIXED row when #14064 measured that
# a whole-side deferral dropped its hand-written prose (`mixed: 'line-anchors'`),
# lost its line numbers to `path#symbol` anchors at #15921, and lost its last
# generated half — the census totals — to #22927's ruling. It text-merges like
# its prose neighbours now. ⚠️ What still catches a merge that leaves it wrong is
# `scripts/check-system-context-census.mjs`, which re-derives the census from the
# tree on every PR in the required `Lint & Repo Gates` job: a read no row anchors,
# or an anchor that no longer resolves. The `mixed` field and its comparator stay
# for the next mixed artifact (scripts/regen-artifacts.mjs, scripts/git-merge-regen.mjs).

#
# #13731 enumerated this file's blind spot and closed it: `check:merge-driver` now
Expand Down Expand Up @@ -182,7 +147,6 @@ packages/spec/declaration-map/** merge=os-regen
packages/spec/api-surface-signatures.json merge=os-regen
docs/audits/2026-07-unknown-key-strictness-ledger.counts/** merge=os-regen
content/docs/references/** merge=os-regen
content/docs/permissions/system-context.mdx merge=os-regen
skills/*/references/_index.md merge=os-regen
skills/objectstack-ui/references/react-blocks.md merge=os-regen
scripts/platform-object-tenancy-census.json merge=os-regen
Loading
Loading