Skip to content

Fix/drawer polish - #157

Merged
bvkay merged 2 commits into
mainfrom
fix/drawer-polish
Aug 19, 2026
Merged

Fix/drawer polish#157
bvkay merged 2 commits into
mainfrom
fix/drawer-polish

Conversation

@bvkay

@bvkay bvkay commented Aug 19, 2026

Copy link
Copy Markdown
Owner

No description provided.

bvkay added 2 commits August 19, 2026 07:51
…sible on the navy tiles

The survey drawer's data-level grid renders three anchor sites - the tile identifiers (.dl-id: DOIs
and SARIG PIDs), the "Levels per Rees et al. 2019" citation (.dl-cite) and the instruments platform
PID (.dl-instr) - and NO rule in the sheet ever selected any of them. With no author colour declared
they took the user agent's link colours: a dark blue that is all but unreadable on --panel-2 #1E2B4F,
turning browser-purple once followed. The owner caught it in a screenshot of the deployed drawer.

This is the same defect the .meta td a rule already fixed for the summary tables, and it takes the
same fix, reused rather than reinvented: var(--copper), no underline until hover - the exact value
.dsub a.orglink (organisation ROR links) and .surveymeta a (publication DOIs) already carry. :visited
is stated EXPLICITLY, the only :visited rule in the sheet: an identifier is not consumed by being
clicked, so a followed DOI must read identically to an unfollowed one, and saying so keeps that true
if a later edit ever narrows the base selector. The muted tiles' "not yet recorded" state is
deliberately NOT in these selectors - an absence is a statement, not a followable link, so it stays
--muted.

Two pins, each with its own failure mode. test_data_level_link_rules_reuse_the_established_treatment
reads the established rules' value OUT OF THE SHEET and requires the three new rules to equal it, so
inventing a second accent fails as loudly as declaring none; it needs no Node and adds no skip. The
negative pin proves the state text is neither an anchor nor accent-painted. The cascade half - that
these rules actually SELECT the anchors the grid renders - lands with the drawer changes in the next
commit, where the rendered DOM to match against exists.

RED-proven: with this CSS reverted and the tests kept, the pin fails with "the tile identifier links
(DOIs / SARIG PIDs): index.html declares no colour for '.dl-id a' - the UA default ships".
…t - and the grid says what it is for

Two owner changes to the survey drawer's data-level grid (2026-08-19), plus the cascade half of the
link-styling pin from the previous commit.

SLOT MAPPING. The `identifies` vocabulary's `entire` means ONE record covering all levels - the shape
_template/survey.yaml directs a state-survey landing page to - which is precisely the umbrella record
the Collection slot names. It was mapped to no slot at all, so it fell into the extra-tile bucket:
Gawler Phase 2, whose only umbrella identifier is its GSSA/SARIG record (identifies: entire, no
`collection` row), read "1 of 6 recorded" with an EMPTY Collection tile and the record itself hanging
below the grid as an orphan seventh tile - the drawer denying a deposit the survey had plainly made.
`entire` now ALIASES the Collection slot (SLOT_ALIASES, stated as data next to the slot table rather
than buried in the resolver, so the next vocabulary addition has an obvious place to go).

COLLISION RULE, implemented, commented at the alias table and pinned three ways: a survey carrying
BOTH `collection` and `entire` gives the slot to the EXACT key and renders `entire` as an extra tile.
Nothing is ever silently dropped - the extra-tile rule stays the section's one answer to "recorded,
but not one of the six" - and "N of 6" keeps counting SLOTS, so a colliding pair tallies one, never
two. Declaration order is irrelevant: the exact match wins wherever it sits in the list, and both the
pytest and interaction fixtures declare `entire` FIRST so an order-dependent implementation fails.

Resolving slots through aliases makes "this row's identifies is not a slot key" an unsafe proxy for
"no slot took it", so the resolver now records the rows the six slots CONSUMED and derives the extras
bucket from that set. The consumed set also makes single-consumption structural: no row can fill two
slots, and none can be both a slot and an extra.

COPY. The section head becomes "Data at every level: N of 6 recorded" (owner-approved wording from
the design mockup) - it names what the grid is FOR, the deposit chain level by level, rather than the
identifier machinery it is made of. The STATION drawer's "Persistent identifiers & instruments" block
is untouched and keeps its name; the interaction pins assert BOTH, so the rename cannot silently
revert and the card pin that asserts the block is absent does not go vacuous by losing its string.

RED PROOFS (source reverted, tests kept):
  * `entire`-only -> "the `entire` row must FILL a slot, leaving exactly the six tiles, got 7"
  * copy          -> "the survey detail must carry a 'Data at every level:' section head"
  * cascade       -> "LINKCSS: no accent rule selects the grid anchor in 'dl-id'" (CSS reverted alone)
CONTROL MUTATIONS on the shipped code, because the collision fixture is green before AND after by
design (today's behaviour already equals the collision outcome, which is the point):
  * alias-resolved-before-exact -> caught by three pins, incl. "the exact `collection` row must win
    slot 1 over the `entire` alias"
  * extras derived from slot KEYS instead of the consumed set -> caught by the `entire`-only pins,
    which see the row rendered twice (slot AND orphan extra)

The interaction leg is the layer that asserts the CASCADE for the previous commit's rules: it loads
the real index.html in jsdom and requires an accent rule to SELECT each anchor the grid renders, and
a :visited form of it to exist, via element.matches(). jsdom resolves no custom properties, so this
proves selection and the declared value, never the painted pixel; the rendered colour remains a
browser-eye check.
@bvkay
bvkay merged commit 4ef9ef1 into main Aug 19, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant