Skip to content

fix(perseus): replace dead license_url with /hopper/opensource#1

Merged
maehr merged 3 commits into
mainfrom
fix/perseus-license-url
Jun 9, 2026
Merged

fix(perseus): replace dead license_url with /hopper/opensource#1
maehr merged 3 commits into
mainfrom
fix/perseus-license-url

Conversation

@maehr

@maehr maehr commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Two coordinated fixes for the registry data files. Carrier PR for changes that downstream textrefs.org PR #5 picks up via the data/ submodule.

  • Perseus license_url (commit 014bc818). https://www.perseus.tufts.edu/hopper/about/copyright 404s (also /hopper/copyright 404s). Replace with the live https://www.perseus.tufts.edu/hopper/opensource page (Perseus's current CC-BY-SA statement) in the two Perseus editions:
  • Second resolvers on single-resolver works (commit 5dc79a3f). Add a second resolver target to works that previously had only one, improving fallback coverage.
  • target_kindconforms_to (commit be413a09). target_kind: prefer a dereferenceable IRI + dct:conformsTo over an enumerated scheme list textrefs.org#6 retires the informative target_kind label in favour of optional dcterms:conformsTo. Translate the existing wikidata/wikipedia hints to dereferenceable scheme IRIs (https://www.wikidata.org/, https://en.wikipedia.org/) across all 12 works/*.yaml. See decisions/ADR-0001-conforms-to-replaces-target-kind.md in the downstream PR for rationale.

Test plan

  • curl -sI https://www.perseus.tufts.edu/hopper/opensource returns 200
  • Downstream textrefs.org PR #5 picks up this commit via submodule and npm run build:data validates all 39250 records (locally: ✓)
  • CI on textrefs/textrefs.org link-check + Validate workflows go green once the submodule pointer matches main

🤖 Generated with Claude Code

The /hopper/about/copyright page 404s; the /hopper/opensource page is
Perseus's current statement of their CC-BY-SA terms.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 7, 2026 14:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Perseus resolver metadata for two Greek editions to point license_url at Perseus’s current, live “opensource” page instead of a dead/404 copyright page, improving link integrity for downstream consumers (e.g., textrefs.org).

Changes:

  • Updated Perseus license_url in works/plato.republic.yaml to https://www.perseus.tufts.edu/hopper/opensource.
  • Updated Perseus license_url in works/aristotle.nicomachean-ethics.yaml to https://www.perseus.tufts.edu/hopper/opensource.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
works/plato.republic.yaml Replaces the dead Perseus license URL with the live /hopper/opensource page for the Republic edition.
works/aristotle.nicomachean-ethics.yaml Replaces the dead Perseus license URL with the live /hopper/opensource page for the Nicomachean Ethics edition.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

