Skip to content

docs(governance): describe the org that exists - #30

Merged
ken-jo merged 3 commits into
mainfrom
docs/governance-current
Aug 23, 2026
Merged

docs(governance): describe the org that exists#30
ken-jo merged 3 commits into
mainfrom
docs/governance-current

Conversation

@ken-jo

@ken-jo ken-jo commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Almost every claim in GOVERNANCE.md was false. Checked against live state:

Claim in the file Reality
"The org is on the free plan, which does not support rulesets" Org plan is team; rulesets are active in 10 repos
"Tag immutability is enforced by convention, not by GitHub" refs/tags/v* has update and deletion blocked, enforced
Rule 1: "vN major tags are moving — re-point with --force-with-lease" update is blocked; re-pointing is impossible, not merely discouraged
Repo matrix lists lvis-plugin-pageindex, -email, -calendar None exist
Every repo has a plugin-sdk/ submodule at SDK@v1.0.0 No submodules anywhere; SDK is a github: devDependency, pinned per repo (v8.0.0 → v12.1.0 today)
"Central reusable workflow: plugin-ci.yml@v1" No caller has used @v1 in a long time; all are @main
An "upgrade path" section telling the reader to delete it once rulesets exist Rulesets exist

What the rewrite keeps

Only what is genuinely org-level and invisible from any single repository:

  • The ruleset rules, and the two consequences that follow (no moving majors; the tag is the release).
  • Why the shared workflows are referenced by @main, and the trap that removes: the publisher runner group matches its allow-list against the exact ref a caller writes, so a SHA in the caller stores the same decision in an org setting no PR reviews — and when they drift, nothing fails, the job just never gets scheduled. That cost days of silently broken publishing twice in 2026-08 (once from the history rewrite that orphaned the pins, once from the repoint that fixed it). See ci(publish): fail loudly when no runner can accept the job #28 and ci: bound the shared CI jobs the same way the publish job is bounded #29.
  • Why plugins should pin the SDK to a tag rather than a bare commit: a tag survives a history rewrite, a bare commit does not — the same failure, one repo over. (lvis-plugin-ep currently pins a raw SHA.)

What it removes

The tables. A matrix copied from live state is a second source of truth with no drift check on it, which is precisely how this file ended up describing three plugins that were deleted and a submodule layout that never survived. Each is replaced by the gh command that answers it.

Also in this PR

README.md and .github/workflow-templates/plugin-ci.yml still advertised plugin-ci.yml@v1. The template is worse than a stale doc — it is what a new plugin repo copies — so both go to @main, matching every caller and the runner-group allow-list.

🤖 Generated with Claude Code

https://claude.ai/code/session_01W9K9WE1ATSqYFStZGtLpNk

ken-jo and others added 3 commits August 24, 2026 01:46
…at a command can answer

Almost every claim in this file was false. It opens by saying the org is on the
free plan and that tag immutability is therefore "enforced by convention" — the
org is on Team, rulesets are active in ten repos, and `update` is blocked on
`refs/tags/v*`, which also makes its rule 1 ("vN major tags are moving")
impossible rather than merely outdated. The repo matrix lists three plugins that
do not exist and gives every repo a `plugin-sdk/` submodule; there are no
submodules anywhere in the org. The CI section points consumers at
`plugin-ci.yml@v1`, which no caller has used for a long time. The file even
carries an "upgrade path" section instructing the reader to delete itself once
rulesets exist. They exist.

The rewrite records what is genuinely org-level and invisible from any one
repository — the ruleset rules, why the shared workflows are referenced by
branch and why the publisher allow-list must move with them, why plugins pin the
SDK to a tag rather than a commit — and replaces the tables that rotted with the
command that answers them. A copied table is a second source of truth with no
drift check on it, which is exactly how this file got here.

The `@v1` reference in README.md and in the org workflow template goes to `@main`
with it. The template is worse than a stale doc: it seeds the next plugin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9K9WE1ATSqYFStZGtLpNk
…at a command can answer

Almost every claim in this file was false. It opens by saying the org is on the
free plan and that tag immutability is therefore "enforced by convention" — the
org is on Team, rulesets are active in ten repos, and `update` is blocked on
`refs/tags/v*`, which also makes its rule 1 ("vN major tags are moving")
impossible rather than merely outdated. The repo matrix lists three plugins that
do not exist and gives every repo a `plugin-sdk/` submodule; there are no
submodules anywhere in the org. The CI section points consumers at
`plugin-ci.yml@v1`, which no caller has used for a long time. The file even
carries an "upgrade path" section instructing the reader to delete itself once
rulesets exist. They exist.

The rewrite records what is genuinely org-level and invisible from any one
repository — the ruleset rules, why the shared workflows are referenced by
branch and why the publisher allow-list must move with them, why plugins pin the
SDK to a tag rather than a commit — and replaces the tables that rotted with the
command that answers them. A copied table is a second source of truth with no
drift check on it, which is exactly how this file got here.

The `@v1` reference in README.md and in the org workflow template goes to `@main`
with it. The template is worse than a stale doc: it seeds the next plugin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9K9WE1ATSqYFStZGtLpNk
…at a command can answer

Almost every claim in this file was false. It opens by saying the org is on the
free plan and that tag immutability is therefore "enforced by convention" — the
org is on Team, rulesets are active in ten repos, and `update` is blocked on
`refs/tags/v*`, which also makes its rule 1 ("vN major tags are moving")
impossible rather than merely outdated. The repo matrix lists three plugins that
do not exist and gives every repo a `plugin-sdk/` submodule; there are no
submodules anywhere in the org. The CI section points consumers at
`plugin-ci.yml@v1`, which no caller has used for a long time. The file even
carries an "upgrade path" section instructing the reader to delete itself once
rulesets exist. They exist.

The rewrite records what is genuinely org-level and invisible from any one
repository — the ruleset rules, why the shared workflows are referenced by
branch and why the publisher allow-list must move with them, why plugins pin the
SDK to a tag rather than a commit — and replaces the tables that rotted with the
command that answers them. A copied table is a second source of truth with no
drift check on it, which is exactly how this file got here.

The `@v1` reference in README.md and in the org workflow template goes to `@main`
with it. The template is worse than a stale doc: it seeds the next plugin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9K9WE1ATSqYFStZGtLpNk
@ken-jo
ken-jo merged commit ee0c2a5 into main Aug 23, 2026
1 check passed
@ken-jo
ken-jo deleted the docs/governance-current branch August 23, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant