You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TL;DR: We're folding the release patch layers (the 1.0.7 capsule plus all the ReleaseOverlay pipelines) into normal source, so main is exactly what ships on every platform, Mac included. This PR is step 1: guardrails so the layer pile can't grow while we do it. Zero game changes. No files change under runtime-recomp/src, patches/, extern/ or online IDs.
What you get
🛑 Pattern guard
New overlay layers and pipelines get blocked. Existing ones are baselined (transition-layer label = escape hatch)
🧹 Lint + format
ruff and shfmt enforced in CI. C++ format comes later with the fold
🪝 Hooks
Opt-in pre-commit. Claude/Codex sessions can't add a layer (tested live)
🔒 Pinned bytes
Formatters can't touch patches, SDK receipts or the 1.0.7 capsule bases
pattern_guard.py rejects new overlay CMake, source swaps, string-replace
pipelines, capsule files and identity literals. Existing hits live in
architecture/pattern-guard-baseline.txt, which only shrinks. check.py
--suite takes comma lists and runs the guard by default.
ruff with a per-file baseline, clang-tidy, gersemi and dkr_enable_warnings,
plus a blocking lint job and an advisory tidy job. Formatters only report
until the autofix commits land. Stop clang-format sorting includes since
order matters in spliced TUs.
Formatting only: ASTs match HEAD apart from isort order, split imports,
one not-in rewrite and one unused re import. Baseline regenerated, 90 to
50 files. Listed in .git-blame-ignore-revs.
Fixers never see patches/, receipts or capsules; check_pinned_bytes.py
proves it. Setup scripts install the hooks, Build offers to. ruff format
and shfmt now block in the lint job.
AGENTS.md is the shared guidance. .claude/settings.json and
.codex/hooks.json wire the same scripts/agent_hooks: block edits that
bring back a patch layer, report lint findings after edits, and refuse to
stop with a new pattern-guard violation. pattern_guard gains check_content
for would-be file contents. New scripts are pyright strict.
The 1.0.7 capsule pins base_sha256 for 562 first-party files and rebuilds
its roles from them; the reformat commit changed one (test_generator.py).
Restore it, keep ruff and the fixers off those directories, and make the
pinned-bytes hook check every base except the 5 that already drifted.
Explain in AGENTS.md which files must keep their bytes, including the
capsule bases until the fold. Add check_pinned_bytes.py, bootstrap_hooks.py
and .git-blame-ignore-revs to CODEOWNERS.
Adds contributor guardrails ahead of folding patch layers into first-party source, without changing game runtime sources or online identities.
Changes:
Adds pattern-guard fixtures, pinned-byte validation, and agent lifecycle hooks.
Configures linting, formatting, ownership, merge policies, and platform hook integration.
Expands contributor checks and CTest coverage, alongside mechanical Python and shell formatting.
Unresolved issues:
Critical — scripts/agent_hooks/post_edit_check.py:105: Timeout handling leaves formatter subprocesses running, allowing them to overwrite files after snapshots are restored.
Moderate — scripts/check.py:22: Automatic discovery adds build-dependent tests to the default suite, breaking its documented Git-and-Python-only requirements.
Moderate — scripts/check.py:22: Discovery also includes real pre-commit integration tests that can download dependencies and fail offline, violating the default command’s no-download behavior.
post_edit_check killed only pre-commit, so a formatter it had started could
rewrite the file after the snapshots were restored. Run pre-commit in its own
process group and kill and reap the group first. Regression test included.
Build-dependent tests (CMake, Ninja) and the real pre-commit run move to
the opt-in host-tools suite, so check.py's default needs no build tools
and downloads nothing. CTest still runs them.
Preserve a working Python launcher during fallback selection
Setup-Windows.cmd:28
The && set applies to the entire if command. When py -3 succeeds, the skipped fallback leaves a successful error level, so this still overwrites PYTHON=py -3 with PYTHON=python. On systems where python is absent or is the Microsoft Store stub, Setup then passes its Python prerequisite check but cannot install the hooks. Keep the fallback probe and assignment inside a conditional block so a working launcher is preserved.
Pins for capsule objects and deltas came only from files on disk, so a
deleted object a manifest still references passed. Derive them from the
manifest too, and track CRLF normalisation on the pin instead of by name.
Snapshot-and-restore could roll back a save made by another editor while
pre-commit ran. Copy the edited files and lint config into a scratch git
repo, report the fixer diffs from there, and check pinned bytes read-only.
Fix macOS kit test inputs and a PG008 bypass (follow-up to #76)
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
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.
TL;DR: We're folding the release patch layers (the 1.0.7 capsule plus all the
ReleaseOverlaypipelines) into normal source, somainis exactly what ships on every platform, Mac included. This PR is step 1: guardrails so the layer pile can't grow while we do it. Zero game changes. No files change underruntime-recomp/src,patches/,extern/or online IDs.What you get
transition-layerlabel = escape hatch)@ThatGuyMcd bit's after merge
.github/ruleset-main.json(needs admin)Heads up
d6690f6. Code is identical. Already in.git-blame-ignore-revs.Setup-Windows.cmd.Next: the fold PR. I've already reproduced the v1.0.11 online IDs, so cross-play stays as is.