Repository navigation
docs: correct the sentences this week's fixes left behind - #610
Conversation
Sixteen sentences, on the pages and in two test files, said what the code no longer does, or said it too widely. Each gets the smallest edit that makes it true, checked against the code it describes. Nothing under src/ changes. - The fold: a label's name under the rename rule is the one value the higher layer does not win (architecture, the v2-to-v3 layering page). - The canonical order: the pinned environments keep their written order too (library, the v2-to-v3 index). - Check and apply: the drift report cannot list the value of a declared secret that already exists. A check right after an apply reports clean where that apply reached the declared state, with three states no apply reaches as examples. A refused entry stops its section, which lists what it left as not attempted (README, semantics). - Keys GitHub only reports: three passthrough entry shapes name one in a note until the next major refuses it, and the two variables sections say so (semantics, actions_variables, agents_variables, and the regenerated coverage page). - Directives: a _remove on an entry of a list that is not keyed stays as a field under a warning, and a single document's top-level _layering outside its values warns (layering, architecture, the settings-file upgrade page, the _layering hover). - The replace sweep stops inside a ruleset's rule, not at its parameters (the run upgrade page, a test comment). - The snapshot page names the interaction_limits keys read on their own, the --summary row tells a created file from an existing one, and CONTRIBUTING says build:check also refuses an unregistered GENERATED marker. - One list item and one hover paragraph come under the 70-word cap, and a describe title claims only its own rows.
File size check0 over a hard cap (fails), 6 warning(s).
Split the file, wrap the line, shorten or exempt the comment, or list the path in 5 managed file(s) skipped; repo-platform owns them. |
Member shape check22 finding(s).
Add the blank lines, make the comment one line directly above the item, comment every field or none, or list the path in 4 generated file(s) skipped. |
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues block the documentation clarifications.
No open issues 🎉
What changed in this PR
This documentation-only PR aligns GitHub Settings as Code's guidance with existing behavior, correcting broad claims and documenting exceptions. Runtime code, test assertions, and fixtures are unchanged.
Changes:
- Clarifies layering, validation warnings, drift reporting, and apply behavior.
- Corrects snapshot permission handling, CLI summary-file behavior, and generated-file checks.
- Updates schema descriptions, generated coverage documentation, and two test descriptions/comments.
| File | Description |
|---|---|
test/sections/repository/schema.test.ts |
Narrows the describe title to the settings tested. |
test/engine/diff.test.ts |
Clarifies the fixture's passthrough paths in a comment. |
README.md |
Explains why existing secret values do not produce drift. |
docs/upgrading/v2-to-v3/settings-file.md |
Documents two directive cases that warn instead of failing. |
docs/upgrading/v2-to-v3/run.md |
Corrects the ruleset omission-sweep boundary. |
docs/upgrading/v2-to-v3/layering.md |
Notes the label-renaming exception to higher-layer precedence. |
docs/upgrading/v2-to-v3.md |
Adds pinned environments to ordering exceptions. |
docs/start/cli.md |
Clarifies preservation of existing summary-file contents. |
docs/sections/agents_variables.docs.yml |
Documents notes for declared read-only timestamps. |
docs/sections/actions_variables.docs.yml |
Documents notes for declared read-only timestamps. |
docs/schema.docs.yml |
Splits the layering description and explains invalid-value warnings. |
docs/reference/semantics.md |
Clarifies convergence limits, stopped operations, and read-only-key exceptions. |
docs/reference/library.md |
Corrects canonical ordering guidance for pinned environments. |
docs/reference/coverage.md |
Includes generated variable timestamp notes. |
docs/reference/architecture.md |
Documents validation warnings and label-renaming precedence. |
docs/operate/snapshot.md |
Adds interaction-limit reads to partial-denial examples. |
docs/operate/layering.md |
Clarifies unkeyed removal markers and shortens alias-cycle wording. |
CONTRIBUTING.md |
Documents checks for unregistered generated-region markers. |
Review effort: Balanced
…le states The sentence gave the reason "because its section has no write for it". That is literal only for workflows: interaction_limits declares a cap PATCH, and pages declares a create and an update. What the three examples share is that the plan holds no operation that reaches the declared state, so the clause says that.
What this specifies
Sixteen sentences, on the pages and in two test files, each checked against the code it describes. All sixteen were stale or too wide, so each has one edit.
How
src/changes.docs/reference/coverage.mdgains the two variables bullets frombun run build:check.Proof
bun test test/docsends341 pass,0 fail.mainhad one.typecheck,lint,lint:arch,knip,check:compat, andbuild:checkexit 0.Technical details
git diff -w origin/main...HEADeach re-padded table shows two rows, the worded row and its dash separator._layeringhover is the first schema description with a paragraph break, whichlib/settings.schema.jsoncarries as a line break.docs/operate/layering.md:443, 73 words)./repo/settings.yml.bun test/e2e/run.ts --scenario <name> --print-stdout.parseScenarioandrunScenario, and its settings and live state head its block.fixpoint: convergesre-run against the same mock.Row 3,
actions_secrets: [{name: DEPLOY_TOKEN, value: $DEPLOY_TOKEN}]over a liveDEPLOY_TOKEN, a check and then an apply:Row 4,
workflows: [{path: ci.yml, state: active}]with no workflow live:Row 4,
interaction_limits: {pull_request_creation_cap: {enabled: true}}where the cap endpoints answer 405:Row 4,
pages: {https_enforced: true}with no site live:Row 5, an apply of the rulesets
main-protectionandrelease-protectionand the milestonev1, where the livemain-protectionholds a bypass actor the file omits:Row 9, the built command line (
bun run build:lib) with no token in the environment, on a new path and then on a file holding one line:Rows 11 and 12, a check of
actions_variables: [{name: REGION, value: eu-west-1, updated_at: "2026-01-01T00:00:00Z"}]over a liveREGIONupdated at2025-06-01T00:00:00Z:Row 12, the same check of
agents_variableswith a declaredcreated_at:Row 16, the scenario
apply-layering-outside-values-warns:Row 16, the same file in check mode over a live
buglabel:Rows 15 and 16, the scenario
apply-unkeyed-remove-warns:interaction-limits-snapshot-cap-denied-warnpins both left-out notes and the written file.test/scripts/generated.test.tspins the refusal of a marker no generator registers, before any generator runs.environments-apply-refused-entry-reports-unattempted.test/sections/environments/environments.test.ts.bun run check:compatlists the threeCOMPAT(v4)markers that defer the refusal.repository-private-visibility-contradiction-noteandrepository-null-security-and-analysis-note.replaceSweep(RulesetConfig).passthroughholdsrules[]once per rule shape andbypass_actors[], and norules[].parameters.test/engine/diff.test.tsstaysrules[].parameters, the one cover of a passthrough path that is a field.render-unkeyed-remove-warnspins a rendered document that still carries the marker.docs/reference/architecture.mdsays "a check right after it reads clean", as wide as row 4's old sentence.docs/start/getting-started.mdsays "the report lists exactly what an apply would change or delete", as wide as row 3's old sentence.docs/start/migrating-from-probot.mdsays "lists everything an apply would delete", which was not checked against the code here.docs/reference/semantics.mdsays "two keys that contradict each other" are refused, with no caveat for therepositoryprivateandvisibilitypair that draws a note.docs/reference/semantics.mdsays "A key with no empty state refuses it", with no caveat forrepository.security_and_analysis: null, which draws a note.docs/operate/snapshot.mdstill omitsrepository, whose readable toggles and two GraphQL-routed keys are read on their own.schema:entries ofdocs/schema.docs.ymlanddocs/sections/*.docs.yml, are one paragraph of more than 70 words, the longestUndeclaredPolicyList<*>._layeringat 130.docs/sections/environments.docs.ymlsays "in every run" three times for the note that row 12 words "in check and in apply".labels: [{name: bug, color: d73a4a, description: x, id: 5}]over a livebugprintsdrift: labels[bug].id: declared 5 != live 90000000; apply will set the declared valueand no note.idon a ruleset, a webhook, an autolink, or a deploy key, andnumberon a milestone, draw drift and no note in the same check.