stabilize generated iOS assets on Windows

This commit is contained in:
Sinabina
2026-07-17 13:34:53 -07:00
parent 39bc307b0c
commit d0d770e811
2 changed files with 16 additions and 0 deletions
+8
View File
@@ -30,6 +30,14 @@ bin/* text eol=lf
*.mjs text eol=lf *.mjs text eol=lf
*.cjs text eol=lf *.cjs text eol=lf
# Runtime and generated iOS assets are copied byte-for-byte and hash-pinned in
# the GStack 2 provenance manifests. Keep their source bytes platform-neutral
# so a Windows checkout cannot turn CRLF conversion into generated drift.
*.swift text eol=lf
*.h text eol=lf
*.m text eol=lf
*.template text eol=lf
# Binary files — never touch. # Binary files — never touch.
*.png binary *.png binary
*.jpg binary *.jpg binary
+8
View File
@@ -15,6 +15,14 @@ describe('GStack 2 skill parity', () => {
.toBe(blobShaForPath('cso/SKILL.md.tmpl')); .toBe(blobShaForPath('cso/SKILL.md.tmpl'));
}); });
test('pins hash-provenance asset sources to LF on every checkout', () => {
const attributes = readFileSync(join(ROOT, '.gitattributes'), 'utf8');
const normalizedLines = attributes.split(/\r?\n/).map((line) => line.trim().replace(/\s+/g, ' '));
for (const pattern of ['*.swift', '*.h', '*.m', '*.template']) {
expect(normalizedLines).toContain(`${pattern} text eol=lf`);
}
});
test('preserves the pinned specialist corpus and generated evidence', () => { test('preserves the pinned specialist corpus and generated evidence', () => {
const result = runParity(); const result = runParity();
expect(result.sources).toBe(55); expect(result.sources).toBe(55);