feat: rename to paperspec and add the website

- Rename manuspec to paperspec everywhere outside pixi.toml: prose, the
  tools, provenance tool names and the fixture key derivations, so every
  fixture and vector is rebuilt.
- Move the namespace addresses under the site, mirroring the repository:
  schema $id https://paperspec.scient.ing/schemas/<file>, the JSON-LD
  context https://paperspec.scient.ing/context/scienting-1.jsonld, and
  term IRIs https://paperspec.scient.ing/vocab#<term>. Format
  identifiers (scienting-*) and URNs (urn:scienting:) are unchanged.
- tools/site.py (standard library only) builds _site/: every file of the
  repository at its own path, each Markdown file rendered as a page with
  sidebar navigation, heading anchors matching the forge's, folder
  listings, a vocabulary page for the context's IRIs, a heading search
  and a 404 page; light and dark themes.
- check.py builds the site and checks that every Markdown file has a
  page, every internal link and fragment resolves, no Markdown is left
  unrendered, and every $id, the context address and the vocabulary IRIs
  are files of the site.
- deploy/: a Caddyfile with the media types and CORS the data needs, and
  a guide; .gitea/workflows/site.yml builds on main and publishes with
  rsync when the SITE_* secrets are set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
alexmandClaude committed 2026-10-14 21:27:21 -04:00
1 parent ea0a7efa78
commit 76d76353d9
213 files changed
+1233 -386

No files matched your search

+3 -3
View File
@@ -1,12 +1,12 @@
# Schemas
This folder holds the JSON (JavaScript Object Notation) Schemas (draft 2020-12) for every file and record that the manuspec formats (manuspec is the specification this repository holds) define: 39 schema files.
This folder holds the JSON (JavaScript Object Notation) Schemas (draft 2020-12) for every file and record that the paperspec formats (paperspec is the specification this repository holds) define: 39 schema files.
A JSON Schema is a file, itself written in JSON, that states what a valid JSON file looks like.
Newcomers can read it as a form: it lists the fields a record must have and what kind of value each field takes.
Implementers will find the loading recipe and the traps under "Validating" and "Writing schemas".
Experts will find the chapter and status of each format under "Which schema for which file" and "What a schema does not check".
Each schema's `$id`, its own address as a name, is `https://scient.ing/ns/schemas/<file>`.
Each schema's `$id`, its own address as a name, is `https://paperspec.scient.ing/schemas/<file>`.
Schemas refer to each other by those names, and a validator (a program that checks a file against a schema) that loads the whole folder resolves every reference.
The `$id` base is normative and stays as it is.
The `scienting-` prefix on format identifiers such as `scienting-anchor/1` is the formats' namespace, a separate matter from the repository's name.
@@ -57,7 +57,7 @@ validator.validate(json.load(open("fixtures/records/anchor-span.json")))
It raises no error when run from the repository root, since `anchor-span.json` is a valid anchor.
A schema refers to another by a relative name, and the `Registry` object resolves it.
Here `anchor.schema.json` points to `common.schema.json#/$defs/key`, which a validator resolves against the `$id` above into `https://scient.ing/ns/schemas/common.schema.json`.
Here `anchor.schema.json` points to `common.schema.json#/$defs/key`, which a validator resolves against the `$id` above into `https://paperspec.scient.ing/schemas/common.schema.json`.
The `Registry` maps that name to the file's contents, so nothing is fetched over the network.
`Draft202012Validator(schemas["anchor.schema.json"])` fails with `Unresolvable: common.schema.json#/$defs/key` when the `Registry` is missing.
Never load a schema alone.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/anchor.schema.json",
"$id": "https://paperspec.scient.ing/schemas/anchor.schema.json",
"title": "Anchor",
"description": "scienting-anchor/1: a pinned address with context; spec/06-anchors.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/annotation.schema.json",
"$id": "https://paperspec.scient.ing/schemas/annotation.schema.json",
"title": "Annotation",
"description": "One line of annotations.jsonl in scienting-layer/1: a W3C Web Annotation; spec/18-layers.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/backend.schema.json",
"$id": "https://paperspec.scient.ing/schemas/backend.schema.json",
"title": "Backend declaration",
"description": "scienting-backend/1: a tool's code and weight licenses and their conditions; spec/14-rights.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/checklist.schema.json",
"$id": "https://paperspec.scient.ing/schemas/checklist.schema.json",
"title": "Conformance checklist",
"description": "scienting-checklist/1: a check of an export against a named standard, covered by a receipt; spec/08-fidelity.md §8.11.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/common.schema.json",
"$id": "https://paperspec.scient.ing/schemas/common.schema.json",
"title": "Shared definitions",
"description": "Definitions every scienting schema shares; spec/01-conventions.md.",
"$defs": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/correction.schema.json",
"$id": "https://paperspec.scient.ing/schemas/correction.schema.json",
"title": "Correction",
"description": "scienting-correction/1: a line of corrections.jsonl, or a proposal; spec/11-corrections.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/dataset.schema.json",
"$id": "https://paperspec.scient.ing/schemas/dataset.schema.json",
"title": "Dataset",
"description": "datapackage.json of scienting-dataset/1: a Frictionless Data Package with units, uncertainty and origin; spec/15-datasets.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/digitization.schema.json",
"$id": "https://paperspec.scient.ing/schemas/digitization.schema.json",
"title": "Digitization",
"description": "scienting-digitization/1: how values were read off a figure panel; spec/16-digitization.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/document.schema.json",
"$id": "https://paperspec.scient.ing/schemas/document.schema.json",
"title": "Document",
"description": "document.json of a scienting-doc/1 package; spec/02-model.md and spec/12-package.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/draft-ids.schema.json",
"$id": "https://paperspec.scient.ing/schemas/draft-ids.schema.json",
"title": "Draft sentence IDs",
"description": "One line of a Typst project's ids.jsonl: scienting-draft-ids/1; spec/21-drafts.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/exercise.schema.json",
"$id": "https://paperspec.scient.ing/schemas/exercise.schema.json",
"title": "Exercise",
"description": "scienting-exercise/1: the body of an exercise annotation; spec/19-exercises.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/grade.schema.json",
"$id": "https://paperspec.scient.ing/schemas/grade.schema.json",
"title": "Grade",
"description": "scienting-grade/1: the grader's result for one submission; spec/19-exercises.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/id-entry.schema.json",
"$id": "https://paperspec.scient.ing/schemas/id-entry.schema.json",
"title": "ID table entry",
"description": "One line of ids.jsonl; spec/04-identity.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/layer.schema.json",
"$id": "https://paperspec.scient.ing/schemas/layer.schema.json",
"title": "Layer",
"description": "layer.json of scienting-layer/1: a W3C AnnotationCollection; spec/18-layers.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/location.schema.json",
"$id": "https://paperspec.scient.ing/schemas/location.schema.json",
"title": "Location",
"description": "One line of locations.jsonl; spec/07-geometry.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/manifest.schema.json",
"$id": "https://paperspec.scient.ing/schemas/manifest.schema.json",
"title": "Package manifest",
"description": "MANIFEST.json, scienting-package/1; spec/12-package.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/mathml.schema.json",
"$id": "https://paperspec.scient.ing/schemas/mathml.schema.json",
"title": "Derived MathML",
"description": "One line of derived/mathml.jsonl: MathML made by a pinned tool; never authoritative; spec/12-package.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/node.schema.json",
"$id": "https://paperspec.scient.ing/schemas/node.schema.json",
"title": "Node",
"description": "One line of nodes.jsonl; spec/03-nodes.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/page.schema.json",
"$id": "https://paperspec.scient.ing/schemas/page.schema.json",
"title": "Page",
"description": "One line of pages.jsonl; spec/07-geometry.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/policy.schema.json",
"$id": "https://paperspec.scient.ing/schemas/policy.schema.json",
"title": "Team rights policy",
"description": "scienting-policy/1: a signed decision that resolves unknown uses; spec/14-rights.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/profile.schema.json",
"$id": "https://paperspec.scient.ing/schemas/profile.schema.json",
"title": "Team profile",
"description": "scienting-profile/1: what backend conditions ask about a team; spec/14-rights.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/project.schema.json",
"$id": "https://paperspec.scient.ing/schemas/project.schema.json",
"title": "Project",
"description": "scienting-project/1: a team's curated set of documents and people; spec/20-projects.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/provenance.schema.json",
"$id": "https://paperspec.scient.ing/schemas/provenance.schema.json",
"title": "Provenance",
"description": "provenance.json of a package; spec/12-package.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/qa-report.schema.json",
"$id": "https://paperspec.scient.ing/schemas/qa-report.schema.json",
"title": "QA report",
"description": "scienting-qa-report/1: reviewer error bounds for a delivery; spec/08-fidelity.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/receipt.schema.json",
"$id": "https://paperspec.scient.ing/schemas/receipt.schema.json",
"title": "Review receipt",
"description": "scienting-receipt/1; spec/08-fidelity.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/reference.schema.json",
"$id": "https://paperspec.scient.ing/schemas/reference.schema.json",
"title": "Reference record",
"description": "One line of references.jsonl; spec/10-references.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/revocation.schema.json",
"$id": "https://paperspec.scient.ing/schemas/revocation.schema.json",
"title": "Revocation",
"description": "scienting-revocation/1; spec/08-fidelity.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/rights.schema.json",
"$id": "https://paperspec.scient.ing/schemas/rights.schema.json",
"title": "Rights record",
"description": "scienting-rights/1: a witness's license, basis and uses; spec/14-rights.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/roster.schema.json",
"$id": "https://paperspec.scient.ing/schemas/roster.schema.json",
"title": "Roster",
"description": "scienting-roster/1: the keys that may sign; spec/08-fidelity.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/runs.schema.json",
"$id": "https://paperspec.scient.ing/schemas/runs.schema.json",
"title": "Inline runs",
"description": "The runs of a sentence, cell, reference, authors or keywords node; spec/03-nodes.md.",
"type": "array",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/snapshot.schema.json",
"$id": "https://paperspec.scient.ing/schemas/snapshot.schema.json",
"title": "Draft snapshot",
"description": "scienting-snapshot/1: the pinned claims, quotations and datasets a draft cites; spec/21-drafts.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/spot-check.schema.json",
"$id": "https://paperspec.scient.ing/schemas/spot-check.schema.json",
"title": "Spot-check seed payload",
"description": "scienting-spot-check/1: the payload a spot-check key signs to seed a sample; it names a receipt by its record hash and is never a file of its own; spec/08-fidelity.md §8.8.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/stages.schema.json",
"$id": "https://paperspec.scient.ing/schemas/stages.schema.json",
"title": "Stage requirements",
"description": "scienting-stages/1: the uses each stage needs; configuration, not code; spec/14-rights.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/stamps.schema.json",
"$id": "https://paperspec.scient.ing/schemas/stamps.schema.json",
"title": "Stamp rules",
"description": "scienting-stamps/1: download-stamp line rules for page fingerprints; spec/07-geometry.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/submission.schema.json",
"$id": "https://paperspec.scient.ing/schemas/submission.schema.json",
"title": "Submission",
"description": "scienting-submission/1: a student's answer, under a pseudonym; spec/19-exercises.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/suspect.schema.json",
"$id": "https://paperspec.scient.ing/schemas/suspect.schema.json",
"title": "Suspect",
"description": "scienting-suspect/1: a doubtful reading for review; spec/05-hashes.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/value-anchor.schema.json",
"$id": "https://paperspec.scient.ing/schemas/value-anchor.schema.json",
"title": "Value anchor",
"description": "One line of a dataset's anchors.jsonl: where one value came from; spec/15-datasets.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/view.schema.json",
"$id": "https://paperspec.scient.ing/schemas/view.schema.json",
"title": "View",
"description": "A Vega-Lite specification whose usermeta.scienting pins its data: scienting-view/1; spec/17-views.md.",
"type": "object",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://scient.ing/ns/schemas/witnesses.schema.json",
"$id": "https://paperspec.scient.ing/schemas/witnesses.schema.json",
"title": "Witnesses",
"description": "witnesses.json of a package; spec/02-model.md.",
"type": "object",