mirror of
https://github.com/ruvnet/RuView
synced 2026-07-29 18:31:44 +00:00
fix(ruview): canonicalize manifest line endings
This commit is contained in:
@@ -10,19 +10,19 @@
|
||||
],
|
||||
"toolPolicy": "default-deny-mutations",
|
||||
"files": {
|
||||
".claude/settings.json": "734e93983f6f0a42f17e5920df559c3367cd646b764afda072593771547fe620",
|
||||
".claude/skills/calibrate-room/SKILL.md": "6e0f9fd4d16bce3366fd5d9f1ca3f3595521cec58ac9ecbc000448c61b4d35ff",
|
||||
".claude/skills/onboard/SKILL.md": "347558601ad2c4002b0b6ec0ef8b3391e4c923f830b07c71025d6129c9970c2a",
|
||||
".claude/skills/provision-node/SKILL.md": "a980482bb06a271a88ccd973512090db59a6b7a13bb3407f8e85a547536e0612",
|
||||
".claude/skills/train-pose/SKILL.md": "3c72c12756294ecbd94da52e29e639f54f5903172ddb40137f27c442cb68021d",
|
||||
".claude/skills/verify/SKILL.md": "60c2f3e27854794eaeb45f83ec54b3fc03f09faff84c63b70f25fed139820571",
|
||||
".claude/settings.json": "19c76e2250c3f8eb9eeb60f04af9362be5d3513392b9591a312afb92178c067e",
|
||||
".claude/skills/calibrate-room/SKILL.md": "4b29c7c331f47acad3c0f51b3d3d8f5b5573e316e081bae71dbe21a47fa95240",
|
||||
".claude/skills/onboard/SKILL.md": "97ee71f0aa985cfc03bb8e764789bb55c4f9fd5dae10a116c1071eab85b5893f",
|
||||
".claude/skills/provision-node/SKILL.md": "5f73823794ed5f0b25c102aa8b1bf2dd534a1ec468173d8330c2af0ca24f239c",
|
||||
".claude/skills/train-pose/SKILL.md": "92aebd4423470eb10eabaee642ec3493284d98b7ae9785e0f34378c709746e65",
|
||||
".claude/skills/verify/SKILL.md": "2d38d240e9810a7827e2ebd3717dc0f85c646cc92e46c3812fe77c5b9eb40b76",
|
||||
".harness/claims.json": "eaa44c5154ba1833c2289e5f46b98c53b38285aa75cf1ba3f725f3806ba69aa1",
|
||||
".harness/mcp-policy.json": "19c266b061a8de579fb6dec4843f48761ddd8ea0806ee5d8ca848fd7e8cd428e",
|
||||
".mcp/servers.json": "fec6075400f8350d8075beac8306690355c4b015425bfd0e5f52966234e9d66f",
|
||||
"CLAUDE.md": "a39fb83cbc12870c98241c81c3e79a016f21a76d05cbe66fb27c40f68a5134af",
|
||||
"LICENSE": "a5e8c796a9213c6c2e21c6975d2fb7134d52ce8be8a1b28835ccc9b11386db65",
|
||||
"README.md": "4e4bf1fbe8cb6dc6bc82f93491af72e7086e584d8dfe08e4918dba2eb3e403d2",
|
||||
"bin/cli.js": "dda158ef36b527e79b47fb51fdb504ccc0c68b3d653e203db6744345cb70d66c",
|
||||
"CLAUDE.md": "1d7af0c310dd8093b4ae6c9c94a1c0cc9ff02ac9c8d5b45caba5363c3af99475",
|
||||
"LICENSE": "631f94984f626818d42ecf717aa6e8e0afd4f9f355ca706bd2effafbd1416d06",
|
||||
"README.md": "a38c64a947989246107a48b8181078c7ba4361ab5bdb49a57439b9cab6fe737d",
|
||||
"bin/cli.js": "6713e8a36e1304f0c25eecc06e07e53240465a25c036469112a09de4a00cec57",
|
||||
"brain/corpus/core.jsonl": "4bbb5f86dd1c13f26d19f911a33c7b382203ddb70b00ce3c7dbe7cbc4b96f9a8",
|
||||
"flywheel/evaluations.json": "ac4ff1f897a2444870cd2b8ae8aee8b1578e61467aeca4db57893f41be98a572",
|
||||
"flywheel/fixture.mjs": "de71be88753d0da4695d91011b54380c994a018986fafba36cb13739307a9bce",
|
||||
@@ -30,28 +30,28 @@
|
||||
"flywheel/genome.json": "32c937ccf4431409c1bd7892b4afba6097c539d8c76d41aa968091c9a83d8f99",
|
||||
"flywheel/replay.mjs": "0670ca0b03701f4afe0b4bca8a3d58d481676b61a94a5b98c6a425aefb1159ab",
|
||||
"flywheel/run.mjs": "6d4f97db16900c45367b6538848cbe1915af999e663720dfc51f2bb1698f1cd0",
|
||||
"package.json": "ef9b6a092a86efdf0adc75de436c22c217a265b42528c44efd460e5bbd02dd8c",
|
||||
"scripts/sync-skills.mjs": "dd01ce95853c983709bca391266fe4593cbc0fbed0c54b4c1c0729ee63d24f2f",
|
||||
"scripts/update-manifest.mjs": "27fecb8c8ddf5506129738fa3b74d549f2d43b55c49fd1d438aa71405c946663",
|
||||
"scripts/verify-manifest.mjs": "fafab2986e100095886b31ed86ca97d7d7b49f22fa3afc9e9d47e79f8edcca79",
|
||||
"skills/calibrate-room.md": "6e0f9fd4d16bce3366fd5d9f1ca3f3595521cec58ac9ecbc000448c61b4d35ff",
|
||||
"skills/onboard.md": "347558601ad2c4002b0b6ec0ef8b3391e4c923f830b07c71025d6129c9970c2a",
|
||||
"skills/provision-node.md": "a980482bb06a271a88ccd973512090db59a6b7a13bb3407f8e85a547536e0612",
|
||||
"skills/train-pose.md": "3c72c12756294ecbd94da52e29e639f54f5903172ddb40137f27c442cb68021d",
|
||||
"skills/verify.md": "60c2f3e27854794eaeb45f83ec54b3fc03f09faff84c63b70f25fed139820571",
|
||||
"package.json": "a83b8b2f903ba1bc31daf98e37a2ab69b7e30c5ae8b6415b3193487dc75b398b",
|
||||
"scripts/sync-skills.mjs": "43715dab61e204dc91bbd61755810e8fdb2f66e2b0c0bd791b4bf48a2e293565",
|
||||
"scripts/update-manifest.mjs": "8f56764b8f70aed55da0c7e2417ae875b0d58d781d839b6db7f115f08af61e6b",
|
||||
"scripts/verify-manifest.mjs": "6491a221762efcfeb3e749ecab243b204f17fd5bc871f3d4025597f31b8f0f10",
|
||||
"skills/calibrate-room.md": "4b29c7c331f47acad3c0f51b3d3d8f5b5573e316e081bae71dbe21a47fa95240",
|
||||
"skills/onboard.md": "97ee71f0aa985cfc03bb8e764789bb55c4f9fd5dae10a116c1071eab85b5893f",
|
||||
"skills/provision-node.md": "5f73823794ed5f0b25c102aa8b1bf2dd534a1ec468173d8330c2af0ca24f239c",
|
||||
"skills/train-pose.md": "92aebd4423470eb10eabaee642ec3493284d98b7ae9785e0f34378c709746e65",
|
||||
"skills/verify.md": "2d38d240e9810a7827e2ebd3717dc0f85c646cc92e46c3812fe77c5b9eb40b76",
|
||||
"src/brain.js": "0f16a75aea943acdacc430ff11d5df7ecdec9cca2ab497795ff6f33eaebdfab6",
|
||||
"src/guardrails.js": "e9ebea002f376f611f9c7447667cf0a6cdd2ba713f205e6fa59d9286da91d7c1",
|
||||
"src/guardrails.js": "aacc8fa6088f7f1ccea3a0b02171a5c516b95d3416ee3ba87add3879a1d6aaad",
|
||||
"src/hosts/claude-code.js": "2212bc39b49822018800dfe33a471e56bbb4c5233d716bfa7aa4fff77aa23edb",
|
||||
"src/hosts/codex.js": "d41ecd132ce2db7b47aad9cebbc020d70e6810d48c3554858d099ff2e8f6608b",
|
||||
"src/hosts/index.js": "ab276c41ab722bcdf72c2d1649cecbb760ae05c41c1372aae4c2447aa7c11539",
|
||||
"src/mcp-server.js": "0b98f6873c4ed282df2b251df81da771416b5dadc735fae9b8be9e455118e46b",
|
||||
"src/mcp-server.js": "8c44b0f5e2ee0c386e5315b5927483620cd32ab978055b9f540259c65d4da5fc",
|
||||
"src/policy.js": "9731e534a2d9b9b4fe841f1f50ff4a133728ad48bea8fd629aa880790f345e8f",
|
||||
"src/process-runner.js": "49533b038044dfb8bc76ed01c030d06a9856ead0836157fb693e2a7d40f786d6",
|
||||
"src/redact.js": "ebf1afff46341078706b0401838c53db043603586e280d51ece5cf1feba35189",
|
||||
"src/repo-trust.js": "06e2a94d7113ed936f208a12b7fcc785801c215a3e2c5e7418f6238d991a289c",
|
||||
"src/tools.js": "2b7ab45a6b783de05ad509a2acb25bd24bdbb905ec0df190e59e5c9fc778c822"
|
||||
"src/tools.js": "ba897110ed5565930f0df1c72cf406d2319ad493c081fecc9d111f1be9f5ebf1"
|
||||
},
|
||||
"filesDigest": "462b6e5907894e6af8afe16f88466179bea2323016c40bbcddf1370691b7e5a5",
|
||||
"filesDigest": "a665538c692ab6fdc48e888712dfb1cb9d9588d72a4a9c5477a3ee33481dfa0e",
|
||||
"brainDigest": "4bbb5f86dd1c13f26d19f911a33c7b382203ddb70b00ce3c7dbe7cbc4b96f9a8",
|
||||
"gateFingerprint": "6e53c784eee38310188948fc75fb49e6b4ebc04e247d01b903fa8c8a92d67bdd",
|
||||
"developmentPins": {
|
||||
|
||||
@@ -1 +1 @@
|
||||
ef8ed7933ea35729a0ddbe9a711fef7d04e098b4a6471c217ff6ec19cefc7fd1 manifest.json
|
||||
47eef713ec90adc6b09becb10e4d409c4edc4212cd5e910e0c062cb3c195ac3e manifest.json
|
||||
|
||||
@@ -10,6 +10,7 @@ const ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
|
||||
const quiet = process.argv.includes('--quiet');
|
||||
const INCLUDE = ['package.json', 'bin', 'src', 'skills', '.claude', '.mcp', '.harness/claims.json', '.harness/mcp-policy.json', 'brain', 'flywheel', 'scripts', 'CLAUDE.md', 'README.md', 'LICENSE'];
|
||||
const sha = (value) => createHash('sha256').update(value).digest('hex');
|
||||
const canonicalFile = (path) => readFileSync(path, 'utf8').replace(/\r\n/g, '\n');
|
||||
const files = [];
|
||||
function walk(path) {
|
||||
const stat = statSync(path);
|
||||
@@ -18,7 +19,7 @@ function walk(path) {
|
||||
} else files.push(path);
|
||||
}
|
||||
for (const entry of INCLUDE) walk(join(ROOT, entry));
|
||||
const hashes = Object.fromEntries(files.sort().map((path) => [relative(ROOT, path).replaceAll('\\', '/'), sha(readFileSync(path))]));
|
||||
const hashes = Object.fromEntries(files.sort().map((path) => [relative(ROOT, path).replaceAll('\\', '/'), sha(canonicalFile(path))]));
|
||||
const pkg = JSON.parse(readFileSync(join(ROOT, 'package.json'), 'utf8'));
|
||||
const manifest = {
|
||||
schema: 2,
|
||||
|
||||
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
|
||||
const ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
|
||||
const quiet = process.argv.includes('--quiet');
|
||||
const sha = (value) => createHash('sha256').update(value).digest('hex');
|
||||
const canonicalFile = (path) => readFileSync(path, 'utf8').replace(/\r\n/g, '\n');
|
||||
const path = join(ROOT, '.harness', 'manifest.json');
|
||||
const raw = readFileSync(path);
|
||||
const manifest = JSON.parse(raw);
|
||||
@@ -13,7 +14,7 @@ const findings = [];
|
||||
for (const [name, expected] of Object.entries(manifest.files || {})) {
|
||||
const target = join(ROOT, name);
|
||||
if (!existsSync(target)) findings.push(`${name}:missing`);
|
||||
else if (sha(readFileSync(target)) !== expected) findings.push(`${name}:hash-mismatch`);
|
||||
else if (sha(canonicalFile(target)) !== expected) findings.push(`${name}:hash-mismatch`);
|
||||
}
|
||||
const expectedOuter = readFileSync(join(ROOT, '.harness', 'manifest.sha256'), 'utf8').trim().split(/\s+/)[0];
|
||||
if (sha(raw) !== expectedOuter) findings.push('manifest.sha256:mismatch');
|
||||
|
||||
Reference in New Issue
Block a user