Skip to content

Write down the process, and put a check behind the required pull request - #4

Merged
heitorrapcinski merged 3 commits into
mainfrom
chore/repository-governance
Sep 6, 2026
Merged

Write down the process, and put a check behind the required pull request#4
heitorrapcinski merged 3 commits into
mainfrom
chore/repository-governance

Conversation

@heitorrapcinski

@heitorrapcinski heitorrapcinski commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Summary of changes

The repository carried the rules of the profile and none of the rules of working on it. main was already protected by a ruleset and nothing said so, which is how an edit ends up committed on main before anybody notices.

  • CONTRIBUTING.md — the process: the five stages from an issue to main, the two issue forms, the four outcomes of triage with refusal as a first-class one, the five branch prefixes, the commit scopes, the two mandatory sections of a pull request, and the table of what cuts which version bump.
  • CLAUDE.md — what an agent has to know before its first edit. It references the process instead of repeating it, and states the one rule this repository turns on: the unit of work is a notation, and a notation lives in three files at once.
  • Two issue forms and a pull request template. The notation report asks for the bytes that were written, because a profile exists so that two implementations can be compared and a report with no bytes in it cannot be. The proposal asks for the conformance case up front, and says out loud that declaring a form to mean nothing is a valid outcome of it.
  • tools/check-profile.mjs and npm run check — the check behind the required pull request. It validates profile.json against its schema, requires a case for every notation an indexer decides, refuses a case naming a notation that does not exist, resolves every section reference to a real heading of SPEC.md, catches duplicate identifiers, and holds SPEC.md, tests/conformance.json and package.json to the version in profile.json. No dependencies, no build, 8 seconds in CI.
  • CI runs that check on every pull request, and .gitattributes fixes the line ending at LF so the check reads the same bytes on every operating system.

The schema validator implements only the keywords the schema uses and fails on any keyword it does not implement. A validator that ignores what it does not understand reports a success it never established.

What it caught on its first run

Rebasing this branch onto 0.2.0 ran the check against real content for the first time, and it immediately found a divergence nobody was looking for: profile.json said 0.2.0 and the header of SPEC.md still said 0.1.0, released and tagged that way. Fixed here, and it is why the version rule now covers package.json as well — a fourth place to forget.

Closes #3

What an implementation has to do

Nothing. No notation changed and profile.json is untouched. The only edit to SPEC.md is the version in its header, which now says the version it was released as.

The three files

  • SPEC.md, because the prose of a notation changed — no notation changed; the version header was corrected
  • profile.json, because an entry was added, changed or removed
  • tests/conformance.json, because a case was added or its expectation changed
  • CHANGELOG.md, in the same commit as the change it documents
  • None of the above: this pull request changes no notation

npm run check passes locally: yes — 31 notations (19 an indexer decides, 12 rendering), 35 cases, version 0.2.0.

Version

None. It alters no notation, so it waits in [Unreleased] for the next cycle, per CONTRIBUTING.md § 6. The Fixed entry for the stale header goes out with whatever cuts next.

AI productivity analysis

Metric Value
Lines of code handled (added + removed) 948 (947 added, 1 removed)
Branch duration Same day (from 2026-09-06 to 2026-09-06)
Technologies involved Markdown, JSON, JSON Schema, JavaScript (Node.js ESM), YAML, GitHub Actions, GitHub issue forms, GitHub repository rulesets

Estimated human effort (without AI assistance)

Estimated effort: 16h, roughly 2.0 working days (8h/day) or 0.4 working weeks (40h/week).

The volume is a poor guide here and the weight is elsewhere: reading the process of the sibling repository closely enough to adapt it rather than copy it, deciding which of its parts do not apply to a repository that ships no code, writing a schema validator that is honest about its own coverage instead of one that passes everything it does not parse, and reconciling the branch with a version that was released underneath it.

🤖 Generated with Claude Code

https://claude.ai/code/session_015AqyzSutJgPQiub6mc5AZg

heitorrapcinski and others added 3 commits September 6, 2026 17:51
The repository had the rules of the profile and none of the rules of working
on it. main is protected by a ruleset, and nothing said so in the repository,
which is how an edit ends up committed on main before anybody notices.

CONTRIBUTING.md carries the process: the life cycle of a change, the two issue
forms, the four outcomes of triage with refusal as a first-class one, the five
branch prefixes, the commit scopes, and the table of what cuts which version
bump. CLAUDE.md carries what an agent has to know before the first edit, and
references that process instead of repeating it.

The two issue forms are shaped by what this repository is. A notation report
asks for the bytes that were written, because a profile exists so that two
implementations can be compared and a report with no bytes in it cannot be. A
notation proposal asks for the conformance case up front, and says out loud
that declaring a form to mean nothing is a valid outcome of the form.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015AqyzSutJgPQiub6mc5AZg
The repository claims that a specification and an implementation cannot drift
apart, and had nothing checking that the specification does not drift apart
from itself. A required pull request with no check behind it only guarantees
that somebody clicked.

tools/check-profile.mjs validates profile.json against its schema, requires a
conformance case for every notation an indexer decides, refuses a case naming
a notation that does not exist, resolves every section reference to a real
heading of SPEC.md, and holds the three files to the one version in
profile.json. No dependencies, no build, under a second.

The schema validator implements only the keywords the schema uses and fails on
any keyword it does not implement. A validator that ignores what it does not
understand reports a success it never established.

.gitattributes fixes the line ending at LF, because the suite compares strings
and a check on Windows has to read the bytes a check on Linux reads.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015AqyzSutJgPQiub6mc5AZg
… behind

The branch was written against 0.1.0 while 0.2.0 was being released on main.
Rebasing it surfaced what the check was built to surface, on its first run and
without anybody looking for it: profile.json said 0.2.0 and the header of
SPEC.md still said 0.1.0.

The version header is corrected, and the check now holds package.json to the
same version, since the profile is distributed as a package and that is a
fourth place to forget. The section references of the process documents and the
issue forms are corrected to the sections 0.2.0 actually has.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015AqyzSutJgPQiub6mc5AZg
@heitorrapcinski
heitorrapcinski force-pushed the chore/repository-governance branch from 95e0c51 to 0740cf6 Compare September 6, 2026 20:53
@heitorrapcinski heitorrapcinski added the documentation Improvements or additions to documentation label Sep 6, 2026
@heitorrapcinski
heitorrapcinski merged commit bb39d38 into main Sep 6, 2026
1 check passed
@heitorrapcinski
heitorrapcinski deleted the chore/repository-governance branch September 6, 2026 21:31
@heitorrapcinski heitorrapcinski mentioned this pull request Sep 6, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The repository has the rules of the profile and none of the rules of working on it

1 participant