Repository navigation
Commit f2ade4a
fix(pm): the governed register reads
<!-- claude-projects-attribution: {"github_login":"os-bill"} -->
_Requested by **Bill** · [project
thread](https://claude.ai/code/project/chan_016iMXWSZDzqWRWvWzdNo8wg?thread=cmsg_016iMXWSZDzqWRWvWzdNo8wgSZnZg1LiHJmcHVXsZXKpyR)_
Fixes #25199
Clause-②: no
Metadata-protocol: none
## What changed
The governed register's `claude-tree` row read Tier S in every governed
repository, but only objectstack's queue guard has a Tier S arm.
objectui's guard (`scripts/check-governed-queue-guard.mjs` at objectui
`1aa8851`) carries no tier at all: its `merge_group` leg refuses every
governed diff, `.claude/**` included, without an authorized approval. So
`check-governed-merges --pr` promised objectui a seat landing its own
queue refuses, and the relay's governed-review follow-up (which sends on
Tier H alone) never summoned the approvers.
`scripts/pm/check-governed-merges.mjs` only:
- A row's `tier` can be scoped per repository by a `tierRepos` key, read
by one pure function, `surfaceTierIn(surface, repo)`: the row's `tier`
where the key is absent or names `repo`, else Tier H (fail closed, so a
repository added to `GOVERNED_REPOS` later never inherits a cheaper
landing than its own guard enforces).
- `governedSurfacesFor(repo)` hands every matcher the tier for its
repository (the table's own frozen row where the tier holds, a frozen
copy carrying H otherwise), so `governedPathsIn`, `governedTierFor`,
`testVerdict`, `--pr`/`--branch`/`--test` and the relay's
`governedReviewPlan` all follow with no change of their own.
- The `claude-tree` row gains `tierRepos: ['objectstack']`. Membership
is untouched (the row still governs `.claude/**` in all five
repositories, no `repos` key), and the raw row still reads `tier: 'S'`,
which is what the queue guard's `tierSGlobs()` words read.
- The header's "two landing tiers" section and the table's docblock now
say where Tier S holds; a new self-test battery (12 cases) pins it, and
the roster floor moves 33 to 34.
Route per triage 6337908442. No gate is loosened. A Tier S arm for
objectui's own guard is the maintainer's open question from triage's
round report; this PR makes the register follow the guard that is
enforced today and does not answer that question.
Cloud, objectos and hotcrm: their guards are not readable from this
session (private, HTTP 403 on every channel tried), so their
`.claude/**` reads Tier H, the stricter tier, **unverified**. Reading
Tier S as H costs one authorized approval; the reverse lands a
maintainer-owned file on a seat's own review.
## Evidence
- Live replay of objectui#13320 (head `8a0c369`, six `.claude/hooks/`
paths), through `--root` on an objectui checkout and `--branch` (the
`--pr` read answers HTTP 403 for objectui on every channel here):
- before (`15764cd`): `GOVERNED — Tier S(席内达档复核落地)`, exit 3;
- after: `GOVERNED — a human merge is the review record` with `⚖️
landing tier: H(人合)`, exit 3.
- The relay follow-up, `governedReviewPlan` from
`fleet-write/execute.mjs` on the same six paths:
`objectstack-ai/objectui` answers tier `H`, requesting `os-zhuang`,
`hotlong`; `objectstack-ai/objectstack` answers tier `S`, nothing sent.
`ops.mjs` and `execute.mjs` are unchanged.
- objectstack is byte-identical: `tierSGlobs()` reads `.claude/**`
before and after; the per-repo tier table differs only in the four
non-objectstack rows of `claude-tree`; `check-governed-queue-guard.mjs
--self-test` prints the same output before and after (334 cases).
- Ablation (fix committed first; the `tierRepos` key deleted through
`scripts/ablation-replace.mjs`, mutation and restore verified on disk,
blob back to HEAD `2dc2457c`): the self-test reds with 8 failures, among
them the objectui and cloud/objectos/hotcrm Tier H cases and the #13320
replay; the objectstack Tier S case, the objectstack #13320 case and the
membership case stay green. A first attempt with an empty
`--replacement` was a no-op (the tool refused to run the command) and is
not counted.
## Gates (head `0f43df5`)
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`: 35 derived families, all run, all exit 0;
`--ran` reconciliation: 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN.
- Beyond the derivation, exit 0 each: `check-governed-merges.mjs
--self-test` (512 assertions, was 500), `check-governed-queue-guard.mjs
--self-test` (334), `fleet-write/execute.mjs --self-test` (188),
`fleet-write/validate.mjs --self-test` (193), `pnpm
check:pm-governed-prose`, `check-half-states.mjs --self-test` (4916).
- `check-governed-merges.mjs --test
scripts/pm/check-governed-merges.mjs`: NOT governed. The file is a
CODEOWNERS enforcement-chain row, so GitHub requests the approvers when
this PR is marked ready.
- `skip-changeset`: the diff is `scripts/pm/**` only; the root package
is private and nothing here ships in any package's `files[]`.
## Acceptance notes
- `scripts/pm/fleet-write/ops.mjs`'s header lists the Tier H surfaces as
the rows "with tier `H`" (`docs/adr/**`, `skills/**`, ...). That list is
objectstack's view; a non-objectstack `.claude/**` is now Tier H through
the per-repo tier without being in it. Not edited here (outside this
card's file surface); carrier: none.
- `AGENTS.md` Prime Directive 14 says Tier S is "all of `.claude/**`".
That is this repository's own instruction file, and in objectstack it
stays exactly true; no edit needed.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01T1ABkBhrMzga6Kq81uZ8ro)_
---------
Co-authored-by: Claude <noreply@anthropic.com>.claude/** Tier S in objectstack alone (#25221)1 parent 8c73398 commit f2ade4a
1 file changed
Lines changed: 67 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
414 | 414 | | |
415 | 415 | | |
416 | 416 | | |
417 | | - | |
| 417 | + | |
418 | 418 | | |
419 | 419 | | |
420 | 420 | | |
421 | 421 | | |
422 | 422 | | |
423 | | - | |
424 | | - | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
425 | 430 | | |
426 | 431 | | |
427 | 432 | | |
| |||
1000 | 1005 | | |
1001 | 1006 | | |
1002 | 1007 | | |
| 1008 | + | |
1003 | 1009 | | |
1004 | 1010 | | |
1005 | 1011 | | |
| |||
1034 | 1040 | | |
1035 | 1041 | | |
1036 | 1042 | | |
1037 | | - | |
| 1043 | + | |
1038 | 1044 | | |
1039 | 1045 | | |
1040 | 1046 | | |
| |||
1172 | 1178 | | |
1173 | 1179 | | |
1174 | 1180 | | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
1175 | 1189 | | |
1176 | 1190 | | |
1177 | 1191 | | |
1178 | | - | |
| 1192 | + | |
1179 | 1193 | | |
1180 | 1194 | | |
1181 | 1195 | | |
| |||
1404 | 1418 | | |
1405 | 1419 | | |
1406 | 1420 | | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
1407 | 1433 | | |
1408 | 1434 | | |
1409 | 1435 | | |
| |||
1432 | 1458 | | |
1433 | 1459 | | |
1434 | 1460 | | |
1435 | | - | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
1436 | 1465 | | |
1437 | 1466 | | |
1438 | 1467 | | |
1439 | | - | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
1440 | 1472 | | |
1441 | 1473 | | |
1442 | 1474 | | |
| |||
4493 | 4525 | | |
4494 | 4526 | | |
4495 | 4527 | | |
| 4528 | + | |
| 4529 | + | |
| 4530 | + | |
| 4531 | + | |
| 4532 | + | |
| 4533 | + | |
| 4534 | + | |
| 4535 | + | |
| 4536 | + | |
| 4537 | + | |
| 4538 | + | |
| 4539 | + | |
| 4540 | + | |
| 4541 | + | |
| 4542 | + | |
| 4543 | + | |
| 4544 | + | |
| 4545 | + | |
| 4546 | + | |
| 4547 | + | |
| 4548 | + | |
| 4549 | + | |
| 4550 | + | |
| 4551 | + | |
| 4552 | + | |
| 4553 | + | |
| 4554 | + | |
| 4555 | + | |
4496 | 4556 | | |
4497 | 4557 | | |
4498 | 4558 | | |
| |||
0 commit comments