{"_id":"spec-and-loop","_rev":"29-24258849dded8ba76a90a74650fc67fc","name":"spec-and-loop","dist-tags":{"rc":"2.0.0-rc.2","rc1.2.1":"2.0.1","release-1.2.0":"1.2.0","latest":"3.3.7"},"versions":{"1.0.0":{"name":"spec-and-loop","version":"1.0.0","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"7df84409639b467d2a6f7de120adbfc0769e4e53","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.0.tgz","fileCount":6,"integrity":"sha512-GkxZddvD591AnJnuhmp+zmM7o7grwrLsZIAo0h+Ps8ql4oS2YFyDdHSgaZbdA1Bu8ZpPTjxpoix5mW1I9x+w0Q==","signatures":[{"sig":"MEUCIQDUxsRUrRVFkQyVevDAwWTUmd5NLVhNTf4Ct7ysTT7tfAIgHmsplrQJ5OUS3561hRofysdhf7ErQpWazsujqbTT+hU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36282},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"95d2e9559f6da36d7a6e84af97a1ac2c8d5807a2","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openspec":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.0_1771208795851_0.7626080715351673","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"spec-and-loop","version":"1.0.1","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.1","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"50c36b2ce7ded427404e672aaf14153eceeb03a5","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.1.tgz","fileCount":6,"integrity":"sha512-wAPkz9y5q0gaUm0jL6Vk7nAfaUCqdxuTM5DJoDuXLbUzKWL8u2tc8A7P5aOLOeWVYykTN/pmx3oHY/fBDqpYGw==","signatures":[{"sig":"MEQCIC1SmzpYLjRF5NlKvcSv2JsbuELGQAVJzcTwdugDIpDgAiBizb4sDnSUJQPpBTwHzXpPMWhuvIG3pJUtzxi48WfhRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40817},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"7d5eaeae8f54f81221cb9f782b1154e05e01f2e8","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.1_1771273519524_0.7077904586863033","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"spec-and-loop","version":"1.0.2","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.2","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"137758d9afdb09dab8c21d8667a8a68f330d27f5","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.2.tgz","fileCount":7,"integrity":"sha512-mQgBPC0MS6kxxTxoXRgxIG2HQMm+lKl1kp4OfX3WEu89kB3bqFe7gBnk4Ri3bMLjb4wq6eZVivOwnjC7Z8wOmA==","signatures":[{"sig":"MEUCIH0zy/eBHzFS1qnAEdK+BR4ruhT1js3Mmf8RRZEugru1AiEA+Mvhglwue4YHP8qLKqLEOXAQ6hrDeR1qDay6NWFrFQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46312},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"77c24db9d2c8478655ac427943468f654483d6e0","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.2_1771469497387_0.09875734399530645","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"spec-and-loop","version":"1.0.3","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.3","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"2ccd021d4ba2ad97279b86ff0c35683a8a5a324e","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.3.tgz","fileCount":7,"integrity":"sha512-nq55iuHkGHQVlvCW+pn7uKAXWEyTeNvom8bf948brwXVrtyr/59j40rNU6gA5aYPfIHCfbXm3XpP6zZcnGXuUA==","signatures":[{"sig":"MEUCIQDCfybD96dLZvvA/wgZ7BGdS/C8Cxg/vGcD4VMh9YjusgIgav0J3qWJy4seB+ywgk2ocThwoGdzLMlKpAR37iuKDo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46224},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"77c24db9d2c8478655ac427943468f654483d6e0","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.3_1772750700427_0.5898393192232845","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"spec-and-loop","version":"1.0.4","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.4","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"20a83a5b939e6bb85b79b90a474d56fe1eb5e241","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.4.tgz","fileCount":7,"integrity":"sha512-A1NJnL/92vnUK2My2Nc/qEj6JvIIrHFQ9ZIjkhjLE02FcVRuu9/SCvLd4NSXZETjCYAXUyWK6gKpGORetFpR+A==","signatures":[{"sig":"MEQCIFCJNJLStk5XM9y6jG3QbmRA1qhRhh3szW8yfKrhtAAoAiBOZ7pjbk7nXhqiDAS8Rk/IezVyHssdRaui4tbgXXBuzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46263},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"7f9bb5411f93efd5fc7993abc429e3dbe5da86c5","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest","@th0rgal/ralph-wiggum":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.4_1772751379034_0.29819370388703015","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"spec-and-loop","version":"1.0.5","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.5","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"84b0b01e6a309c9227287f17b0f9633faaebee85","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.5.tgz","fileCount":7,"integrity":"sha512-nt4gz6WePPD62SxQF8wsEMAj/fJKHBG/yAdvV1wyuYrRZ2BZ3IXHdp/mUb/Eywjo0JWIdcITagBkjWdcR/xzrg==","signatures":[{"sig":"MEUCIFhvkdrIgo4z+MbO6Tf9czDAgVTZ+LjwSh3QVreEUbWLAiEAvV1LKuPXrdUUZ7eUxfY4+r6GDIvJnKI/7x0TZU1/mbo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47484},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"10b42edb92c36cab64e6a6e4d0dfd981e0979600","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest","@th0rgal/ralph-wiggum":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.5_1772751951730_0.32848536781049753","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"spec-and-loop","version":"1.0.6","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.6","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"ae907a1d2f974b9cc81831df752f645bfa008c70","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.6.tgz","fileCount":7,"integrity":"sha512-9+t4AeGzFx2tOt1mzRtH2i55ieAqqtcskaF+KKf47jxq+HiuV7nvOMVybONC7VX4YG3T39Yul3fcAMLx2HAsUA==","signatures":[{"sig":"MEUCIQDjm09nXsvZXqBPmEj/CTWDZ/XJ4XL3atUbZ3E7udzhXwIgT+lEfTLkxziVPw5mTjgHN6LaaJHZ1jC7awkmU0Ygb0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47690},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"59ee055bf9db1427cdb22e00a4de122f17a7d9cd","scripts":{"postinstall":"node scripts/setup.js"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"latest","@th0rgal/ralph-wiggum":"latest"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.6_1772752189611_0.31518626872234035","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"spec-and-loop","version":"1.0.7","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.7","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"ba78a231cf2ae8f0051ad3e4bf08c07fd76f9e48","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.7.tgz","fileCount":7,"integrity":"sha512-zctw6ebqVn55gm/LdqfEIcqTkfTNTFwPItnvJNeZ4ZK7m8jZYOQc5n7/gsFz/EneyAYAt5TDgKzyJoHa/yjYuw==","signatures":[{"sig":"MEQCIGf/4hCXw/sv+vdKLSrBEXawtNhT3R7gwmLDQL9xsOzHAiAqwCXjA+4Fjy8LsowCpGevLNKwLiQalfAIlMcXmTeO5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53587},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"96775209322d38845d962fa99ab7e1a241c4ef53","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.2.0","@th0rgal/ralph-wiggum":"1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.7_1772816705371_0.7665941403456296","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"spec-and-loop","version":"1.0.8","keywords":["openspec","ralph-wiggum","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.0.8","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"4e11889759ce7de1801b5f8410f3995be9ee5241","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.0.8.tgz","fileCount":7,"integrity":"sha512-JdwgCpQD5B0JpJBMtQry0SIEtnfdY06dABkvY67McvZqQ7jxRXc0yPlqfbhd7P0dcezW74tAzlryBVVYvmuKxw==","signatures":[{"sig":"MEQCIEH3+QX2qAIeZcU34zMUiB9a4V4pzTA9pJO3gmetwHN/AiALq2FZUOJXKEbPXxU4lX3Cklgc55XOze/Dm+/0Z+UHmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56407},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"448033b35533c2e7ae6c2a6255f8ff20307232f8","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.2.0","@th0rgal/ralph-wiggum":"1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.0.8_1772825174361_0.1938750061229042","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.1":{"name":"spec-and-loop","version":"2.0.0-rc.1","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.0.0-rc.1","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"4fb8601d7061d2f333ee51bcc00488b5464f0c37","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.0.0-rc.1.tgz","fileCount":17,"integrity":"sha512-4WvRh8d8dpAMw1RkZpbvuDOcHr61FINkPHc2ZX+OwlVIuq8WLcEIiXbpHYip1mIMFr0055rXB+cxMZ68BzVv6Q==","signatures":[{"sig":"MEUCIA3Ibo6OB2uXKZuiRDmZNWUpH+9Vy8X6UNmjogjxWFO6AiEAqFuL+x/iCAxYqNQUzb5yM5GD5X1ffwUETcp4yJfMjx4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111958},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"cacfc417abaae10bad36804de7ecf9f3530578bb","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.0.0-rc.1_1772943931099_0.5860251675835524","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.2":{"name":"spec-and-loop","version":"2.0.0-rc.2","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.0.0-rc.2","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"de376c25ea32b21b8bd16738a4421e56f9152f0b","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.0.0-rc.2.tgz","fileCount":17,"integrity":"sha512-J0AMBcxIkGXjRKy6TKWRPyBANU44DEnm+LVeIBpVlY8rApY5xU6kd9dJOs9c1BF3TEnmooqtlQwmTjeuHsElfQ==","signatures":[{"sig":"MEUCIQD10hj5qDQ9gocpQbK7vl8rgYXVM6yRW9MBUD3su2VoSgIgVq22NSoGooIbe6MQ/dON0T1WNEVXLvw+K8+1F1HEDyA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112506},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"408e6f06488cbcfa0555e5ee7747dd4e7f8fc0d0","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.0.0-rc.2_1772946330363_0.9771359200884886","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"spec-and-loop","version":"2.0.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.0.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"0a81e0b37399a4a4fca8d93e3ed55037f3e4804a","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.0.0.tgz","fileCount":17,"integrity":"sha512-Vq6hMu9wR+UScik6TZgf3btJdo1KGg3VsHsm0JGOAqlYFG5w8+A0IqoUjG3fIMZxElr/AGs3ET7ViEVTT9FMqg==","signatures":[{"sig":"MEYCIQCfZ68IpZtiOxtKDjvnoIRc+lCLo9iL0oHCWBlJnkBknwIhANlv0pqOedkDEpNJVePeLtReIv83Ri7G3itp2OS5kMbi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112501},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"fdfae1d55cbd0240cc18903ad1bf0bbbbbc889af","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.0.0_1772948074810_0.2600849929188893","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"spec-and-loop","version":"2.0.1","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.0.1","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"e71ea1e1f4cf8b64203dddad0124b2a3d9cdee3a","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.0.1.tgz","fileCount":18,"integrity":"sha512-u2IxdVm6ORBWHsQ5cJK3THQgp07eLeZYHFSKuAHOQ/WcS/r2f9Pv7TvWYeAiYr/EwG7EzDZaLCxP0HKg2th3BA==","signatures":[{"sig":"MEUCIHR8LfIogDP+KJQ2vfj4jQPmxpcPCoySdn0hphqJ2wW9AiEAgGFhrulDS0t34srX8ioKHTDcFQW2wg5Nqu6kVXh8KVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126940},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"bec572835c29c5eada30538ec682e7647b0f8727","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.0.0","@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.0.1_1775928687209_0.9964665996335844","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"spec-and-loop","version":"1.2.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@1.2.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"4aa1b1803b4868399cbd306efba911e5835cc666","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-1.2.0.tgz","fileCount":18,"integrity":"sha512-KRTqq+dHG2+Mk6Smjzs1fRyHe8/ggB9dCLq7vy7+4R5Evf8I2nHgdK/gnggA7LzaDpR6MXKd9UkQqHiVoJSumw==","signatures":[{"sig":"MEYCIQDC5bsGyE4zmRawDsscKJiSShlwF6jtUoaZCYgqUqofBwIhAJKAU0PRkaqx/s8fVK7CNVLyLzFQQegQD8ykERvRcZo4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129579},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"c6c7d83e5c870975aa4e9409ee941856baa3087e","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.0.0","@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_1.2.0_1775933577080_0.9436913493103716","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"spec-and-loop","version":"2.1.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.1.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"e5c23056a3fe2375913e1cdb9f244df3d94c7d88","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.1.0.tgz","fileCount":18,"integrity":"sha512-HaePTcz9SSbuvI2YWFEkjmfYNaIrO5+4RDsfePmvCohh67DkkL+Tua3gfCRkguEehRHFXcxBQtKOCgAdThqW5A==","signatures":[{"sig":"MEQCIFJCnALVo+KlJNTO7dYVPjo4j2g5p4C40nf7J73/99CCAiBUNpgk3qWD7LO4xfO68cEaM+NzX0Vk/DD3shMsgcty0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129579},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"c6c7d83e5c870975aa4e9409ee941856baa3087e","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.0.0","@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.1.0_1775933709690_0.03944751158305371","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"spec-and-loop","version":"2.1.1","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.1.1","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"dcfdeafebfb71fc49b12618e5ec4224b81cc0c70","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.1.1.tgz","fileCount":18,"integrity":"sha512-M9TuyzBPVAajqsxUP33hq+zlf+v0OQ/n4+LV7K/OunOKHD2DK+vR0B41PZNWvWAzy74JlVjA4neBACjoPnggwg==","signatures":[{"sig":"MEUCID0QgYbZtX9nz8GEC8rQhMa9wCYhxGHi435I7XJ0dQRVAiEArGHUs/cs5u8DZMPG25+xuvSXOr+PquALKpG4YrPnXE8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152695},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"4a1cefd73940d8955804e0f2ebce9bc7c1966ed1","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.0.0","@fission-ai/openspec":"1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^29.7.0","@types/jest":"^29.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.1.1_1775951288113_0.6207825485307612","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"spec-and-loop","version":"2.1.2","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@2.1.2","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"d989d94143bf91c56c0176cb6229d4814aac2871","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-2.1.2.tgz","fileCount":18,"integrity":"sha512-i4E7hlJAb5m/8DX+VTgsNo1Cz+T2oWGYldhkN2ThNb6iYTrPB+D72maOK4infVH+8dqb4ZbOMhBPslodKtpZMQ==","signatures":[{"sig":"MEYCIQD4tqlVODlGjMvV7D00iucuNAIAd3Xu0N1ZSB8GOMELggIhAI5YV6++0pue3szBIRyRVOsA+Dg9/AmMjiDY7e30i87V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152695},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"263716d64b35bf253f54f0fea8f6d615cfb39390","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.1.1","@fission-ai/openspec":"1.3.0"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.0.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_2.1.2_1775952367816_0.5503150920398774","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"spec-and-loop","version":"3.0.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.0.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"1a8f571b33d4e5d848694d792846c94168656099","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.0.0.tgz","fileCount":21,"integrity":"sha512-q/vIXpLd7MW3cnO6jlbNtlT0cJopcGqekNOA/QVQECJgW9pd2HCp2PWG/hU9OJspfS9RxobuPFUZ+8LRCHzUXw==","signatures":[{"sig":"MEYCIQCv7fsmqpem+fSJzOX0aDQlunkEgAfr2TTNEqUhJ/uiMwIhAP5qPdooVcBSoyb1lsoZ5neCEUdGopTz1FMVZRRn48mQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255552},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"5cef57847c38b2ed8b789d71ea5b49dead88fe7f","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"spec-and-loop":"^2.1.2","@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.0.0_1777165350925_0.28223746541807015","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"spec-and-loop","version":"3.0.1","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.0.1","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"16c203e04cfe0765028ab8b3f8f8ce6c86a584c3","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.0.1.tgz","fileCount":21,"integrity":"sha512-yYEfX/+WEdHhWTbpCSzT3hZT0+wVKempEyns2WTzBP9WsaYEapVObIudio/SflmXMyAu4YWL24kT7YLsZiYdvA==","signatures":[{"sig":"MEUCIQCU8sCDySlBMi21Fk2fsUuXfP28PW5+r8EnsM7mw9PVoAIgduOLrnA3XdF03IuxN4BWqh6Tq6QO1uZT4Apex4fzQbk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255521},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"5cef57847c38b2ed8b789d71ea5b49dead88fe7f","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.6.2","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.0.1_1777166108186_0.8079815115533904","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"spec-and-loop","version":"3.0.2","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.0.2","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"a2f7612a575a3b52af48db8900c8aa51548faa7d","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.0.2.tgz","fileCount":21,"integrity":"sha512-mEtUF+JflN5NlKNOz2BYknG6F4gL9eurINBfknoDLHbUzPdTGcXEu7goKhl1XHhliuEKyGNKcItKgw/GlndtKw==","signatures":[{"sig":"MEQCIA63gaRrBKeGN/5ZiWcG8qZM+PIABgn4SVxSrDJlUcLyAiAogT3Yc2WuAUJNtp+ySAJp9FFAPOtH7FJ3QijpAKdidQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256465},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"d97dfbaacd2275f4d84458fb0c89b86e8ebd0d1a","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.0.2_1777168041344_0.6144654253336057","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"spec-and-loop","version":"3.0.3","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.0.3","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"79dfee9b9dbdc9160d7a3970ff0f80fd9b86189a","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.0.3.tgz","fileCount":21,"integrity":"sha512-TEWgg5ILWXQv5KIqcQVCtRwvtGzh0ZaAgcni7cs+qmwc7/5gl1YHFOH2UrQgiPUXAW5dbUxvuVgiPSXvjbI/WA==","signatures":[{"sig":"MEQCIFbRwowAUDEpxCHya9AtI52qWH0DrsV+aOw6QKSFkVdIAiAHrixxB00WC304psZvjxBD2HAecRYwp/WqBvrMSREw7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256465},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"1af506538e5385cf261deee6037e9fb225cff29b","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.0.3_1777169294766_0.7370542431283014","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"spec-and-loop","version":"3.1.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.1.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"79f5cc2918a391491797c5bd3e485c8f1dabc042","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.1.0.tgz","fileCount":21,"integrity":"sha512-E78c8c4hb19B3rdS8JG1r4igkHzg45/seB4RihtezWH8838lIEB+Wl6mgRUKvfJLJBbAa+LWzFkmGwxrlKQP8Q==","signatures":[{"sig":"MEYCIQDv+A0Zrbs4mJ+V6F/qZ2Ab8j94D2VLrHHzt+vEPFQgxQIhAImos+d1mTLueoqdqt5sAOa5HvWc3WTn7/+bvOEMb+aG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223799},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"0409e9e535c5c08ed4af9da48846dbca574c106f","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.1.0_1777227251888_0.5904099098204187","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"spec-and-loop","version":"3.3.0","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.0","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"e3d364cc63c02ac307ea6d0ce4b38d9da4fd8890","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.0.tgz","fileCount":21,"integrity":"sha512-74qC2d+rymtIJMiihg07+VvyQRGEmXUyAWttaEdVHMQILY0gpZtydNpeZRMRKg1QVkLE/3esgjO80uDYFc7lfw==","signatures":[{"sig":"MEQCIF5nUMjGkpyuVG3V6sWFTD0rswSWCxGEM/IHHraOJ6gNAiAqksLDdD4hKocIeYZ1rwqYaftOXOc4eyh8+8yOBo00vQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246408},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"60e08d0861d48cbb4a8bc616de1b3139e206df91","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.0_1777659580080_0.08726294910894872","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"spec-and-loop","version":"3.3.2","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.2","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"410d53ef3add8142b79cbc97be39c68b911ac6ef","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.2.tgz","fileCount":21,"integrity":"sha512-ntKK1ikP0oDrMUNPz2I1KJA/xNbH9QjojjVrbCUxirJWLHiysHj50AQk77/A+ac8thUU87PHd9lQInOEIMEnJw==","signatures":[{"sig":"MEYCIQCR4W3gjCTyY5oHtsqoZGdFDhaqexWuYkTK2pN+QuEgqAIhAPweM+uu8vEB+CjHuFchf7eLYZ+nk3nsxPxjLGewBOiA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274906},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"ee9c6e2fd9c16f5a6f2f5035d4390bc196db8da8","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.2_1778016419489_0.5283147763467264","host":"s3://npm-registry-packages-npm-production"}},"3.3.3":{"name":"spec-and-loop","version":"3.3.3","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.3","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"6244f3941e0fc1267661581bf25a286cbfff89bd","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.3.tgz","fileCount":21,"integrity":"sha512-sm92dj9C7Szi83z2ASDOx4ZUCJ/Rl6Uhvsuc7Vzp5OIIRPUWN6txBGI1vpyNPYQe90qTy2oPP8M9Mn4cSxJsTA==","signatures":[{"sig":"MEQCICI76woWN5m5WqO/OI8gy1ggoPCVhDgHBjOwafObWh2OAiA/iH+hx84EVAsuoX1b45C2fHMmCOpG/haqmCS0s7h7uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286326},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"96648c20079181e2695ae89372214d6086d3ec14","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.3_1778183653546_0.901124453553175","host":"s3://npm-registry-packages-npm-production"}},"3.3.4":{"name":"spec-and-loop","version":"3.3.4","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.4","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"98363e0619234c40de092d888bb1757ce01dbb5a","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.4.tgz","fileCount":29,"integrity":"sha512-SNaSXx4vll/Dr42SB8S2WfydiZgpWFQKtbJsXTAoSAnlkgiOPhRqqutgAGv1dClp1iFo2htcLDKURUnE9YbkAQ==","signatures":[{"sig":"MEUCIQDGcvwki+Li/SW1vfN17N32xKJHX1pAGqoSE9sglBSpqwIgTny1BbGwMvE0cFKOSVwUcZRkbxE2u8cOL+ciUqU36rg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":385923},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"57c6d3969e731f6b84b280ab4533d7016a9936b2","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.4_1778290161498_0.1497874118166369","host":"s3://npm-registry-packages-npm-production"}},"3.3.5":{"name":"spec-and-loop","version":"3.3.5","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.5","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"5250b3490f3b31598eba18db45d5a2dc2d722d17","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.5.tgz","fileCount":29,"integrity":"sha512-i3ve4Yb+xdNp2HWRA6C+wC/vaAX35O020fWSFWEv/x4s0BAU4p7+es6714nmd7Ha1yGG9Wb1RI2gt12NaMOrGg==","signatures":[{"sig":"MEYCIQCdkc2G2YAUMMKU7CnrFBWZi0x6xzxVIRsHXepEfgOX8QIhAL8GXIQIooOKd8bJZ4JTBYy77h+AF2Itw4elcx7AyyuG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":389955},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"50737de3b1f0bd6ecdc6c8fdddd031891cb85c8c","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.5_1778529800677_0.6299101574496972","host":"s3://npm-registry-packages-npm-production"}},"3.3.6":{"name":"spec-and-loop","version":"3.3.6","keywords":["openspec","opencode","iterative-development","agentic-coding"],"author":"","license":"GPL-3.0","_id":"spec-and-loop@3.3.6","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"homepage":"https://github.com/ncheaz/spec-and-loop#readme","bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"os":["darwin","linux"],"bin":{"ralph-run":"bin/ralph-run"},"dist":{"shasum":"20f33693738f1c268fa3df0c9f192afd982e62f8","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.6.tgz","fileCount":29,"integrity":"sha512-lO2UAtBt/BdFpgN/FbrVX6kTfx5GTBbYHs5tXQZuMXdeqewtoasckGyWSp3cRtUpreV6wL+yVy84vZe6TN41lA==","signatures":[{"sig":"MEQCIDrsNwGSpbWqsUxsmjWOTvXQvvWNmpB+8Blvbu6HoMx4AiBCUuIuDfur1I3kGQ3RM7j2I0Pj5u2dC+S+9kFaNNeStw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400126},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","engines":{"node":">=24.0.0"},"gitHead":"82d794219ea5f471346d8bdf000177ec7645492a","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spec-and-loop_3.3.6_1779591703954_0.3645494997518064","host":"s3://npm-registry-packages-npm-production"}},"3.3.7":{"os":["darwin","linux"],"_id":"spec-and-loop@3.3.7","bin":{"ralph-run":"bin/ralph-run"},"bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"dist":{"shasum":"7593ac9055e5777c92dffe2ec8dab1c81455ac61","tarball":"https://registry.npmjs.org/spec-and-loop/-/spec-and-loop-3.3.7.tgz","fileCount":29,"integrity":"sha512-YYzbJiGnicPxC7FASoINGfMAR7xYUtS5v4tXigAMNFWkgBRMO0cksO/a2VCb/M8SakDK9tuPejJ3yqLHtbQOOA==","signatures":[{"sig":"MEUCIQCnBRZf+M/bvXHVONCRxZbgrds3z+JDpLY3qp+i2UbtjQIgJNYwuj5AVf5sXEIkcKDjeFJKVVvTF2BcSIHyjR2UGcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDvwjXOdogWtYrrhygZv4Y7Whq+pRQ8PS+ZUU4lHL7JtwIgCF4/foU4fSwh6v/g47URbhE4u2qmbHOmGY4MECWsAeM="}],"unpackedSize":407321},"jest":{"testMatch":["**/tests/unit/javascript/**/*.test.js"],"collectCoverage":true,"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html","json"],"coverageThreshold":{"global":{"lines":80,"branches":80,"functions":80,"statements":80}}},"main":"index.js","name":"spec-and-loop","author":"","engines":{"node":">=24.0.0"},"gitHead":"7f7c340c96c1b4d5b461f599bf282942f8bc33cc","license":"GPL-3.0","scripts":{"lint":"shellcheck scripts/*.sh","test":"npm run test:unit && npm run test:integration","test:js":"jest tests/unit/javascript","test:unit":"bats tests/unit/bash/*.bats && npm run test:js","test:watch":"npm run test:js -- --watch","postinstall":"node scripts/setup.js","test:coverage":"npm run test:unit -- --coverage","test:integration":"bats tests/integration/*.bats"},"version":"3.3.7","_npmUser":{"name":"ncheaz","email":"ncheazspam@gmail.com"},"homepage":"https://github.com/ncheaz/spec-and-loop#readme","keywords":["openspec","opencode","iterative-development","agentic-coding"],"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"_npmVersion":"11.13.0","description":"OpenSpec + Ralph Loop integration for iterative development with opencode","directories":{},"maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"_nodeVersion":"24.12.0","dependencies":{"@fission-ai/openspec":"1.3.1"},"_hasShrinkwrap":false,"devDependencies":{"bats":"^1.13.0","jest":"^30.3.0","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spec-and-loop_3.3.7_1790312803372_0.4932621516725515"}}},"time":{"created":"2026-02-16T02:26:35.849Z","modified":"2026-09-25T05:06:43.701Z","1.0.0":"2026-02-16T02:26:36.006Z","1.0.1":"2026-02-16T20:25:19.680Z","1.0.2":"2026-02-19T02:51:37.558Z","1.0.3":"2026-03-05T22:45:00.573Z","1.0.4":"2026-03-05T22:56:19.182Z","1.0.5":"2026-03-05T23:05:51.877Z","1.0.6":"2026-03-05T23:09:49.775Z","1.0.7":"2026-03-06T17:05:05.580Z","1.0.8":"2026-03-06T19:26:14.523Z","2.0.0-rc.1":"2026-03-08T04:25:31.253Z","2.0.0-rc.2":"2026-03-08T05:05:30.518Z","2.0.0":"2026-03-08T05:34:34.997Z","2.0.1":"2026-04-11T17:31:27.344Z","1.2.0":"2026-04-11T18:52:57.259Z","2.1.0":"2026-04-11T18:55:09.851Z","2.1.1":"2026-04-11T23:48:08.254Z","2.1.2":"2026-04-12T00:06:07.955Z","3.0.0":"2026-04-26T01:02:31.066Z","3.0.1":"2026-04-26T01:15:08.354Z","3.0.2":"2026-04-26T01:47:21.497Z","3.0.3":"2026-04-26T02:08:14.920Z","3.1.0":"2026-04-26T18:14:12.045Z","3.3.0":"2026-05-01T18:19:40.221Z","3.3.2":"2026-05-05T21:26:59.624Z","3.3.3":"2026-05-07T19:54:13.789Z","3.3.4":"2026-05-09T01:29:21.642Z","3.3.5":"2026-05-11T20:03:20.852Z","3.3.6":"2026-05-24T03:01:44.096Z","3.3.7":"2026-09-25T05:06:43.515Z"},"bugs":{"url":"https://github.com/ncheaz/spec-and-loop/issues"},"license":"GPL-3.0","homepage":"https://github.com/ncheaz/spec-and-loop#readme","keywords":["openspec","opencode","iterative-development","agentic-coding"],"repository":{"url":"git+https://github.com/ncheaz/spec-and-loop.git","type":"git"},"description":"OpenSpec + Ralph Loop integration for iterative development with opencode","maintainers":[{"name":"ncheaz","email":"ncheazspam@gmail.com"}],"readme":"# Spec and Loop\n\nOpenSpec + Ralph Loop integration for iterative development with opencode.\n\n![CI Status](https://img.shields.io/github/actions/workflow/status/ncheaz/spec-and-loop/test.yml)\n![Coverage](https://img.shields.io/badge/coverage-0%25-red)\n[![npm version](https://badge.fury.io/js/spec-and-loop.svg)](https://badge.fury.io/js/spec-and-loop.svg)\n\n**[Quick Start Guide](./QUICKSTART.md)** - Get up and running in 5 minutes!\n\n## Why This Exists\n\nOpenSpec provides excellent structure for planning (proposal → specs → design → tasks) but leaves execution manual. This package provides an iterative development loop driven by an internal mini Ralph implementation that works with OpenCode and eliminates the need for any external Ralph runtime. When auto-commit is enabled, the runner owns task commits; when `--no-commit` is enabled, the prompt contract and runtime both leave changes uncommitted.\n\nThe runtime prompt is self-contained: it does not depend on Cursor-only slash\ncommands or editor-local skills.\n\nExamples below assume current published releases of `spec-and-loop`,\n`@fission-ai/openspec`, and `opencode-ai`. `Node.js >=24` is required.\nThe supported OS contract is Linux and macOS.\n\n## Installation\n\n```bash\nnpm install -g spec-and-loop\n```\n\n**Prerequisites:** You need OpenSpec and the OpenCode AI agent installed:\n\n```bash\nnpm install -g @fission-ai/openspec opencode-ai\n```\n\nAlternative OpenCode install methods:\n\n```bash\n# Install script (general use)\ncurl -fsSL https://opencode.ai/install | bash\n\n# Homebrew (macOS / Linux)\nbrew install anomalyco/tap/opencode\n```\n\n**[Get Started in 5 Minutes](./QUICKSTART.md)**\n\n```bash\n# 1. Initialize OpenSpec in your project\nopenspec init\n\n# 2. Ralphify your project (enables Ralph-friendly artifact generation)\nralph-run init\n\n# 3. Create a new change\nopenspec new change add-user-auth\n\n# 4. Review and complete the OpenSpec artifacts\n#    (openspec/changes/add-user-auth/proposal.md)\n#    (openspec/changes/add-user-auth/design.md)\n#    (openspec/changes/add-user-auth/specs/*/spec.md)\n#    (openspec/changes/add-user-auth/tasks.md)\n\n# 5. Run the ralph loop (executes tasks with opencode)\nralph-run --change add-user-auth\n```\n\nFor detailed step-by-step instructions, see [QUICKSTART.md](./QUICKSTART.md).\n\n## Testing\n\nSpec-and-loop includes a comprehensive test suite to ensure reliability and cross-platform compatibility.\n\n**[Testing Guide](./TESTING.md)** - Detailed instructions for running tests\n\n### Quick Test Commands\n\n```bash\n# Run all tests\nnpm test\n\n# Run unit tests only\nnpm run test:unit\n\n# Run integration tests only\nnpm run test:integration\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run shellcheck linting\nnpm run lint\n```\n\n### CI/CD Status\n\n- **Linux**: Tests run on Ubuntu (latest)\n- **macOS**: Tests run on macOS (latest)\n- **Node.js**: Tested on Node.js 24\n\nAll tests are run automatically via GitHub Actions on every push and pull request.\n\n## Prerequisites\n\nBefore using spec-and-loop, ensure you have:\n\n 1. **Node.js** - For package installation (requires >=24.0.0)\n    ```bash\n    node --version  # Should be >=24.0.0\n    ```\n\n 2. **openspec** - OpenSpec CLI for specification workflow\n    ```bash\n    npm install -g @fission-ai/openspec\n    ```\n\n3. **opencode** - Agentic coding assistant\n   ```bash\n   npm install -g opencode-ai\n   ```\n\n4. **jq** - Command-line JSON processor\n   ```bash\n   # Ubuntu/Debian\n   sudo apt install jq\n\n   # macOS\n   brew install jq\n   ```\n\n5. **git** - Version control (for commits per task)\n   ```bash\n   git init\n   ```\n\nFor complete installation instructions, see [QUICKSTART.md](./QUICKSTART.md).\n\n## Commands\n\n### OpenSpec Commands\n\n- `openspec init` - Initialize OpenSpec in current directory\n- `openspec new change <name>` - Create a new change with artifact templates\n- `openspec list` - List active changes\n- `openspec status --change <name>` - Show artifact completion status for a change\n- `openspec show <item-name>` - Display a change or spec in detail\n- `openspec validate <item-name>` - Validate a change or spec\n- `openspec archive <change-name>` - Archive a completed change\n\n### Ralph Loop Commands\n\n- `ralph-run init` - Configure project for Ralph-friendly artifact generation (run once after `openspec init`)\n\n```\nralph-run [OPTIONS]\n\nOPTIONS:\n    --change <name>          Specify the OpenSpec change to execute (default: auto-detect)\n    --max-iterations <n>     Maximum iterations for Ralph loop (default: 50)\n    --no-commit              Suppress automatic git commits during the loop\n    --verbose, -v            Enable verbose mode for debugging\n    --help, -h               Show this help message\n\nOBSERVABILITY AND CONTROL:\n    --status                 Print the current loop status dashboard and exit\n    --add-context <text>     Add pending context to inject into the next iteration and exit\n    --clear-context          Clear any pending context and exit\n\nSUBCOMMANDS:\n    init                     Configure project for Ralph-friendly artifact generation\n```\n\n## How It Works\n\n### Step 1: Create Spec with OpenSpec\n\n```bash\nopenspec new change my-feature\n```\n\nThis creates:\n- **proposal.md**: Why you're making this change\n- **specs/<capability>/spec.md**: Detailed requirements for each capability\n- **design.md**: Technical decisions and architecture\n- **tasks.md**: Implementation tasks as checkboxes\n\nAfter creating the change, manually complete the OpenSpec artifacts by filling in proposal.md, design.md, specs/*/spec.md, and tasks.md.\n\n**Example tasks.md:**\n```markdown\n## Implementation\n\n- [ ] Create database schema\n- [ ] Implement API endpoints\n- [ ] Write unit tests\n- [ ] Add documentation\n```\n\n### Step 2: Run Ralph Loop\n\n```bash\nralph-run --change my-feature\n```\n\n**What happens:**\n\n1. **Validation**: Checks for required OpenSpec artifacts and git repository\n2. **PRD Generation**: Converts proposal + specs + design → PRD format for internal use\n3. **Setup**: Creates .ralph directory, syncs tasks symlink, and sets up output capture\n4. **Task Execution**: For each incomplete task:\n   - Generates a context-rich prompt from the invocation-time PRD snapshot plus a fresh task snapshot and recent loop signals\n   - Runs `opencode` with the prompt via the internal mini Ralph engine\n   - Captures output to temp directory for review and debugging\n   - Logs any errors to `.ralph/errors.md` with timestamps\n   - Expects standalone control lines: `<promise>READY_FOR_NEXT_TASK</promise>` for task completion and `<promise>COMPLETE</promise>` when all tasks are done\n   - Creates a runner-managed git commit for task-scoped changes when auto-commit is enabled; if the commit is blocked or fails, the anomaly is recorded in history and surfaced by `--status`\n   - Marks task complete in tasks.md\n5. **Cleanup**: Automatically removes old output directories (older than 7 days)\n6. **Completion**: All tasks done\n\n### Step 3: Monitor Progress\n\n```bash\n# Check loop status\nralph-run --status\n\n# Check remaining tasks\ngrep \"^- \\[ \\]\" openspec/changes/my-feature/tasks.md\n\n# View git commits\ngit log --oneline\n\n# Inject context into next iteration\nralph-run --add-context \"Prefer async/await over callbacks\"\n```\n\n## Supervisor Loop\n\nWhen an iteration emits `BLOCKED_HANDOFF` for a structural task-shaping problem that the existing fast-path classifier cannot safely resolve, `ralph-run` can invoke a bounded supervisor pass that patches `tasks.md`, validates the change with `npx openspec validate <change> --strict`, and then hands the next iteration a cleaner task instead of stopping immediately for manual intervention. Set `RALPH_SELF_HEAL=0` or pass `--no-self-heal` to restore the fully manual handoff flow.\n\n| Flag | Env var | Default | Effect |\n|------|---------|---------|--------|\n| `--no-self-heal` | `RALPH_SELF_HEAL=0` | self-heal enabled | Disable supervisor self-heal and exit on unresolved `BLOCKED_HANDOFF` as before. |\n| `--self-heal-max-tries <n>` | `RALPH_SELF_HEAL_MAX_TRIES` | `3` | Cap supervisor tries per blocker event. |\n| `--no-self-heal-downstream` | `RALPH_SELF_HEAL_DOWNSTREAM=0` | downstream patching enabled | Prevent supervisor edits to downstream pending tasks. |\n| `--no-self-heal-hints` | `RALPH_SELF_HEAL_HINTS=0` | hints enabled | Disable `## Supervisor Investigation Hints` injection into the next implementer prompt. |\n| `--no-self-heal-log-access` | `RALPH_SELF_HEAL_LOG_ACCESS=0` | log-path injection enabled | Keep supervisor prompts from receiving run-log paths. |\n| `--self-heal-verbose` | `RALPH_SELF_HEAL_VERBOSE=1` | verbose off | Emit supervisor debug logging. |\n| `--no-self-heal-verbose` | `RALPH_SELF_HEAL_VERBOSE=0` | inherits `--verbose` when present | Force supervisor debug logging off, even if `--verbose` is set for the main runner. |\n\n### Token economy\n\nSupervisor prompts keep the expensive rule context on by default but aggressively compact it: Tier 1 trims `downstream_tasks`, `change_design`, `change_proposal`, and retry-only context; Tier 2 distills `OPENSPEC-RALPH-BP.md`; Tier 3 consolidates per-patch rationale into summary fields. Escape hatches are available per variable: `RALPH_SELF_HEAL_FULL_DOWNSTREAM=1`, `RALPH_SELF_HEAL_FULL_DESIGN=1`, `RALPH_SELF_HEAL_FULL_PROPOSAL=1`, and `RALPH_SELF_HEAL_FULL_BP_CONTEXT=1` restore verbatim inputs; `RALPH_SELF_HEAL_KEEP_DOWNSTREAM_ON_RETRY=1` and `RALPH_SELF_HEAL_KEEP_HANDOFF_HISTORY_ON_RETRY=1` keep retry-suppressed sections; `RALPH_SELF_HEAL_PER_PATCH_RATIONALES=1` restores per-patch rationale output when you need the uncompressed response shape.\n\n## Example Workflow\n\n```bash\n# 1. Initialize OpenSpec in your project\ncd my-web-app\ngit init\nopenspec init\n\n# 2. Ralphify your project\nralph-run init\n\n# 3. Create a new change\nopenspec new change user-auth\n\n# 4. Complete OpenSpec artifacts manually or use opencode skills\n#    (review and fill in proposal.md, design.md, specs/*/spec.md, tasks.md)\n\n# 5. Execute with Ralph\nralph-run --change user-auth\n\n# Output:\n# [INFO] Found 15 tasks to execute\n# [INFO] Executing task 1/15: Create User model with password field\n# [INFO] Executing task 2/15: Implement password hashing\n# ...\n\n# 5. Verify implementation\ngit log --oneline  # 15 commits, one per task\ngit diff HEAD~15   # See full implementation\n```\n\n## Features at a Glance\n\n| Feature | Description |\n|---------|-------------|\n| **Structured Planning** | OpenSpec workflow: proposal → specs → design → tasks |\n| **Agentic Execution** | opencode executes tasks with full context |\n| **Iterative Loop** | Each task builds on previous commits |\n| **Iteration Feedback** | Recent failures and no-progress iterations inform the next pass |\n| **Granular History** | Runner-managed commit per completed task when auto-commit succeeds |\n| **Auto-Resume** | Interrupted? Run again — picks up where left off |\n| **Context Injection** | `--add-context` injects guidance into the next iteration |\n| **Loop Status** | `--status` shows active state, history, and struggle indicators |\n| **Error Tracking** | Automatic error logging and archiving for debugging |\n| **Output Capture** | Loop output captured to temp directories for review |\n| **Cross-Platform** | Full support for Linux and macOS with portable operations |\n| **No External Ralph** | Self-contained mini Ralph engine — no external `ralph` CLI needed |\n\n## Features\n\n### Mini Ralph Loop Engine\n\n`spec-and-loop` includes a first-party mini Ralph implementation (`lib/mini-ralph/`) that\nprovides the core iterative loop without any external Ralph dependency:\n\n- **Iterative execution**: Each task builds on previous commits with full context\n- **State and history**: Loop state, iteration history, and struggle indicators stored in each change's `.ralph/`\n- **Prompt templates**: Context-aware prompts generated from OpenSpec artifacts\n- **Completion promises**: Loop exits when a completion signal is detected\n- **Task progression**: Synchronized with `tasks.md` checkboxes as the source of truth\n\nThe supported subset intentionally excludes upstream features that are out of scope for\nthis repository's OpenSpec-first workflow (multi-agent rotation, plugin toggles, etc.).\n\n### OpenSpec + opencode Synergy\n\n| OpenSpec | opencode | Together |\n|----------|----------|----------|\n| Structured planning | Agentic execution | Plan → Execute loop |\n| Human-readable specs | AI-understandable context | Full context propagation |\n| Task breakdown | Task implementation | Automatable workflow |\n\n### Script Features\n\n- **Auto-resume**: Interrupted? Run again — picks up where left off\n- **Context injection**: `--add-context` / `--clear-context` via each change's `.ralph/ralph-context.md`\n- **Error recovery**: Recent loop signals help guide subsequent tasks\n- **Error tracking**: Automatic error logging to `.ralph/errors.md` with timestamps and archiving\n- **Task synchronization**: `tasks.md` and the per-change `.ralph/ralph-tasks.md` symlink stay in sync\n- **Output capture**: Loop output captured to temp directories for review and debugging\n- **Cross-platform**: Portable operations for Linux and macOS (stat, md5sum, realpath)\n- **Cleanup**: Automatic cleanup of old output directories (older than 7 days)\n- **Idempotent**: Run multiple times safely\n\n## Advanced Usage\n\n### Context Injection\n\nInject custom instructions into the next iteration:\n\n```bash\nralph-run --add-context \"Use Redis instead of Memcached\"\n\n# Check current pending context\nralph-run --status\n\n# Clear pending context\nralph-run --clear-context\n```\n\n### Loop Status Dashboard\n\n```bash\nralph-run --status\n```\n\nShows: active loop state, current task, prompt summary, pending context, iteration history,\nand struggle indicators if the loop appears stuck. Inactive runs are distinguished as completed or stopped-incomplete, and the latest unresolved auto-commit anomaly is shown when present.\n\n### No-Commit Mode\n\nRun without automatic git commits (useful for reviewing changes before committing):\n\n```bash\nralph-run --change my-feature --no-commit\n```\n\nIn this mode the runner does not create commits, and the rendered prompt explicitly forbids the agent from running `git add` or `git commit`.\n\n### Verbose Mode\n\nFor debugging:\n\n```bash\nralph-run --verbose --change my-feature\n```\n\n### View Generated PRD\n\n```bash\ncat openspec/changes/my-feature/.ralph/PRD.md\n```\n\n`PRD.md` is generated once when `ralph-run` starts and reused for the rest of\nthat run. Per-iteration freshness comes from re-reading `tasks.md`, recent loop\nsignals, and any pending `--add-context` injection.\n\nIf you customize the prompt template, preserve the standalone promise-line contract so only literal control lines advance the loop:\n\n```text\n<promise>READY_FOR_NEXT_TASK</promise>\n<promise>COMPLETE</promise>\n```\n\n### Review Loop Output\n\n```bash\n# Find the latest output directory path\ncat openspec/changes/my-feature/.ralph/.output_dir\n\n# View stdout and stderr logs\ncat openspec/changes/my-feature/.ralph/.output_dir/ralph-stdout.log\ncat openspec/changes/my-feature/.ralph/.output_dir/ralph-stderr.log\n```\n\nOutput is captured to temporary directories for debugging. Old output directories are automatically cleaned up after 7 days.\n\n### View Error Logs\n\n```bash\n# View recent errors\ncat openspec/changes/my-feature/.ralph/errors.md\n\n# Archived errors are saved with timestamps\nls openspec/changes/my-feature/.ralph/errors_*.md\n```\n\n## Architecture\n\nThis package integrates:\n- **OpenSpec**: Structured specification workflow\n- **opencode**: Agentic coding assistant for task execution\n- **Mini Ralph** (`lib/mini-ralph/`): Internal iterative loop engine\n\n### Context Propagation\n\nEach task execution includes:\n- **Invocation-time PRD snapshot**: Proposal, design, and spec content captured in `.ralph/PRD.md` when the current `ralph-run` invocation starts\n- **Fresh task snapshot**: Raw `tasks.md` content plus the current task and completed-task summary rendered each iteration\n- **Recent loop signals**: Compact reminders about prior failed or no-progress iterations\n- **Pending context**: Any `--add-context` injection\n\n### Task Tracking\n\nSynchronized tracking:\n- **tasks.md**: Human-readable checkboxes `[ ]` → `[x]` (source of truth)\n- **.ralph/ralph-tasks.md**: Symlink to `tasks.md` for the loop engine\n- **Atomic updates**: Checkboxes updated after each completed task\n\n### File Structure\n\n```\nopenspec/changes/<name>/\n├── proposal.md          # Your \"why\"\n├── design.md            # Your \"how\"\n├── tasks.md             # Your \"what\" (checkboxes, source of truth)\n├── specs/               # Your requirements\n│   ├── auth/\n│   │   └── spec.md\n│   └── api/\n│       └── spec.md\n└── .ralph/              # Internal loop state (auto-generated, per change)\n    ├── PRD.md                    # Generated prompt snapshot from loop start\n    ├── prompt-template.md       # Template used for generating prompts\n    ├── ralph-history.json       # Iteration history and state\n    ├── ralph-loop.state.json    # Current loop state and iteration count\n    ├── ralph-tasks.md           # Symlink to ../tasks.md (syncs task state)\n    ├── .output_dir              # Path to latest output capture directory\n    ├── ralph-context.md         # (Optional) Pending context for next iteration\n    ├── errors.md                # (Optional) Error logs with timestamps\n    ├── errors_*.md              # (Optional) Archived error logs\n    └── *.md                     # (Optional) Research artifacts created during task execution\n```\n\n**Note:** Files marked as (Optional) are created only when needed:\n- `ralph-context.md`: Created when you use `--add-context`\n- `errors.md` and `errors_*.md`: Created when errors occur during loop execution\n- Additional `*.md` files: Research artifacts created by opencode during task execution (e.g., verification outputs, analysis documents)\n\n### Cross-Platform Support\n\n`spec-and-loop` is designed to work on both Linux and macOS. The script includes portable implementations for:\n\n- **File modification times**: Uses `stat -f %m` on macOS and `stat -c %Y` on Linux\n- **MD5 hashing**: Supports both `md5sum` (Linux) and `md5 -q` (macOS)\n- **Path resolution**: Falls back from `realpath` to `readlink -f` to manual path construction\n- **Temp directories**: Uses `TMPDIR` environment variable or `/tmp` as fallback\n- **Cleanup**: Portable `find` and `rm` operations for old output directories\n\nWindows is not currently part of the supported runtime contract.\n\n## Troubleshooting\n\nFor common issues and solutions, see [QUICKSTART.md#troubleshooting](./QUICKSTART.md#troubleshooting).\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `RALPH_BASE_PROMPT_WARN_BYTES` | `4096` | Byte threshold above which `render()` emits a one-line warning to stderr when `{{base_prompt}}` resolves to a large file. Set to `0` to silence warnings entirely. Invalid values fall back to `4096` with a one-time notice per process. |\n| `RALPH_ITERATION_IDLE_TIMEOUT_MS` | `900000` | Milliseconds of silence on stdout+stderr before the per-iteration idle watchdog fires (default 15 minutes). Set to `0` to disable the watchdog entirely and restore pre-change behavior (no timeout). |\n| `RALPH_ITERATION_KILL_GRACE_MS` | `10000` | Milliseconds the runner waits after sending `SIGTERM` to a timed-out iteration child before escalating to `SIGKILL`. |\n\n### Auto-commit ignore-filter surfacing and iteration watchdog\n\nThis section covers two surfacing improvements added on top of the `harden-auto-commit-against-ignored-paths` change, which is the underlying mechanism that _detects_ when `.gitignore` rules filter out loop-managed paths.\n\n**No new CLI flags are introduced by this change. No startup behavior changes. Every existing `ralph-run` invocation continues to work unchanged.**\n\n#### Loud stderr block\n\nWhen `_autoCommit` detects that one or more paths were filtered by `.gitignore` (anomaly types `paths_ignored_filtered` or `all_paths_ignored`), the runner emits the following block directly to `process.stderr` on **every** iteration where the anomaly fires — independently of any reporter buffering or deduplication:\n\n```\n================================================================================\n⚠ AUTO-COMMIT IGNORE FILTER FIRED  (iteration 7, type: paths_ignored_filtered)\nPaths filtered because .gitignore matches:\n  - openspec/changes/my-change/tasks.md\n  - openspec/changes/my-change/proposal.md\nConsequence: these paths are NOT in the latest commit.\nRemediation (pick one):\n  1. git add -f <path>   # one-time unblock, if you want it tracked\n  2. edit .gitignore     # narrow or remove the matching rule\n  3. pass --no-auto-commit on the ralph-run invocation\n================================================================================\n```\n\nThe three remediation options mean:\n\n1. **`git add -f <path>`** — force-stage a specific file for the next commit. One-time unblock; the path stays gitignored and will be filtered again on the next auto-commit unless you also do option 2.\n2. **edit `.gitignore`** — narrow or remove the matching rule so the path is no longer excluded. The safest long-term fix when the rule is too broad.\n3. **`--no-auto-commit`** — disable auto-commit for this run entirely. Use when you want to manage commits yourself and don't want the runner touching git.\n\n#### Iteration watchdog\n\nThe runner enforces a per-iteration idle timeout: if the `opencode run` subprocess produces no new bytes on stdout **or** stderr for `RALPH_ITERATION_IDLE_TIMEOUT_MS` milliseconds, the watchdog fires. It sends `SIGTERM`, waits up to `RALPH_ITERATION_KILL_GRACE_MS` for a graceful exit, then sends `SIGKILL`.\n\nThe timed-out iteration is recorded in history with `failureReason: 'iteration_timeout_idle'` and three diagnostic fields: `idleMs` (how long the process was silent), `lastStdoutBytes` (last ≤200 bytes of stdout), and `lastStderrBytes` (last ≤200 bytes of stderr). These fields are absent on entries where the watchdog did not fire.\n\nThe `iteration_timeout_idle` reason also appears in the `## Recent Loop Signals` block injected into each iteration's prompt, giving the agent visibility into prior timeout events.\n\nSet `RALPH_ITERATION_IDLE_TIMEOUT_MS=0` to disable the watchdog if your agent workflow runs legitimately long silent tools (e.g., large integration test suites). Example:\n\n```bash\nRALPH_ITERATION_IDLE_TIMEOUT_MS=1800000 ralph-run --change my-feature  # 30-minute idle threshold\nRALPH_ITERATION_IDLE_TIMEOUT_MS=0 ralph-run --change my-feature        # watchdog disabled\n```\n\n**Quick fixes:**\n\n```bash\n# opencode not found?\nnpm install -g opencode-ai\n\n# jq not found?\nsudo apt install jq  # or: brew install jq\n\n# Not a git repository?\ngit init\n\n# command not found: ralph-run?\nexport PATH=\"$PATH:$(npm root -g)/.bin\"\n```\n\n## Resources\n\n- [OpenSpec](https://openspec.ai) - Structured specification workflow\n- [opencode](https://opencode.ai) - Agentic coding assistant\n- [Ralph-Friendly OpenSpec Best Practices](./OPENSPEC-RALPH-BP.md) - How to author loop-safe artifacts and tasks\n- [OpenSpec + Ralph Wiggum BOTW](./OPENSPEC-RALPH-WIGGUM-BOTW.md) - Strengths, tradeoffs, and best-fit guidance\n- [Ralph Methodology Assessment](./RALPH-METHODOLOGY-ASSESSMENT.md) - Repository-specific methodology review\n\n## License\n\nGPL-3.0\n","readmeFilename":"README.md"}