Skip to content

v0.1.3: Obligation-First Level 2 conformance - #2

Merged
snapsynapse merged 4 commits into
mainfrom
of-naming-profile
Jul 25, 2026
Merged

v0.1.3: Obligation-First Level 2 conformance#2
snapsynapse merged 4 commits into
mainfrom
of-naming-profile

Conversation

@snapsynapse

Copy link
Copy Markdown
Owner

Publishes the naming profile obligation-first has required since 0.4.0, bringing PubLedge to Level 2. Also picks up the Colorado ADMT obligation work that had accumulated in Unreleased.

Order-independent with respect to snapsynapse/obligation-first#5 — the profile declares a range that spans both 0.4.x and 0.5.x, so this is green either way.

Why it was missing

EveryAILaw and AI Incident Law have published a naming profile since obligation-first 0.4.0. PubLedge had not, despite being the adopter whose @id grammar diverges most from the spec's opacity guidance — utah-mental-health-chatbot-disclosure-2026q2-... encodes jurisdiction and period in the slug. Without a profile there was nothing to check that divergence against.

What it declares

Generated in build-extras.js rather than hand-placed, because docs/ is build output.

Declarations are descriptive, not aspirational. Each void:uriRegexPattern is verified against all 112 published records, and crosswalks states what each entity type actually supplies — Obligation and Determination supply none today, and the profile says so rather than claiming otherwise. Proceeding and Allegation are absent because PubLedge mints neither.

appliesTo is obligation-first >=0.4.0 <0.6.0. PubLedge publishes no ObligationCategory records, so it has no reason to floor at 0.5.0 and rides that additive release unchanged. That is exactly what ranged appliesTo was added for.

Two eval gaps, both surfaced by the version bump

  • eval-manifest-scope hardcoded RELEASE_NOTES-v0.1.2.md in its canonical-source list, so renaming the file for a release would have made the eval assert a path that no longer exists. Now derived from package.json.
  • scripts/check-of-version.js had no MANIFEST.yaml entry, leaving a tracked tooling file outside the integrity manifest.

Notes for review

The docs/ churn is the generated site: the version string appears in every page footer, and eval-generated-tree-parity requires docs/ to match a clean build.

npm publish and the MCP registry update for 0.1.3 have NOT been performed. server.json declares 0.1.3 because eval-discovery-contract requires it to match package.json, so until you publish, the registry claims a version npm does not have.

Verification

npm run evals passes all 19. npm run verify, validate, validate:of (112 records), and check:of all green.

🤖 Generated with Claude Code

snapsynapse and others added 4 commits July 25, 2026 11:52
Obligation-First 0.4.0 made /.well-known/obligation-first-naming-profile.jsonld
the standard for declaring an adopter's IRI scheme. EveryAILaw and AI Incident
Law both publish one; PubLedge did not, despite being the adopter whose @id
grammar diverges most from the spec's opacity guidance. Without a profile there
is nothing to check that divergence against.

The profile is generated in build-extras.js rather than hand-placed, because
docs/ is build output. Declarations are descriptive, derived from what the
records actually carry: the void:uriRegexPattern for each entity type is
verified against all 112 published records, and the crosswalks list states what
each type actually supplies (Obligation and Determination supply none today).

PubLedge mints no Proceeding or Allegation records, so those types are absent
rather than declared empty.

Also adds check:of, a thin wrapper delegating to the shared version-check
script in obligation-first, so a spec bump surfaces here instead of drifting.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Publishes the naming profile obligation-first has required since 0.4.0 and
brings the repo to Level 2. Also picks up the Colorado ADMT obligation work
that had accumulated in Unreleased.

The profile declares "obligation-first >=0.4.0 <0.6.0" rather than pinning a
minor. PubLedge publishes no ObligationCategory records, so it has no reason to
floor at 0.5.0, and the range lets it ride that additive release instead of
going red in lockstep with a change that does not affect it.

Two eval gaps fixed, both surfaced by the bump rather than by review:

- eval-manifest-scope hardcoded RELEASE_NOTES-v0.1.2.md in its canonical-source
  list, so renaming the file for a release would have made the eval assert a
  path that no longer exists. It now derives the filename from package.json.
- scripts/check-of-version.js had no MANIFEST.yaml entry, so a tracked tooling
  file was outside the integrity manifest. Added.

The docs/ churn is the generated site: the version string appears in every page
footer, and eval-generated-tree-parity requires docs/ to match a clean build.

npm publish and the MCP registry update for 0.1.3 are a separate manual step
and have NOT been performed. server.json declares 0.1.3 because
eval-discovery-contract requires it to match package.json.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
check:of skips when it cannot find obligation-first's shared checker. That is
right for a developer without a sibling checkout and wrong in CI, where the
spec is checked out on purpose: every-ai-law#357 saw the step report green
while checking nothing, because the shared script was not yet on
obligation-first main.

CHECK_OF_REQUIRED=1 turns the skip into a failure. Default behavior is
unchanged. PubLedge's own CI does not check obligation-first out today, so
nothing here sets it yet; the flag exists so the wrappers stay identical across
the three adopters and so a future federation job here can opt in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The v0.1.3 bump and the CHECK_OF_REQUIRED change edited nine hashed files
after their MANIFEST entries were written, so the CI hash gate failed on
server.json, package.json, CHANGELOG.md, PROTOCOL.md, README.md,
PROJECT_CONTEXT.md, and three scripts. Recomputed with
scripts/validate-hashes.sh --update.

I had added the scripts/check-of-version.js entry by hand earlier in this
branch rather than through that script, which is what let the drift accumulate
unnoticed locally: nothing in the default `npm run evals` path checks hashes,
only CI does.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@snapsynapse
snapsynapse merged commit 58d476c into main Jul 25, 2026
2 checks passed
@snapsynapse
snapsynapse deleted the of-naming-profile branch July 25, 2026 21:07
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