Skip to content

[finding] Bare ADR numbers in the published catalog — 177 sites, and three protection.reason examples teach customers to write see ADR-0010 into their own metadata #11791

Description

@claude

Measured on origin/main at 56630b7ee while implementing #11781 (PR #11790). Filed unassigned — out of that card's scope, which was ADR-0057 only.

Sub-issue of #11052, which asks the same question one citation-kind over: that card measured 92 internal issue ids (#NNNN) the customer cannot open; this one measures the ADR numbers. #11052's question 1 — "Do published skills keep provenance ids at all?" — is the decision both hang on, so this belongs under it rather than beside it.

What

skills/** carries 177 ADR-NNNN citations, essentially all bare. Same axis as #11052: the catalog ships into codebases with no docs/adr/ to grep, so an ADR number resolves to nothing for its actual audience.

The sharpening that makes this its own measurement: three ADR numbers are each claimed by two unrelated records0010, 0019, 0057 — frozen on check-adr-anchors.mjs's shrink-only KNOWN_NUMBER_COLLISIONS. #11781 closed the ADR-0057 exposure. The other two, judged per site rather than as a class:

ADR-0010 — exposed (17 sites, 8 skills)

The pair is 0010-metadata-protection-model vs 0010-nl-to-flow-authoring.

13 of the 17 sit in the generator-owned references/_index.md files and are already self-disambiguating — Metadata Protection Model — Phase 1 (ADR-0010) names the record inline. Those are fine.

The 4 in skills/objectstack-data/SKILL.md are bare:

  • :855See ADR-0010 for the full model. Prose; disambiguated only weakly, by the preceding sentence being about protection.
  • :897, :915, :936 — inside authored metadata:
    protection: {
    lock: 'full',
    reason: 'Core identity object — see ADR-0010.',
    docsUrl: 'https://objectstack.ai/docs/references/shared/protection',
    

The three reason: sites are worse in kind than the ones #11781 fixed, and worth separating from the prose case. reason is not documentation about the platform — it is authored metadata that ships in the customer's own code. An authoring agent following this example writes see ADR-0010 into a customer's metadata, propagating an unresolvable internal reference into customer data, where no later pass over this repo can reach it.

They also already carry, on the very next line, a docsUrl pointing at a public page that does resolve. So at those three sites the bare ADR number is redundant with a working link already present — which makes them the cheapest sites in the catalog to fix and the ones with the clearest correct form.

ADR-0019 — checked, NOT defective (5 sites)

skills/objectstack-automation/SKILL.md:278,289,436,806 and skills/objectstack-platform/SKILL.md:187. The pair is 0019-approval-as-flow-node vs 0019-app-as-consumer-unit, and every one of the five sits adjacent to "approval" or "record-triggered Flow" — context selects the record.

Recorded explicitly so a later pass does not "correct" them. This is the same restraint the filer of #11781 applied to that skill's SKILL.md:651.

The constraint any fix will hit

scripts/check-skills-token-ratchet.mjs is shrink-only, and 7 of the 11 published SKILL.md sit at exactly 0 headroom today:

skills/objectstack-ai/SKILL.md 6824 / 6824 (+0)
skills/objectstack-api/SKILL.md 6342 / 6342 (+0)
skills/objectstack-i18n/SKILL.md 6349 / 6349 (+0)
skills/objectstack-pm-dispatch/SKILL.md 14239 / 14239 (+0)
skills/objectstack-query/SKILL.md 5569 / 5569 (+0)
skills/objectstack-ui/SKILL.md 25154 / 25154 (+0)
skills/objectstack-upgrade/SKILL.md 8335 / 8335 (+0)

So additive qualification is unreachable catalog-wide right now — the only legal edits are deletion or a byte-neutral rewrite. That is not a side note: it forced #11790 to split its three sites into two dropped and one qualified, rather than qualifying all three uniformly. Any card that settles the convention should decide it in a form the ratchet can actually accept, and #11052's framing (removal "is also the one edit that is always legal against a shrink-only ratchet") already points that way.

Not fixed here

#11790 was scoped to ADR-0057. Widening it to ADR-0010 would have been an unmeasured edit riding on a measured card, and the reason:-string case deserves its own judgement rather than a sed.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions