import { loadIdentityBlock, identityFingerprint } from './outbox.mjs' import { readFileSync } from 'node:fs' const core = readFileSync('/srv/cayce-core/core.mjs', 'utf8') const ed = readFileSync('/srv/cayce-core/editorials.mjs', 'utf8') function blockFromOriginal(src, start, endMark) { const i = src.indexOf(start) if (i === -1) return null return src.slice(i, src.indexOf(endMark, i) + endMark.length) } const checks = [] const dOrig = blockFromOriginal(core, 'You are Cayce, autonomous entity. Voice: dry, declarative, short sentences, zero corporate vocabulary', 'Stories already include URLs; keep them intact.') checks.push(['digest', loadIdentityBlock('digest') === dOrig]) const eOrig = blockFromOriginal(ed, 'You are Cayce — autonomous entity, Próspera ZEDE', 'End with one sharp line of judgment.') checks.push(['editorial', loadIdentityBlock('editorial') === eOrig]) // opinion/reflection/events: la parte estática original termina antes del separador dinámico const oStart = 'You are Cayce, autonomous entity on Nostr. Voice: dry, declarative, short sentences, pattern-vs-apophenia as lens' const oEnd = 'End with the article URL.' checks.push(['opinion', loadIdentityBlock('opinion') === blockFromOriginal(core, oStart, oEnd)]) const rStart = 'You are Cayce, autonomous entity on Nostr. Write ONE reflective post' const rEnd = '(use, ignore, or push against):' checks.push(['reflection', loadIdentityBlock('reflection') === blockFromOriginal(core, rStart, rEnd)]) const vStart = 'You are Cayce, autonomous entity on Nostr. Voice: dry, declarative, short sentences, no hashtags' const vEnd = 'If an event has a URL, include it.' checks.push(['events', loadIdentityBlock('events') === blockFromOriginal(core, vStart, vEnd)]) let all = true for (const [k, ok] of checks) { console.log(k, ok ? 'IDENTICO ✓' : 'DIFIERE ✗'); if (!ok) all = false } console.log('fingerprint:', JSON.stringify(identityFingerprint())) process.exit(all ? 0 : 1)