fix(perseus): replace dead license_url with /hopper/opensource#1
Merged
Conversation
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>
4 tasks
There was a problem hiding this comment.
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_urlinworks/plato.republic.yamltohttps://www.perseus.tufts.edu/hopper/opensource. - Updated Perseus
license_urlinworks/aristotle.nicomachean-ethics.yamltohttps://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.
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
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>
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two coordinated fixes for the registry data files. Carrier PR for changes that downstream
textrefs.orgPR #5 picks up via thedata/submodule.license_url(commit014bc818).https://www.perseus.tufts.edu/hopper/about/copyright404s (also/hopper/copyright404s). Replace with the livehttps://www.perseus.tufts.edu/hopper/opensourcepage (Perseus's current CC-BY-SA statement) in the two Perseus editions:works/aristotle.nicomachean-ethics.yamlworks/plato.republic.yamlSurfaced by the textrefs.org link checker (Link Checker Report textrefs.org#3).
5dc79a3f). Add a second resolver target to works that previously had only one, improving fallback coverage.target_kind→conforms_to(commitbe413a09).target_kind: prefer a dereferenceable IRI +dct:conformsToover an enumerated scheme list textrefs.org#6 retires the informativetarget_kindlabel in favour of optionaldcterms:conformsTo. Translate the existingwikidata/wikipediahints to dereferenceable scheme IRIs (https://www.wikidata.org/,https://en.wikipedia.org/) across all 12works/*.yaml. Seedecisions/ADR-0001-conforms-to-replaces-target-kind.mdin the downstream PR for rationale.Test plan
curl -sI https://www.perseus.tufts.edu/hopper/opensourcereturns 200textrefs.orgPR #5 picks up this commit via submodule andnpm run build:datavalidates all 39250 records (locally: ✓)textrefs/textrefs.orglink-check + Validate workflows go green once the submodule pointer matchesmain🤖 Generated with Claude Code