You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracking issue for cutting v0.1.0, the first citable baseline. Everything below is the current state as of today, not a plan in the abstract — PR #4 has been open and green for a while, and the work that has accumulated on staging since then is what actually decides when it can go.
v0.1.0 means: the first git tag in this repo, the first GitHub Release with an attached data dump, and the first version of the standard anyone can cite. There are no tags yet in either textrefs/textrefs.org or textrefs/registry, so nothing here is a migration — it is all first-time setup.
1. The dependency graph
textrefs.org textrefs/registry
------------ -----------------
#63 ADR-0005 preferred citation system ──┐ #11 docs: preferred/additional systems
└─ #67 ADR-0006 relation vocabulary ─┤ #13 ADR-0006 data reclassification
│ └─ based on #11
#71 resolver `vars` mapping ──► #72 ──────┤ #15–#19 resolver review
│ └─ #20 (on #13, blocked on #72)
staging ◄─────────────────┘
│
#4 Release v0.1.0: staging → main
│
tag v0.1.0 → release.yml → GitHub Release + dump
#67 is stacked on #63; #13 is stacked on #11. The two repos are coupled: #67 (schema) and #13 (data) are one breaking change split across repositories.
The resolver review (#72 + #20, closing #71 and textrefs/registry#15–#19) is a second, later cross-repo pair with the same shape: #72 adds the vars resolver field to the compiler, #20 is the data that uses it. #20 is stacked on #13 and stays red until #72 reaches staging. Neither is a v0.1.0 blocker — see §4.
2. Decided: ADR-0005/0006 are in v0.1.0
This was the only real branch point, and everything else follows from it.
Rationale, as recommended and now adopted. Both are breaking changes to identifier-bearing structures, and both re-mint IRIs. Before the first tag that costs nothing — every record is draft under ADR-0004 and no identifier has ever been published. After the tag, the same change costs a documented migration against a baseline people may already cite. This is the same timing argument ADR-0006 makes for itself, applied one level up. The counter-argument — that it delays a release which is already green — was weighed and not taken.
Two consequences follow immediately: #60 (ADR-0005), #58 and #59 (ADR-0006) are now v0.1.0 issues, closed by #63 and #67 respectively; and the merge sequence in §3 is the actual plan rather than one of two options.
3. Merge sequence
The two repos guard each other, so the order is not free. There are now two coupled schema+data pairs (#67/registry#13, then #72/registry#20), and the second cannot start until the first is through:
textrefs.org CI requires the data/ submodule pointer to be an ancestor of registry/main (.github/workflows/validate.yml).
registry CI validates its records against textrefs.org@staging (registry/.github/workflows/validate.yml).
For a coordinated schema+data change neither side can go green first. Sequence:
8. Bump data/ in staging a second time, to the registry/main tip carrying the resolver review.
9. Update chore(release): v0.1.0 — first citable baseline #4 — it is staging → main, so it picks all of this up automatically, but its description still describes a v0.1.0 without ADR-0005/0006 or the resolver review. Rewrite the summary, add both ADRs to the ADR list, and state the reference count the release actually ships.
All nine steps apply — going straight to #4 is off the table per §2, and steps 6–8 per §4.
4. Before tagging
chore(release): v0.1.0 — first citable baseline #4 is BLOCKED, not failing. All four checks (CodeQL, Analyze, data, linkcheck) pass; it needs a maintainer approval to become mergeable. Confirm CODEOWNERS review is the only thing outstanding.
CITATION.cff carries no version or date-released (CITATION.cff carries no version or date-released #51). This is a genuine release blocker: the file exists to make the release citable and currently cannot describe which release it refers to. Add both, and decide whether to reserve a Zenodo DOI now — the identifiers: block is present but commented out.
ROADMAP.md:27 already claims the release happened: "done: Publish the Standard draft v0.1.0 as the first citable baseline (release v0.1.0)". No tag exists. Either the tag lands in this cycle or the line is wrong; also mirror any edit into src/content/docs/community/roadmap.md, per the roadmap's own maintenance rule.
Confirm the spec version story.specification.md:9 says 0.1.0-draft, package.json says 0.1.0, and the standard pages carry maturity: working-draft. ADR-0004 and ADR-0006 both deliberately declined a spec bump under the working-draft clause. Make sure the tag v0.1.0 and the spec's 0.1.0-draft are understood as different things, and say so in the release notes.
Regenerate CHANGELOG.md via npm run changelog (git-cliff, cliff.toml). Verify it reads sensibly for a first release — git-cliff has never run against a tag boundary here.
feat: CitationSystem pages should list works instead of references #55 is already fixed on staging but its issue is still open — 03cee88 fix(site): list works instead of references on CitationSystem pages (#55) (#56). It ships in v0.1.0 whether or not anyone decides so; add it to the close-on-release list above rather than leaving it in the triage list below.
Decided 2026-08-12: the resolver review ships in v0.1.0.feat(compile): map locator variables into a provider's own vocabulary (#71) #72 + feat(works)!: resolver review — drop non-resolving targets, add NA28/BHS/SuttaCentral/NINJAL registry#20 delete six resolver targets that do not address the cited passage, add NA28, BHS, SuttaCentral and NINJAL, and complete the New Testament (John only → 27 books) and the Tanakh (Genesis only → 39 books). So the first citable baseline covers two complete biblical corpora rather than one book of each, instead of publishing records named "New Testament" and "Tanakh" that resolve ~10% of their work. The cost is scale: the registry goes from ~39,200 references to 67,959, and with it references.jsonl to 54 MB, the built site to 204,347 pages, and npm run verify to 8m 07s locally. See §5 and §6 for what that changes.
Last item before the release PR: publish the association's founding record. The tax authorities' decision and the foundational documents belong in the repo and on the site before v0.1.0 is tagged, as part of PR prep. The association section already carries statutes, governance, board, mission and expenses; the founding decision and constitutive documents are what make that section a record rather than a description, and the first citable baseline is the right place to freeze them.
Tag main as v0.1.0 and push the tag. This triggers .github/workflows/release.yml.
Verify the workflow: it checks out with submodules: recursive, runs npm run build:data, and attaches dist/dump/*.jsonl + dist/dump/datapackage.json with fail_on_unmatched_files: true. This has never run. If the dump paths are wrong the release fails after the tag is already public — consider a workflow_dispatch dry run first, which the workflow already supports. With the resolver review in, that dry run matters more: npm run build:data now emits a 54 MBreferences.jsonl (well inside GitHub's 2 GB asset limit, but no longer a trivial upload), and the full npm run build takes ~8 minutes for 204,347 pages. Check the workflow's timeout headroom rather than assuming the previous ~3-minute build is representative.
Confirm the pinned data/ commit at tag time is the one you want frozen into the release — main "consumes pinned SHAs at release time" per the registry workflow's comment.
Check the generated release notes (generate_release_notes: true) against the git-cliff CHANGELOG.md; two sources of truth, decide which one leads.
6. Registry side
The registry uses calendar tags vYYYY.MM.N and has none yet. Decide whether v0.1.0 of the standard is accompanied by a first registry export tag, or whether the dump attached to this release is sufficient for now.
datapackage.json's SemVer-without-v version needs to be set deliberately for the first export.
The first export ships 67,959 references across 12 works, per the §4 decision — not the ~39,200 that were in staging when this issue was opened. Set the datapackage.json version knowing that, and say the figure in the release notes: it is the most visible difference between this baseline and anything cited from an earlier snapshot.
Link Checker Report #3 is the automated Link Checker report; make sure it is clean at tag time.
Both open decisions are settled (2026-08-12): ADR-0005 and ADR-0006 ship in v0.1.0 (§2), and so does the resolver review (§4). Everything above is mechanical from here — the merge sequence in §3 is the critical path, and it is now nine steps across two repositories.
Tracking issue for cutting v0.1.0, the first citable baseline. Everything below is the current state as of today, not a plan in the abstract — PR #4 has been open and green for a while, and the work that has accumulated on
stagingsince then is what actually decides when it can go.v0.1.0means: the first git tag in this repo, the first GitHub Release with an attached data dump, and the first version of the standard anyone can cite. There are no tags yet in eithertextrefs/textrefs.orgortextrefs/registry, so nothing here is a migration — it is all first-time setup.1. The dependency graph
#67is stacked on#63;#13is stacked on#11. The two repos are coupled:#67(schema) and#13(data) are one breaking change split across repositories.The resolver review (
#72+#20, closing#71andtextrefs/registry#15–#19) is a second, later cross-repo pair with the same shape:#72adds thevarsresolver field to the compiler,#20is the data that uses it.#20is stacked on#13and stays red until#72reachesstaging. Neither is a v0.1.0 blocker — see §4.2. Decided: ADR-0005/0006 are in v0.1.0
This was the only real branch point, and everything else follows from it.
v0.1.0. The rest of this issue now describes one path, not two.Rationale, as recommended and now adopted. Both are breaking changes to identifier-bearing structures, and both re-mint IRIs. Before the first tag that costs nothing — every record is
draftunder ADR-0004 and no identifier has ever been published. After the tag, the same change costs a documented migration against a baseline people may already cite. This is the same timing argument ADR-0006 makes for itself, applied one level up. The counter-argument — that it delays a release which is already green — was weighed and not taken.Two consequences follow immediately: #60 (ADR-0005), #58 and #59 (ADR-0006) are now v0.1.0 issues, closed by #63 and #67 respectively; and the merge sequence in §3 is the actual plan rather than one of two options.
3. Merge sequence
The two repos guard each other, so the order is not free. There are now two coupled schema+data pairs (#67/registry#13, then #72/registry#20), and the second cannot start until the first is through:
textrefs.orgCI requires thedata/submodule pointer to be an ancestor ofregistry/main(.github/workflows/validate.yml).registryCI validates its records againsttextrefs.org@staging(registry/.github/workflows/validate.yml).For a coordinated schema+data change neither side can go green first. Sequence:
staging.registry/main.staging, accepting a reddatajob. It is red only because the pinned submodule commit predates the change; this needs an admin merge past a check that cannot pass beforehand.docs/preferred-citation-systemtomain, confirm it is now green against the updatedstaging, merge.data/instagingto the newregistry/maintip.stagingis now fully green.stagingand merge. Its diff currently carries the feat(standard)!: preferred citation system and qualified /cite/ aliases (ADR-0005) #63/docs(decisions): decide mapping relation vocabulary (ADR-0006) #67 commits underneath it, because GitHub cannot base a cross-fork PR on another fork's branch; after steps 1–5 it collapses to the singlevarscommit. Itsdatajob passes from step 5 onward.feat/mapping-relation-vocabularytomainand merge. It cannot go green before step 6: registry CI validates againsttextrefs.org@staging, and the data uses thevarsfield that feat(compile): map locator variables into a provider's own vocabulary (#71) #72 introduces.data/instaginga second time, to theregistry/maintip carrying the resolver review.staging → main, so it picks all of this up automatically, but its description still describes a v0.1.0 without ADR-0005/0006 or the resolver review. Rewrite the summary, add both ADRs to the ADR list, and state the reference count the release actually ships.All nine steps apply — going straight to #4 is off the table per §2, and steps 6–8 per §4.
4. Before tagging
BLOCKED, not failing. All four checks (CodeQL, Analyze, data, linkcheck) pass; it needs a maintainer approval to become mergeable. Confirm CODEOWNERS review is the only thing outstanding.CITATION.cffcarries noversionordate-released(CITATION.cff carries no version or date-released #51). This is a genuine release blocker: the file exists to make the release citable and currently cannot describe which release it refers to. Add both, and decide whether to reserve a Zenodo DOI now — theidentifiers:block is present but commented out.ROADMAP.md:27already claims the release happened: "done: Publish the Standard draft v0.1.0 as the first citable baseline (releasev0.1.0)". No tag exists. Either the tag lands in this cycle or the line is wrong; also mirror any edit intosrc/content/docs/community/roadmap.md, per the roadmap's own maintenance rule.specification.md:9says0.1.0-draft,package.jsonsays0.1.0, and the standard pages carrymaturity: working-draft. ADR-0004 and ADR-0006 both deliberately declined a spec bump under theworking-draftclause. Make sure the tagv0.1.0and the spec's0.1.0-draftare understood as different things, and say so in the release notes.CHANGELOG.mdvianpm run changelog(git-cliff,cliff.toml). Verify it reads sensibly for a first release — git-cliff has never run against a tag boundary here.addressed-in-v0.1.0issues on release: adr: review lifecycle and ephemeral draft state (retractable pre-promotion identity) #22, Upgrade to Starlight 0.41 / Astro 7 (blocked on starlight-llms-txt) #20, standard: erratum — editorial batch (RFC 9562, ld+json media type, aliases.json, tombstone rationale, namespace note) #14, standard: require canonical ASCII digit and case forms in citation-system profiles #13, standard: license and license_url both map to dcterms:license (mixed literal/IRI range) #12, standard: JSON-LD output does not emit direct SKOS mapping triples #11, standard: MappingAssertion.subject Work-IRI constraint conflicts with tombstone/versioning successor links #10, Add a complete worked example including@context#8, Dereferenceable locations: change MAY to SHOULD #7,target_kind: prefer a dereferenceable IRI +dct:conformsToover an enumerated scheme list #6, plus adr: Introduce a preferred Citation system #60 (closed by feat(standard)!: preferred citation system and qualified /cite/ aliases (ADR-0005) #63) and standard: owl:sameAs instead of skos:exactMatch #58 and standard: replace skos:closeMatch to link to URL pages #59 (resolved together by docs(decisions): decide mapping relation vocabulary (ADR-0006) #67) now that ADR-0005/0006 are in, and feat(compile): map locator variables into a provider's own vocabulary #71 (closed by feat(compile): map locator variables into a provider's own vocabulary (#71) #72) plus data: delete resolvers that do not address the cited passage registry#15–docs: add ORCID for Luz Christopher Seiberth #19 (closed by registry#20) now that the resolver review is in.addressed-in-v0.1.0. They carry no labels at all today, so they do not show up in any query that drives the release checklist.stagingbut its issue is still open —03cee88 fix(site): list works instead of references on CitationSystem pages (#55) (#56). It ships in v0.1.0 whether or not anyone decides so; add it to the close-on-release list above rather than leaving it in the triage list below.references.jsonlto 54 MB, the built site to 204,347 pages, andnpm run verifyto 8m 07s locally. See §5 and §6 for what that changes.staging.)TOMBSTONE_STATUSES) is unchanged. Retitle or close.5. Tagging and release mechanics
main.mainasv0.1.0and push the tag. This triggers.github/workflows/release.yml.submodules: recursive, runsnpm run build:data, and attachesdist/dump/*.jsonl+dist/dump/datapackage.jsonwithfail_on_unmatched_files: true. This has never run. If the dump paths are wrong the release fails after the tag is already public — consider aworkflow_dispatchdry run first, which the workflow already supports. With the resolver review in, that dry run matters more:npm run build:datanow emits a 54 MBreferences.jsonl(well inside GitHub's 2 GB asset limit, but no longer a trivial upload), and the fullnpm run buildtakes ~8 minutes for 204,347 pages. Check the workflow's timeout headroom rather than assuming the previous ~3-minute build is representative.data/commit at tag time is the one you want frozen into the release —main"consumes pinned SHAs at release time" per the registry workflow's comment.generate_release_notes: true) against the git-cliffCHANGELOG.md; two sources of truth, decide which one leads.6. Registry side
vYYYY.MM.Nand has none yet. Decide whether v0.1.0 of the standard is accompanied by a first registry export tag, or whether the dump attached to this release is sufficient for now.datapackage.json's SemVer-without-vversion needs to be set deliberately for the first export.stagingwhen this issue was opened. Set thedatapackage.jsonversion knowing that, and say the figure in the release notes: it is the most visible difference between this baseline and anything cited from an earlier snapshot.7. Housekeeping
main, notstaging— Build(deps): Bump fast-uri from 3.1.2 to 3.1.5 #64, Build(deps): Bump mermaid from 11.15.0 to 11.16.1 #65, Build(deps): Bump dompurify from 3.4.7 to 3.4.13 #66, Build(deps): Bump postcss from 8.5.15 to 8.5.25 #57, Build(deps): Bump sharp, @astrojs/starlight, astro, starlight-blog and starlight-llms-txt #37, Build(deps): Bump svgo from 4.0.1 to 4.0.2 #35, Build(deps): Bump @astrojs/rss from 4.0.18 to 4.0.19 #33, Build(deps): Bump the github-actions group across 1 directory with 2 updates #32, and — opened since this issue was written — Build(deps): Bump js-yaml from 4.2.0 to 4.3.1 #69 (js-yaml) and Build(deps): Bump nanoid from 3.3.12 to 3.3.18 #70 (nanoid). Sincemainonly moves at release time, these will conflict with or be bypassed by chore(release): v0.1.0 — first citable baseline #4. Decide: retarget them tostagingand fold into the release, or merge them intomainafter the tag. Related: deps: upgrade to Astro 7.1 #39 (Astro 7.1) and Build-time dependency hygiene: spdx-license-ids placement, unused markdown-satteri pin #49 (dependency hygiene).github-profilesubmodule has no consumer — resolve or document before the first release freezes the repo layout.Both open decisions are settled (2026-08-12): ADR-0005 and ADR-0006 ship in
v0.1.0(§2), and so does the resolver review (§4). Everything above is mechanical from here — the merge sequence in §3 is the critical path, and it is now nine steps across two repositories.