Skip to content

backlog(B-0155): GitHub settings refactor — ruleset split + git-native preferred (Aaron 2026-05-01)#1127

Merged
AceHack merged 4 commits intomainfrom
backlog/b0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01
May 1, 2026
Merged

backlog(B-0155): GitHub settings refactor — ruleset split + git-native preferred (Aaron 2026-05-01)#1127
AceHack merged 4 commits intomainfrom
backlog/b0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 1, 2026

Summary

Aaron 2026-05-01 directional input + full-permission grant on github-settings refactor:

"the settings that are there are accidental complexity not intentional, we want best practices and to prefer the git native settings over the legacy github ui/cli only settings, these are nasty thats why they are legacy" + earlier "splitting rulesets so you could have all always on but multiple smaller rulesets"

Three composing directives captured in row

  1. Treat current settings as accidental complexity — apply assumed-state-vs-actual-state discipline; current host state is starting-point-not-target
  2. Split single big ruleset into three smaller concern-aligned always-on rulesets:
    • Branch integrity (deletion / non_fast_forward / required_linear_history)
    • Review process (pull_request / copilot_code_review)
    • CI gate (required_status_checks migrated from legacy branch protection)
  3. Prefer git-native over legacy UI/CLI-only — migrate branch-protection's status-checks INTO ruleset; minimize/remove branch protection where ruleset equivalents exist

Phase plan

  • Phase 1 — Audit + migration matrix (each branch-protection field → ruleset rule or "no equivalent")
  • Phase 2 — Update expected.json + build reconciliation script (`tools/hygiene/apply-github-settings.sh`) + apply
  • Phase 3 — Branch-protection cleanup (remove or minimize)
  • Phase 4 — Documentation (`docs/GITHUB-SETTINGS.md` + ADR + operator runbook)

Mechanization candidate

Reconciliation script makes click-ops drift structurally impossible — every settings change must flow through editing expected.json + running the script. Drift workflow stays green by construction.

depends_on / composes_with

Test plan

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings May 1, 2026 17:04
@AceHack AceHack enabled auto-merge (squash) May 1, 2026 17:06
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new P1 backlog row (B-0155) to plan a GitHub repo-settings refactor that splits a monolithic ruleset into three always-on concern-aligned rulesets and migrates CI required checks from legacy branch protection into rulesets (“git-native preferred”).

Changes:

  • Add docs/backlog/P1/B-0155-… describing the phased ruleset-splitting + migration plan and acceptance criteria.
  • Regenerate/update docs/BACKLOG.md to include the new B-0155 row.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
docs/backlog/P1/B-0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01.md New backlog row documenting the intended GitHub settings refactor plan and milestones
docs/BACKLOG.md Adds B-0155 to the P1 index list

AceHack added 2 commits May 1, 2026 13:33
…e preferred (Aaron 2026-05-01)

Aaron 2026-05-01: *"the settings that are there are accidental
complexity not intentional, we want best practices and to prefer
the git native settings over the legacy github ui/cli only
settings, these are nasty thats why they are legacy"* + earlier
*"splitting rulesets so you could have all always on but multiple
smaller rulesets"*.

Three composing directives captured:
1. Treat current settings as accidental complexity (not load-bearing)
2. Split single big ruleset → three concern-aligned smaller always-on
   rulesets (Branch integrity / Review process / CI gate)
3. Prefer git-native (declarative-in-tree + ruleset-as-code) over
   legacy UI/CLI-only branch-protection settings

Phase plan: audit + design, split implementation, branch-protection
cleanup, documentation. Reconciliation script
(tools/hygiene/apply-github-settings.sh) as mechanization candidate
that makes click-ops drift structurally impossible.

depends_on: B-0154 (sibling host-config refactor work).
…e-ruleset target shape

Phase 1 deliverable for B-0155 — audit-only, no host changes yet.

Captures:

1. Migration matrix — every legacy branch-protection field mapped to its
   ruleset rule equivalent (or "no equivalent, keep in legacy") so
   future maintainers + the reconciliation script (Phase 2) have a
   ground-truth reference for what migrates and what stays.

2. Three-ruleset target shape — Branch integrity / Review process /
   CI gate. Each concern-aligned, all always-on, smaller blast-radius
   per Aaron's "splitting rulesets so you could have all always on
   but multiple smaller rulesets" framing.

3. Minimized branch protection — post-migration, only
   `allow_fork_syncing` (legacy-only) remains in branch protection.
   Everything else moves to rulesets where rule equivalents exist.

4. Git-native rationale — captures Aaron's "these are nasty thats
   why they are legacy" framing + the reconciliation script direction
   that closes the loop on click-ops drift.

5. Reconciliation script vision — `tools/hygiene/apply-github-settings.sh`
   as the third verb (alongside snapshot + check) that makes drift
   structurally impossible.

