From 5eca6803aed6b82ec6d696a7e62ff938d112dc60 Mon Sep 17 00:00:00 2001 From: thomasluizon Date: Sat, 8 Aug 2026 12:58:52 -0300 Subject: [PATCH] fix: pin .claude markdown to LF so the pr-review parity gate compares equal bytes tools/launch-worker.mjs in orbit-ui-mobile sha256s the working-tree bytes of .claude/skills/pr-review/{SKILL.md,rubric.md} in both repositories and refuses to launch an independent reviewer for repo ui or api when they differ. The committed blobs are already byte-identical: SKILL.md b374cfd63d3a1257da76870e2da00586f87183cf rubric.md 308d1c76fedec17cf0a1dae93bc0cc18925d88da Both repositories set core.autocrlf=true. orbit-ui-mobile pins `.claude/skills/**/*.md text eol=lf`; this repository pinned only *.mjs and two JSON artifacts. The same blob therefore checked out LF there and CRLF here, +230 bytes on SKILL.md and +289 on rubric.md. `git check-attr text eol` reported `eol: lf` in the UI repository and `eol: unspecified` here. `git status` was clean in both, which is why nothing looked wrong. Cost, measured on the overnight run of 2026-08-08: 76 tickets stood down rather than opened unreviewable, and 4 pull requests handed over with no independent review. This commit changes no blob. It pins `.claude/**/*.md text eol=lf`, a superset of the missing line that also covers every future mirrored document under .claude, and re-materializes the working tree from the unchanged blobs. Proof, both working trees after the change: SKILL.md 3fbf6d133b4a7bafbe8da8345ea10d45ff96ac6b83d6c78f348651fa3c830059 13388 B rubric.md 672f14194f2bc7834828d434babdad152d5b361b2059b75f34f5b0d370be72b6 20247 B Gate proof: with .gitattributes reverted and the tree re-materialized, the launcher prints "pr-review parity failed for .claude\skills\pr-review\SKILL.md". With this commit applied it passes that check and advances to the next one. Audit of every other path present in both repositories: 30 shared paths, 3 with an identical committed blob, and only these 2 drifted. The other 27 differ in content on purpose. Refs ORB-215 Co-Authored-By: Claude Opus 5 (1M context) --- .gitattributes | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitattributes b/.gitattributes index 66ca9ea4..ff751e7e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,12 @@ src/Orbit.Api/openapi.json text eol=lf +# Every markdown file under .claude/ checks out LF here, exactly as it does in +# orbit-ui-mobile. The pr-review skill is single-sourced in the UI repo and mirrored +# into this one, and tools/launch-worker.mjs refuses an API review when the two copies +# disagree. Without this line core.autocrlf=true materialized the identical committed +# blob as CRLF here and LF there, +230 bytes on SKILL.md and +289 on rubric.md, so the +# gate compared different bytes for the same content and stood 76 tickets down on +# 2026-08-08. `git status` stayed clean in both repos, which is why nothing looked wrong. +.claude/**/*.md text eol=lf .claude/skills/**/*.mjs text eol=lf tools/*.mjs text eol=lf architecture.json text eol=lf