Repository navigation
docs(agents): declare that this repo has no formatter of record - #14239
Merged
Merged
Conversation
AGENTS.md said nothing about formatting, so an agent told to "run whatever lint/format the repo runs" reached for Prettier and got a false signal in both directions. State the absence: `pnpm lint` is the only style authority, Prettier is deliberately absent, `--write` buries a small diff under a whole-file quote rewrite, and the out-of-repo `--check` "pass" is a pass over zero files. Net-zero against the AGENTS.md line ratchet (1162/1162): funded by three deletions whose content keeps a canonical home, itemised in the PR body. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Whev4BkZ4BRcgiXYo4muWP
os-zhuang
approved these changes
Sep 2, 2026
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 free
to 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 #10622
One paragraph in
AGENTS.md§ Build & Test, stating that this repo has no formatter ofrecord. Net-zero against the file's line ratchet: 1162 lines before, 1162 after.
The ruling this implements
Maintainer ruling 2026-08-22, recorded on the card at 2026-08-22T02:25Z — the full decision
inbox (46 cards) was presented with per-card four-axis recommendations and the batch was
accepted, verbatim and untranslated:
The card's recorded form of what that accepted, Option A, verbatim:
No formatter is adopted here: this diff is one file. There is no
.prettierrc*, no.prettierignore, and no dependency added.What I measured, rather than carried over
All three claims were re-measured on this branch's base (prettier 3.8.1, 2026-09-01), because
the text lands in a governed instruction file. Byte identity of the compared copies is proved
by
git hash-object, not bycpsucceeding.prettier --checkon pristinemaincontent[warn]per fileAll matched files use Prettier code style!prettier --file-info{ "ignored": false, "inferredParser": "babel" }{ "ignored": true, "inferredParser": null }prettier --find-config-path[error] Can not find configure file[error] Can not find configure fileThe premise holds and the trap is real, but one stated mechanism in the card is wrong, and
the correction makes the lesson sharper. The card attributed the flip to config resolution
("Prettier resolved some config outside the repo"). It did not:
--find-config-pathreportsno config for either path, and
--no-editorconfigchanges nothing (there is no.editorconfiganywhere above either path). The out-of-repo answer is"ignored": true— thegreen is a pass over zero files. Control, run to settle it: a deliberately mangled file
(
const x=1;;;) gets the sameAll matched files use Prettier code style!at theout-of-repo path, and
[warn]for the same bytes inside the repo.That is the repo's own defect class — a verifier that reports success over an input it never
read — so the clause states the measured mechanism instead of the guessed one. The ruled
substance is unchanged: identical bytes, opposite verdicts, and the verdict is about Prettier,
never about your edit.
One wording deviation from the ruling's sentence, forced by a live gate
The ruling's sentence opens "ESLint (
pnpm lint)". Writing that literal intoAGENTS.mdisRED — I hit it, then read the rule:
RETIRED_CONTEXT_NAMEScarriesESLintas a standing ban: writing the dead check-runname fresh into any scanned surface is red, and a deliberate mention has to record a budget in
the gate script in the same PR. The gate's own docblock names the discriminator:
So the clause says
pnpm lintis the only style authority and names the tool in thesanctioned lowercase, with its config file:
(eslint, eslint.config.mjs). The ruling'ssubstance is intact; only the casing moved, and it moved because the literal spelling is
banned. Raising a budget in the gate script instead was the alternative and was rejected: it
is outside this card's one-file surface, and
origin/main'sAGENTS.mdcontains zerooccurrences of "eslint" in any casing today, so lowercase is the file's existing convention.
Net-zero funding ledger
The clause costs 9 lines (8 prose + 1 blank). Three deletions pay for it exactly. Re-wrap
funding is banned, so each cut is measured as deleted content, and the arithmetic below
shows the saved lines come from deleted bytes and not from tightening a wrap.
Studio UI: ../objectui (sibling repo).+ its blankCut B's remainder wraps narrower than it did (86 → 78 B/line), so all of its 2 lines come
from the 188 deleted bytes. Cut C's pointer wraps 8 B/line wider over 2 lines — worth 0.16 of
a line — against 484 deleted bytes; the fund is the deletion.
Does any rule lose its only home?
../objectui" is stated infull by § Frontend (Studio UI) — sibling repo
../objectui("This repo ships backendonly. All Studio/Console UI work happens in
../objectui") and by the Context Routingtable row for
../objectui/**. Nothing is lost but the third copy.it is deliberately narrow …"). The rationale it restates lives verbatim ~85 lines above in
the same file, in the durability gate's paragraph: "It is deliberately narrow — it cannot
discover a new seam, only stop known ones from regressing". The operative rule — "Found a
new open registry? Add it to
OPEN_CAPABILITY_REGISTRIESin the same PR that fixes it" —survives verbatim. What is gone is the cross-reference, not the fact.
packages/spec? Regenerate itsartifacts BEFORE pushing, which the pointer now names: the gate ↔ generator table row for a
public export; the single required
TypeScript Type Checkjob;api-surface/sharding(Multi-agent discipline §11); and the
dist-not-srccaveat. The one claim that sectionwords differently — that
OS_SKIP_DTS=1produces a local green with a CI red — iscarried into the pointer verbatim in substance rather than dropped, because a false-green
warning is exactly the kind of line that must not evaporate in a compression.
Not funded by re-wrapping, and no numbered item was renumbered:
AGENTS.md §9/§10are referenced from
CLAUDE.mdand fromscripts/check-dev-prereqs.mjs, so deleting aMulti-agent discipline item was ruled out early. Item 5 of the Post-Task Checklist keeps its
number and becomes a pointer.
The ratchet script is untouched — no ceiling was raised and no pin moved.
Gates
Union derived by
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(8 families for the changed path), run at a62cfa8, exit codes captured by redirect before
any pipe:
The two verdict lines this PR turns on, quoted from the gate rather than from
$?:Every added line is within the 120-byte max-line-length rule (widest: 118 B). Disclosed rather
than buried: the file is net-zero on lines and +204 bytes, since the added prose wraps at
~102 B/line against the ~86–100 B/line it replaces.
pnpm lintis a measured no-op for this diff, not a skipped run: eslint's own configanswers
File ignored because no matching configuration was suppliedforAGENTS.md(
pnpm exec eslint AGENTS.md --format json), andeslint.config.mjsdeclares no markdownprocessing at all. The diff is 1 file, 0 of which are in eslint's population, and nothing in it
can move an untouched file's verdict.
Landing
AGENTS.mdis a governed surface (Prime Directive 14). This PR stays draft; it is notarmed for auto-merge and must not enter the merge queue. The merge is the maintainer's, by
hand.
skip-changeset: nothing is published from a package by this diff.Generated by Claude Code
Generated by Claude Code