Audit-only commit; Phase 2 (snapshot edit + reconciliation script
+ apply) is a separate PR after this row's audit lands.
@AceHack AceHack force-pushed the backlog/b0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01 branch from 3baa2de to a938463 Compare May 1, 2026 17:33
…low + visibility-constraint clarification + B-0154 forward-ref annotation

Three substantive fixes:

1. **Line-leading `+` on continuation** (MD004 lint, recursive
   irony from B-0153's class 1) — reflowed "+ tick-history-order"
   to "and tick-history-order" so the continuation doesn't read
   as a nested bullet.

2. **Visibility-constraint memory reference** — referenced filename
   doesn't exist in repo (rule is referenced PROSEFULLY in MEMORY.md
   + multiple memory files but never landed as its own dedicated
   memory file). Replaced broken pointer with prose acknowledgement
   + verbatim Aaron 2026-04-28 quote, and noted the rule is
   referenced-not-yet-filed.

3. **B-0154 depends_on forward-ref** — annotated as "(forward-ref
   to PR #1125 not yet merged on main)" so the DAG semantics are
   explicit.

Threads PRRT_kwDOSF9kNM5_Awkw + PRRT_kwDOSF9kNM5_AwlS (about
"Current state" inconsistency with snapshot showing code_quality
+ strict:true) are now stale — post-rebase, this branch reflects
post-PR-#1126 state which matches the row content. Resolving
those without code change.
Copilot AI review requested due to automatic review settings May 1, 2026 17:42
… — graduates from accidental to canonical

Aaron 2026-05-01: *"no we want false"* + *"yes that is not
accidentally"* — explicit confirmation that `required_status_checks.strict: false`
is the intentional design choice, not accidental complexity.

Sharpens the everything-greenfield rule: the DEFAULT prior at
week-one is "configs are accidental candidates," but specific
configs can graduate to confirmed-deliberate via direct
maintainer signal. `strict: false` is one such confirmed-
deliberate setting (parallel-PR-friendly cadence is the
architecture).

Composes with feedback_everything_greenfield_at_week_one's
cause-attribution refinement (the click-vs-decision
discipline; Aaron just made the click-then-decision
graduation explicit for this specific setting).
@AceHack AceHack merged commit 8f29cbb into main May 1, 2026
21 checks passed
@AceHack AceHack deleted the backlog/b0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01 branch May 1, 2026 17:45
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new backlog row (B-0155) and extends the GitHub settings documentation to capture the intended “ruleset split + git-native preferred” direction for an upcoming github-settings refactor, then updates the generated backlog index.

Changes:

  • Add new P1 backlog row B-0155 describing the multi-phase GitHub ruleset refactor plan.
  • Extend docs/GITHUB-SETTINGS.md with a Phase 1 audit/migration matrix and target three-ruleset architecture.
  • Regenerate docs/BACKLOG.md to include B-0155.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
docs/backlog/P1/B-0155-github-settings-ruleset-split-git-native-preferred-aaron-2026-05-01.md New backlog row defining scope, phases, and acceptance criteria for the refactor.
docs/GITHUB-SETTINGS.md Adds an audit section + migration matrix + target ruleset split architecture description.
docs/BACKLOG.md Index update to include the new B-0155 row.

Comment thread docs/GITHUB-SETTINGS.md
Rules:

- `required_status_checks` migrated from branch protection. Contexts: the 7 currently in branch protection (`build-and-test (macos-26)` / `build-and-test (ubuntu-24.04)` / `build-and-test (ubuntu-24.04-arm)` / `lint (actionlint)` / `lint (markdownlint)` / `lint (semgrep)` / `lint (shellcheck)`) plus the memory-* lints + backlog-index-integrity + tick-history-order
- `strict: false` (parallel-PR-friendly; preserved per session-cluster experience)
Comment on lines +8 to +9
depends_on:
- B-0154
Comment on lines +48 to +51
- **One** `Default` ruleset with 5 rules (deletion, non_fast_forward,
copilot_code_review, pull_request, required_linear_history)
- **Plus** legacy branch protection on `main` with
`required_status_checks` (7 contexts, `strict: false`) +
Comment thread docs/GITHUB-SETTINGS.md
| `block_creations` | `false` | (no direct equivalent) | Off anyway; can remove |
| `enforce_admins` | `false` | (rulesets default-enforce against admins unless bypass-actors set) | Rulesets handle admins differently; verify policy intent |
| `lock_branch` | `false` | (no equivalent) | Off anyway; can remove |
| `required_conversation_resolution` | `true` | `required_review_thread_resolution` rule (verify exact name in REST API) | **MIGRATE** — add rule to Review-process ruleset |
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.

2 participants