Uh oh!
There was an error while loading. Please reload this page.
docs(skills): make the objectstack-data ADR-0057 citations resolvable outside this repo - #11790
Conversation
… outside this repo `skills/**` ships into customer codebases that have no `docs/adr/` to grep, so a bare `ADR-0057` resolves to nothing for its actual audience — and in this repo the number is one of three claimed by two unrelated records (the shrink-only `KNOWN_NUMBER_COLLISIONS` in `check-adr-anchors.mjs`): system data lifecycle vs. ERP authorization core. Three bare citations, fixed per site rather than uniformly, because `skills/objectstack-data/SKILL.md` sits at exactly its published-skills token ceiling (13817/13817, zero headroom): - `SKILL.md:84` and `:973` — decorative provenance. Both rows already state the retention/rotation/archival contract in full and already link to the in-bundle `./rules/lifecycle.md`, which does resolve for an external reader. The bare number is dropped; the provenance survives one hop away at the destination both rows already point to. Byte-negative, as the ratchet requires. - `rules/lifecycle.md:4` — the page that carries the substance, and unpriced by the ratchet (it prices `SKILL.md` only). Slug-qualified in place, following the convention already used on a published docs page. `SKILL.md:651`'s `ADR-0057 D1` is deliberately untouched — that citation is correct and unambiguous. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ahemw8RcTgqtxrj15PEZx
os-steve
commented
Aug 24, 2026
ACCEPT (advisory — governed surface, so the merge decision is ⭐ The constraint you found is the finding, and neither I nor the card anticipated it
That reframes the card. It asked for three citations to be fixed; the tree says two of them cannot be fixed additively at all. Discovering that before writing the fix — rather than after a red gate — is what made the per-site treatment a decision instead of an improvisation. The form is not invented, and you established that three waysI said in Zone 2 that I did not know the conventions and would not rule, and told you to follow existing practice or report that none exists. You found practice and a maintainer ruling:
Per-site rather than uniform, verifiedThe three bare sites on Controls all hold: Ratchet after: Ruling on your open question: A, as shipped.Your recommendation, and I am confirming it rather than merely accepting it. B is the option I would have forbidden had you asked first. It funds ~34 bytes by deleting unrelated published text, chosen by whoever happens to pick the victim — settling a corpus-wide convention through an unmeasured deletion on a governed surface, on a card that measured none of that text. That is the same class as the C defers too much. A is right because the two dropped sites are decorative by measurement, not by assertion — each row states the retention/rotation/archival contract in full and already links #11791 is the bigger result177 bare ADR sites across the published catalog, filed as a sub-issue of #11052. Two things in it outrank this card:
⭐ And you checked ADR-0019's 5 sites, judged them not defective (context selects the record), and recorded that so a later pass does not "correct" them. Writing down what you examined and cleared is worth as much as writing down what you found — it is the only thing that stops the next sweep re-litigating it. ⛔ Governed handling: not flipping ready, not arming, not queuing. You have requested Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11781
skills/**is the published catalog: it ships into customer codebases that haveno
docs/adr/to grep. A bareADR-0057therefore resolves to nothing forits actual audience — and in this repo the number is additionally one of the
three claimed by two unrelated records (the shrink-only
KNOWN_NUMBER_COLLISIONSincheck-adr-anchors.mjs): system data lifecycle vs.ERP authorization core.
The measured constraint that shaped the fix
skills/objectstack-data/SKILL.mdsits at exactly its published-skills tokenceiling —
13817 / 13817, zero headroom. The ratchet's own remedy text saysnew text is paid for by deleting text in the same file and that loosening a
ceiling is not the fix. Measured: even the shortest additive qualifier
(
(ADR-0057 lifecycle), +10 bytes per site) lands the file at 13822 tokens andturns the gate red. So slug-qualifying inside
SKILL.mdis not reachablewithout deleting other published text, which would be an unmeasured edit riding
on a measured card.
rules/lifecycle.mdis unpriced — the ratchet enumeratesskills/*/SKILL.mdonly (
discoverSkillFiles). That asymmetry is what makes a per-site answer bothpossible and correct.
Per-citation disposition
SKILL.md:84./rules/lifecycle.md, which does resolve for an external readerSKILL.md:973rules/lifecycle.md:4(ADR-0057 — system data lifecycle & retention)Provenance is not lost at the two dropped sites: it survives one hop away, at
the destination both rows already point to.
The form is not invented
Zone 2 asked whether a published skill can carry this. Findings:
content/docs/has no ADR path, so no stablepublic URL exists to link. A URL form was not available.
ADR citations across
skills/**, essentially all bare.ADR-NNNN (short qualifier)—ADR-0010 (metadata protection),ADR-0010 (NL → Flow authoring),ADR-0019 (App as the consumer unit),ADR-0057 (ERP auth). Most relevant,it is already used on a published docs page:
content/docs/permissions/attachments-access.mdx:139writesADR-0057 (data lifecycle).check-adr-anchors.mjsordered C first, B to finish, where B is"slug-qualified references for the three existing pairs … amortised as those
files are touched". This is one of those files being touched.
Non-vacuity, with controls
ADR-0057inskills/objectstack-data/ADR-0057inskills/objectstack-data/ADR-0057 D1atSKILL.md:651ADR-0010inSKILL.mdADR-0052inSKILL.mdADR-NNNNinSKILL.mdSKILL.md:651'sADR-0057 D1is deliberately untouched — the filer checked itand it is correct (the ERP record's D1 really is scope-depth on object grants).
Published-skill size readings
Lines are the primary reading; tokens reported too, per the sibling gate's
ceil(utf8 bytes / 4)convention.skills/objectstack-data/SKILL.md(whole file)skills/objectstack-data/rules/lifecycle.md(whole file)skills/objectstack-data/(whole published package)SKILL.md)Line-neutral, and the surface the ratchet actually prices shrinks.
Verification
All gate families derived from the real change set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(nohand-written path list), then re-run at final commit
eaea14b08. Each verdictbelow is the gate's own printed line, not a shell
$?.node scripts/check-skills-token-ratchet.mjs—✓ check-skills-token-ratchet: skills/objectstack-data/SKILL.md is 13811 tokens (ceiling 13817; headroom 6).(headroom was 0)pnpm check:doc-authoring—✓ doc authoring guard: 389 files clean — no bare metadata literals.pnpm check:skill-compatibility—✓ check-skill-compatibility-version: 11 SKILL.md file(s) reconciled against 78 workspace packagespnpm check:skill-frame-sync—✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filespnpm check:agent-test-spelling—✓ check-agent-test-spelling: 0 violations — 352 file(s) …pnpm check:role-word— self-test + scan greenpnpm check:pm-governed-merges—✓ check-governed-merges --self-test: 129 assertionspnpm --filter @objectstack/lint run check:doc-formula-expressions—✓ … 9 @example(s) judged clean across 997 packages/spec/src filespnpm check:nul-bytes— self-test (75 assertions) + scan greenRepo-wide
eslint . --no-inline-confignarrowed, and the narrowing ismeasured rather than assumed — three pieces:
changed files, eslint reports
File ignored because no matching configuration was suppliedfor each.--format json: 2 paths submitted, 0 files actuallylinted, 0 errors.
eslint.config.*declares noparserOptions.projectand noprojectService(its line 328 documents theabsence explicitly), so linting is not type-aware — a markdown-only diff
cannot move any verdict on any file it does not touch.
No changeset: markdown-only change to the published skill catalog, matching
repo precedent for
docs(skills):commits.Governed surface
skills/**is governed (Prime Directive #14). This PR stays draft, reviewrequested from
os-zhuang, and is not to be flipped ready, armed forauto-merge, or enqueued by any agent seat. A human reviews governed changes.
Generated by Claude Code