Uh oh!
There was an error while loading. Please reload this page.
docs: correct the paths-ignore claim in three agent-facing texts, and the metadataTypeRegistry verdict (#3857, #3859) - #4371
Merged
Conversation
… the metadataTypeRegistry verdict (#3857, #3859) Prose and comments only; no workflow behaviour changes. #3857 — AGENTS.md, scripts/check-changeset-presence.mjs and .github/workflows/changeset-guard.yml each asserted that ci.yml and lint.yml list '**/*.md' and .changeset/** under paths-ignore, so a changeset-only or md-only PR starts no workflow at all. objectui#3523 step 2 removed paths-ignore from their pull_request trigger; it survives only on push. Each site now states that, points at the in-job `Decide whether this change needs a full run` step where the path decision actually lives, and restates the two changeset gates' rationale as the reason that holds today: the in-job exclusion list still covers markdown and .changeset/**, so those workflows start, report and skip every expensive step on exactly the PR these gates exist to judge. #3859 — the "Retired names" table called config/metadataTypeRegistry.ts "Never existed under apps/console/src/". Git shows it added at d601ef6 (195 lines) and deleted at ff9a0d9 (317 lines) at exactly that path. Reworded to the table's own Deleted convention. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qqyix2QcnpUC9XeYVDzx3
The latest updates on your projects. Learn more about Vercel for GitHub. |
yinlianghui
commented
Aug 11, 2026
CollaboratorAuthor
ACCEPT — PM 复核 (session
Flipping ready + arming auto-merge. Generated by Claude Code |
yinlianghui
marked this pull request as ready for review
August 11, 2026 22:42
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 11, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#3857
Fixes#3859
Two docs-truth corrections in one PR, per triage's own batching note on #3857 — "same class as #3859 (agent-facing prose stating something git/CI disproves) — sweep-batchable into one docs-truth PR, one claim, N Fixes". Prose and comments only: zero workflow behaviour change, zero code change. Verified mechanically, not by eye:
Every changed line in the workflow is a
#comment; every changed line in the script is inside its docblock. The workflow's parsed triggers are byte-identical (pull_requestandpush, bothpaths: ['.changeset/**']), re-parsed after the edit.#3857 — three texts still described a
paths-ignorethat #3523 removedEach asserted that
ci.ymlandlint.ymllist'**/*.md'and.changeset/**underpaths-ignoreonpull_request, so a changeset-only or md-only PR "starts no workflow at all". objectui#3523 step 2 deleted that filter from both workflows'pull_requesttrigger; it survives only onpush(ci.yml:6,lint.yml:32), and each file already says so in its own header (ci.yml:12,lint.yml:37) — the repository was contradicting itself.Live counter-proof, re-measured at this branch point
.mdfile (+33/-7)AGENTS.md, merged 17:40Z today#4339 was read from the API rather than taken from the card: 17 check runs on its head commit, including
Lint,Type Check,Test (shard 1..4/4),Internal Docs Link Check,Skill Guide Path Check,Control Byte ScanandChangeset Declaration. (An 18th,Close issues referenced in other repositories, is the post-merge run twelve minutes later, so the honest figure for the PR event is 17.)The three sites
AGENTS.md:206ci.yml/lint.yml都把**/*.md和.changeset/**列进paths-ignore,只加 changeset 的 PR 不会启动任何 workflow」paths-ignoreis now only onpush, that the PR path decision is the in-jobDecide whether this change needs a full runstep, gives the 16/17-check measurements, and restates whychangeset-guard.ymlis still independent and reverse-triggeredscripts/check-changeset-presence.mjs:33-40ci.ymlandlint.ymlboth list.changeset/**underpaths-ignore, so a PR that adds ONLY a changeset starts no other workflow at all" — the premise of its "why this is a second workflow" argument.github/workflows/changeset-guard.yml:3-8ci.yml"The rationale each gate now gives, and why the gates themselves are untouched
The card is explicit that the reverse-trigger gate is not broken, only its justification — so the replacement rationale was read out of the workflows rather than guessed:
What #3523 moved rather than deleted is the path decision. It is now the
Decide whether this change needs a full runstep inci.yml, with a twin inlint.yml, and its exclusion list is thatpushfilter unchanged — markdown and.changeset/**included. That identity is not a claim, it is pinned:scripts/__tests__/merge-queue-reporting.test.tsfails if the in-job list drifts from the trigger's. So on a changeset-only PR both workflows start, report, and skip every expensive step: no gate inside either of them ever reads the changeset.The conclusion therefore outlives its premise by a different route.
changeset-guard.ymlruns outside that in-job switch, install-free and build-free, which is why it is still its own workflow with the inverse trigger — it is the only thing that judges a changeset-only PR at all.changeset-presence.ymlfaces the other way for the reason it already gave correctly, and is not touched here.#3859 — the "Retired names" row said "Never existed"
Both SHAs verified at this branch point rather than copied from the card:
So the file landed at exactly that path on 2026-04-07 at 195 lines, grew to 317, and went with the studio app on 2026-05-27. The row now reads Deleted, following the same convention as the five rows around it, and points at the
git showthat still retrieves the content — which is the difference the card is about: "deleted" sends a reader to git, "never existed" tells them aROADMAP.mdline naming it was fiction when it was merely stale.One gate detail worth recording
scripts/check-skills-paths.mjs(objectui#3735, landed since the card was written) requires every backtick-wrapped in-repo path in a guide to exist on disk, andapps/console/src/config/does not exist any more. The row therefore never spells the dead path as a bare token: the surviving directoryapps/console/src/is stated on its own, and the full path appears only inside thegit show ...span, which the script excludes by rule ("a span containing a space is prose, or a command line — not a path"). The correction thus lands with noscripts/skills-path-baseline.jsonentry needed, and the gate's reading is unchanged at 84/85 resolved plus 1 baselined. That is a concrete answer to the input #3859 offered #3735 — a Retired-names table does not automatically need an exemption if it names the surviving parent directory instead of the dead leaf.Adjacency with PR #4365 (#3731 / #3736)
Briefed as a risk, and it became real mid-run: #4365 merged at 22:19Z from the same base commit this branch started at (
ca269fecd), and it rewrote the same guide — retargeting the "Extending object management" chapter atPermissionMatrixEditPageand adding two rows to the same "Retired names" table.Resolved by rebasing onto the post-#4365
main(now2fea4d2fa, which also includes #4367). The two edits are disjoint rows of one table, exactly as the dispatch predicted: #4365 appends the factory and widget rows at the bottom and rewrites the paragraph above the table, this PR rewrites the Verdict cell of theconfig/metadataTypeRegistry.tsrow in the middle. Git merged them without a conflict, and the union was verified by reading the resulting table — all nine rows present, both sets intact. Every gate below was then re-run against the rebased tree, not the original one. Nothing here touchesskills/objectui/evals/console-development.json.Worth noting for the record: #4365's own body cites #3859's lesson as its reason for citing issue numbers rather than unknowable squash hashes in its new rows. The two PRs agree on the standard.
Verification
Local scope is the gates that touch this surface, not a whole-repo sweep — all re-run after the rebase.
node scripts/check-control-bytes.mjsnode scripts/check-skills-paths.mjsnode scripts/check-doc-links.mjsnode scripts/check-changeset-presence.mjs --base origin/main --head HEADnode scripts/check-changeset-no-major.mjsmajorbumpnpx vitest run --project unit --maxWorkers=2over the 10 suites that assert on these filesnode --check scripts/check-changeset-presence.mjsnpx eslint scripts/check-changeset-presence.mjschangeset-guard.ymlpull_requestandpush, bothpaths: ['.changeset/**']The ten suites:
check-changeset-presence,check-changeset-no-major,merge-queue-reporting,ci-cd-pipeline-doc,check-skills-paths,check-doc-links,doc-version-claims,docs-links-workflow,check-control-bytes,lint-workflow. No suite pinned any of the old false sentences, so no pin updates were needed — that absence was measured rather than assumed. The three that scan these workflows all strip whole-line comments first (withoutComments()), deliberately, because these headers discusspathsandpaths-ignorein prose and a scan counting the prose would report filters the files do not have; the one that readschangeset-guard.ymlraw only matches itspaths:block, which is untouched.Beyond the gate, a self-scan for control bytes over the four edited files (
grep -naPacross the C0 range plus0x7f) — no match. The.mjsedit deliberately avoids writing the markdown glob literally inside the block comment, since a star followed by a slash closes it early — the trap that file's own header records.No changeset, on the gate's own verdict quoted above, matching #4339's precedent for a docs-and-comments PR: nothing under the
src/of a package the release covers changed, so nothing is released and there is nothing to declare.Reverse verification
Not applicable in its usual red-first form, and saying so plainly rather than manufacturing a number: nothing here changes behaviour, so there is no pin that could go red on reverting it. The acceptance evidence is the before/after quotation per site above, plus the live counter-proof measured today (#4339, 17 checks) and the structural proof that the workflow's parsed triggers are unchanged.
Out of scope, filed not fixed
#4369 — four more copies of the same falsified premise, in files #3857 does not name:
.github/workflows/changeset-presence.yml:11-15,scripts/check-changeset-no-major.mjs:22, and two comment blocks inscripts/__tests__/check-changeset-no-major.test.ts(:19-22,:120-123). Their assertions are sound and stay green; only the explanations are stale. Left untouched here because #3857 enumerates exactly three sites and this PR's scope is those three — but flagged prominently, because once this lands the repository states both shapes, and the stale copy is the one physically closest to the gate it explains. Filed unassigned withfinding, nopm:queue, for the triage round to grade.Generated by Claude Code