maehr and others added 2 commits June 9, 2026 23:12
Each of six works had only one resolver, so a single provider's outage
blanked the entire resolver target list. Add a complementary
open-access second resolver to each: Perseus (Homer Iliad, Odyssey),
Wikisource zh `論語/{name}第{ordinal}` keyed by book (Analects), and
Project Gutenberg coarse landing pages (Aristotle NE #8438, Plato
Republic #1497, Genji #19264) where no per-locator template fits.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
textrefs/textrefs.org#6 retires the informative target_kind label in
favour of optional dcterms:conformsTo. Translate the existing
wikidata/wikipedia hints to dereferenceable scheme IRIs
(https://www.wikidata.org/ and https://en.wikipedia.org/) so the
conformance claim carries through the JSON-LD context.

Refs textrefs/textrefs.org#6.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@maehr maehr merged commit 36cae56 into main Jun 9, 2026
4 checks passed
@maehr maehr deleted the fix/perseus-license-url branch June 9, 2026 21:37
maehr added a commit to maehr/textrefs.org that referenced this pull request Jun 9, 2026
textrefs/registry#1 merged via squash; advance data/ pointer from the
feature branch tip to the merge commit on main so the Validate
workflow's "pin is on registry main" guard passes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
maehr added a commit to textrefs/textrefs.org that referenced this pull request Jun 9, 2026
* fix(ci): repair URL extraction in link-check workflow

Fixes #3. Three buckets of false-positive errors:

- grep regex truncated URLs at `)`, mangling Wikipedia disambiguation
  titles. Allow `)` in URLs and strip only unbalanced trailing `)`.
- resolver templates with `{placeholder}` reached lychee verbatim.
  Filter them out.
- `data/package-lock.json` contributed bot-blocked opencollective URLs.
  Restrict grep to YAML/MD and add opencollective to lychee excludes.

Also bump the registry submodule for the Perseus license_url fix, and
mirror that URL change in the how-it-works example.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(deps): bump astro 6.4.4 and migrate to zod 4

- npm update: astro 6.4.3 → 6.4.4 (patch)
- zod 3.25.76 → 4.4.3 (was already pulled in by astro/starlight as
  transitive at v4; align top-level so there's one resolved copy)

Zod 4 migration in schema + validator:
- z.string().url() → z.url() (Iri)
- z.ZodIssueCode.custom → 'custom' string literal (superRefine calls)
- validate-data reportIssue path type widened to PropertyKey[] to match
  zod 4's $ZodIssue['path']

GH Actions are already on current majors; no bumps needed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(association): sync statutes board size and review tracks with dossier

Vorstand minimum reduced from three to two persons (Statuten Art. 11)
in DE and EN; align contributing guides to frame all three review
tracks (technical, expert, board reservation) as first-class, matching
the governance regulation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(spec): tighten dereferenceable-location guidance to should (#7)

§1 previously said a conforming registry MAY record dereferenceable
locations. A bare identifier with no resolution path is of limited
practical use, so tighten to SHOULD to nudge implementers toward
providing a resolvable URL per reference.

Closes #7.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(spec): self-contained §13 example with @context (#8)

Replace §13's compound JSON-shaped wrapper with a single JSON-LD
document under @context + @graph. Each record carries full id, type,
and administrative metadata so a reader can copy the example out and
validate it directly against the published context and Zod schemas.

The CanonicalReference id is the deterministic UUID v5 produced by the
seed for `new-testament / bible-book-chapter-verse / John.3.16 / 1.0.0`,
verified locally against standard/schema/.

Closes #8.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(data): bump submodule with second resolvers on single-resolver works

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat(spec)!: replace target_kind with dcterms:conformsTo (#6)

target_kind was an OPTIONAL human-readable scheme hint with no
normative weight; maintaining Appendix B's enumerated label list was
upkeep without payoff. Replace it with optional target.conforms_to —
an IRI (or array of IRIs) typed as dcterms:conformsTo in the v1
JSON-LD context — mirroring Linked Art's conforms_to pattern.

Spec, Appendix B, JSON-LD context, Zod schema, compile pipeline,
in-tree fixture, registry detail pages, and get-started prose all
migrated. The Astro mapping/work pages drop the scheme-label badge:
the identifier IRI is authoritative and self-describing.

The data/ submodule pointer moves to the matching textrefs/registry
commit (target_kind→conforms_to in every data/works/*.yaml).

See decisions/ADR-0001 for the rationale and alternatives considered.

BREAKING CHANGE: target.target_kind is removed; downstream consumers
that read it MUST migrate to target.conforms_to. Acceptable pre-v1.0.0.

Closes #6.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(data): bump submodule to registry main (36cae56)

textrefs/registry#1 merged via squash; advance data/ pointer from the
feature branch tip to the merge commit on main so the Validate
workflow's "pin is on registry main" guard passes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(404): mark docs/404.mdx as draft to drop catch-all route conflict

Starlight reads docs/404 via getEntry() for its dedicated /404 route
AND enumerates the same entry through the [...slug] catch-all,
producing a benign but noisy build warning ("Could not render /404
from route /[...slug] as it conflicts with higher priority route
/404"). draft: true excludes the entry from the catch-all in
production builds while leaving Starlight's direct-by-id lookup
intact, so dist/404.html still ships our custom hero.

The localised dist/de/404/index.html is dropped (the fallback-route
pass uses the same draft-filtered docs list); Cloudflare Pages serves
/404.html for missing pages across all locales anyway.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Moritz Mähr <14755525+maehr@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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.

2 participants