Releases: robertblust/conventions
Release list
Robert Blust — Conventions v1.10.0
A member's README title is now its row in REPOSITORIES.md. The shape is the brand, a spaced em-dash and the thing in words — CompanyGraph — Meta Model — which is what four members already had; a site repository keeps its domain alone, because a domain is already the brand and the thing, and profile/README.md in a .github repository is the organization's front page and keeps its own title.
REPOSITORIES.md gains a Title column carrying all thirteen titles in full, and conventions-check gains a third tripwire that finds the member's own row and holds README.md's first line against it. It learns the member's identity from GITHUB_REPOSITORY, else from the origin remote of a checkout whose own root is the tree being scanned, and CONVENTIONS_REPO overrides both. A checkout with no identity, a repository with no row, and a tree that has not vendored the list each pass with a line saying why, so a worktree never goes red for a reason unrelated to the change in it.
To take it: move the pin, run sh conventions/conventions-sync sync, move the member workflow's check.yml@ line, and check README.md's first line against your row. Five other members have that line to change — design, mental-model, field-notes, connector-apaleo and service-conventions — and the other seven already match.
v1.9.0 — service-conventions joins the family
A minor release. The repository list names guestgraph/service-conventions, the code-level rules of the guestgraph services: one list of what every service has, one directory per stack, vendored by every service at a pinned release. The re-sync order places it before the engine and the connector, which both vendor it.
Nothing breaks. A member takes the release by moving the tag in conventions.json and in the uses: line of .github/workflows/conventions.yml, then sh conventions/conventions-sync sync, then its own suite.
v1.8.0
The family list gains guestgraph/connector-apaleo, the first connector: reservations and bookings from Apaleo into the guest graph, built as a client of the engine's API in a repository of its own. The re-sync order places it after the engine, because its specification lives there.
A minor: one vendored file changed, so every member's copy is stale. Taking it: move the release in conventions.json to v1.8.0 and in the uses line of the conventions workflow, run sh conventions/conventions-sync sync, then the member's own suite. Nothing else changes.
v1.7.0
The glossary fixes two more terms: an experience is Erfahrung, and a kind of experience is Erfahrungsart, the forms blust.ch's timeline already used in its prose and now uses on its kind filter. The names of the kinds themselves stay English in both views.
A minor: one vendored file changed, so every member's copy is stale. Taking it: move the release in conventions.json to v1.7.0 and run sh conventions/conventions-sync sync, then the member's own suite. Nothing else changes.
v1.6.0
TRANSLATOR.md gains a reviewing mode. When the task is to review German a page already
carries, the role takes the page, walks every place the page's agent file says carries
German, hands back a row for each, changes only what WRITING.md or the glossary requires,
and puts every other difference in the reply as a proposal the owner takes or leaves.
Nothing breaks. One vendored file changes, so every copy is stale: move both tags to
v1.6.0 and run sh conventions/conventions-sync sync once. The adapters do not change.
v1.5.0
WRITING.md now says how a text is made: a brief, an English draft on the branch, the owner's
review in the diff and on the rendered page, and German translated from the reviewed English
one element at a time, reviewed by reading the translator's back-translation. The Languages
paragraph says the German is that translation, made for a reader in Zürich or Bern and Swiss
in its forms. The prose register says what separates a page from a README.
Three files join conventions/: WRITER.md and TRANSLATOR.md, the two roles that make a text,
and GLOSSARY.md, every family term in its fixed English and German form. WORKING.md says a
role invoked as a subagent edits and reports and never commits.
Nothing breaks. To take it, move both tags to v1.5.0, run sh conventions/conventions-sync
sync once, and add .claude/agents/writer.md and .claude/agents/translator.md from the README
recipe.
v1.4.0
Three corrections at the root. WORKING.md says, under Identity, that the ruleset rule that would enforce an author address, commit_author_email_pattern, is not available on this plan, tested rather than assumed, and that it would shut out outside contributors if it were. The prose check's stem list gains the forms a sweep of every member found unflagged, generalise, authorise, materialise, penalise, singularise, synthesise and modelled, and the rest of their family spelled out to its endings so that generalist, realism, emphasis, criticism and synthesis stay clear, together with the -our, -re and doubled-l forms that were missing. The conventions spec names the page typography spec as its companion.
A vendored file changed, so every member re-syncs: move the tag in conventions.json and in uses: to v1.4.0 and run sync once. Expect the prose check to name words it did not name before; that is the release working. To take it fresh, from a repository's root:
printf '{ "repo": "robertblust/conventions", "tag": "v1.4.0" }\n' > conventions.json
curl -fsSL https://raw.githubusercontent.com/robertblust/conventions/v1.4.0/conventions/conventions-sync -o /tmp/conventions-sync
sh /tmp/conventions-sync syncv1.3.2
The reusable workflow's guard no longer asks the runner anything. On a cross-repository call, a step of the called workflow sees neither github.job_workflow_ref nor github.job_workflow_sha, which is why v1.3.0 and v1.3.1 failed before either script ran. The workflow now declares its own release in a workflow-level CONVENTIONS_RELEASE, set at release time like the version in the block's first line, and the guard compares that with the tag in conventions.json. A test in the source fails when the two declarations disagree, so a release cannot ship with the wrong one. It cannot see how the caller spelled the ref: a member calls it at the tag conventions.json names, and a call at a branch gets whatever that branch declares.
Nothing vendored changed apart from the version in the block's first line. A member on v1.3.1 or v1.3.0 moves the tag in conventions.json and in uses: to v1.3.2 and runs sync once; a member still on v1.2.0 runs sync twice this once, as the v1.3.0 notes say.
To take it, from a repository's root, then add the workflow the README shows and require conventions / conventions in the ruleset:
printf '{ "repo": "robertblust/conventions", "tag": "v1.3.2" }\n' > conventions.json
curl -fsSL https://raw.githubusercontent.com/robertblust/conventions/v1.3.2/conventions/conventions-sync -o /tmp/conventions-sync
sh /tmp/conventions-sync syncv1.3.1
The reusable workflow's pin guard works. v1.3.0's guard read github.job_workflow_ref, which a step never sees, so the first real call failed before either script ran. The guard now compares github.job_workflow_sha, the commit the workflow executes at, with the commit the member's pinned tag resolves to on this repository; it fails with its own message on a mismatch, on a tag that does not exist and on a runner that exposes no commit. It proves the workflow's commit is the pinned release's commit; it cannot see how the caller spelled the ref, so a member calls it at the tag conventions.json names.
Nothing vendored changed apart from the version in the block's first line, so a member on v1.3.0 moves the tag in conventions.json and in uses: to v1.3.1 and runs sync once. A member still on v1.2.0 runs sync twice this once, as the v1.3.0 notes say.
To take it, from a repository's root, then add the workflow the README shows and require conventions / conventions in the ruleset:
printf '{ "repo": "robertblust/conventions", "tag": "v1.3.1" }\n' > conventions.json
curl -fsSL https://raw.githubusercontent.com/robertblust/conventions/v1.3.1/conventions/conventions-sync -o /tmp/conventions-sync
sh /tmp/conventions-sync syncv1.3.0
Enforcement reaches the members. conventions/conventions-check is vendored beside the sync script and holds a repository's own Markdown to WRITING.md: American English and the spaced em-dash, with fenced and inline code left alone and any folder under exclude in conventions.json unread. .github/workflows/check.yml is a reusable workflow: one job named conventions that runs the sync check and the prose check, and refuses to run when the tag it is called at differs from the tag the repository pins.
The block in AGENTS.md names the new script, so every copy is stale; re-sync in the order REPOSITORIES.md gives. A member still on v1.2.0 runs sync twice the first time, because that script does not know about the file this release adds; from v1.3.0 on, one sync is enough. Two rules join WORKING.md: a branch is deleted once its pull request is merged, and every ruleset requires the conventions job.
To take it, from a repository's root, then add the workflow the README shows and require conventions in the ruleset:
printf '{ "repo": "robertblust/conventions", "tag": "v1.3.0" }\n' > conventions.json
curl -fsSL https://raw.githubusercontent.com/robertblust/conventions/v1.3.0/conventions/conventions-sync -o /tmp/conventions-sync
sh /tmp/conventions-sync sync