{"_id":"@david.zoufaly/noldor","_rev":"18-2cf49553c6c33772b2eb74548b105340","name":"@david.zoufaly/noldor","dist-tags":{"latest":"1.15.0"},"versions":{"1.0.1":{"name":"@david.zoufaly/noldor","version":"1.0.1","_id":"@david.zoufaly/noldor@1.0.1","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"166010e9286397b920ebbddcf477f55b1917cef9","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.0.1.tgz","fileCount":1836,"integrity":"sha512-a6B0K8PfICRxRJTCpPFkoBpC2/qBY9x6hTydfKAJbt+qVgO67rqEquB2n5RsqvXwX1UY3KATshkwhCkbnNwC0A==","signatures":[{"sig":"MEUCIQDX6shbotNVeQdQnl2+sMPzksfbgKe79WqtNn+nTyB4cQIgHo/PT9qn8tA/ScZmLhxEUgDwNo3j1/xW5oHHK2vK4t4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6650587},"type":"module","exports":{"./templates/*":"./templates/*"},"gitHead":"40b00961ea83285553a2774ad4c7d816f6e65b14","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.0.1_1784110094276_0.008238516132250462","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@david.zoufaly/noldor","version":"1.0.2","license":"MIT","_id":"@david.zoufaly/noldor@1.0.2","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"69207bd5331a1391a9c80ea09c826f82d97251b3","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.0.2.tgz","fileCount":1836,"integrity":"sha512-LREoD9qorOxKDQvk5F7yBhGkwnDShz9JvGxDAiY5cXgYdcy/a4frDtmASPVKLzyBaYIuudfrxPyC0iXt7LnYyw==","signatures":[{"sig":"MEUCIQCU7YdYmrCg4LmcKPe0ldd92DCX97p+82FfdvjQ1P0IAwIgHSjbmLjQT0yQh0Oynu8mxhoLajirKoTl8Kie9lwGRHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6650607},"type":"module","exports":{"./templates/*":"./templates/*"},"gitHead":"0c0b38d43dfe29c4ca16334f3399f857957a3b2a","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.0.2_1784117192440_0.1963827103619613","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@david.zoufaly/noldor","version":"1.1.0","license":"MIT","_id":"@david.zoufaly/noldor@1.1.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"f292444add2f2c072208bd60066f5f602362892f","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.1.0.tgz","fileCount":1837,"integrity":"sha512-TEmrAWPoeiGAxFg4ZILEj6kVFHmVkYzmIkAKoHwnF1INDs2nuJpzLXNk2Fb5AohUHIc6encOMMKIKphkPVs3Qw==","signatures":[{"sig":"MEQCIByn+jli37AHwab0aeNwlkE3wtmOeuAM9Q2IUef51yibAiAStqPaEcW78p/fMIulQBcRFipyJ7eXmxoIoLVi2PqHIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6657855},"type":"module","exports":{"./templates/*":"./templates/*"},"gitHead":"f7a8be08d96a50ede9b8625d50bc2d84ad656a8e","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.1.0_1784890510085_0.8579407809805497","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@david.zoufaly/noldor","version":"1.1.1","license":"MIT","_id":"@david.zoufaly/noldor@1.1.1","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"08ddde5c16981a3da31a613cb3c04e78feeb9661","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.1.1.tgz","fileCount":1882,"integrity":"sha512-EGeO05yF5jNcMIlxPoPszLPefZFvPn8TzKoOil9JPDZHpuY2ZgwCTpfPGM1MoYV+iG/npY36/OyWec229FOzyg==","signatures":[{"sig":"MEQCICGSKcnY6+I0S7yX5aJTKl/nH2och5uLcuVF11i0H/REAiAMfdibctLVK+2zgGC6Sa0uiiBMu35fSkah5qgBFFNO2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6999650},"type":"module","exports":{"./templates/*":"./templates/*"},"gitHead":"7266bb72a73c25a96dee94c228008b928be71c0d","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.1.1_1786013343860_0.4898581109922382","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@david.zoufaly/noldor","version":"1.2.0","license":"MIT","_id":"@david.zoufaly/noldor@1.2.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"7a6b264e73901b51905ae85bed3b7b0113476852","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.2.0.tgz","fileCount":1942,"integrity":"sha512-8hYa66LTSO+tXrdXJ/L2tXtzs2KpfMqtDQO95nZxnUqrog9NnS4/TCvpVE1kJXlUfhhffU+OpnMy1wvTSHE/wQ==","signatures":[{"sig":"MEUCIQDook5GQ9EK3eYp6VrEpolHFA/sSobAjiqn+8tCfbaiSwIgFlhTNFV/Xj4RAZIkTv1bzqxweI2jr/TRMF6j90bW8GI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7407358},"type":"module","exports":{"./templates/*":"./templates/*"},"gitHead":"66c4b48f9757025f845c89089429fa153989f027","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.2.0_1786382575183_0.5951476496895558","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@david.zoufaly/noldor","version":"1.3.0","license":"MIT","_id":"@david.zoufaly/noldor@1.3.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"7b8d813321691f57792746fc4de885a4a4f8ef59","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.3.0.tgz","fileCount":2066,"integrity":"sha512-/b0pNHp0bXFwSOQxE2kWm1lGVJgSq/ihE03Kax6SnzvoBORbhjEAnqKyMW5vO6v3lyR49W4ZpqWtmN5Sh2rbRw==","signatures":[{"sig":"MEQCIDSxtwzqcROPpwG8+bJGcMtFc0kkN81NHFPSeIsCK8GpAiBhGxsjTOHM2CU3IvUj49vLDY/95NwLjb1uRSrJic+pNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8183350},"type":"module","engines":{"node":">=20","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"2c4ed5f47420a0b24bb0289f97540bac1588a6d7","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.3.0_1786720746312_0.8395572827487217","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@david.zoufaly/noldor","version":"1.4.0","license":"MIT","_id":"@david.zoufaly/noldor@1.4.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"78f770bffbf64c7a22eb361e26b81664054e28b2","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.4.0.tgz","fileCount":2258,"integrity":"sha512-SmhLi4ktDvkcuggI/82GZwR1N3ok6PB1+LdHrnF/i0dMQ337TpVLC3WgqLHIRT/5pQBAKNNzGuA4/qtrb1hmQA==","signatures":[{"sig":"MEUCIQDQWXSIaxCwdayg0JMUlb4woJWo0TdEiUWrQVZKJEg4VwIgf/JDwdIURkJe/6ZMSwSsMc7AiNbiTfMReki7luH4PuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9159943},"type":"module","engines":{"node":">=20","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"36a750d1df7dcd875905c3726629534fd950a946","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"tsc","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"tsc","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.21.0","zod":"^3.24.0","yaml":"^2.8.3","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^5.8.0","@types/node":"^22.0.0","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.4.0_1787265651668_0.4204324000103876","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@david.zoufaly/noldor","version":"1.5.0","license":"MIT","_id":"@david.zoufaly/noldor@1.5.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"9ba001e6b97e22ff91ca499fcbbc2bf8d73c3fe4","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.5.0.tgz","fileCount":461,"integrity":"sha512-meFSiV02fjxwUeFHCCHcsmjT4Xi5WQRGbF+QXbvjnezFJLb4rNEayz3yDEE8u/3N2nWkn4g2cpa0IFu39i13vQ==","signatures":[{"sig":"MEYCIQC0K4CUG8ltqZQhJTYUr3tyBY4bZUYNfgcY4vR9r8IflAIhALt8iXX2nAAb3E7QZv0QXoeJY6JlQM/YpU/l2jA9wWPA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2724430},"type":"module","engines":{"node":">=20","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"ad8bba2245b304dda82d91600ecdfa277c1a314a","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc --noEmit","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"10.9.8","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","@swc/core":"^1.16.1","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.5.0_1787498451098_0.05354899339196528","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@david.zoufaly/noldor","version":"1.6.0","license":"MIT","_id":"@david.zoufaly/noldor@1.6.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"f7c3a476e8d4e55cef6b57b402dfd6a68cd9df55","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.6.0.tgz","fileCount":499,"integrity":"sha512-e+uoKcqxTwNfGs+PbGgW5uupPvG6RGsEon9bONyYdL1ILN9dMpOFFPQaiVE9xsBx9S5kYXdOX7/z8WI6nlQGTQ==","signatures":[{"sig":"MEYCIQDb5m8Hhh/WfaTbDVw3xfvI1wIJsJO0MY2Uy4O/4gyXVQIhAMU60/64gGYp5V9BYU8SDdTb2SIBrUqaz5V8ctJE//6f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3160089},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"2c18fdb40729839e64479aaa05eb7569f511492f","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.17.0","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","@swc/core":"^1.16.1","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.6.0_1788119714830_0.09361796308603743","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@david.zoufaly/noldor","version":"1.7.0","license":"MIT","_id":"@david.zoufaly/noldor@1.7.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"55ad076d661fc045edee70670d5256b8da287b6f","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.7.0.tgz","fileCount":508,"integrity":"sha512-rmxhJD97VRaaNE2XnHSr7Uw0AJ81Xz33EatLEURC5FAMzdOKMgUD+Py9ziBuGO3YzMVtAlXo31XtofxRf5STFw==","signatures":[{"sig":"MEYCIQDSZ4MabsrtZYRUmz4oPOErc2zrAgbC51ehsCw4BPNKBwIhAJlApX0iA18t2IOHQ/rmspZDkCvlzowPAJUf20BFC4Nb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3270705},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"94bf4ec2db785ac8fd11c90d4ba26f6211d6f460","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.17.0","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.7.0_1788389317912_0.03648974763846047","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@david.zoufaly/noldor","version":"1.8.0","license":"MIT","_id":"@david.zoufaly/noldor@1.8.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"e5601689141616e795dac88145166cbee9eb80d8","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.8.0.tgz","fileCount":508,"integrity":"sha512-gdi5wKUS984EAEJRg1AreOSb3nWiZ4GNZjO+83hAps9fNaqzlE27LEW7MpqRWDL3TJ7nYBjXsGLZbY8Puo93Ng==","signatures":[{"sig":"MEQCIGPAIkAt7TT5sgfEntNGOU8Jw2NW4LDexRoHTwSWF+gJAiAxgBfBxKvfz8ksciW+LZWBCJA7GGEP4QRqQJqfh5xvPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3301728},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"957f785392b81c335ed788f4429f575b152c2cfb","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.17.0","description":"**A discipline framework for agent-driven software development.** One mandatory gate for every code change, features anchored in docs, and an autonomous queue that ships small work while you sleep — with a live dashboard watching the whole pipeline.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.8.0_1788442129104_0.27291644777022017","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@david.zoufaly/noldor","version":"1.9.0","license":"MIT","_id":"@david.zoufaly/noldor@1.9.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"714252d90d98ff30612b7b03fcfd306412a4ff8a","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.9.0.tgz","fileCount":517,"integrity":"sha512-xudz2OsAGBHZg6qEWcfpNldxx11a/vOjUHJXVLaW7r6jY6aCpOz0wRuCy5MB4zleVKRekdyCDXNKGVuTMsgP5g==","signatures":[{"sig":"MEUCICD/av4oXqIssA6nbp029sqRvgo7tdKEtqEHfDttB4TQAiEAyU5gC60mUhkxBEjiluYB1HwF4F9O8bEjfEdHWNE4700=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCtq77Y0Qm2CtgBXSSwHyBk4jC0IvSzwaKM8+3mVBp1vwIhAN2nHmaZ3sIZ8oSqUJ9zjnneSFz5X64GNlro7sUypqR8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3455207},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"70fee00a4afc59703b6fba847d51538b509f4831","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"Noldor is a discipline framework for repositories where agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a rev","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.9.0_1788729806135_0.9325602558187014","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@david.zoufaly/noldor","version":"1.10.0","license":"MIT","_id":"@david.zoufaly/noldor@1.10.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"8465ac5cb4fd4bf208dbb3a9309816a6e1cc8221","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.10.0.tgz","fileCount":520,"integrity":"sha512-BxnPqZsWUJVTM+gjhjc4ya3urKv5IBEYJAY6ankwL58fpqoIIU6jaaCmhsBCfU79YT56j3VLIC02VyrYpxeHpQ==","signatures":[{"sig":"MEQCIDVbNV18n7LuAelbK8yp7FFAKOGdSBEAENF0TSOYAit9AiBfJJdVOQwtdYy/jyGZS7DCRbOJxkTO5PXEfldPK7pY6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGocWl3/8bxbjzoRVztADEndUQLh0seD1mj2KVjq/OEUAiEAjBaPpGb5QAQHiAurew6ULhinZLWrb9k0UavNJ+xSMzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3544061},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"ea34e811c68d59cfe8941958cae196617962f14e","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"Noldor is a discipline framework for repositories where agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a rev","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.10.0_1789576119111_0.6340128316296378","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@david.zoufaly/noldor","version":"1.11.0","license":"MIT","_id":"@david.zoufaly/noldor@1.11.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"50f79af77ca761f382810b51a593994cbe4d13d6","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.11.0.tgz","fileCount":524,"integrity":"sha512-yu+Y4hxvgonrjzZV5t2ME70PLUiE+xkR8KTFLp7qOtNNr+MzTf7H7gqRbvZ/8q0JFw+IFCVgn8H4wkq5btm5UQ==","signatures":[{"sig":"MEYCIQDMEUvoY96xBvMeRM22WbGAtPQ4jrHPpRuddp/uqka8kQIhAPsqt7GeRZg7mBqaJRjFg5iaPcztxytrUwxaN4VXkRlD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCIxiZCOw6EXHUKd5srp40AhO7Jr9jOr+JHl0koDSsITQIgQ/d24IG0JEVdnixeYDkJIMs8sQ9lHBHKyKyOMhC6B0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3599438},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"0c3a79a4eb570e7fdd9413a7c2802ebca5c220a5","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"Noldor is a discipline framework for repositories where agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a rev","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.11.0_1790087804902_0.96227909582502","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@david.zoufaly/noldor","version":"1.12.0","license":"MIT","_id":"@david.zoufaly/noldor@1.12.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"9f7ffe14c7cd2103eee3d9001d305ed3d2b31cea","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.12.0.tgz","fileCount":537,"integrity":"sha512-ypGVC95Spvc0fbbodJjSA1NolOH9LqVw/t/jM1+kcnfPIqIH4sMgRp+8/L4oAZR/b1lx4BVAniQ1yJrU13WJCw==","signatures":[{"sig":"MEYCIQDHtKp/+Bwp8YRO/5kcUAbJguz/w5NoY/WeNLmnAOgIVgIhAPmgd8PgMJlLyuCJ27xU576E/CKHpOWlrp4scDwmmsSg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFt6OwGcrKvQ8Mu3VBZIaOEywNfcEQbgRhqNOZWgA9UFAiEAt1Vb5KqlplwIRpYcn7KrjPyETIoRWeAlNh0+iWyXfKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3799728},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"942ab96dc09eb1c23ecc660601aa078fdfc13ed2","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"Noldor is a discipline framework for repositories where agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a rev","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.12.0_1790211375555_0.0059077063726449275","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@david.zoufaly/noldor","version":"1.13.0","license":"MIT","_id":"@david.zoufaly/noldor@1.13.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"d23efeb641808e07a8ebc69410d52d603bb3edec","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.13.0.tgz","fileCount":539,"integrity":"sha512-c3jwqVx220KMRCB/3VdgJUlz9TmLjiL10/OukbqsvQBe223EWHB72g0ptkVdjYRW7txAQo9lyrsoTZqggAHmMA==","signatures":[{"sig":"MEQCIGKZoyVj5OGQV4VjntDTtyEg8Sw+BRu9docJJnWSe7D/AiB1TqRAsaGi6lGekKjzYDgsEso2iF30yjBfOg0qQYmMlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD9f5YCemN5NW/wVJyJkVazaIuip0rpvYaBVlXAABnFagIgYC3rRNwkDCMbPDIPUKy4uiJ+wtB/aLaPLl/oBPX8scI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3840629},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"3376d78005b9d120a10756774d84d6403548f6f4","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"Noldor is a discipline framework for repositories where agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a rev","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.13.0_1790256321015_0.5271409414353527","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@david.zoufaly/noldor","version":"1.14.0","license":"MIT","_id":"@david.zoufaly/noldor@1.14.0","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"homepage":"https://github.com/davidzoufaly/noldor#readme","bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"bin":{"noldor":"bin/noldor.mjs"},"dist":{"shasum":"d20ac415a4edb64e0c4e533255ec6567c4cbf544","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.14.0.tgz","fileCount":592,"integrity":"sha512-x7iGtwVGWGrh1262Ruq/roIugrcnVC7rG2JUZT/zEolGhIuvdFpLhc7lCAqE0d/CtEhAPamNnwrpb3HzFdsyJA==","signatures":[{"sig":"MEYCIQDXVTCAv8drKrUjjqVOWJtJwkTL6xuKNJaWCjB/SPIrRAIhANdtwrtJNIIj2HQpWIamhZS1SMQ6VbnYtHWOFm3MGK1N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDCaqmIHH3jaWWXdKtCp4xfgsb5hVBmVSEMX0O8+qwc7gIgO/xbfsvVXcwlaSJebviWY5JgasIiXmJuorSULkq0UtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4227937},"type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"5bb6887b61578ca99975e6c0c0c5baee8af1e981","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"<p align=\"center\">   <img src=\"docs/assets/brand/noldor-banner.png\" alt=\"Noldor. Prompts are suggestions. Hooks are rules. A pre-push receipt lists every check as passed, but the pushed tree no longer matches the reviewed one, so the receipt is stamped PU","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/noldor_1.14.0_1790679400779_0.6965875464500657","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"_id":"@david.zoufaly/noldor@1.15.0","bin":{"noldor":"bin/noldor.mjs"},"bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"dist":{"shasum":"205f8efe1c6b61578886bbc5087b7595c60dc0c7","tarball":"https://registry.npmjs.org/@david.zoufaly/noldor/-/noldor-1.15.0.tgz","fileCount":592,"integrity":"sha512-Uq8z6zqF9I2GFBXC2UIlRwJWsQuZSj6I+1shCW7KjImlrPHrxV6LyDHn2N3RgONBgyYsp+ZJ7eFW7F/EQnQrFg==","signatures":[{"sig":"MEUCIQDIZlJahLwzZUie4WiwWn9Brsdm42WuJcWmpmAr534EogIgLv4/+uNRVZKyO1O36Gz01LiiIxq285B+nhm3oOS/GIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEySPHuWcPX/xdpWDcvUwiq0ovlo6w6QwqVI3dMU5CbNAiB9U6+OJgvhVIUhXlZd4P/UHZOpWkcnaq0A075uFvzYUA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@david.zoufaly%2fnoldor@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4242463},"name":"@david.zoufaly/noldor","type":"module","engines":{"node":">=24","pnpm":">=9"},"exports":{"./templates/*":"./templates/*"},"gitHead":"34c2a02e3f4fecde6a8aad1ea6e343ad128ed888","license":"MIT","private":false,"scripts":{"fmt":"node bin/noldor.mjs fmt","lint":"oxlint --deny-warnings && oxlint --vitest-plugin -A all -D vitest/no-disabled-tests -D vitest/no-focused-tests -D vitest/warn-todo src","test":"vitest run","toon":"node bin/noldor.mjs graphify graph-to-toon graphify-out/graph.json","build":"node bin/build.mjs","clean":"rm -rf dist .turbo","noldor":"node bin/noldor.mjs","verify":"pnpm lint && pnpm fmt:check && pnpm typecheck && pnpm test && node bin/noldor.mjs triage validate --strict-refs","prepare":"node bin/build.mjs","release":"node bin/noldor.mjs release run","lint:fix":"oxlint --fix","dashboard":"node bin/noldor.mjs dashboard server","fmt:check":"node bin/noldor.mjs fmt --check","typecheck":"tsc -p tsconfig.typecheck.json","postinstall":"lefthook install || echo 'lefthook not found - skipping hook install (expected when installed as a dependency)'","bench:runtime":"node bin/bench-runtime-select.mjs","test:contract":"node scripts/test-contract.mjs","test:e2e:drain":"vitest run src/testing/__tests__/drain-e2e.test.ts","graphify:enrich-docs":"node bin/noldor.mjs graphify enrich-docs graphify-out/graph.json"},"version":"1.15.0","_npmUser":{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"},"homepage":"https://github.com/davidzoufaly/noldor#readme","repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"_npmVersion":"11.19.0","description":"<p align=\"center\">   <img src=\"docs/assets/brand/noldor-banner.png\" alt=\"Noldor. Prompts are suggestions. Hooks are rules. A pre-push receipt lists every check as passed, but the pushed tree no longer matches the reviewed one, so the receipt is stamped PU","directories":{},"maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.0","yaml":"^2.8.3","pngjs":"^7.0.0","marked":"^18.0.3","semver":"^7.7.4","@swc/core":"^1.16.1","minimatch":"^10.2.5","pixelmatch":"^7.2.0","gray-matter":"^4.0.3","highlight.js":"^11.10.0","marked-highlight":"^2.2.1","@inquirer/prompts":"^8.4.3","dependency-cruiser":"^16.10.0","zod-to-json-schema":"^3.25.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"tsx":"^4.21.0","oxfmt":"^0.52.0","oxlint":"^1.67.0","vitest":"^3.1.0","lefthook":"^2.1.9","typescript":"^7.0.2","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/noldor_1.15.0_1790695427840_0.18801493912390987"}}},"time":{"created":"2026-07-15T10:08:14.066Z","modified":"2026-09-29T15:23:48.339Z","1.0.1":"2026-07-15T10:08:14.469Z","1.0.2":"2026-07-15T12:06:32.656Z","1.1.0":"2026-07-24T10:55:10.263Z","1.1.1":"2026-08-06T10:49:04.037Z","1.2.0":"2026-08-10T17:22:55.427Z","1.3.0":"2026-08-14T15:19:06.544Z","1.4.0":"2026-08-20T22:40:51.882Z","1.5.0":"2026-08-23T15:20:51.279Z","1.6.0":"2026-08-30T19:55:14.989Z","1.7.0":"2026-09-02T22:48:38.139Z","1.8.0":"2026-09-03T13:28:49.231Z","1.9.0":"2026-09-06T21:23:26.265Z","1.10.0":"2026-09-16T16:28:39.240Z","1.11.0":"2026-09-22T14:36:45.038Z","1.12.0":"2026-09-24T00:56:15.654Z","1.13.0":"2026-09-24T13:25:21.139Z","1.14.0":"2026-09-29T10:56:40.901Z","1.15.0":"2026-09-29T15:23:48.000Z"},"bugs":{"url":"https://github.com/davidzoufaly/noldor/issues"},"license":"MIT","homepage":"https://github.com/davidzoufaly/noldor#readme","repository":{"url":"git+https://github.com/davidzoufaly/noldor.git","type":"git"},"description":"<p align=\"center\">   <img src=\"docs/assets/brand/noldor-banner.png\" alt=\"Noldor. Prompts are suggestions. Hooks are rules. A pre-push receipt lists every check as passed, but the pushed tree no longer matches the reviewed one, so the receipt is stamped PU","maintainers":[{"name":"david.zoufaly","email":"davidzoufaly@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"docs/assets/brand/noldor-banner.png\" alt=\"Noldor. Prompts are suggestions. Hooks are rules. A pre-push receipt lists every check as passed, but the pushed tree no longer matches the reviewed one, so the receipt is stamped PUSH REFUSED.\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@david.zoufaly/noldor\"><img src=\"https://img.shields.io/npm/v/@david.zoufaly/noldor?color=blue\" alt=\"npm version\"></a>\n  <img src=\"https://img.shields.io/badge/node-%E2%89%A5%2024-3c873a\" alt=\"Node 24 or newer\">\n  <img src=\"https://img.shields.io/badge/pnpm-%E2%89%A5%209-f69220\" alt=\"pnpm 9 or newer\">\n  <img src=\"https://img.shields.io/badge/license-MIT-lightgrey\" alt=\"MIT license\">\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick start</a> ·\n  <a href=\"#how-it-works\">How it works</a> ·\n  <a href=\"#what-gets-refused\">What gets refused</a> ·\n  <a href=\"docs/noldor/adoption-guide.md\">Adoption guide</a> ·\n  <a href=\"docs/noldor/README.md\">Docs</a>\n</p>\n\nNoldor is a discipline framework for repositories where AI agents write most of the code. Every change starts at one gate. The gate sizes the change, picks one of six paths, and scaffolds what that path needs: a worktree, a feature doc, a spec, a plan, a review. Git hooks then check that the artifacts exist, that the commit trailers name them, and that the review receipt on the tip commit still matches the tree being pushed. Edit a file after review and the receipt dies with it.\n\nIt is a CLI, a set of lefthook jobs that shell into that CLI, and a folder of JSON and markdown committed next to your code. There is no server and no database. Everything Noldor knows can be read with `git log` and a text editor.\n\n```bash\npnpm add -D @david.zoufaly/noldor\n```\n\nThe same hooks and review hold when nobody is watching. A drain ships small roadmap entries unattended, one fresh agent session per entry, and parks what it cannot finish for a human. More than twenty detectors check that the docs still describe the code.\n\nThis repository runs on Noldor. More than 600 pull requests have merged here since May 2026.\n\nThis page explains what Noldor is and whether you want it. The [adoption guide](docs/noldor/adoption-guide.md) gets it installed in a real repo, including the traps.\n\n## The problem\n\nAn agent will write a feature in twenty minutes. It will also skip the spec, forget the test, amend a commit that was already reviewed, and push to main, because nothing stops it. Instructions in a CLAUDE.md or an AGENTS.md are suggestions. The model reads them, agrees with them, and drifts anyway a few hours into a session.\n\nNoldor's bet is that discipline has to be mechanical. If a rule is not enforced by a hook with an exit code, it is not a rule. So the framework moves every rule it cares about out of prose and into git hooks, commit trailers, and files the CLI writes and validates.\n\n## How it works\n\nWhoever starts work, a person or an agent, runs `/noldor-gate` first. The gate reads the top of `docs/roadmap.md`, proposes an entry, and picks a path for it based on the entry's size. Then it scaffolds what that path needs and writes `.noldor/session.json`, the session marker. From then on the hooks know which path you are on and what they may demand of you.\n\n```mermaid\nflowchart LR\n  ideas[ideas.md] -->|/noldor-triage| roadmap[docs/roadmap.md]\n  roadmap -->|/noldor-gate| gate{size the change}\n  gate -->|micro-chore| commit\n  gate -->|fast-track| code\n  gate -->|specs-only, full| spec\n  spec -->|specs-only| code\n  spec -->|full| plan --> code\n  code --> review[review lanes]\n  review -->|receipt on the tip| commit[commit with trailers]\n  commit --> push[pre-push checks the receipt]\n  push --> pr[PR and auto-merge]\n```\n\n### What each stage leaves behind\n\nEach stage leaves a trace, and the next stage checks it:\n\n| Stage | What is written | What checks it |\n| --- | --- | --- |\n| Gate | `.noldor/session.json`, naming the path | An editor hook. Once the gate is armed, an Edit or Write to a tracked file with no session is blocked before it happens. |\n| Spec, plan | Files under `docs/design/specs/` and `docs/design/plans/` | The `reviewer` lane. It is unioned into every spec and plan review and cannot be switched off. On medium and large entries `codex` is added too, so nothing of that size ships reviewed by one model family. |\n| Commit | `Noldor-Path:` and `Noldor-FD:` trailers, injected from the session marker | The commit-msg hook validates scope and trailers, and that a spec file exists when the path says one should. |\n| Code review | One JSON sink per lane under `.noldor/cr/` | The aggregate step fails closed on a missing, corrupt, or mismatched sink. |\n| Receipt | `Noldor-Reviewed-Subagent: <tree-hash>`, amended onto the tip commit | The pre-push hook compares it to `HEAD^{tree}`. Any edit after review invalidates it. |\n| Ship | A PR whose summary is composed from the commits | `pr-flow` refuses to open a PR without a Why, How, and What. The pre-push hook refuses direct pushes to main outright. |\n\nBefore the first edit to a file, `pnpm noldor rules brief --file <path>` prints the engineering rules that bind that file. The code review later checks the diff against the same rule text, so rules arrive as guidance first and as findings only if ignored.\n\nReview can loop. A reviewer finds something, you fix it, the fix is new prose, and the reviewer finds something in the fix. Noldor caps that at two red re-rounds per artifact per session, in code, and it detects a reviewer oscillating between two positions. Past the cap you get one closing decision, not another round.\n\n### Six paths, chosen by size\n\nThe gate routes on the entry's `size:` field. You can override the pick, but the default is the policy.\n\n| Size | Path | Worktree | Feature doc | Spec | Plan | Review |\n| --- | --- | --- | --- | --- | --- | --- |\n| doc-only | `micro-chore` | no | no | no | no | no |\n| XS, S | `fast-track` | yes | no | no | no | reviewer |\n| M | `specs-only-new`, `specs-only-attach` | yes | new, or a parent | yes | no | reviewer and codex |\n| L, XL | `full-new`, `full-attach` | yes | new, or a parent | yes | yes | reviewer and codex |\n\nThe `-attach` variants extend an existing feature doc instead of creating one. A missing or unreadable size routes to `specs-only`, never to `fast-track`. The policy does not drop review because it could not read a label.\n\nTwo more paths exist that you cannot pick. `release-sweep` covers the regeneration commits before a release and `release-automation` covers the version bump itself. The release script and the sweep skill write their own session markers.\n\nDetails: [`complexity-gating.md`](docs/noldor/complexity-gating.md) and [`lifecycle.md`](docs/noldor/lifecycle.md).\n\n### What gets refused\n\nMost of these are git hooks. The first is an editor hook, and the last is the drain.\n\n- Editing a tracked file with no gate session. Claude Code's PreToolUse hook exits 2 and the edit never lands:\n\n  ```text\n  Noldor gate: edits to \"src/core/session.ts\" require /noldor-gate. Run /noldor-gate before editing.\n  ```\n\n- Committing on `micro-chore` with anything outside the allowlist of doc and policy files. One source file taints the whole set, and the rejection names the offenders.\n- Committing on a path that requires a spec when no spec file is on disk.\n- Pushing a branch whose tip has no review receipt, or whose receipt names a different tree than the one being pushed.\n- Pushing to `origin/main` at all. Every path lands through a PR.\n- Pushing a skill or rule page that drifted from its twin under `templates/`.\n- Shipping an entry headlessly when its body trips the oversize heuristics, however small its `size:` label claims to be. That entry goes to the escalation inbox for a human to re-size or split.\n\nNo hook can catch `--no-verify`, so repo policy forbids it. The sanctioned escape is a `Noldor-Path-Override: <reason>` trailer. It is logged, and the garden detectors audit the log.\n\n## Is Noldor for you?\n\nProbably yes, if:\n\n- Agents write a large share of your code and you want a trail a human can audit later without replaying the session.\n- Your stack is TypeScript, pnpm, git, and GitHub, and you are willing to run lefthook and write Conventional Commits.\n- You would rather have a few hard rules than many soft ones.\n\nProbably not, if:\n\n- You want to configure the discipline. Noldor is opinionated by design. The defaults are the framework, and even the size thresholds are constants in source rather than config.\n- You cannot meet the floor: Node 24, pnpm 9, git 2.30, gh 2, lefthook 1. `doctor` fails on the first missing row and points at the guide.\n- A typo fix going through a gate, a session marker, and a PR sounds like too much. On the `micro-chore` path that takes about a minute, but it is still a PR.\n\nClaude Code is the primary interactive runner. Codex and opencode are first-class for headless roles (review, drain, research) through the runner registry, opencode gets thin command shims, and codex reads `AGENTS.md`. See [`agent-runtimes.md`](docs/noldor/agent-runtimes.md).\n\n## Quick start\n\n```bash\npnpm add -D @david.zoufaly/noldor   # in a pnpm workspace root, add -w\npnpm noldor init                    # scaffold docs/noldor, hooks, skills, .noldor/config.json, rollout marker\npnpm noldor doctor                  # every prerequisite row should be green before the first commit\n```\n\nHave an existing repo with its own docs layout? `pnpm noldor init --adopt` reverse-bootstraps it. Choose which agent shims to write with `--agents claude,codex,opencode`. Re-pull the templates later with `--update`.\n\nThree things people trip on:\n\n1. Commit `.noldor/rollout-marker` in the bootstrap commit. It arms the commit-stage gate. The editor guard arms as soon as the file exists.\n2. The scaffolded hooks call your `lint`, `fmt`, `fmt:check`, and `test` scripts. Add any you lack before the first commit, or the hooks fail with \"missing script\".\n3. Fill the `consumer:` block in `.noldor/config.json` with real values, then run `pnpm noldor validate noldor-config`.\n\nFrom the first edit after that commit, the gate is live. Your first change goes through `/noldor-gate` like every change after it.\n\n## Unattended work\n\nSmall entries do not need you. The drain takes fast-track entries off the roadmap one at a time, spawns a fresh headless gate session per entry, and ships each through the same hooks and the same review an interactive session gets. With `--source plans` it ships already-designed features whose spec and plan are committed. `watch` turns the one-shot drain into a daemon.\n\n```bash\npnpm noldor autonomous run              # drain the roadmap once\npnpm noldor autonomous watch --detach   # keep draining on an interval\npnpm noldor autonomous status           # what is running, what shipped, what was skipped\npnpm noldor autonomous inbox            # escalations that need a human\n```\n\nThe drain refuses to start unless the config is headless-safe: `autonomous.onFailure` set to `abort`, `skipLanePicker` on, `requireHumanPrApproval` off. A child that would need to ask a question fails instead of hanging. The per-entry timeout scales with the entry's size. The daemon has a daily cap, a trip that fires after a run of failures, and an optional notify hook. Whatever it cannot finish, it parks in the inbox with evidence rather than retrying forever.\n\nDo not call it hands-off. It is hands-off for the boring third of the queue, which is the third nobody wants to do by hand.\n\nDetails: [`autonomy.md`](docs/noldor/autonomy.md) and [`drain-mode.md`](docs/noldor/drain-mode.md).\n\n## Drift detection\n\nDocs rot faster than code, so Noldor treats them as something to test. `pnpm noldor garden detect` runs more than twenty detectors over the repo: done features without tests, plans without specs, stale backlog, rule pages that contradict each other, quoted commands that no longer exist, and so on. A separate clone detector ratchets code duplication against a committed baseline at push time. The release preflight runs its own row of probes over the same state and names every failing row at once instead of stopping at the first.\n\nThe code graph comes from graphify, and a release will not cut against a stale one. This README is checked too. Every documentation surface under `docs/` has to be reachable by following links from here, and every command quoted on this page has to resolve against the live CLI. That is `pnpm noldor checks readme`.\n\nDetails: [`garden-and-drift.md`](docs/noldor/garden-and-drift.md).\n\n## Dashboard\n\n```bash\npnpm noldor dashboard server --port 4321 --root .\n```\n\nA read-only local view over the same files. It is never a source of truth.\n\n![Dashboard overview: project, activity, and health](docs/assets/dashboard/home.png)\n\n<details>\n<summary><b>More pages:</b> agents, metrics, features, WIP age</summary>\n\nAgents: live drain state, run timelines, per-agent durations.\n\n![Agents](docs/assets/dashboard/agents.png)\n\nMetrics: cycle time, routing accuracy, review effectiveness, drain reliability.\n\n![Metrics](docs/assets/dashboard/metrics.png)\n\nFeatures: every feature doc with its phase, category, and version.\n\n![Features](docs/assets/dashboard/features.png)\n\nWIP age and hot zones: work that is aging, and the files that churn most.\n\n![WIP age](docs/assets/dashboard/wip-age.png)\n\n</details>\n\n## How it is built\n\nThree runnable units and one directory of state. The CLI, `noldor <group> <subcommand>`, is the only entry point. The hook jobs in `lefthook/noldor.yml` shell into it at four git stages. Pre-commit formats, syncs link projections, and validates. Prepare-commit-msg injects trailers from the session marker. Commit-msg checks scope and trailers. Pre-push enforces the review receipt, template parity, and the code-clone ratchet. The dashboard reads the same files over local HTTP.\n\n`.noldor/` holds the durable state as plain files: the session marker, one review sink per lane, the ID counter and retired-ID map, the clone and indirection baselines, scoped engineering rules, and the drain's logs and heartbeat. Documentation lives in `docs/`: feature docs, specs and plans, the roadmap and backlog, four architecture pages, and decision records.\n\nNoldor depends on git, the GitHub CLI, graphify for the code graph, and whichever agent runtimes it dispatches. It never talks to a network service of its own.\n\nThe architecture pages carry the diagrams: [context](docs/architecture/context.md), [containers](docs/architecture/containers.md), [modules](docs/architecture/modules.md), [flows](docs/architecture/flows.md).\n\n## Configuration\n\nOne file, `.noldor/config.json`. The `consumer:` block is required: repo URL, scan paths, lockstep packages, dependency boundaries, release categories. Nine optional blocks change behaviour, and every one of them has a working default: `crLanes`, `crReview`, `autonomous`, `gate`, `agents`, `release`, `garden`, `clones`, `design`.\n\n```bash\npnpm noldor validate noldor-config\n```\n\nA config with only `consumer:` runs review on the `reviewer`-only defaults. Add `crLanes` to opt codex in on small changes as well, `autonomous` to make the drain headless-safe, and `agents` to route roles to codex or opencode. The field table is in the [adoption guide](docs/noldor/adoption-guide.md). The review blocks are explained in [`cr-pipeline.md`](docs/noldor/cr-pipeline.md).\n\n## Command groups\n\n`pnpm noldor --help` prints the whole manifest. These are the groups you meet in the first week. Every script is catalogued in [`script-catalog.md`](docs/noldor/script-catalog.md).\n\n| Group | Does |\n| --- | --- |\n| `init` | Scaffold or adopt Noldor into a repo |\n| `doctor` | Prerequisites, template skew, hook wiring, which runtime is executing, lockfile freshness |\n| `dashboard` | Serve the local dashboard |\n| `autonomous` | Drain, watch daemon, escalation inbox |\n| `cr` | Code-review orchestration across spec, plan, and code lanes |\n| `pr-flow` | Push, open the PR, auto-merge, poll until merged |\n| `worktrees` | Per-feature isolated worktrees |\n| `garden` | Drift detectors and the SDD report |\n| `checks` | Invariants, template sync, push-gate replay, README drift |\n| `graphify` | Build and query the code knowledge graph |\n| `release` | Preflight probes, version bump, changelog, publish |\n| `upgrade` | Version-aware migration chain |\n\n## Upgrading\n\nAfter pulling a newer framework version, `doctor` warns on schema skew. All three commands below are required. `upgrade` runs the codemods and advances the anchor but never re-syncs templates, so a stale hook config survives it and every commit then dies on a subcommand the new version removed.\n\n```bash\npnpm noldor upgrade --dry-run\npnpm noldor upgrade\npnpm noldor init --update\n```\n\nPolicy: [`versioning.md`](docs/noldor/versioning.md).\n\n## Documentation\n\n- [`docs/noldor/`](docs/noldor/README.md) is the rule set, indexed by what you are trying to do. It is the single source of truth. This README and any project's `AGENTS.md` are overlays on it.\n- [`docs/architecture/`](docs/architecture/context.md) holds the four C4-style pages.\n- [`docs/adr/`](docs/adr/) holds the decision records, append-only.\n- [`CHANGELOG.md`](CHANGELOG.md) lists every release.\n\n## Contributing\n\nThis repo runs on itself, so contributing means going through the gate too: run `/noldor-gate`, pick a path, and let the hooks tell you what is missing. Read [`docs/noldor/README.md`](docs/noldor/README.md) first.\n\nA consumer repo on the same machine can point at your clone with a `file:` dependency, assuming a sibling checkout:\n\n```json\n{ \"devDependencies\": { \"@david.zoufaly/noldor\": \"file:../noldor\" } }\n```\n\n```bash\npnpm install && pnpm build && pnpm test && pnpm typecheck\n```\n\nCI publishes to npm on a `v*` tag, with provenance.\n\n## License\n\nMIT. See [`LICENSE`](LICENSE).\n","readmeFilename":"README.md"}