{"_id":"@dzhechkov/skills-tutorial-factory","_rev":"19-cbcc0620a8f252d2a3c78081c423d04c","name":"@dzhechkov/skills-tutorial-factory","dist-tags":{"latest":"0.7.3"},"versions":{"0.1.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.1.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.1.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"1e5fd763d4b6a1e179794caa7bb5e36da9451207","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.1.0.tgz","fileCount":21,"integrity":"sha512-O26cFBNDbewBjPickwAyWO39Ily+nYpmV+uXPptE71AuNu6SMVzvoxluESOA7YDpSphqiDia9FjSWcBMLn2VlA==","signatures":[{"sig":"MEUCIQCveY6zJegnqbdX77WvVtmGcuON1fm8WjcqYIj9NYXzxQIgMktd+PoB9pcCvLmEC0cegouq7fHSaczDHHhUkpB8TN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107080},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.1.0.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/fcd4fbb21ccbf825db1ff913c0583140/dzhechkov-skills-tutorial-factory-0.1.0.tgz","_integrity":"sha512-O26cFBNDbewBjPickwAyWO39Ily+nYpmV+uXPptE71AuNu6SMVzvoxluESOA7YDpSphqiDia9FjSWcBMLn2VlA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.1.0_1785281456643_0.5404477302921564","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.1.1","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.1.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"aea813e0d5a292a03d3f3b96cbc004430fdbfffc","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.1.1.tgz","fileCount":21,"integrity":"sha512-qvywxqJHv/ALoWeaLfir3ninz+KRJjsp3JYJbHma0rwQjLgq6fLS6d7ErvFXNRwiWN0XX+Zx1yYuSfHnr5ddUA==","signatures":[{"sig":"MEUCIQDIHTXzjaXNFV9wn/rYke70lQZZfH1I4IcxNdMkD3bZIAIgZtjbbMEKunLunNexDJu0q7VSWaYqXcS5XL2QlOjtzNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109365},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.1.1.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/7c2ecdd0f0761d7e4325299d4b204527/dzhechkov-skills-tutorial-factory-0.1.1.tgz","_integrity":"sha512-qvywxqJHv/ALoWeaLfir3ninz+KRJjsp3JYJbHma0rwQjLgq6fLS6d7ErvFXNRwiWN0XX+Zx1yYuSfHnr5ddUA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.1.1_1785343076276_0.9701101080952148","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.1.2","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.1.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"88e6b6a32da3cee8fc3e151921a2dfdebbbfa322","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.1.2.tgz","fileCount":21,"integrity":"sha512-cCsTd38c6Td1b15HmcYHjkyCOStLBl34dh9usZXwEbuS1nGvV2M1RcETDyD3YaQk9sL/msTFC8mGJcdibI7jDg==","signatures":[{"sig":"MEYCIQDx5ylfTpZrmf1YIIPF+tekkErJwxox7UJeFSCKZgh9hAIhANo49D1NbUumQE84LX3ijTWpxTyRzcmmdoiFYnG+DO1C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110509},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.1.2.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/79620301777e4e5c33db5295e373a308/dzhechkov-skills-tutorial-factory-0.1.2.tgz","_integrity":"sha512-cCsTd38c6Td1b15HmcYHjkyCOStLBl34dh9usZXwEbuS1nGvV2M1RcETDyD3YaQk9sL/msTFC8mGJcdibI7jDg==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.1.2_1785343278236_0.2115704064659838","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.2.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.2.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"7e1fbb303726cb729e7d3f17106af40b81a23485","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.2.0.tgz","fileCount":24,"integrity":"sha512-OEQPA9xfXWBUv+ca65g3dlPv+1XX8Geayqq+fwXDa66N+mcw2zUELRLrfDPCsOJxX2JOaIB4xM0veykkry5LiQ==","signatures":[{"sig":"MEUCICFFxhFtiyfOlJ98hDJ/Jr+N7cRU/+6V9NTwWcXoMIgkAiEAmG3kyuhsil4aJAjP6MRFZ2rJfgl5fp8s6y01rxX3Pic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190059},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.2.0.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node scripts/render-site.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs","verify-site":"node scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/25f665c3ce6d2c0c23d1a78196dcc528/dzhechkov-skills-tutorial-factory-0.2.0.tgz","_integrity":"sha512-OEQPA9xfXWBUv+ca65g3dlPv+1XX8Geayqq+fwXDa66N+mcw2zUELRLrfDPCsOJxX2JOaIB4xM0veykkry5LiQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.2.0_1785400916962_0.8813563922455845","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.3.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.3.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"b8a259aa8dcb4f3dfac84ba55cb54172fd5aae37","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.3.0.tgz","fileCount":24,"integrity":"sha512-FBgoUwrN8rzolz9jKZ/cnq943euQd+v6oRJ4JL7pp4MF4A4PwXWWUubBXPE0ZmH6iYpYQ9aD6Q+WwQXV3+qk+w==","signatures":[{"sig":"MEUCIQCq+zt0jzJ/pQlnqUu//J9nXzFMsozfx3/e37qgzNf4bAIgCUWzDHUzbeWyDIra2OmW2ZV/kFVWDHIAh74RvWxXw8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201677},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.3.0.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node scripts/render-site.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs","verify-site":"node scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/c537a169fda1189e0b06183f0b253caa/dzhechkov-skills-tutorial-factory-0.3.0.tgz","_integrity":"sha512-FBgoUwrN8rzolz9jKZ/cnq943euQd+v6oRJ4JL7pp4MF4A4PwXWWUubBXPE0ZmH6iYpYQ9aD6Q+WwQXV3+qk+w==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.3.0_1785408738838_0.593086141069012","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.3.1","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.3.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"24ea1e054a9cc425930eb2c243aa0e86c7b3d736","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.3.1.tgz","fileCount":24,"integrity":"sha512-+cluux+AUn6Mmlc0eSxpW5BNTOv9jvvj+v5/M8zYLOc3ssj25KhhXvmbJtQ+3oHVSf3LdyfQ6vcQob8PDtfVsA==","signatures":[{"sig":"MEUCIQDvidMJMJHoDc9zsA1c0d1F9dENl+/rBc4xZpdIkOhg+AIgeFTv+xrLR7WPPuciXMpknLOzTSRSlpc2Qz+mMm/YqOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198176},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.3.1.tgz","scripts":{"gate":"node scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node scripts/render-site.mjs","extract":"node scripts/extract-brief.mjs","shingle":"node scripts/shingling-check.mjs","verify-site":"node scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/66389183aef99a8277532ac6eea83526/dzhechkov-skills-tutorial-factory-0.3.1.tgz","_integrity":"sha512-+cluux+AUn6Mmlc0eSxpW5BNTOv9jvvj+v5/M8zYLOc3ssj25KhhXvmbJtQ+3oHVSf3LdyfQ6vcQob8PDtfVsA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.3.1_1787632960846_0.057955582488504964","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.4.1","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.4.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"a1a7a72baf269591f71b59e062e3019837b8d500","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.4.1.tgz","fileCount":32,"integrity":"sha512-3pNN7TWi2fodDD76LPj1dfPRi7bJUIn0HdE+xFh2iTzT4LWo7PN4K09sAkO4UxvUKogpCJ5UvukmxL1oBXAD1Q==","signatures":[{"sig":"MEQCIH+LkJCMD2DX4NN/aZNGPj/ji6LErFplsc5kTwIFwiYrAiAuOfDFkPYV6+L4tAdkpHtF8xKf7oIDKRsUVzBdim7ckA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271631},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.4.1.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/e3895517746a4f0f4243ae5f67fea0ea/dzhechkov-skills-tutorial-factory-0.4.1.tgz","_integrity":"sha512-3pNN7TWi2fodDD76LPj1dfPRi7bJUIn0HdE+xFh2iTzT4LWo7PN4K09sAkO4UxvUKogpCJ5UvukmxL1oBXAD1Q==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.4.1_1787944542030_0.4410107377201067","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.4.2","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.4.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"ee3a5bb0bf6a3de7f600d89525261666aa9f162f","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.4.2.tgz","fileCount":32,"integrity":"sha512-QgiKM1Tr05ro/5g+Gzqr9wRi/VJhY5NdiZYDIvSUx5YwJlKCqRUzFup5yFzDr2i1xUyUg7CtmqAlxtCkCiGygw==","signatures":[{"sig":"MEQCIBS+tLJOoiC3HMCjghuU6tP49RXGQRq9F0NvNSYHl/yUAiAORQ7/COS1kaaJkLPQulnFGdsytmYDBjNVQJMUwMBrWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271631},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.4.2.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/bfa3ca04d9e50102265a039fc9fe9de4/dzhechkov-skills-tutorial-factory-0.4.2.tgz","_integrity":"sha512-QgiKM1Tr05ro/5g+Gzqr9wRi/VJhY5NdiZYDIvSUx5YwJlKCqRUzFup5yFzDr2i1xUyUg7CtmqAlxtCkCiGygw==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.4.2_1787944920950_0.02195524122058523","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.4.3","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.4.3","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"dist":{"shasum":"9c98d2778e31713e4fc54b19f9c56f3886e7a151","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.4.3.tgz","fileCount":32,"integrity":"sha512-xk7LaRv2L/LY3jA/SWRFMYyusKKQiIV5UhpwP5KSrIy3FFickUMY7TYGqk2Ee4PEGPzrvUnvdPcq7qpzTdTSGw==","signatures":[{"sig":"MEYCIQCAkXYAZZMIJ2InZ2l81Ml3e6Jkg/Y+T3dPiP7Jev2jpwIhAKFsjUFu1heCLK0ILo8EMCuePX2Yow587+UqHpsB+F0G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271631},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.4.3.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/2d008ec8be108264663246992d8167a8/dzhechkov-skills-tutorial-factory-0.4.3.tgz","_integrity":"sha512-xk7LaRv2L/LY3jA/SWRFMYyusKKQiIV5UhpwP5KSrIy3FFickUMY7TYGqk2Ee4PEGPzrvUnvdPcq7qpzTdTSGw==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.4.3_1788003828922_0.9750737151990365","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.4.4","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.4.4","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"1121aa0d7373b1df856112890d11ba14f86f4d9a","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.4.4.tgz","fileCount":32,"integrity":"sha512-kLg0FKum2uHwktMlU4iDMHeBbIdBTn+911yRNjH+bv12D/K6KfqtyOTcf+MuHb7Oi+5BoFU1VlweXV9p1DeDMg==","signatures":[{"sig":"MEUCIQDM3zgPuNT1XJRlxtJB7O72u5BJvHSjMyQ4SEb01mfX0wIgcYn4V1UKJFFNE2TxLog2fyxcGnB19xsrvC9be43hwvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271623},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.4.4.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/abd35938bbcf3e538b238fc613d4d004/dzhechkov-skills-tutorial-factory-0.4.4.tgz","_integrity":"sha512-kLg0FKum2uHwktMlU4iDMHeBbIdBTn+911yRNjH+bv12D/K6KfqtyOTcf+MuHb7Oi+5BoFU1VlweXV9p1DeDMg==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.4.4_1788025778734_0.6645342896231174","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.5.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.5.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"cd8f535cc4311d78013bdc8fa704681c1a580aa3","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.5.0.tgz","fileCount":32,"integrity":"sha512-0QUcYnyzlX50GISCvPm0b/qPcVD5wTC261Hyf6M3yzJbJl8iHBNyx229ryeDWL8VlIzspEuukjHHWM2YERoVRg==","signatures":[{"sig":"MEUCIQCZ0hJuFCHnghZqIMBDJ7S+IXPindtWfd9f09b9Chno/gIgWOnx8NIzUZ0gtmGHZ7C/BGf84qn2f3WlW2fjKDeeHK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277765},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.5.0.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/9a1c1696542720df94adcf8136e9f0b5/dzhechkov-skills-tutorial-factory-0.5.0.tgz","_integrity":"sha512-0QUcYnyzlX50GISCvPm0b/qPcVD5wTC261Hyf6M3yzJbJl8iHBNyx229ryeDWL8VlIzspEuukjHHWM2YERoVRg==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.5.0_1788204348149_0.10563071176497196","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.5.1","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.5.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"49836d5392e07c378f3a362a2c41fcb58308bfb1","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.5.1.tgz","fileCount":32,"integrity":"sha512-8+k3dX+/hGd8ty79F7dzhUzqhTre57lcFPD9CHqFsVuQ6CteftuzTqophLvWnY/U9EcKYU/HTmIRL2UvIiqOvQ==","signatures":[{"sig":"MEUCIF/TrA7CcIZzqm29SQEkbGo8pGmuaJVqF89WjJy48NikAiEAnBtm4QolSOKC61M9pHGoQPKGCiaTC8zaEGodRuD3H6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288856},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.5.1.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/5f0a61944d24f0add6fd4284e282ef40/dzhechkov-skills-tutorial-factory-0.5.1.tgz","_integrity":"sha512-8+k3dX+/hGd8ty79F7dzhUzqhTre57lcFPD9CHqFsVuQ6CteftuzTqophLvWnY/U9EcKYU/HTmIRL2UvIiqOvQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.5.1_1788206097190_0.09046850397453299","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.5.2","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.5.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"a5cd0c8aa917591a4be95ea2c8dee89e40e6e38d","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.5.2.tgz","fileCount":32,"integrity":"sha512-uDoZLVn4cWP9mnqbRKvCGroQ9aIs4h/ozIeGDqs0N4RrXXWRz4K+HBx3Chl4yUP8MRo/4Ob4I6sQ3rjMZ8O5zQ==","signatures":[{"sig":"MEUCIG9DTh905YwbbR1aKUloGubCe/dyYSt5tICHmRpseVnvAiEA25jLqYTDqMyCFJRZivE2GoO0mWb+jMV6Rlmu+sKYFFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293801},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.5.2.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/0386a51c44b31a82dd2cd10549421f2d/dzhechkov-skills-tutorial-factory-0.5.2.tgz","_integrity":"sha512-uDoZLVn4cWP9mnqbRKvCGroQ9aIs4h/ozIeGDqs0N4RrXXWRz4K+HBx3Chl4yUP8MRo/4Ob4I6sQ3rjMZ8O5zQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.5.2_1788207575216_0.5074310428347315","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.5.3","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.5.3","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"83fd3858b76bb8fe55e3e5be3ffa8bb8af5ca2b5","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.5.3.tgz","fileCount":32,"integrity":"sha512-4UA35WqWfwRcBfBQUZ029VGNo49LSzcdtVBVyBFgaYviJnNw94MXXciQmih+LeUwNSAAckP2udTPS6Zcs4OVLQ==","signatures":[{"sig":"MEUCIQDPE4tVdM0vtxb4ekE3Ga8Eji1m7hepkFIpXiUcRkwj1AIgF1LWYuqTxc3jMhp4IgelHVQkycqDeGxE+LP6YnXnKS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304960},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.5.3.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/162572512bbbce99d297cc467e09e708/dzhechkov-skills-tutorial-factory-0.5.3.tgz","_integrity":"sha512-4UA35WqWfwRcBfBQUZ029VGNo49LSzcdtVBVyBFgaYviJnNw94MXXciQmih+LeUwNSAAckP2udTPS6Zcs4OVLQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.5.3_1788212950847_0.5438725138699714","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.6.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.6.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"c622871b5ea6511fb6c7c87c589fc07a3d12af23","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.6.0.tgz","fileCount":32,"integrity":"sha512-Iu2NdRLQZgaglup/IHl/7G1B1qf0rvM65cKs8owQQ7rq963QAb6/Gk66rtIihfdZnHUnRBKcpJ6v7L2rPLsQqg==","signatures":[{"sig":"MEUCIDrBrpkTIwcUcH5hBseZsfMRkiI8snGX8shAPA3r0shhAiEAv6L0P/Py1LkvrjtQuyAhr11ERGBGZDYKdcjYyMvrf+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":317920},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.6.0.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/4c8ffbb621c9724f865bbd6c1da30313/dzhechkov-skills-tutorial-factory-0.6.0.tgz","_integrity":"sha512-Iu2NdRLQZgaglup/IHl/7G1B1qf0rvM65cKs8owQQ7rq963QAb6/Gk66rtIihfdZnHUnRBKcpJ6v7L2rPLsQqg==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.6.0_1788245543870_0.8237094421886502","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.7.0","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.7.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"0a2ea89429ecb345627af6629ad0f343ad7d685e","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.7.0.tgz","fileCount":32,"integrity":"sha512-eB8mbUP4qJm+IbiXvScQPPic4OnJe9ewvTHwIg7J1GdqxqoC6+d3H8tlfVmefGv+n8yOuqEm7MPxJ3J8VRJs3w==","signatures":[{"sig":"MEUCIDrH7kZ+onHeKbFeu/k1ohOfAjlzugadAJPB1Lx8lJ1dAiEAwQFrq3DajfuqbuUVQ96P8osyjalvW/DDBzRiHuTaX1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325693},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.7.0.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/ad2fc65a55117ad18d45a4859b81846d/dzhechkov-skills-tutorial-factory-0.7.0.tgz","_integrity":"sha512-eB8mbUP4qJm+IbiXvScQPPic4OnJe9ewvTHwIg7J1GdqxqoC6+d3H8tlfVmefGv+n8yOuqEm7MPxJ3J8VRJs3w==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.7.0_1788246542846_0.6945747961985151","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.7.1","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.7.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"aa169e2387b09d0e9b8c0e9ac7a494477f152d14","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.7.1.tgz","fileCount":32,"integrity":"sha512-W5Qu4KdT1Wa2OMqgK39/44ncl8arsUnLqdDICQAEr6mI6Z0uBsFbZZacsT1nUuxEz/i5/31sS5A3+NKLGe02og==","signatures":[{"sig":"MEUCIB+oAcF/UrO9xE1UUjhkzjwlab/PWp4heeWvqwTNeyyUAiEA61mJa1KseMixsJdYiLnBEMrr6XL98lP5FLdaxUvYlok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334763},"type":"module","_from":"file:dzhechkov-skills-tutorial-factory-0.7.1.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/92f42cdf3327516669128cf83ecd5d6e/dzhechkov-skills-tutorial-factory-0.7.1.tgz","_integrity":"sha512-W5Qu4KdT1Wa2OMqgK39/44ncl8arsUnLqdDICQAEr6mI6Z0uBsFbZZacsT1nUuxEz/i5/31sS5A3+NKLGe02og==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.7.1_1789295466701_0.9827869750626785","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@dzhechkov/skills-tutorial-factory","version":"0.7.2","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"author":{"name":"dzhechko"},"license":"MIT","_id":"@dzhechkov/skills-tutorial-factory@0.7.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://aicoding.space","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"7c0ffad724aace9a0945381de6ceccbbef60be4c","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.7.2.tgz","fileCount":37,"integrity":"sha512-xEIqU3jiVYjfq3VpNYhMLfV0lIKOsF5dKp6ZbHgfOks7mX9EkkHlpS9yJYxMiun5BSNPIwY3XbuXKgurZrnn/A==","signatures":[{"sig":"MEYCIQCDP85tgDCNFJMdgOGKn4mVfh/AVt5HxdUs7aEnJERjeAIhAOEDO31So2DBRFkzzy7fQYCdDYfWLKY7XnpanmBrtAPV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTNVFPP0g7l1cBFJJ0E6GvzccSlrPQnyoc4KqaRiVh4wIhANLylOfxhrxcqzIB0rnFmJ8Quy1zLhyDO8pi3/XkH354","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":871162},"type":"module","_from":"file:/var/tmp/dz-publish-packed-hqFurk/dzhechkov-skills-tutorial-factory-0.7.2.tgz","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/var/tmp/dz-publish-packed-hqFurk/dzhechkov-skills-tutorial-factory-0.7.2.tgz","_integrity":"sha512-xEIqU3jiVYjfq3VpNYhMLfV0lIKOsF5dKp6ZbHgfOks7mX9EkkHlpS9yJYxMiun5BSNPIwY3XbuXKgurZrnn/A==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skills-tutorial-factory_0.7.2_1791013888500_0.507166322148265","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"_id":"@dzhechkov/skills-tutorial-factory@0.7.3","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"83936e14d7d5f19a28b8d2cf96785a0d86c6d519","tarball":"https://registry.npmjs.org/@dzhechkov/skills-tutorial-factory/-/skills-tutorial-factory-0.7.3.tgz","fileCount":37,"integrity":"sha512-7wUkqHq4uLynkFVRLi1WmWePKcJa/JYgLJBckgMNAPEfN6k7I13kOzkbRobUccsrtFIQrrnIs2FjgTRLwDV9Sg==","signatures":[{"sig":"MEUCIGwFkzRjq01e5RHu8NaxBw0MLV5remcTQ5FR7hcXAxJ6AiEA+DCoc6H5/ZWlNMBX61YpffhnCvvZI7S3Kwatjiu55Po=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCHHchvvVmOnh/cNr0DupLgXVZZ2avUBkHm8vnBSK7YNQIhAPsZyuZNopvD+ZRJzxWq9UAKVNfB82DgfrPsYXDCzrX0"}],"unpackedSize":874401},"name":"@dzhechkov/skills-tutorial-factory","type":"module","_from":"file:/var/tmp/dz-publish-packed-BtGrg9/dzhechkov-skills-tutorial-factory-0.7.3.tgz","author":{"name":"dzhechko"},"license":"MIT","scripts":{"gate":"node package-tutorial-factory/scripts/headfirst-gate.mjs","test":"node --test test/*.test.mjs","render":"node package-tutorial-factory/scripts/render-site.mjs","extract":"node package-tutorial-factory/scripts/extract-brief.mjs","shingle":"node package-tutorial-factory/scripts/shingling-check.mjs","verify-site":"node package-tutorial-factory/scripts/verify-site.mjs"},"version":"0.7.3","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"homepage":"https://aicoding.space","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"_resolved":"/var/tmp/dz-publish-packed-BtGrg9/dzhechkov-skills-tutorial-factory-0.7.3.tgz","_integrity":"sha512-7wUkqHq4uLynkFVRLi1WmWePKcJa/JYgLJBckgMNAPEfN6k7I13kOzkbRobUccsrtFIQrrnIs2FjgTRLwDV9Sg==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"_npmVersion":"10.9.4","description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","directories":{},"maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skills-tutorial-factory_0.7.3_1791017405050_0.28733347858594094"}}},"time":{"created":"2026-07-28T23:30:56.384Z","modified":"2026-10-03T08:50:05.307Z","0.1.0":"2026-07-28T23:30:56.799Z","0.1.1":"2026-07-29T16:37:56.418Z","0.1.2":"2026-07-29T16:41:18.405Z","0.2.0":"2026-07-30T08:41:57.107Z","0.3.0":"2026-07-30T10:52:19.006Z","0.3.1":"2026-08-25T04:42:40.998Z","0.4.1":"2026-08-28T19:15:42.232Z","0.4.2":"2026-08-28T19:22:01.106Z","0.4.3":"2026-08-29T11:43:49.074Z","0.4.4":"2026-08-29T17:49:38.861Z","0.5.0":"2026-08-31T19:25:48.317Z","0.5.1":"2026-08-31T19:54:57.332Z","0.5.2":"2026-08-31T20:19:35.431Z","0.5.3":"2026-08-31T21:49:10.990Z","0.6.0":"2026-09-01T06:52:24.010Z","0.7.0":"2026-09-01T07:09:02.981Z","0.7.1":"2026-09-13T10:31:06.843Z","0.7.2":"2026-10-03T07:51:28.641Z","0.7.3":"2026-10-03T08:50:05.161Z"},"bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"author":{"name":"dzhechko"},"license":"MIT","homepage":"https://aicoding.space","keywords":["agent-skills","agentskills.io","skill-pack","claude-code","meta-skill","edu-site","tutorial","head-first","gamification","pedagogy"],"repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/skills-tutorial-factory"},"description":"package-tutorial-factory — a meta-skill that turns any harness-hub package into a Head-First-style gamified edu-site learning course. Composes skills-book-digitizer (IP-safe distillation), edu-site-generator (render), and the code-skills-creator meta-fact","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"readme":"# @dzhechkov/skills-tutorial-factory\n\nCurrent release: **0.7.3**. <!-- dz:version -->\n\nSite: https://aicoding.space · Source: https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-tutorial-factory\n\n**`package-tutorial-factory`** — a meta-skill that turns ONE harness-hub package into a **Head-First-style,\ngamified edu-site learning course**. It does not rebuild engines; it **composes** three that already exist:\n\n| Composed engine | Role |\n|-----------------|------|\n| [`skills-book-digitizer`](../skills-book-digitizer) | IP discipline — a distilled, page-anchored Head First **method-KB** + the vendored `shingling-check.mjs` gate |\n| **its own executable renderer** (`package-tutorial-factory/scripts/render-site.mjs` + `package-tutorial-factory/scripts/verify-site.mjs`, v0.2.0) | the DEFAULT render seam — deterministic single-file gamified SPA, then EXECUTED and driven by the verifier |\n| [`skills-edu-site`](../skills-edu-site) (`edu-site-generator`) | the opt-in heavy render target — a gamified React/Vite SPA built by an agent |\n| `code-skills-creator` | the meta-factory **shape** — grounded, checkpointed, propose-never-clobber |\n\nThe method is **grounded, never hard-coded**: authoring READS `package-tutorial-factory/references/head-first-method.md` at run time\nand every course section must cite ≥1 Head First pattern (`P1`–`P12` / `D1`–`D4`) it serves. Refine the\nmethod by editing the KB, not the code.\n\n## When to use it\n\n- **Use** when you have a package (a skill pack, CLI, or library) and want a real, interactive **learning\n  course** for it — not just a README a teammate skims once.\n- **Skip** when the target has no teachable surface, or a static `SKILL.md` pointer is all you want.\n\n## How it works (six steps, two checkpoints)\n\n```\n01 extract-concepts  → doc-harvest Concept Brief (README + SKILL.md + exports + tests), dependency-ordered\n02 author-course     → brief × method-KB → edu-site Step-0 course data + a Head First citation per section\n                       ── checkpoint: confirm-topics ──\n03 headfirst-gate    → Plane 1: deterministic zero-LLM Head-First checklist (must PASS before render)\n04 brain-friendliness→ Plane 2: cross-model, KB-grounded semantic review (tone/surprise/story) — advisory\n05 render            → repository publisher stamps source; factory renders offline\n                       ── checkpoint: review-course ──\n06 verify-handoff    → gate PASS + IP clean + KB resolves + SPA builds\n```\n\n## Usage scenario (end-to-end)\n\nTurn `@dzhechkov/skills-book-digitizer` into a course:\n\n```bash\n# 1. Harvest the teachable surface (deterministic, no LLM). Since v0.3.0 every substantive README\n#    ## section is its own topic (fence-aware, boilerplate excluded) and escalation is decided by\n#    DOC VOLUME (--doc-floor), so CLI/library packs WITHOUT SKILL.md files harvest properly too:\nnode package-tutorial-factory/scripts/extract-brief.mjs --pkg ../skills-book-digitizer --json /tmp/brief.json\n#   → 12 topics, escalate: null (doc-rich pack → no understand-anything needed)\nnode package-tutorial-factory/scripts/extract-brief.mjs --pkg ../harness-cli\n#   → topics harvested: 18 (topic floor 3, doc floor 1500) … doc-harvest sufficient (no escalation)\n#     (pre-v0.3.0 this very package harvested 2 topics and ALWAYS escalated — the F1 ceiling)\n\n# 2. Author the course object (the model-heavy step; grounded on package-tutorial-factory/references/head-first-method.md)\n#    → /tmp/course.json  (edu-site Step-0 data; every section cites a Pn/Dn pattern id)\n\n# 3. Gate it — deterministic Head First checklist (fix the COURSE if it fails, never the gate)\nnode package-tutorial-factory/scripts/headfirst-gate.mjs --course /tmp/course.json --json /tmp/gate.json\n\n# 4. Render + drive-verify. The repository publisher stamps source.package/source.version/\n#    source.authoredTs before render, using the live npm registry rather than a local manifest.\n#    The deterministic renderer stays offline and does not mutate course.json; it renders the\n#    source metadata already supplied. mirrorReceipt stays absent unless a real receipt exists.\n#    Since v0.5.0 every emitted site carries a footer with the workshop's\n#    channel links (default: t.me/llm_notes + aicoding.space). Override per course:\n#      \"footer\": { \"links\": [{ \"label\": \"My site\", \"href\": \"https://example.org\" }] }\n#    Links are https-only by construction (javascript:/http: entries are filtered out), and a\n#    footer whose every link was filtered FAILS verify-site loudly (footer.renders) instead of\n#    silently vanishing. The self-contained check counts external LOADS (src / <link href> /\n#    url() / @import) — navigation anchors are excluded by design, so the footer never trips it.\nnode package-tutorial-factory/scripts/render-site.mjs --course /tmp/course.json\nnode package-tutorial-factory/scripts/verify-site.mjs --site site/index.html   # 29 behavioural checks\n```\n\nExpected gate output on a compliant course:\n\n```\nheadfirst-gate — Head First STRUCTURAL checklist (Plane 1, ADR-003)\n(tone/surprise/story quality is Plane-2, cross-model, advisory — NOT gated here)\n  ok    structural.unique-kebab-ids\n  ok    P5.do-something                       (a NON-BLANK exercise — blank/null shells rejected)\n  ok    P7.no-3-consecutive-same-type\n  ok    P7.all-six-types-when-N>=6\n  ok    P2.redundancy-three-encodings         (concept word PRESENT in theory + exercise + finalTest)\n  ok    D2.reflective-quartet                 (full quartet: strengths, weaknesses, rating, wrap-up)\n  ok    D1.running-persona-every-section      (persona threaded through EVERY section)\n  ok    gamification.achievement-floor        (>=8 distinct, well-formed achievements)\n  ok    method.per-section-citation-resolves  (every citation resolves in the shipped KB)\nPASS — 13 structural Head First properties hold.\n```\n\n```bash\n# 4. Prove IP-safety — zero verbatim runs >= 8 words from the source corpus\nnode package-tutorial-factory/scripts/shingling-check.mjs --source <corpus-dir> --output /tmp/course.json\n#   → PASS — no uncited verbatim run >= 8 words.\n\n# 5. RENDER — the factory's own executable renderer (v0.2.0): gated course.json → ONE self-contained\n#    HTML file (opens over file://, zero network, deterministic: same course = same bytes)\nnode package-tutorial-factory/scripts/render-site.mjs --course /tmp/course.json --out /tmp/site/index.html\n#   → site → /tmp/site/index.html  (47766 bytes, 6 sections, 8 achievements)\n\n# 6. VERIFY — EXECUTE the site against a DOM shim and drive it like a learner: open every section,\n#    complete every exercise by clicks, take the final test, click Reset — then assert the\n#    PERSISTED state, not the prose\nnode package-tutorial-factory/scripts/verify-site.mjs --site /tmp/site/index.html\n#   → PASS — 24 behavioural checks hold.   (exit 0 iff every assertion holds)\n```\n\n**Verifier trust boundary:** `verify-site.mjs` executes the app JavaScript embedded in the supplied\nHTML inside its Node DOM shim. Run it only on HTML produced by this factory or otherwise trusted input;\nit is a behavioural verifier, not a sandbox for hostile third-party pages.\n\n**When to use which render medium:** the built-in renderer (step 5) is the default — CI-able, zero\nmodel cost, one file to ship anywhere. Ask the skill for `--medium edu-site` only when you want the\nfull React/Vite gamified SPA (an agent builds it), or `--medium markdown` for plain ordered chapters.\n\nOptional authored fields the renderer honours (all omit-safe — absent means a generic fallback or\nnothing, never fabricated content): `introNote`, `introHeading`, `outro.{pass,next}`,\n`exercise.successFeedback`, per-section `notebook {when, note}` (if ANY section carries a notebook,\nEVERY section must — verify-site enforces device consistency).\n\nA worked example ships in the repo under\n`features/package-tutorial-factory/dogfood/skills-book-digitizer-course.json` (gate PASS, IP clean).\n\n### Зачем это (RU)\n\nДо v0.2.0 фабрика доводила курс детерминированно только до `course.json`: шаг «рендер» был\nинструкцией для агента («поручи edu-site-generator»), то есть невоспроизводим и непроверяем в CI.\nТеперь конвейер исполняем от начала до конца: `бриф → гейт → рендер → верификация` — четыре скрипта,\nноль вызовов модели после гейта. Рендерер выдаёт один автономный HTML-файл (открывается по file://,\nбез сети), а верификатор не парсит страницу, а ЗАПУСКАЕТ её и проходит как ученик — кликает каждое\nупражнение, сдаёт финальный тест, жмёт Reset — и проверяет сохранённое состояние, а не текст на\nэкране. Зелёный `verify-site` означает «курс работает», а не «HTML валиден». Передавайте ему только\nHTML, созданный фабрикой или из другого доверенного источника: верификатор исполняет встроенный\nJavaScript и не является песочницей для чужих страниц.\n\n## The two safety properties (and why they are on the cheapest layer)\n\n1. **The STRUCTURAL Head First properties are enforced deterministically (ADR-003, Plane 1).**\n   `package-tutorial-factory/scripts/headfirst-gate.mjs` is a zero-LLM checklist that proves — with certainty — only what a rule\n   can decide: a NON-BLANK exercise per section (blank/null shells are rejected — pedagogical quality\n   is NOT judged), type diversity, the concept word PRESENT (a lexical match) in theory + exercise +\n   finalTest, the full reflective quartet, the persona `name` threaded through EVERY section, ≥8 distinct\n   well-formed achievements, and citations that RESOLVE in\n   the shipped KB. It **discriminates**: its test breaks each property one at a time and asserts the\n   verdict flips. **It does NOT — and never claims to — judge the SEMANTIC quality of tone (P3), surprise\n   (P4), or story (P8).** A green gate means the course is structurally Head First, not that it *reads*\n   well. That judgment is Plane 2 only: `package-tutorial-factory/scripts/brain-friendliness-prompt.mjs` builds a KB-grounded\n   prompt for a FRESH cross-model reviewer, and an empty/gradeless answer is a loud fallback, never a\n   clean pass — it is advisory, never an auto-block.\n2. **The book never ships (ADR-004).** Only the distilled, paraphrased, page-anchored method-KB ships. The\n   raw copyrighted corpus stays local (gitignored). `package-tutorial-factory/scripts/shingling-check.mjs` proves **zero** verbatim\n   runs ≥8 words. The explicit package `files` inventory excludes raw `research/` and book-corpus\n   paths. One intentionally shipped exception is the tiny synthetic test fixture\n   `test/fixtures/synthetic-corpus/chunk-001.md`; its exact path and SHA-256 are pinned by the package\n   and packed-artifact tests.\n\n## Scope & honest limits (what the gates do and do NOT prove)\n\nThe two deterministic (layer-1) gates were hardened across three cross-model QE rounds. Each round\nclosed real bypasses, but each also surfaced a deeper \"distinct-but-meaningless\" trick (structure) or an\nexotic text-hiding trick (IP). That is the infinite-regress signal: **you cannot deterministically prove\n\"meaningful / non-placeholder / genuinely Head First\", nor perfectly defend against an adversary who\ncontrols the course text.** So the promises are deliberately narrowed:\n\n- **The layer-1 gates prove STRUCTURE + IP-safety only** — presence, non-emptiness (after zero-width /\n  invisible strip), citations that resolve against the **content-pinned** KB, no verbatim reuse in\n  **normally-authored** text, and no raw book corpus in the tarball (the exact hash-pinned synthetic\n  fixture above is test data, not book content). **The gate is NOT a DRM and NOT a semantic judge.**\n- **Whether a course is non-placeholder / pedagogically meaningful / genuinely Head First in voice is a\n  Plane-2 property**, certified by the cross-model review (ADR-003 layer-3), **NOT** by the deterministic\n  gate. **A determined placeholder course CAN pass the structural gate** — the Plane-2 review is what\n  catches it, and the factory pipeline **REQUIRES that review before a course is considered done**.\n- **IP defense is LAYERED**, not a single gate: authoring reads a **pre-cleared** paraphrased KB (proven\n  0 verbatim vs the corpus) **AND** the raw corpus is **structurally excluded** from the tarball **AND**\n  the shingling gate catches normal verbatim reuse. **Adversarial obfuscation** (e.g. hand-crafted\n  JSON-duplicate keys, arbitrary homoglyph/steganographic tricks) is **out of scope and documented** —\n  it is not the factory's failure mode, since the factory authors the text from the cleared KB.\n- **The Ed25519 manifest authenticates the 35 signable files in the `pnpm` publish tarball, not\n  `sbom.json` itself.** Source and tarball keep the same path inventory, while `pnpm` may re-serialize\n  `package.json`; the manifest and SBOM therefore bind the packed artifact using raw SHA-256 for every\n  path except the repository-wide canonical JSON hash for `package.json`. Treat a source\n  directory or separately copied SBOM as unauthenticated unless it is repacked and the exact unpacked\n  artifact passes `dz verify-pack`.\n\n## Contents\n\n<!-- runtime-paths:start -->\n\n- `package-tutorial-factory/SKILL.md` — orchestrator.\n- `package-tutorial-factory/modules/00-orchestrator.md`\n- `package-tutorial-factory/modules/01-extract-concepts.md`\n- `package-tutorial-factory/modules/02-author-course.md`\n- `package-tutorial-factory/modules/03-headfirst-gate.md`\n- `package-tutorial-factory/modules/04-brain-friendliness.md`\n- `package-tutorial-factory/modules/05-render.md`\n- `package-tutorial-factory/modules/06-verify-handoff.md`\n- `package-tutorial-factory/references/course-skeleton.md`\n- `package-tutorial-factory/references/head-first-method.md`\n- `package-tutorial-factory/references/method-to-edusite-map.md`\n- `package-tutorial-factory/references/Onest-OFL.txt`\n- `package-tutorial-factory/references/JetBrainsMono-OFL.txt`\n- `package-tutorial-factory/references/course-theme-compat.md`\n- `package-tutorial-factory/scripts/app.src.js`\n- `package-tutorial-factory/scripts/brain-friendliness-prompt.mjs`\n- `package-tutorial-factory/scripts/course-schema.mjs`\n- `package-tutorial-factory/scripts/extract-brief.mjs`\n- `package-tutorial-factory/scripts/headfirst-gate.mjs`\n- `package-tutorial-factory/scripts/render-site.mjs`\n- `package-tutorial-factory/scripts/shingling-check.mjs`\n- `package-tutorial-factory/scripts/verify-site.mjs`\n- `package-tutorial-factory/scripts/course-theme.css`\n\n<!-- runtime-paths:end -->\n\n## Tests\n\n```bash\nnpm test        # node --test — extract-brief, factory-authoring, headfirst-gate, honest-scope, ip-shingling, render-site, course-theme\n```\n\nThe test files are the ADR Confirmation gates. The IP-verbatim tests require the local (gitignored)\ncorpus and SKIP loudly when it is absent; the pack-excludes-corpus test always runs.\n\n## License\n\nMIT. The shipped method-KB is a distilled, paraphrased form of a copyrighted book's *method* (facts and\nmethods are not copyrightable); no verbatim book expression is redistributed. See\n`features/package-tutorial-factory/03_adr/004-corpus-ip-and-provenance.md`.\n\n## Changelog\n\n- **0.7.3** — portable packaged tests: doc-rich extractor coverage uses a self-contained synthetic\n  SKILL pack, retaining provenance, no-escalation and Infinity-clamping checks. Shipped honest-scope\n  checks read the package README/module; repository-only ADR phrase assertions remain enforced in\n  CLI integration. Adds the current-release marker, preserves prior version history, and corrects\n  source-stamping ownership. Runtime, fonts and skill modules remain unchanged.\n\n- **0.7.2** — delivered the Phosphor dark and compatibility light course themes, embedded Onest and\n  JetBrains Mono fonts with their complete SIL OFL notices, and offline single-file rendering.\n  Keyboard disclosure and mobile navigation retain visible focus; footer links retain 44px targets,\n  and matching/achievement animations respect reduced motion. Existing progress, scores and saved\n  theme preferences are preserved.\n\nSource stamping belongs to the repository publisher: it records the published source package,\nlive npm version and authoring timestamp before rendering. Registry failure remains visible by\nomitting `version`, without a local-manifest fallback; a mirror receipt is included only when real.\nThe deterministic renderer stays offline and does not mutate the course input. Repository backfill\nof existing tutorials remains a separate publisher operation.\n\n- **0.7.1** — **four diagram kinds, because content has four shapes.** 0.6.0 shipped only `flow`,\n  and the result was measurable: 2 diagrams in a 14-section course, 5 in a 17-section one — not\n  because the criterion was strict, but because anything that was not a sequence had nothing to be\n  drawn with. Added `compare` (a choice: columns with gains and costs), `scale` (a gradient where\n  vertical position IS the meaning — the detection-cost ladder finally has a picture) and `parts`\n  (a whole and the parts that must all be present). The authoring criterion is rewritten from \"is\n  there a sequence\" to **\"must the reader hold a structure the text is forced to deliver linearly\"**,\n  with a removal question before shipping — take the diagram away, and if only prettiness is lost it\n  was not needed. Gate knows each kind's own keys and refuses a leftover from another kind; verifier\n  counts nodes across all three node shapes, so a compare/scale diagram that drew nothing cannot pass\n  silently. Re-authored both shipped courses: 9 diagrams in harness-cli, 13 in feature-adr. 90/90.\n\n- **0.6.0** — **diagrams**. A section may declare `diagram` as DATA (`kind:\"flow\"`, title, 2–8\n  nodes with label/note, optional `cycle`) and the runtime draws it from theme tokens: a row on a\n  wide screen, a column under 640px, dark mode for free. Optional by design — there is no measured\n  need to require illustrations — but strict once declared: the new gate check\n  `structural.diagram-shape` REFUSES an unknown key rather than ignoring it, because a silently\n  dropped typo is a diagram that never appeared. `verify-site` gains `diagram.renders`, which drives\n  the page and asserts every label, note and caption is on screen.\n  There is NO author markup: labels go in as text, so `<script>` in a label renders as those\n  letters. That is the answer to a cross-model finding — a hand-written SVG was measured pulling the\n  network through `<image href>` while the verifier stayed green — and the security test is\n  mutation-proven: swapping the text insertion for an HTML one turns it red. 90/90.\n\n- **0.5.3** — course-level links + two probe-honesty fixes. `course.feedback` `{repo, packagePath,\n  branch?}` now renders TWO footer links from one declaration: a prefilled **new-issue** link whose\n  title names the exact package, and a **package README** link on the public mirror; a malformed or\n  absent block yields NO link rather than a broken one. Verifier honesty: theory probe words are\n  sampled from the VISIBLE text (a markdown link's URL lands in an href and is not missing prose),\n  and the concept probe now shares the GATE's morphology-aware matcher instead of a substring test\n  that failed on Russian inflection (`одиннадцать` vs `одиннадцати`) — both measured false-failures\n  on real courses. Authoring module gains the Russian language-quality rules (no calques, anglicisms\n  only where they are terms) and the literary-stage model chain **Fable → gpt-5.6-sol → any, named\n  in the report**, with the gate re-run after every literary pass. 85/85.\n\n- **0.5.2** — authoring surface upgrade, driven by owner findings on the first production course:\n  the markdown-lite renderer now supports `- ` bullet lists and `[label](https://…)` links\n  (https-only, `rel=\"noopener\"`); a new deterministic gate check `structural.theory-readable`\n  fails any 700+ char theory with fewer than 2 paragraph breaks (RED-proven against the\n  pre-restructure course — all 8 sections failed, the restructured ones pass); pattern chips get\n  per-pattern Russian tooltips (P1–P12/D1–D4 explained on hover); the authoring module now\n  REQUIRES structured theory and npm/repository links for published target packages. 80/80.\n\n- **0.5.1** — UI locale seam: every chrome string (menu, buttons, exercise labels, achievements,\n  final-test copy) now lives in ONE table inside `render-site.mjs`, embedded into the page as an\n  inert `#ui-strings` JSON block chosen by `course.language` (`ru` → full Russian chrome; anything\n  else keeps English byte-for-byte). The runtime AND `verify-site` both read that embedded table —\n  one source, no drift — so a localized site is driven and verified in its own language (probes\n  included: buttons, `completed ·` pill, achievements counter). dz commands are never translated.\n  Two new roundtrip tests (ru-chrome drive-through, en-unchanged), 80/80.\n\n- **0.5.0** — every rendered site now carries a channel footer (default links: `t.me/llm_notes` +\n  `aicoding.space`; per-course override via `course.footer.links`; https-only filter — a\n  `javascript:`/`http:` entry never reaches the page). `verify-site` gains the `footer.renders`\n  check (29 behavioural checks; an all-filtered footer fails loudly) and its self-contained scan\n  now honestly counts external *loads* (`src`, `<link href>`, `url()`, `@import`) rather than\n  every `href=`, so navigation anchors no longer conflate \"self-contained runtime\" with\n  \"no outbound links\". Three new seam tests (default / override / hostile link), 78/78.\n\n- **0.4.4** — `package-tutorial-factory` is now a genuinely self-contained portable skill: its\n  method KB and all eight runtime assets live inside the canonical skill directory, direct commands\n  resolve through the installed `SKILL_ROOT`, and clean Codex/Claude projections carry the same\n  19-file closure. The package intentionally includes its eight deterministic test/fixture files so the source and\n  `pnpm` artifact share one closed path inventory; the signature binds the packed artifact under that\n  canonical signing rule. Direct package-root callers must migrate from\n  `scripts/<entrypoint>` to `package-tutorial-factory/scripts/<entrypoint>`.\n\n- **0.3.0** — F1: extract-brief's 2-topic ceiling for no-SKILL.md packs is gone. Every substantive\n  README `##` section becomes its own topic (CommonMark-fence-aware — code-sample headings can never\n  become topics or keyConcepts, one shared fence walker; exact-match boilerplate stoplist; dedup\n  ids), and escalation is decided by substantive DOC VOLUME (`--doc-floor`, intro/badges excluded)\n  with `--min-topics` kept as a content-topic backstop. Cross-model Codex QE: two rounds, 21\n  findings closed (fenced-heading harvest, mixed ```/~~~ delimiters, unclosed-fence keyConcept\n  pollution, string-form bin/exports, strict option parsing …). Live: harness-cli went from\n  `2 topics + ESCALATE` to `18 topics, no escalation` (MEASURED — reproducer\n  `node package-tutorial-factory/scripts/extract-brief.mjs --pkg ../harness-cli`; suite `npm test` 75/75).\n\n- **0.2.0** — F2: the factory gains its OWN executable render seam. `package-tutorial-factory/scripts/render-site.mjs` turns the\n  gated course.json into one deterministic, self-contained HTML file, and `package-tutorial-factory/scripts/verify-site.mjs`\n  EXECUTES it against a DOM shim — walks every section, completes every exercise (and the secondary\n  \"Check yourself\" quiz) by clicks, takes the final test, clicks Reset — asserting PERSISTED state and\n  device consistency, with achievement expectations evaluated per condition (an unsatisfiable promised\n  achievement is a RED). Runtime fully course-agnostic (optional `introNote`/`introHeading`/`outro`/\n  `successFeedback`/`notebook` fields). Cross-model Codex QE: two rounds, 17 findings fixed incl. a\n  published-artifact ENOENT (`files[]` omitted the runtime), attribute injection, and a Reset no-op\n  (MEASURED — reproducer: `npm test`, 63/63; live: `node package-tutorial-factory/scripts/verify-site.mjs --site <site>` on the\n  fixture course → `PASS — 24 behavioural checks hold.`).\n\n- **0.1.2** — F4: the gate now CHECKS the `topics[]` Step-0 projection (present + ids match sections 1:1, exactly what `toStepZero` derives) — the contract the shipped dogfood example had silently diverged from; the dogfood is regenerated via the contract's own projection (MEASURED — reproducer: `node package-tutorial-factory/scripts/headfirst-gate.mjs --course <course-without-topics>` → FAIL 1/13).\n\n- **0.1.1** — the Plane-2 prompt builder is now FAIL-CLOSED on its KB precondition (mirror of the gate's pin): an absent or counterfeit --kb refuses with exit 1 instead of emitting a confident \"grounded\" prompt (MEASURED — reproducer: `node package-tutorial-factory/scripts/brain-friendliness-prompt.mjs --kb /nonexistent-kb.md --course <any>` → exit 1).\n\n## Offline course theme\n\nThe deterministic renderer emits a single HTML file with the Phosphor dark palette and a compatibility\nlight palette. Fresh courses start light; existing `dz-course:<courseTitle>` progress, scores and saved\ntheme preferences survive. The theme uses flat panels, Onest prose and JetBrains Mono service/code\ntext, local code scrolling, one horizontal mobile navigation row, and keyboard-accessible achievement\ndisclosure. Keyboard activation keeps later mobile sections visible in the navigation row; footer links\nretain spacing and 44px targets. Normal matching/achievement animations respect reduced-motion\npreferences. It introduces no schema or hash-routing change.\n\nSeven original WOFF2 resources are embedded as data URLs, so copying only `index.html` works offline\nand under non-root static paths. Both complete font notices accompany the HTML and npm package.\nThe package code is MIT; the original Onest and JetBrains Mono fonts remain **SIL OFL 1.1**. JetBrains\nMono is release 2.304; the exact upstream revision of the supplied variable Onest subsets is unknown.\nSee [font provenance and site compatibility](package-tutorial-factory/references/course-theme-compat.md).\n\nGenerated pages declare `html[data-course-theme=\"phosphor-v1\"]`. The existing site overlay is tolerated;\nwebsite migration, hash navigation, SEO, workshop inserts, analytics and deployment remain site-owned.\n","readmeFilename":"README.md"}