{"_id":"@bwilliamson/mdcp-core","_rev":"20-211982621a4ff2ad60f7fc5641df3def","name":"@bwilliamson/mdcp-core","dist-tags":{"latest":"0.8.0"},"versions":{"0.1.0":{"name":"@bwilliamson/mdcp-core","version":"0.1.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"b0698786369827b66a49e3caab1e6b4139b96c21","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.0.tgz","fileCount":4,"integrity":"sha512-PDQcc7SE7i3wq26zq8OWdxuH4seuoWAwa1PCInrm33jyIZvxwGvW7+Ykc8ba+oR07GFIj3yRKCNJ7oIMOrv5Tg==","signatures":[{"sig":"MEUCIC91NNM0JfFu2FN/HC6BVkq3fEjiJniS43p90k4B72otAiEAzGZ4eUVDuYUuEY9TGIsGzuJ+9m7n0Bl1DFtNYoZfsyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42902},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bwilliamson","email":"saul@willcos.us"},"_resolved":"/private/var/folders/dd/rj5g6pgs0tsc1yk5x04xfd2w0000gn/T/25e53084e72e41b3f842a569669f6e09/bwilliamson-mdcp-core-0.1.0.tgz","_integrity":"sha512-PDQcc7SE7i3wq26zq8OWdxuH4seuoWAwa1PCInrm33jyIZvxwGvW7+Ykc8ba+oR07GFIj3yRKCNJ7oIMOrv5Tg==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.0_1781460084535_0.8262549194106301","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bwilliamson/mdcp-core","version":"0.1.1","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.1","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"52843177fb3ad63a8619d734a7e38db5606c5d9b","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.1.tgz","fileCount":5,"integrity":"sha512-0qXBq3FWRqZk0rCX4Bz0125ZiEwWH2/V/Bal8jJLrZlgLIqmOhiBSBBDEddb+QFNCrRHPHhanpLfM021+V4ZgA==","signatures":[{"sig":"MEUCIQD+9Jji4JY2wFhtJaUH5eg5wVhUknl+pguUcZcW1oV6pwIgW+UEO1WzmGtV9w4JdGDCkt6WMp5iOHhdzFLY6KKoJSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48882},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/849e95ed747892b10f4518fc26decb6b/bwilliamson-mdcp-core-0.1.1.tgz","_integrity":"sha512-0qXBq3FWRqZk0rCX4Bz0125ZiEwWH2/V/Bal8jJLrZlgLIqmOhiBSBBDEddb+QFNCrRHPHhanpLfM021+V4ZgA==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.1_1781461310084_0.14908044709512258","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bwilliamson/mdcp-core","version":"0.1.2","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.2","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"6506b29db7d66d6933752ad7eab65cfc45a7aeb1","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.2.tgz","fileCount":5,"integrity":"sha512-cNQODlVQ3UsThW9PSqBjDxVzjH0ijAjBbSEfSgoNFbKuaa+IiiXqfARPcPAdlbMScjW2hyedAv17GeMGdvmX1g==","signatures":[{"sig":"MEUCIQDcDdRmbuEDYWpt8qsrfxD1OtkreffLsbcfwcr9svc+WwIgVK34vV7xh4rR5RJvJeHhkaIl0K0L9ug4jiHzLyzoDC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51578},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/ffdb936c66c6160f1386b3a242891ec2/bwilliamson-mdcp-core-0.1.2.tgz","_integrity":"sha512-cNQODlVQ3UsThW9PSqBjDxVzjH0ijAjBbSEfSgoNFbKuaa+IiiXqfARPcPAdlbMScjW2hyedAv17GeMGdvmX1g==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.2_1781462849207_0.6281004260111926","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bwilliamson/mdcp-core","version":"0.1.3","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.3","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"09ece781dd41beda90ff90656d693609d7425b94","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.3.tgz","fileCount":5,"integrity":"sha512-eJo7Id/advvywtFDUQmZp989Sy67gWY/VXf0JbZN+m9YxYeoKqjUUhGFqsFzZEvDjmGrTmQ3mrhNWhi5/pMG0w==","signatures":[{"sig":"MEUCIQDRJEnsKG5lsd/hljdp2ZF5svMVxJ69C8HU1uth84s0YgIgVPTmGUp9btw4YZu+nKj2aVIM5hWyCrcPLbB5hK1AWAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51578},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/83a0184716a3090634cee78c1d408061/bwilliamson-mdcp-core-0.1.3.tgz","_integrity":"sha512-eJo7Id/advvywtFDUQmZp989Sy67gWY/VXf0JbZN+m9YxYeoKqjUUhGFqsFzZEvDjmGrTmQ3mrhNWhi5/pMG0w==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.3_1781463767306_0.6011613405802785","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bwilliamson/mdcp-core","version":"0.1.4","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.4","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"465257d36800e2469ecc869a476412dd183ede44","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.4.tgz","fileCount":5,"integrity":"sha512-1TjqX+bS9FpcZXemHoQWDb5IMkyxtrSUJCgcFJ0e1vCfoNAf6jvi4H8AbaBi+xyM3issh6iBOrtH37Nv9pPKKA==","signatures":[{"sig":"MEQCIHDWrWtEAeHJpg9xErA1tws3sDRjkcfMVujrCkvzO2aPAiAP2wjL0HtrQIqjCsE1gvDOYR+WwN3AJZlnFZjRKQQb4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55455},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/fdb8adcf89d17d892c8ea9ef0ea425bd/bwilliamson-mdcp-core-0.1.4.tgz","_integrity":"sha512-1TjqX+bS9FpcZXemHoQWDb5IMkyxtrSUJCgcFJ0e1vCfoNAf6jvi4H8AbaBi+xyM3issh6iBOrtH37Nv9pPKKA==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.4_1781466081975_0.7889655646283908","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bwilliamson/mdcp-core","version":"0.1.5","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.1.5","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"acd34588fc53acad9e35a4b63643b03c3d4c3b41","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.1.5.tgz","fileCount":5,"integrity":"sha512-PvbZyQ0/ZEujsYK7pqLKaOGF8Uuc1CPbMnERwSfjvIO+rUEoX+jXRfDLMh6WF9A77o56lmVjfpXKtzj6SJeAtw==","signatures":[{"sig":"MEYCIQCc1WaaZ/LxJ5FSW6Pq39Sdr/kzHK3KiMQHMbNoQ/ZChAIhANX6rlILRDYSI1HI2heh8cLqYYOaZ3NwmGo7te6BEGya","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55455},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.1.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/00d2530a1d80322648079ff4218902c1/bwilliamson-mdcp-core-0.1.5.tgz","_integrity":"sha512-PvbZyQ0/ZEujsYK7pqLKaOGF8Uuc1CPbMnERwSfjvIO+rUEoX+jXRfDLMh6WF9A77o56lmVjfpXKtzj6SJeAtw==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.1.5_1781467776062_0.43444154620425013","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bwilliamson/mdcp-core","version":"0.2.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.2.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"a504adc591ccb3df6631c467f10de78835b40b2b","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.2.0.tgz","fileCount":5,"integrity":"sha512-Puy0H3Kd9NpY5UXdG44iCi/VEIr+l50AoYlWSBXIYe/7sOQbscvxMsSyVev4/pkDlnLOolrhe2Kuvj2f1vxl4g==","signatures":[{"sig":"MEYCIQDpNjQnFIJ4CdqT5sJpOtP3c5JAyTD1OA0R4nXIGu0YPQIhAP1uZr68JGGaZDHrCv3FrkE3jwAGqzVU5/CymrGxS/wI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101228},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/4f9fa16b529230604a5c39a2463fe16d/bwilliamson-mdcp-core-0.2.0.tgz","_integrity":"sha512-Puy0H3Kd9NpY5UXdG44iCi/VEIr+l50AoYlWSBXIYe/7sOQbscvxMsSyVev4/pkDlnLOolrhe2Kuvj2f1vxl4g==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.2.0_1781486753587_0.27228401216475184","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bwilliamson/mdcp-core","version":"0.3.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.3.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"eda2a320b12e04bb5d72b37b047c6432a7a36c13","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.3.0.tgz","fileCount":5,"integrity":"sha512-01qxsHiwHx+0evjNbVq3OdmfxAOzEjSopgLlq+/hRPQX+WY/92l5SmAevdsQfKqMMW7KId4feVoEt/f1LqT90A==","signatures":[{"sig":"MEQCIE0a9BjLIJnmE2W0+hY4ZqNsdZf928GzX4N0RHVnzzDWAiB2UBtGqPlU6Zk1uuY7v69lFuNAfLpDFggsOaSe7dVU7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104903},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/9ff0716bd34a6bd987500c16e226c970/bwilliamson-mdcp-core-0.3.0.tgz","_integrity":"sha512-01qxsHiwHx+0evjNbVq3OdmfxAOzEjSopgLlq+/hRPQX+WY/92l5SmAevdsQfKqMMW7KId4feVoEt/f1LqT90A==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — MarkDown Context Protocol compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.3.0_1781502059064_0.027793930631606845","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bwilliamson/mdcp-core","version":"0.4.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.4.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"1cd2884679f311550d5cbdcd118cc657dd0d9194","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.4.0.tgz","fileCount":5,"integrity":"sha512-ZcIo97BJASRRAYhUEkJIOwPs3pJU7iBSAXLk9ESEbDmRUBNixK7rx/finTBvaCKHU3Kto/WQDtJXk8xOWFKhgg==","signatures":[{"sig":"MEUCIQCfWH8gAbLd3lfhJK8m+WRiJtGjpAC4v8sldPEx8rNU9QIgfpYFlCONZ9t9D6RYxT5QU3xr01/pk4V8OQ7Gs00F/3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":205976},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/ad532c05a011851d973d579238a98ba8/bwilliamson-mdcp-core-0.4.0.tgz","_integrity":"sha512-ZcIo97BJASRRAYhUEkJIOwPs3pJU7iBSAXLk9ESEbDmRUBNixK7rx/finTBvaCKHU3Kto/WQDtJXk8xOWFKhgg==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — MarkDown Context Protocol compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.4.0_1781815786427_0.2538425566504341","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-build.2":{"name":"@bwilliamson/mdcp-core","version":"0.4.0-build.2","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.4.0-build.2","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"b953da10dd33cfb24f1328153c8791d322a814ee","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.4.0-build.2.tgz","fileCount":5,"integrity":"sha512-k51t1z2DZLiWUXfSmVHCcXDRkv28xALqXji/EPfKifl7x1QUX+NGmbwqmBvCkK51hj93xOr5IoqXhzUvX5dyxg==","signatures":[{"sig":"MEQCIAl9oMpPsoHPVG5mzstss07TWYV20NS74tHumy9PTEVnAiBGUkw9EXNLN3fxEttOnXbbsRaE6igrrH7wufGN8JMBWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.4.0-build.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":210729},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.4.0-build.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/ae7986d70a0bbbd50514f185355c1bcc/bwilliamson-mdcp-core-0.4.0-build.2.tgz","_integrity":"sha512-k51t1z2DZLiWUXfSmVHCcXDRkv28xALqXji/EPfKifl7x1QUX+NGmbwqmBvCkK51hj93xOr5IoqXhzUvX5dyxg==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — MarkDown Context Protocol compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.4.0-build.2_1781816394083_0.9691991547335417","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-build.3":{"name":"@bwilliamson/mdcp-core","version":"0.4.0-build.3","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.4.0-build.3","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"9dbc7e27b9f6994639cae56bd0c19e6b9958671a","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.4.0-build.3.tgz","fileCount":5,"integrity":"sha512-LbfNLv3q8xsjhP3v0n3/gRQOH8Z3dIpRUCFET5j/09fnN1hZ5MPZNF9APUST/11bE/XbYuhdZetbeaSKLTjY5Q==","signatures":[{"sig":"MEYCIQC3zcNfExTJ22XXECb76s3LM6IhsEAYbz4GTaNp6MFsLgIhAIxUpIK4KHgoPKPgxK4RLje9Kr4EyzhzoCjHwBk+PtyC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.4.0-build.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":211809},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.4.0-build.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/08ae6f568ee12620d672233cf4f32e6f/bwilliamson-mdcp-core-0.4.0-build.3.tgz","_integrity":"sha512-LbfNLv3q8xsjhP3v0n3/gRQOH8Z3dIpRUCFET5j/09fnN1hZ5MPZNF9APUST/11bE/XbYuhdZetbeaSKLTjY5Q==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — MarkDown Context Protocol compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.4.0-build.3_1781816831586_0.8388455033019704","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@bwilliamson/mdcp-core","version":"0.4.1","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.4.1","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"194568491b55612116aa18b776510a39e5cf0589","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.4.1.tgz","fileCount":5,"integrity":"sha512-Ji66aWUyQOJ3WNIcRZNa/xmZSsiT4qGjaf+sJeBGznPiqSIejgENkF2YlQReZLWO3mWFiQ5CL1xbelcODdZMhg==","signatures":[{"sig":"MEQCIDtO0xLxgk/XN1izg4zAOmFZrVCZbQStCmyhw+mC4/M3AiAJ4T4cHShzkltAWdq6PlqUt1drVrKSyNxNLUU+4okuxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":222171},"main":"./dist/index.js","type":"module","_from":"file:bwilliamson-mdcp-core-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"_resolved":"/tmp/21568ef4bd22f21e9faca332d3452fe9/bwilliamson-mdcp-core-0.4.1.tgz","_integrity":"sha512-Ji66aWUyQOJ3WNIcRZNa/xmZSsiT4qGjaf+sJeBGznPiqSIejgENkF2YlQReZLWO3mWFiQ5CL1xbelcODdZMhg==","repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"_npmVersion":"11.17.0","description":"MDCP core library — MarkDown Context Protocol compile, refs, validation","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.4.1_1781837394729_0.9888151342005702","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bwilliamson/mdcp-core","version":"0.5.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.5.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"c9969072c60ab0a6aef703177f7d2bea2a08f0f6","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.5.0.tgz","fileCount":5,"integrity":"sha512-LKQvzS6w2kbqSgIAYRG8HilJEf3dH0cAZxFTx2Ar7j23nU2fHCamPHi3JknUp/8bMI7ZM6t3HkAp3jhPDu5DSA==","signatures":[{"sig":"MEYCIQC39ZhvjbjEmr0PmUpYICva605p7fowjmplNCEtgOke4wIhAO9a7y+t3SWEdxqHK2S4NfZzpRR74QK1UpwufJc9okDn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156051},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.5.0_1784083030867_0.814426995538112","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bwilliamson/mdcp-core","version":"0.6.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.6.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"b6af8e57877aab0717edba76133556427d0b6d5c","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.6.0.tgz","fileCount":5,"integrity":"sha512-K1cS+jR9EQATCNVyu+ziNmOtvh7yZkI80FWUDgryJ3uqMYyoJWNMC3+ocrtKAWkSO0izIO6z8dXEctlRW8yXKA==","signatures":[{"sig":"MEQCIESs4B71HNJSMGu8mJAorhatvS6mEvXd0MKuADlp+cJJAiAgraFfry1cd44jsZSv6qltcqE7riYm+YEE639OsNGTRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":159190},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.6.0_1784500222913_0.7564757511260813","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@bwilliamson/mdcp-core","version":"0.6.1","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.6.1","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"e852c465b1ab4457cb7b362f6fecaa9f97e4cf4b","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.6.1.tgz","fileCount":5,"integrity":"sha512-UGJyZ7U6sY3BxRsKPwEL8HuQk0B+P69qm6Z/hJSE8pmX5mTHLJqSFMEWVN9b/Pbr/gmC4/hbYdNooJBp+0WzdA==","signatures":[{"sig":"MEUCIQDqvrqxBsXAiN+aKzh05XQCSAXdHsxn2sZ89WV0QOJ6MgIgQR/cBUTEI8eW8czYCMR3zjytqMdMW8N39Ti6I/8W96c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":159190},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","semver":"^7.8.4","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.6.1_1784660071418_0.1507220635041051","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bwilliamson/mdcp-core","version":"0.7.0","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.7.0","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"24f1c8a322818cb150e8a0af1a07adc35fa5e8b8","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.7.0.tgz","fileCount":5,"integrity":"sha512-/EZy2pML5gt6fQ0atERARn40wxpx+oia3q2AaoElRsOXGBj5SO2DED8MyWGxlr6jrt+ntpd2x9mCk5zGzeL7rQ==","signatures":[{"sig":"MEUCIDN7rqgiltAzMlVPg9HuGNtj9RpU/HVBNo7Ql7heM5DyAiEAtXBSksZdayaPfnohcdPlrt1OWFOlZmbhGle/AjhbAtM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":168347},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage --testTimeout=20000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","ignore":"^7.0.6","semver":"^7.8.4","fast-glob":"^3.3.3","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^26.1.1","@types/semver":"^7.7.1","@vitest/coverage-v8":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.7.0_1785276920266_0.8906212196149428","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@bwilliamson/mdcp-core","version":"0.7.1","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.7.1","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"2a00d732d1ce6748805ac161da783eab7afe3487","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.7.1.tgz","fileCount":5,"integrity":"sha512-0Yd2sbcYpzFKCaJiGtf9svk7Xt94Z9OCU+3GheIVOI8IMi/DwkRHbq/c4AYVogZM5QHzMFMb2xdNh50Y3lqHNg==","signatures":[{"sig":"MEUCIQDcjfz87TfPb5KFDop01bk/6kwUal3mVGNplK30+HtQSwIgRazj5j1RYVce//qJHBccfVafruGOQjIhzrKEVwtkmW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":171334},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage --testTimeout=20000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","ignore":"^7.0.6","semver":"^7.8.4","fast-glob":"^3.3.3","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^26.1.1","@types/semver":"^7.7.1","@vitest/coverage-v8":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.7.1_1785422002779_0.29647091557943384","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@bwilliamson/mdcp-core","version":"0.7.2","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.7.2","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"ae3ae4ce19b57437c4756898028ba90855ab4d61","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.7.2.tgz","fileCount":5,"integrity":"sha512-7ne8ToFeYbd9V2pLKg9Z4VM4kKoEeHwiRFnYDhMy6YGE1e5myaLV3o2d/WnEC0B5c9wEBENkzJLd3rER4QvOmg==","signatures":[{"sig":"MEUCIEVkvFB0eA9LMC9mntni7Uh4x6cDqVsVy3YkWRSHpP/aAiEAn0/pyVHH0c6BjaqJwnQf8yg1JuBALB1nX2ncOZ7OaCI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":174864},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage --testTimeout=20000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","ignore":"^7.0.6","semver":"^7.8.4","fast-glob":"^3.3.3","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^26.1.1","@types/semver":"^7.7.1","@vitest/coverage-v8":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.7.2_1785457411667_0.11321846779394873","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@bwilliamson/mdcp-core","version":"0.7.3","keywords":["markdown","documentation","compile","refs","validation"],"license":"MIT","_id":"@bwilliamson/mdcp-core@0.7.3","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"dist":{"shasum":"070b539539bbdee257e747c7c22e942157d4a4e0","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.7.3.tgz","fileCount":5,"integrity":"sha512-XENghzQboLCA9txLskS5buoQ6qun81foVGTl7Cr0+L1RgnOqsdNdGbRF39UXEwu1DVUtVqqHX6XYdpCJvUkS+Q==","signatures":[{"sig":"MEQCIFur2udVduUhvNcmYXjU9Gf7ZWXXA5bxV4eBBpgBJ3SrAiBUwkxr/sfvoTnb5jxclIOLJrQcK11F8LRdoCaSrxiLWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":174889},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage --testTimeout=20000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"repository":{"url":"git+https://github.com/betsalel-williamson/mdcp.git","type":"git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","directories":{},"sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","ignore":"^7.0.6","semver":"^7.8.4","fast-glob":"^3.3.3","github-slugger":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^26.1.1","@types/semver":"^7.7.1","@vitest/coverage-v8":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/mdcp-core_0.7.3_1785534794114_0.5481189781470104","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@bwilliamson/mdcp-core","version":"0.8.0","description":"MDCP core — documentation system compile, refs, and validation library","license":"MIT","type":"module","sideEffects":["./src/compile/hooks/builtin.ts","./dist/index.js"],"main":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/betsalel-williamson/mdcp.git","directory":"packages/mdcp-core"},"bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","keywords":["markdown","documentation","compile","refs","validation"],"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"fast-glob":"^3.3.3","github-slugger":"^2.0.0","ignore":"^7.0.8","semver":"^7.8.4","zod":"^4.5.4"},"devDependencies":{"@types/node":"^26.4.1","@types/semver":"^7.8.0","tsup":"^8.4.0","typescript":"^6.0.3","@vitest/coverage-v8":"^4.1.11","vitest":"^4.1.11"},"scripts":{"build":"tsup src/index.ts --format esm --dts --clean","test":"vitest run","test:coverage":"vitest run --coverage --testTimeout=20000","typecheck":"tsc --noEmit"},"_nodeVersion":"24.20.0","_id":"@bwilliamson/mdcp-core@0.8.0","dist":{"integrity":"sha512-nYiH2C7vkjdVC4FvSBxgQCJFN7sDP1hR5GCStkL8yBunyfvOF8A3ssrJPFcI6UjBvro2sptm1UgrjflGH/lb2w==","shasum":"582872e9883ea8d18520c1b776bff3bdec5a3641","tarball":"https://registry.npmjs.org/@bwilliamson/mdcp-core/-/mdcp-core-0.8.0.tgz","fileCount":5,"unpackedSize":181316,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bwilliamson%2fmdcp-core@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICcqb+1fPy8x69oWtwIIg8Rn5UabjHPLEZMc6Ifg6SwLAiBu6KkxIXq+R9JoMMsshwYrnn3Mg7VAduS31FWWfPUQ4Q=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d5c2d7d1-b5db-4d81-afa7-15c5b81ce5b6"}},"directories":{},"maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mdcp-core_0.8.0_1789065498443_0.4672593746416498"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-14T18:01:24.313Z","modified":"2026-09-10T18:38:18.928Z","0.1.0":"2026-06-14T18:01:24.677Z","0.1.1":"2026-06-14T18:21:50.214Z","0.1.2":"2026-06-14T18:47:29.334Z","0.1.3":"2026-06-14T19:02:47.452Z","0.1.4":"2026-06-14T19:41:22.100Z","0.1.5":"2026-06-14T20:09:36.195Z","0.2.0":"2026-06-15T01:25:53.740Z","0.3.0":"2026-06-15T05:40:59.218Z","0.4.0":"2026-06-18T20:49:46.584Z","0.4.0-build.2":"2026-06-18T20:59:54.223Z","0.4.0-build.3":"2026-06-18T21:07:11.722Z","0.4.1":"2026-06-19T02:49:54.864Z","0.5.0":"2026-07-15T02:37:10.998Z","0.6.0":"2026-07-19T22:30:23.044Z","0.6.1":"2026-07-21T18:54:31.566Z","0.7.0":"2026-07-28T22:15:20.440Z","0.7.1":"2026-07-30T14:33:22.946Z","0.7.2":"2026-07-31T00:23:31.832Z","0.7.3":"2026-07-31T21:53:14.274Z","0.8.0":"2026-09-10T18:38:18.595Z"},"bugs":{"url":"https://github.com/betsalel-williamson/mdcp/issues"},"license":"MIT","homepage":"https://github.com/betsalel-williamson/mdcp/tree/main/packages/mdcp-core#readme","keywords":["markdown","documentation","compile","refs","validation"],"repository":{"type":"git","url":"git+https://github.com/betsalel-williamson/mdcp.git","directory":"packages/mdcp-core"},"description":"MDCP core — documentation system compile, refs, and validation library","maintainers":[{"name":"bwilliamson","email":"saul@willcos.us"}],"readme":"<!-- AUTO-GENERATED by mdcp — edit shards, then run: mdcp compile -->\n\n# @bwilliamson/mdcp-core\n\n<!-- mdcp-shard: start ../../docs/client-core/about.md -->\n\n## About @bwilliamson/mdcp-core\n\nThe **programmatic core library** for the [MarkDown Context Protocol (MDCP)](https://github.com/betsalel-williamson/mdcp).\n\nUse this package when you need compile, validation, and refs APIs in scripts, CI, editors, or other tools **without** shelling out to the CLI.\n\n### Not the CLI or the Agent Skill\n\n- **This library** — TypeScript/Node API via `@bwilliamson/mdcp-core` on npm\n- **CLI** — command-line wrapper around this library: [`@bwilliamson/mdcp-cli`](https://www.npmjs.com/package/@bwilliamson/mdcp-cli)\n- **Agent Skill** — host instructions for docs-as-code agents: [root README](../../README.md) / `npx skills add … --skill mdcp`\n\n`@bwilliamson/mdcp-cli` depends on this package. Install `@bwilliamson/mdcp-core` directly only when you need the programmatic API. Agent Skill install does **not** replace this library.\n\n<!-- mdcp-shard: end ../../docs/client-core/about.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/overview.md -->\n\n## Overview\n\n[![npm version](https://img.shields.io/npm/v/@bwilliamson/mdcp-core.svg)](https://www.npmjs.com/package/@bwilliamson/mdcp-core)\n\nCore library for **mdcp** — compile sharded Markdown guides, build section link registries, and validate structure.\n\nUse this package when you need mdcp behavior in scripts, CI pipelines, editors, or other tools without shelling out to the CLI. For the Agent Skill (host instructions), see [root README](../../README.md) — that is a separate install.\n\n### Requirements\n\n- Node.js **>= 18.0.0**\n\n### Install\n\n```bash\nnpm install @bwilliamson/mdcp-core\n```\n\nThe CLI (`@bwilliamson/mdcp-cli`) depends on this package. Install `@bwilliamson/mdcp-core` directly only when you need the programmatic API.\n\n### Stability\n\n**Pre-1.0:** Until this package reaches **1.0.0**, there is **no API stability guarantee**. Exported functions, types, `mdcp.config.json` schema, and compile output may change in any `0.x.y` release. Read the package changelog before upgrading.\n\n<!-- mdcp-shard: end ../../docs/client-core/overview.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/quick-example.md -->\n\n## Quick example\n\n```typescript\nimport {\n  loadConfig,\n  compileGuides,\n  resolveDocsRoot,\n  genRefsFromCompiled,\n  resolveRefsPath,\n  checkRefsRegistry,\n} from '@bwilliamson/mdcp-core';\n\nconst docsRoot = '/path/to/docs';\nconst config = loadConfig('mdcp.config.json', docsRoot);\n\nconst compiled = compileGuides({\n  guidesRoot: resolveDocsRoot(config, docsRoot),\n  compileOrder: config.compileOrder,\n  banner: config.banner,\n  guides: config.guides,\n  docsRoot,\n  config,\n});\n\nconst refsPath = resolveRefsPath(docsRoot, config.outputDir, config.refs.registryFile);\ngenRefsFromCompiled(compiled, refsPath);\ncheckRefsRegistry(compiled, refsPath);\n```\n\nUse `writeCompiledGuides` when you need to write the monolith and per-guide publish outputs to disk.\n\n<!-- mdcp-shard: end ../../docs/client-core/quick-example.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/api-config.md -->\n\n## API — Config\n\n| Export                                                                                 | Purpose                                                                     |\n| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |\n| `loadConfig(path, configBase)`                                                         | Load and validate `mdcp.config.json` (`path` is resolved from `configBase`) |\n| `resolveOutputPath`, `resolveRefsPath`, `resolveGuideDir`, `defaultGuideOutputFile`    | Path resolvers for docs root and `outputDir`                                |\n| `getGuideConfig`, `guideScanDirs`, `shardLintPaths`                                    | In-scope guide fileset and shard lint helpers                               |\n| `MdcpConfigSchema`, `MdcpConfig`, `MdcpConfigInput`, `GuideConfig`, `GuideConfigInput` | Zod schema and types                                                        |\n| `DEFAULT_COMPILE_HOOKS`, `resolveCompileHooks`                                         | Default built-in hook pipeline and guide-level resolution                   |\n\n### Path resolution: `configBase` vs docs root\n\n| Concern                    | Base                          | Example                                                                       |\n| -------------------------- | ----------------------------- | ----------------------------------------------------------------------------- |\n| Finding `mdcp.config.json` | `configBase` (invocation dir) | `--config docs/mdcp.config.json` → `<repo>/docs/mdcp.config.json`             |\n| Guide shards (default)     | Docs root (`--docs-root`)     | `resolveGuideDir('features', config, docsRoot)` → `<docsRoot>/features`       |\n| `outputDir`                | Docs root                     | `_build` → `<docsRoot>/_build`                                                |\n| All generated paths        | `outputDir`                   | `features.md` → `<docsRoot>/_build/features.md`; `.caches/refs.json` for refs |\n\nAll generated paths use `resolveUnderOutputDir(docsRoot, outputDir, file)` — relative to `outputDir` unless `file` is absolute. Details: [API — Refs](#api--refs-and-validation).\n\n```typescript\nimport { loadConfig, resolveGuideDir } from '@bwilliamson/mdcp-core';\n\nconst config = loadConfig('docs/mdcp.config.json', process.cwd());\nconst featuresDir = resolveGuideDir('features', config, join(process.cwd(), 'docs'));\n```\n\nPass `process.cwd()` as `configBase` for `loadConfig`. Pass the docs root as `docsRoot` to `resolveGuideDir`, `resolveOutputPath`, and `resolveRefsPath`.\n\nConsumer path table: [Config essentials — path layout](../mdcp-cli/README.md#path-layout).\n\n**Defaults:** `outputDir` `_build`; per-guide outputs `{name}.md` (or `guide.md` when one guide); optional monolith when `outputFile` is set; refs at `.caches/refs.json`; `sourceTags` `true`; `banner` `<!-- AUTO-GENERATED by mdcp — edit shards, then run: mdcp compile -->\\n\\n`.\n\n`compile.outputFile` overrides a guide's output path (relative to `outputDir` or absolute). Guides with an explicit `compile.outputFile` are excluded from an optional monolith.\n\n`compile.includeBanner` controls whether the global banner is prepended (defaults to `true` for all outputs). `compile.sourceTags` overrides the top-level `sourceTags` setting per guide (for example, set `false` on a Slidev deck whose leading frontmatter must stay at the top of the file).\n\n#### Publish outputs and link paths\n\nGuides with `compile.outputFile` publish outside the shard tree (npm READMEs, `DEVELOPERS.md`, and similar). Shard-authored `../` links are rebased automatically:\n\n- Resolve each link from the **shard file** to an absolute path\n- Emit a path **relative to the publish output file**\n\nNo per-guide path-prefix config — output location and shard path supply the geometry. See [Publish-relative link rewriting](#publish-relative-link-rewriting) for intent, pass ordering, and dogfood examples.\n\nIntra-guide `./section.md` links still rewrite to `#anchor` on every compile (post-stitch pass).\n\n### `compile.hooks`\n\nBuilt-in hooks run by default when `compile.hooks` is omitted. See [Default compile hooks](../../docs/features/default-compile-hooks.md).\n\n- **Omitted** — run `DEFAULT_COMPILE_HOOKS` in order: `stripAnchors`, `codeEvidence`, `inlineInserts`\n- **`string[]`** — explicit override; replaces defaults entirely (backward compatible)\n- **`Record<string, boolean>`** — opt out; keys with `false` remove that hook from defaults\n\nOptional per-hook settings: `compile.hooksConfig` (`inlineInserts.searchRoots`). Post-stitch anchor stripping: `compile.stripAnchors` (default `true`), independent of the per-shard `stripAnchors` hook unless opted out.\n\n### `compile.crossGuideLinks`\n\nAssembly-time cross-guide link options on the **compiling** guide (not a compile hook):\n\n- **`ignoreGuides`** — `string[]` of guide names whose cross-guide shard links keep source `.md` paths instead of rewriting to monolith `#slug` targets\n\nSee [Cross-guide link rewriting](#cross-guide-link-rewriting) and [ignoreGuides](#ignoreguides).\n\n<!-- mdcp-shard: end ../../docs/client-core/api-config.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/api-compile.md -->\n\n## API — Compile\n\n| Export                                            | Purpose                                              |\n| ------------------------------------------------- | ---------------------------------------------------- |\n| `compileGuides`, `compileGuideResults`            | Stitch shards into monolith text                     |\n| `writeCompiledGuides`                             | Write monolith and publish outputs to disk           |\n| `writeOutputFile`, `resolveBackupPath`            | Opt-in backup before overwrite; backup path resolver |\n| `resolveBackupOptions`                            | Merge config and CLI backup settings                 |\n| `WriteOutputBackupOptions`                        | Backup options type                                  |\n| `sectionFiles`, `processSection`, `assembleGuide` | Lower-level assemble pipeline                        |\n| `formatCompileTitle`, `extractFirstHeading`, …    | Optional `compile.title` injection and deduplication |\n| `demoteHeadings`, `stripAboutThisGuideHeading`, … | Heading transforms                                   |\n| `registerCompileHook`, `applyCompileHooks`        | Extension hooks (`stripAnchors`, `inlineInserts`, …) |\n\n`compileGuides` returns monolith text only — guides with `compile.outputFile` are excluded. `writeCompiledGuides` writes both the monolith and any publish targets.\n\n`writeOutputFile` writes compile targets. Default: overwrite. When `backup.enabled` is true, moves an existing file to `{outputDir}/{backupDir}/{docsRoot-relative-key}{ext}` before writing. Pass `backup` on `CompileOptions` or resolve via `resolveBackupOptions(config, cliOverrides)`.\n\nWhen `compile.title` is set, `assembleGuide` injects a `##` heading followed by a blank line before the first section. See [API — Config](#api--config) for per-guide compile fields and top-level `backup` config.\n\nFull spec: [Compile output backup](../../docs/features/compile-output-backup.md).\n\n<!-- mdcp-shard: end ../../docs/client-core/api-compile.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/api-refs-validation.md -->\n\n## API — Refs and validation\n\n### Refs (cross-links)\n\n| Export                                                         | Purpose                                 |\n| -------------------------------------------------------------- | --------------------------------------- |\n| `headingTextToPlain`, `githubSlugify`, `buildSlugRegistry`     | GitHub heading slugs via github-slugger |\n| `genRefsFromCompiled`, `readRefsRegistry`, `checkRefsRegistry` | `refs.json` lifecycle                   |\n| `resolveRefsPath`, `writeRefsRegistry`                         | Path and I/O helpers                    |\n\n#### `resolveRefsPath(docsRoot, outputDir, registryFile)`\n\nResolves the on-disk path for the refs registry. Implemented via the same `outputDir`-relative helper as `resolveOutputPath`. Pass the docs root (the CLI `--docs-root` value).\n\n- `outputDir` is relative to `docsRoot`.\n- `registryFile` is relative to `outputDir` (default `.caches/refs.json`).\n\n```typescript\nresolveRefsPath('/docs', '_build', '.caches/refs.json');\n// → /docs/_build/.caches/refs.json\n\nresolveRefsPath('/docs', '.', 'refs.json');\n// → /docs/refs.json\n```\n\nPrefer outputDir-relative values in config (for example `\".caches/refs.json\"` when `outputDir` is `\"_build\"`). See [Config essentials — path layout](../mdcp-cli/README.md#path-layout).\n\n#### Heading slugs (github-slugger)\n\n`githubSlugify`, `headingTextToPlain`, and `buildSlugRegistry` derive `#fragment` targets from compiled headings using [`github-slugger`](https://www.npmjs.com/package/github-slugger), which matches GitHub's [html-pipeline `TableOfContentsFilter`](https://github.com/gjtorikian/html-pipeline/blob/main/lib/html/pipeline/toc_filter.rb). GFM does not define auto-generated heading IDs; treat github-slugger parity as the contract.\n\n| Export               | Purpose                                              |\n| -------------------- | ---------------------------------------------------- |\n| `headingTextToPlain` | Strip ids and inline markup before slugging          |\n| `githubSlugify`      | Single-heading slug via github-slugger               |\n| `buildSlugRegistry`  | Document-wide slugs; duplicates get numeric suffixes |\n\n```typescript\nimport { githubSlugify, headingTextToPlain } from '@bwilliamson/mdcp-core';\n\nheadingTextToPlain('**Authored GFM** ``');\n// → 'Authored GFM'\n\ngithubSlugify('Preprocessor / templating (out of scope)');\n// → 'preprocessor--templating-out-of-scope'\n\ngithubSlugify('`--config` vs `--docs-root`');\n// → '--config-vs---docs-root'\n```\n\nCLI authoring rules: [Cross-links and refs — heading slugs](../mdcp-cli/README.md#heading-slugs-github-rules).\n\n### Manifest\n\n| Export                          | Purpose                                        |\n| ------------------------------- | ---------------------------------------------- |\n| `sectionFiles`, `assembleGuide` | Resolve compile order from manifest link order |\n\n### Validation\n\n| Export                  | Purpose                                |\n| ----------------------- | -------------------------------------- |\n| `checkOrphansForGuides` | Detect unlinked or missing shard files |\n| `lintLinks`             | Internal markdown link validation      |\n\n<!-- mdcp-shard: end ../../docs/client-core/api-refs-validation.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/api-export-shard.md -->\n\n## API — Export, shard, and peers\n\n### Export\n\nThere is no token-strip LLM export API. Prefer the Agent Skill and one-shard reads.\n\n### Shard (split)\n\n| Export                           | Purpose                                 |\n| -------------------------------- | --------------------------------------- |\n| `shardFromMonolith`, `runMdTree` | Split a monolith into guide directories |\n\n### Peer tools\n\n| Export                      | Purpose                                                           |\n| --------------------------- | ----------------------------------------------------------------- |\n| `findPeerBinary`, `runPeer` | Locate and run host-repo linters (`markdownlint-cli2`, `vale`, …) |\n\nPeer linters are not bundled. Detection order: `node_modules/.bin` → PATH → skip with info.\n\n<!-- mdcp-shard: end ../../docs/client-core/api-export-shard.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/compile-hooks/index.md -->\n\n## Compile hooks\n\nPer-shard transforms run during `assembleGuide` **before** sections are stitched. Hooks receive each shard body after heading demotion and preamble stripping; assembly-time passes (cross-guide rewrite, publish-relative rewrite on `compile.outputFile` outputs, anchor stripping, intra-guide rewrite) run around the hook pipeline.\n\nHooks assemble [authored GFM](../../docs/glossary/authored-gfm.md) — not variable substitution or template logic. See [Preprocessor / templating (out of scope)](../../docs/features/design-constraints/preprocessor-templating.md#preprocessor--templating-out-of-scope).\n\n### Architecture\n\n```text\nassembleGuide (per guide)\n  │\n  ├─ for each manifest shard (in order)\n  │    ├─ processSection (demote headings, strip about-this-guide)\n  │    ├─ applyCompileHooks (named hooks from config, in order)\n  │    ├─ rewriteCrossGuideFileLinks (automatic when link index present)\n  │    └─ rewritePublishRelativeLinks (when compile.outputFile is set)\n  │\n  └─ stitch → stripAnchors (default) → intra-guide .md\n```\n\n**Guide link index** — built once per `compileGuideResults` from every guide in `compileOrder` (manifest sections plus transitively linked shards). Used by the automatic cross-guide pass. Optional `compile.crossGuideLinks.ignoreGuides` on the compiling guide skips monolith rewrite for listed targets. See [Cross-guide link rewriting](#cross-guide-link-rewriting).\n\n**Per-guide hook state** — mutable `hookState` on `CompileHookContext` (for example `inlineInserts` counters and first-anchor map) shared across shard invocations within one guide compile.\n\n**Path resolution** — hooks and assembly passes resolve relative paths from `dirname(sourceFile)` first, then `guideDir`, then `compile.scopeRoot`. Publish outputs rebase remaining `../` file links per shard via absolute-path resolution — see [Publish-relative link rewriting](#publish-relative-link-rewriting). Cross-guide and `codeEvidence` use the same resolve-then-rebase model for their link classes.\n\n### Extension pattern\n\nRegister custom hooks in consumer or library code:\n\n```typescript\nimport { registerCompileHook } from '@bwilliamson/mdcp-core';\n\nregisterCompileHook('myHook', (ctx) => {\n  return ctx.body.replace(/TODO/g, 'DONE');\n});\n```\n\nCustom hooks are **not** in the default pipeline — list them explicitly in `compile.hooks` when needed.\n\nHook implementations should be **pure on `ctx.body`** except when intentionally using shared `hookState`. Leave unmatched links unchanged. Prefer docs-first specs with tests mapped to spec sections (see each hook shard below).\n\n### Configuration\n\nBuilt-in hooks run **by default**. Omit `compile.hooks` for the common case. Optional per-hook config lives under `guides[].compile.hooksConfig`.\n\n```json\n{\n  \"name\": \"glossary\",\n  \"compile\": {\n    \"scopeRoot\": \".\",\n    \"outputFile\": \"glossary.md\",\n    \"hooksConfig\": {\n      \"inlineInserts\": { \"searchRoots\": [\"diagrams\"] }\n    }\n  }\n}\n```\n\nOptional assembly-time cross-guide exceptions: `compile.crossGuideLinks.ignoreGuides` on the compiling guide — see [Cross-guide link rewriting](#cross-guide-link-rewriting).\n\n#### Opt out per hook\n\nDisable specific defaults with an object on `compile.hooks` (`false` removes a hook):\n\n```json\n{\n  \"compile\": {\n    \"hooks\": { \"inlineInserts\": false }\n  }\n}\n```\n\n#### Explicit override\n\nReplace the entire default pipeline with a string array (backward compatible):\n\n```json\n{\n  \"compile\": {\n    \"hooks\": [\"stripAnchors\", \"codeEvidence\"]\n  }\n}\n```\n\nDefault hook order and behavior: [Default compile hooks](../../docs/features/default-compile-hooks.md). Config API: [API — Config](#api--config).\n\nFor manifest compile order and `compile.sectionsHeading`, see [Manifest compile order](../../docs/features/manifest-compile-order.md).\n\n### Built-in hooks\n\n- **`stripAnchors`** — per shard (also default post-stitch). Removes explicit anchor markers.\n- **`codeEvidence`** — per shard. [codeEvidence](#codeevidence): repo source links → `#L` fragments.\n- **`inlineInserts`** — per shard. [inlineInserts](#inlineinserts): inline captioned insert libraries.\n- **Cross-guide rewrite** _(assembly)_ — per shard before stitch. [Cross-guide links](#cross-guide-link-rewriting): automatic from `compileOrder`; optional `crossGuideLinks.ignoreGuides`.\n- **Publish-relative rewrite** _(assembly)_ — per shard before stitch when `compile.outputFile` is set. [Publish-relative links](#publish-relative-link-rewriting): resolve shard links to absolute paths, emit paths relative to the publish file.\n\n`stripAnchors` is also controlled by `compile.stripAnchors` (default `true`) after assembly.\n\n<!-- mdcp-shard: end ../../docs/client-core/compile-hooks/index.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/compile-hooks/code-evidence.md -->\n\n## codeEvidence\n\nSpecification for the `codeEvidence` compile hook. Tests in `packages/mdcp-core/test/code-evidence.test.ts` map to the sections below (docs first, then TDD).\n\n### codeEvidence purpose\n\nArchitecture and technical review shards cite **repo source files** as evidence. At compile time, the hook:\n\n1. Resolves **line ranges** from link text (for example `L6-L8`, `lines 12–15`, `:42`)\n2. Resolves **symbols** from the URL fragment (`file.ts#symbol`) or from the link label when no fragment is present (for example ``[`orgCount`](../../functions/src/foo.ts)``)\n3. Appends GitHub-style **`#L` fragments** (`#L6`, `#L6-L8`) to the link target\n4. Rewrites the target path to be **relative to the rendered output** — the per-guide `compile.outputFile` when set, otherwise the monolith path (`outputDir` + `outputFile` from config)\n\nPublish outputs (`compile.outputFile`) rewrite remaining relative file links automatically (for example `../../package.json` → `package.json` in `DEVELOPERS.md`). Same resolve-then-rebase model as publish-relative assembly; see [Publish-relative link rewriting](#publish-relative-link-rewriting).\n\n### codeEvidence link matching\n\nA link is rewritten when **all** of the following hold:\n\n- Standard markdown link syntax: `[label](path)`\n- Target path is a **source file** (common extensions such as `.ts`, `.py`, `.go`, or extensionless paths like `Makefile`)\n- Target is not `http://`, `https://`, or `#…`\n\nMarkdown (`.md`) links, external URLs, and same-guide shard links are left unchanged.\n\n### codeEvidence line ranges\n\nLine ranges are parsed from the **link label** first, then from the path (before any `#` fragment). Supported forms:\n\n| Form in label or path | Fragment           |\n| --------------------- | ------------------ |\n| `L6-L8`, `L6–L8`      | `#L6-L8`           |\n| `L42`, `line 42`      | `#L42`             |\n| `:10-20`, `:10`       | `#L10-L20`, `#L10` |\n\nIf the URL already has a normalized `#L…` fragment, the hook preserves it (normalizing case to `#L`).\n\n### codeEvidence symbols\n\nWhen no line range is found:\n\n1. If the URL has a `#fragment` that is not already `#L…`, treat the fragment as a **symbol name** and scan the resolved source file for a matching declaration or reference.\n2. Otherwise, treat the **link label** as the symbol (backticks and surrounding whitespace stripped).\n\nSymbol lookup scans for identifier matches and common declaration forms (`function`, `class`, `const`, `export`, call sites).\n\n### codeEvidence path resolution\n\nSource file lookup order:\n\n1. Relative to the current shard directory\n2. Relative to the shard parent directory\n3. `process.cwd()` and its parent\n4. `compile.scopeRoot` (when set on the guide — same field used for manifest scoping)\n\nWhen a source file is resolved, the hook rewrites the link target to a POSIX path **relative to the rendered output document**, preserving any `#L…` fragment added by the hook. No hook-specific config is required: shard-relative paths in source are resolved as written, then rebased for where the compiled file lands.\n\n### codeEvidence exclusions\n\nThe hook **does not** transform:\n\n- Markdown shard links (`.md`)\n- External URLs\n- Source links when the file cannot be resolved and no line range appears in label or path\n- Body text when `codeEvidence` is disabled via `compile.hooks: { \"codeEvidence\": false }` or an explicit hook override that omits it\n\n### codeEvidence config\n\nRuns by default — no hook list required. Path rewriting uses the monolith or per-guide output path automatically:\n\n```json\n{\n  \"name\": \"architecture-review\",\n  \"compile\": {}\n}\n```\n\nWhen the guide publishes to its own file instead of the monolith, set `compile.outputFile` (paths are rebased to that file). When shards link across directories outside the guide tree, set `compile.scopeRoot` (typically `\".\"` for repo root) so manifest scoping and evidence lookup share one root:\n\n```json\n{\n  \"name\": \"architecture-review\",\n  \"compile\": {\n    \"scopeRoot\": \".\",\n    \"outputFile\": \"architecture-review.md\"\n  }\n}\n```\n\nOpt out: `\"hooks\": { \"codeEvidence\": false }`. See [Default compile hooks](../../docs/features/default-compile-hooks.md).\n\n### codeEvidence compile example\n\nShard input (under `review/claim.md`):\n\n```markdown\nEvidence: [`orgCount`](../../functions/src/foo.ts)\n\nSee [firestore.rules L6-L8](../../firestore.rules#L6-L8).\n```\n\nCompiled output (when `functions/src/foo.ts` defines `orgCount` on line 6 and output is `architecture-review.md` at repo root):\n\n```markdown\nEvidence: [`orgCount`](functions/src/foo.ts#L6)\n\nSee [firestore.rules L6-L8](firestore.rules#L6-L8).\n```\n\n<!-- mdcp-shard: end ../../docs/client-core/compile-hooks/code-evidence.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/compile-hooks/inline-inserts.md -->\n\n## inlineInserts\n\nSpecification for the `inlineInserts` compile hook. Tests in `packages/mdcp-core/test/inline-inserts.test.ts` map to the sections below (docs first, then TDD).\n\n### inlineInserts purpose\n\nGuides link to **captioned insert shards** (`.md` files) in typed libraries under the docs root. Shard bodies may be markdown tables, prose, or **media embeds** (images, video, audio). At compile time, the hook:\n\n1. Inlines insert markdown at the **first** link (per guide, per file)\n2. Adds a numbered **`####` heading** (GFM only — no HTML, no directives)\n3. Rewrites **later** links to the same file as markdown back-links (`[label](#slug)`)\n\n### inlineInserts layout\n\nOne library directory per insert type (library-science convention):\n\n```text\ndocs/\n  diagrams/              # flow charts, sequence diagrams (markdown tables or images)\n  tables/                # reference tables, comparison matrices\n  figures/               # screenshots, static diagrams\n  media/                 # video, audio, and other captioned media embeds\n  inserts/               # optional generic captioned blocks\n  review/\n    insert-catalog.md    # links to ../diagrams/…, ../tables/…, ../figures/…, ../media/…\n```\n\nLink targets are always `.md` insert shards. Put binary assets alongside the shard (or under the same library) and reference them from the shard body — for example `![Overview](./component-map.png)` or an HTML `<video>` / `<audio>` block when your renderer supports it.\n\nShards link with normal markdown — no `<!-- directives -->`.\n\n### inlineInserts link matching\n\nA link is an insert reference when **all** of the following hold:\n\n- Standard markdown link syntax: `[label](path)`\n- Target path contains `diagram`, `diagrams`, `table`, `tables`, `figure`, `figures`, `media`, `insert`, or `inserts`\n- Target ends in `.md` (optional `#fragment` suffix is ignored for file lookup)\n- Target is not `http://` or `https://`\n\n### inlineInserts exclusions\n\nThe hook **does not** transform:\n\n- Regular shard links (for example `./intro.md`, `../glossary/term.md`)\n- Direct links to binary assets (for example `../figures/architecture.png`, `../figures/demo.mp4`) — use a captioned `.md` insert shard that embeds the media instead\n- External URLs, even when the path contains `diagrams/`\n- Links to missing insert files (left unchanged)\n- Body text when `inlineInserts` is disabled via `compile.hooks: { \"inlineInserts\": false }` or an explicit hook override that omits it\n\n### inlineInserts first inline\n\nThe first reference to an insert file (document order across all shards in the guide) is replaced with:\n\n```markdown\n#### {Kind} {n}. {caption}\n\n{insert shard body — tables, prose, images, video, audio, …}\n```\n\n- **Kind** — `Diagram`, `Table`, `Figure`, `Media`, or `Insert` (from parent library directory)\n- **n** — serial number for that kind in this guide (see **Numbered captions** below)\n- **caption** — link label, or a humanized basename when the label is empty\n- **Anchor slug** — GitHub-style slug of the full heading (for example `Table 1. Status codes` → `#table-1-status-codes`)\n\nOutput uses GFM headings and back-links for captions. Inlined shard bodies pass through as written (markdown tables, `![images](…)`, or HTML `<video>` / `<audio>` when your renderer supports them).\n\n### inlineInserts numbered captions\n\nSerial counters are **per insert kind** and **per guide compile**:\n\n| Kind    | First inline heading example   | Second inline (same kind) |\n| ------- | ------------------------------ | ------------------------- |\n| diagram | `#### Diagram 1. Request flow` | `#### Diagram 2. …`       |\n| table   | `#### Table 1. Status codes`   | `#### Table 2. …`         |\n| figure  | `#### Figure 1. Component map` | `#### Figure 2. …`        |\n| media   | `#### Media 1. Walkthrough`    | `#### Media 2. …`         |\n\nRules:\n\n- Diagram and table counters are independent (`Diagram 1` then `Table 1` then `Diagram 2` is valid)\n- Counters continue across shards via shared per-guide hook state\n- Each guide starts at 1 for each kind (two guides sharing one insert file each get their own `Diagram 1`)\n- Repeat links to an **already inlined file** do not consume a new number (back-link only)\n\n### inlineInserts deduplication\n\nWithin one guide:\n\n- First link to `../diagrams/flow.md` → inline under numbered heading\n- Later links to the same resolved file (any path spelling, with or without `#fragment`) → `` `[label](#diagram-1-…)` ``\n- Same basename in different libraries (`diagrams/overview.md` vs `tables/overview.md`) → separate headings and anchors\n\n### inlineInserts path resolution\n\nLookup order for insert shard paths:\n\n1. Relative to the current shard directory\n2. Relative to the shard parent directory\n3. `process.cwd()` and its parent\n4. Optional `hooksConfig.inlineInserts.searchRoots`\n\n### inlineInserts config\n\nRuns by default. Optional search roots:\n\n```json\n{\n  \"name\": \"architecture-review\",\n  \"compile\": {\n    \"hooksConfig\": {\n      \"inlineInserts\": { \"searchRoots\": [\"diagrams\"] }\n    }\n  }\n}\n```\n\nOpt out: `\"hooks\": { \"inlineInserts\": false }`. See [Default compile hooks](../../docs/features/default-compile-hooks.md).\n\n### inlineInserts compile example\n\nShard input:\n\n```markdown\n| Insert                                      | Summary     |\n| ------------------------------------------- | ----------- |\n| [Request flow](../diagrams/request-flow.md) | Client path |\n\nSee [Request flow](../diagrams/request-flow.md) again in prose.\n```\n\nCompiled fragment (first guide mention):\n\n```markdown\n| Insert | Summary |\n| ------ | ------- |\n\n|\n\n#### Diagram 1. Request flow\n\n| Step | Actor  |\n| ---- | ------ |\n| 1    | Client |\n\n| Client path |\n\nSee [Request flow](#diagram-1-request-flow) again in prose.\n```\n\nExample fixture: [`examples/sample-guides/inserts-demo/`](../../examples/sample-guides/inserts-demo). See [GitHub media reference](../../examples/sample-guides/inserts-demo/github-media-help.md) for a format matrix (PNG, JPEG, GIF, SVG, MP4, MP3/WAV, Mermaid, tables, lists) and minimal generated sample assets under `figures/` and `media/`.\n\n**Figure with embedded image** — shard `figures/component-map.md`:\n\n```markdown\n![Component map overview](./component-map.png)\n```\n\nCatalog link `` `[Component map](../figures/component-map.md)` `` compiles to a numbered `#### Figure 1. …` heading followed by that image markdown.\n\n**Media with embedded video** — shard `media/walkthrough.md`:\n\n```markdown\n<video src=\"./walkthrough.mp4\" controls></video>\n```\n\nCatalog link `` `[Walkthrough](../media/walkthrough.md)` `` compiles to `#### Media 1. Walkthrough` followed by the video embed.\n\n<!-- mdcp-shard: end ../../docs/client-core/compile-hooks/inline-inserts.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/compile-hooks/cross-guide-links.md -->\n\n## Cross-guide link rewriting\n\nSpecification for assembly-time cross-shard and cross-guide link rewriting. Tests in `packages/mdcp-core/test/cross-guide-links.test.ts` map to the sections below (docs first, then TDD).\n\nMulti-output consumer repos compile separate monoliths (for example `glossary.md`, `architecture-review.md`, `technical-guide.md`) from shards that span `review/`, `security/`, `features/`, and sibling guide directories. Source shards link with relative `.md` paths; compiled output must use stable in-document or cross-monolith `#slug` targets so link-fragment lint passes.\n\n### Cross-guide purpose\n\nAt compile time, MDCP:\n\n1. Builds a **guide link index** from every guide in `compileOrder` — each path in that guide's `linkedSectionFiles` (manifest plus transitive inline `.md` links) maps to its compiled `{guideName, outputBasename, slug}` (slug from the demoted first heading, same rules as intra-guide rewrite)\n2. Rewrites **cross-guide** `.md` links per shard (using the shard path for relative resolution) before sections are stitched\n3. Rewrites **publish-relative** `../` file links per shard when the guide has `compile.outputFile` — see [Publish-relative link rewriting](#publish-relative-link-rewriting)\n4. Rewrites **same-guide** section links per shard (intra-guide pass with `sourceFile`), then again on the assembled body (intra-guide pass scoped to `guideDir`)\n\nCross-guide handles indexed markdown between guides and co-compiled transitive targets. Publish-relative rebases remaining file paths for outputs outside the shard tree (no manual path config). Intra-guide handles same-guide section targets. These are **assembly-time passes**, not compile hooks.\n\n### Cross-guide link matching\n\nA link is rewritten when **all** of the following hold:\n\n- Standard markdown link syntax: `[label](path)`\n- Target path ends in `.md` (optional `#fragment`)\n- Target is not `http://`, `https://`, or `#…`\n- Target resolves to a shard registered in the guide link index\n- Target shard's guide is **not** listed in `compile.crossGuideLinks.ignoreGuides` on the compiling guide\n\nCross-guide rewrite matches only links whose path starts with `./` or `../`. Same-guide section links — bare sibling paths (`topic/section.md`) and optional `./section.md` — are handled by the intra-guide pass, not cross-guide.\n\n### Link rewrite passes (cross-guide vs intra-guide)\n\nAssembly splits `.md` link rewriting by link shape and target scope:\n\n| Pass            | When                     | Link shapes matched                   | Resolution base                                             |\n| --------------- | ------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| **Cross-guide** | Per shard, before stitch | `./` and `../` to indexed shards      | `dirname(sourceFile)`, then parent / scopeRoot / cwd        |\n| **Intra-guide** | Per shard; post-assembly | Bare sibling or `./` same-guide paths | Per shard: `dirname(sourceFile)`; post-assembly: `guideDir` |\n\nCross-guide does **not** match bare sibling paths — those are intra-guide only. Publish-relative handles remaining `../` file links on publish outputs; see [Publish-relative link rewriting](#publish-relative-link-rewriting).\n\n#### guideDir misaligned with shard tree\n\nSome guides set `path` to a **compiled subdirectory** while section shards live elsewhere under the same guide tree (often one level up from `guideDir`). Example:\n\n```text\nguide/\n  compiled/shards.md   ← manifest (guideDir)\n  section-a.md\n  topic/section-b.md\n  assets/diagram.md\n```\n\nConfig uses `\"path\": \"guide/compiled\"` with `\"compile\": { \"manifest\": \"shards.md\", … }`.\n\nBare sibling links authored from shards outside `guideDir` — for example `[Section B](topic/section-b.md)` in `guide/section-a.md` — resolve from **`dirname(sourceFile)`** during the per-shard intra-guide pass, not from `guideDir` alone. The post-assembly intra pass still runs against `guideDir` for any remaining same-guide links on the stitched body.\n\nLinks that must step **up and out** of the shard directory still require **`../`**. A manifest under `compiled/shards.md` links to sibling shards with paths like `../section-a.md`; bare paths cannot express parent traversal.\n\n#### Transitive section discovery\n\nFor each compiling guide, `linkedSectionFiles` is the manifest closure plus every shard reachable by walking **inline** markdown `.md` links from those files within `guideDir` and `compile.scopeRoot` (when set). The **guide link index** indexes **every** path in that set — including shards outside `guideDir` (not only paths under `guideDir` or `glossary/`).\n\n**Ownership** when the same absolute path appears for more than one guide (first match wins):\n\n1. Manifest owner — the guide that lists the shard in its manifest\n2. Path under `guideDir` — the guide whose directory contains the shard\n3. Compiling guide — the guide whose transitive walk included the shard\n\n#### What the walk follows\n\n| Authoring form                                                | Transitive inclusion                         |\n| ------------------------------------------------------------- | -------------------------------------------- |\n| Inline link `[label](path.md)` or `[label](path.md#fragment)` | **Yes** — followed into `linkedSectionFiles` |\n| Reference-style `[label][ref]` with `[ref]: path.md`          | **No** — not followed for inclusion          |\n| Backtick path `` `path.md` ``                                 | **No** — inline code is not scanned          |\n\nAuthors who need a readable path **without** pulling the target into the compile graph can use a reference-style link or a backtick path. Reference-style and backticks skip transitive inclusion; backticks also skip link rewrite.\n\n#### Default `_build` outputs and transitive targets\n\nWith the default `outputDir` (`_build`), `./` and `../` links to transitively included shards outside `guideDir` rewrite through the guide link index and [same-output preference](#same-compiled-output-preference). Compiled `_build` output does **not** leave those co-compiled targets as raw `../file.md`.\n\n### Cross-guide resolution\n\nPath lookup order (relative to the **current shard** directory):\n\n1. Relative to the shard directory (`dirname(sourceFile)`)\n2. Relative to the shard parent directory\n3. `compile.scopeRoot` when set on the compiling guide\n4. `process.cwd()` and its parent\n\n#### Same compiled output preference\n\nWhen a `./` or `../` link resolves to a path present in the **assembling guide's** `slugByPath` map (the shard is co-compiled or transitively included in **this** output), cross-guide rewrite emits `#slug` or `#fragment` for that same document when:\n\n- the index has no entry, or\n- the index owner is the assembling guide, or\n- the index owner is another guide but ownership is **non-canonical** (transitive `scopeRoot` inclusion only — not a manifest listing and not under that owner's `guideDir`)\n\nCanonical ownership (manifest or path under `guideDir`) still wins for cross-output targets. Example: a glossary hub that transitively reaches a finding under `review/` keeps `architecture-review.md#find-004` even if the finding body was also pulled into the glossary compile graph. Multi-guide repos that only co-include a shared shard outside every `guideDir` keep in-document `#anchor` targets in each assembling output.\n\nWhen the resolved absolute path is in the guide link index (and same-output preference does not already apply):\n\n| Case                                             | Rewritten target                                                        |\n| ------------------------------------------------ | ----------------------------------------------------------------------- |\n| Same compiled output as the assembling guide     | `#slug` or `#fragment` when the link includes a fragment                |\n| Different compiled output (`compile.outputFile`) | `{outputBasename}#slug` (for example `architecture-review.md#find-004`) |\n| Monolith output (no per-guide `outputFile`)      | `#slug`                                                                 |\n| Target guide in `ignoreGuides`                   | **unchanged** — keep source `.md` path (link to shard, not monolith)    |\n\nFinding shards (`FIND-*.md`) use the finding id from the filename (for example `#find-004`), not the parent outcomes section slug.\n\n### Cross-guide exclusions\n\nThe pass **does not** transform:\n\n- External URLs\n- Same-document `#fragment` links\n- Markdown links that do not resolve to an indexed shard\n- Non-markdown paths (handled by `codeEvidence` or left unchanged)\n- Links to shards in guides listed in `compile.crossGuideLinks.ignoreGuides` (publish-relative may still rebase the unchanged shard path for publish outputs — see [Publish-relative link rewriting](#publish-relative-link-rewriting))\n\n### Cross-guide config\n\nMinimal multi-output setup — index and rewrite run automatically from `compileOrder` and per-guide `compile.outputFile`:\n\n```json\n{\n  \"outputDir\": \"_build/compiled\",\n  \"compileOrder\": [\"glossary\", \"architecture-review\", \"technical-guide\"],\n  \"guides\": [\n    {\n      \"name\": \"glossary\",\n      \"path\": \"glossary\",\n      \"compile\": {\n        \"scopeRoot\": \".\",\n        \"outputFile\": \"glossary.md\"\n      }\n    },\n    {\n      \"name\": \"architecture-review\",\n      \"path\": \"review\",\n      \"compile\": {\n        \"scopeRoot\": \".\",\n        \"manifest\": \"shards.md\",\n        \"outputFile\": \"architecture-review.md\"\n      }\n    },\n    {\n      \"name\": \"technical-guide\",\n      \"path\": \"technical\",\n      \"compile\": {\n        \"scopeRoot\": \".\",\n        \"outputFile\": \"technical-guide.md\"\n      }\n    }\n  ]\n}\n```\n\n#### `compile.crossGuideLinks.ignoreGuides`\n\nSet on the **guide being compiled**. Guide names in this list keep source `.md` paths for cross-guide links instead of rewriting to that guide's monolith `#slug` target ([ignoreGuides](#ignoreguides)). Use when one compiled guide should link to live shard files for specific guides (for example technical reference docs that are not folded into a review bundle).\n\n```json\n{\n  \"name\": \"glossary\",\n  \"compile\": {\n    \"outputFile\": \"glossary.md\",\n    \"crossGuideLinks\": {\n      \"ignoreGuides\": [\"technical-guide\"]\n    }\n  }\n}\n```\n\n### Cross-guide compile example\n\nGlossary shard input (`glossary/terms.md`):\n\n```markdown\nSee [FIND-004](../review/outcomes/FIND-004.md) in the architecture review.\n```\n\nReview shard (`review/outcomes/FIND-004.md`):\n\n```markdown\n# FIND-004 — Example finding\n\nBody.\n```\n\nCompiled glossary output:\n\n```markdown\nSee [FIND-004](architecture-review.md#find-004) in the architecture review.\n```\n\n### Cross-guide multi-target (three guides)\n\nWhen one guide links to shards in **two or more** other guides, each link rewrites to that shard's own `compile.outputFile` independently.\n\nHub shard input (`glossary/terms.md`):\n\n```markdown\n## Terms\n\nSee [FIND-004](../review/outcomes/FIND-004.md) and [Deployment](../technical/deployment.md).\n```\n\nCompiled `glossary.md` (each target keeps its guide output):\n\n```markdown\n## Terms\n\nSee [FIND-004](architecture-review.md#find-004) and [Deployment](technical-guide.md#deployment).\n```\n\n### Cross-guide ignore example (mixed monolith and shard links)\n\nSame hub shard with `ignoreGuides: [\"technical-guide\"]` on the **glossary** guide:\n\n```markdown\n## Terms\n\nSee [FIND-004](architecture-review.md#find-004) and [Deployment](../technical/deployment.md).\n```\n\nReview targets use the compiled monolith; ignored guides keep shard paths. Tests in `packages/mdcp-core/test/cross-guide-links.test.ts` cover index entries, per-link routing, `ignoreGuides`, and end-to-end compile.\n\n<!-- mdcp-shard: end ../../docs/client-core/compile-hooks/cross-guide-links.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/compile-hooks/publish-relative-links.md -->\n\n## Publish-relative link rewriting\n\nSpecification for assembly-time rebasing of shard-relative file links when a guide publishes outside the shard tree. Tests in `packages/mdcp-core/test/publish-links.test.ts` and `packages/mdcp-core/test/links.test.ts` map to the sections below.\n\n### Why this pass exists\n\nShards are authored with paths relative to **where the file lives** in the guide tree:\n\n- `../features/foo.md` from `docs/developer/`\n- `../../features/foo.md` from `docs/client-core/compile-hooks/`\n- `../../package.json` from `docs/developer/` (repo root)\n\nThat works while readers open shards under `docs/`. It breaks when the same content compiles to a **publish output** elsewhere — for example `DEVELOPERS.md` at the repo root or `packages/mdcp-cli/README.md`.\n\n**Problem:** a single stitched document no longer knows which shard each `../` hop came from, so post-stitch string substitution cannot reliably rebase paths. Nested shards use different `../` depth; publish targets sit at different locations (`repo root`, `packages/*/`).\n\n**Solution:** resolve and rebase **per shard**, before stitch:\n\n1. Resolve the link from `dirname(sourceFile)` to an **absolute** target path\n2. Emit `relative(dirname(publishOutputFile), absoluteTarget)` in the compiled body\n\nNo `stripParentSegments`, `oneLevelPrefix`, or other publish-path config — geometry comes from `sourceFile`, `compile.outputFile`, and the filesystem.\n\n### When it runs\n\n| Condition                                       | Publish-relative rewrite                                 |\n| ----------------------------------------------- | -------------------------------------------------------- |\n| Guide has `compile.outputFile` set              | **Yes** — per shard, after cross-guide rewrite           |\n| Guide outputs only to `_build/{name}.md`        | **No** — shard-relative paths stay as authored           |\n| Optional monolith (`outputFile` at config root) | **No** for guides without their own `compile.outputFile` |\n\nImplementation: `rewritePublishRelativeLinks` in `packages/mdcp-core/src/compile/publish-links.ts`, invoked from `assembleGuide` when `publishOutputFile` is set.\n\n### Division of labor (three link passes)\n\nAssembly applies specialized passes instead of one generic rewriter:\n\n| Pass                 | Scope                                         | Input links                                | Output                                               |\n| -------------------- | --------------------------------------------- | ------------------------------------------ | ---------------------------------------------------- |\n| **Cross-guide**      | Indexed `.md` in another guide                | `../other-guide/shard.md`                  | `{outputFile}#slug` or unchanged when `ignoreGuides` |\n| **Publish-relative** | Remaining `../` file links on publish outputs | `../features/foo.md`, `../../package.json` | Path relative to publish file                        |\n| **Intra-guide**      | Same-guide section shards                     | `./section.md`                             | `#anchor` in assembled body                          |\n\nCross-guide runs first and uses the **guide link index**. Publish-relative handles everything else that still starts with `../` — config files, `package.json`, and shard paths left unchanged by `ignoreGuides`.\n\n### Publish-relative matching\n\nA link is rewritten when **all** of the following hold:\n\n- Standard markdown link syntax: `[label](path)`\n- Target starts with one or more `../` segments (not `./` — see exclusions)\n- Target is not `http://`, `https://`, `mailto:`, or `#…`\n- Target resolves to an existing file from the shard directory (then guide directory, then `compile.scopeRoot`)\n- Resolved path is **not** a same-guide indexed shard (intra-guide pass owns those)\n- Resolved path is **not** another guide's `compile.outputFile` (cross-guide already rebased)\n\n### Publish-relative resolution\n\nPath lookup order (same as cross-guide shard resolution):\n\n1. `resolve(dirname(sourceFile), filePart)`\n2. `resolve(guideDir, filePart)`\n3. `compile.scopeRoot` when set\n\nThen:\n\n```text\nrelative(dirname(publishOutputFile), resolvedAbsolute) + optional #fragment\n```\n\n`publishOutputFile` is the absolute path from `resolveGuideLinkBase` for the guide's `compile.outputFile`.\n\n### Publish-relative exclusions\n\nThe pass **does not** transform:\n\n- External URLs\n- Same-document `#fragment` links\n- `./section.md` and other `./` paths (cross-guide or intra-guide handle `.md`; publish-relative only matches `../`)\n- Links cross-guide already rewrote to `{otherPublishOutput}#slug`\n- Unresolvable paths (left unchanged)\n\n### Repo dogfood examples\n\nConfig: [`docs/mdcp.config.json`](../../docs/mdcp.config.json) — `developer`, `client-cli`, and `client-core` use `compile.outputFile`.\n\n**`developer` → `DEVELOPERS.md` (repo root)**\n\n| Shard input (`docs/developer/…`) | Compiled in `DEVELOPERS.md`        |\n| -------------------------------- | ---------------------------------- |\n| `../../package.json`             | `package.json`                     |\n| `../features/feature-catalog.md` | `docs/features/feature-catalog.md` |\n| `../mdcp.config.json`            | `docs/mdcp.config.json`            |\n\n**`client-cli` → `packages/mdcp-cli/README.md`**\n\n| Shard input (`docs/client-cli/…`) | Compiled in README                       |\n| --------------------------------- | ---------------------------------------- |\n| `../features/feature-catalog.md`  | `../../docs/features/feature-catalog.md` |\n\n**`client-core/compile-hooks/` → `packages/mdcp-core/README.md`**\n\nNested shards use more `../` segments in source; per-shard resolution still yields the correct publish-relative path:\n\n| Shard input                                                    | Compiled in README                                                  |\n| -------------------------------------------------------------- | ------------------------------------------------------------------- |\n| `../../features/design-constraints/preprocessor-templating.md` | `../../docs/features/design-constraints/preprocessor-templating.md` |\n\n### `ignoreGuides` interaction\n\nWhen `compile.crossGuideLinks.ignoreGuides` keeps a cross-guide link as a shard `.md` path, publish-relative still rebases that path for the publish file. Example: `client-cli` with `ignoreGuides: [\"features\"]` compiles `../features/feature-catalog.md` to `../../docs/features/feature-catalog.md` in the package README.\n\nLink validation accepts those shard paths when the target guide is listed in `ignoreGuides` on the compiling guide. See [Link validation](../../docs/features/link-validation.md#publish-only-link-policy).\n\n### Related\n\n- [Cross-guide link rewriting](#cross-guide-link-rewriting) — indexed `.md` between guides\n- [Compile hooks — overview](#compile-hooks) — assembly pipeline\n- [API — Config](#api--config) — `compile.outputFile`\n- [codeEvidence](#codeevidence) — separate path rebase for repo source evidence links\n\n<!-- mdcp-shard: end ../../docs/client-core/compile-hooks/publish-relative-links.md -->\n\n<!-- mdcp-shard: start ../../docs/client-core/related-packages.md -->\n\n## Related packages\n\n| Package                                                                                | Use                           |\n| -------------------------------------------------------------------------------------- | ----------------------------- |\n| [`@bwilliamson/mdcp-cli`](https://www.npmjs.com/package/@bwilliamson/mdcp-cli)         | `mdcp` command-line interface |\n| [`@bwilliamson/mdcp-presets`](https://www.npmjs.com/package/@bwilliamson/mdcp-presets) | Starter markdownlint configs  |\n\nThe [Agent Skill](../../README.md) is a separate install (`npx skills add`) — not an npm dependency of this library.\n\n### Further reading\n\n- [CLI package docs](https://www.npmjs.com/package/@bwilliamson/mdcp-cli)\n- [Project README](../../README.md) — Agent Skill landing\n- [Design constraints](../../docs/features/design-constraints/index.md)\n\n### License\n\nMIT\n\n<!-- mdcp-shard: end ../../docs/client-core/related-packages.md -->\n\n<!-- mdcp-shard: start ../../docs/glossary/ignore-guides.md -->\n\n## ignoreGuides\n\nGuide names listed on the **compiling** guide under `compile.crossGuideLinks.ignoreGuides`. Cross-guide links to those guides keep source shard `.md` paths instead of rewriting to monolith `#slug` targets. Does not exclude the guide from `compileOrder` or the link index — only skips link rewrite for those targets. On publish outputs, [publish-relative rewrite](#publish-relative-link-rewriting) still rebases the shard path for the publish file. Read [Cross-guide link rewriting](#cross-guide-link-rewriting).\n\n<!-- mdcp-shard: end ../../docs/glossary/ignore-guides.md -->\n","readmeFilename":""}