{"_id":"@botiverse/k-carrier","_rev":"6-832c15c84039a35329c19d3660df95c2","name":"@botiverse/k-carrier","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@botiverse/k-carrier","version":"0.1.0","license":"Apache-2.0","_id":"@botiverse/k-carrier@0.1.0","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"bin":{"k-harness":"harness/src/cli.ts"},"dist":{"shasum":"794e82110b7f45e19382edc96f0f4fb2158f5e96","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.1.0.tgz","fileCount":115,"integrity":"sha512-tv/7YLhSjaNTZJP7Zp2KaXeUNoljEJzL5/bYSgVsG1ZNysSmTT8nu+d0oOeTy5FXgVxYhJYKRVPJsYoyJniIrQ==","signatures":[{"sig":"MEQCIAg4smhuDQ46CKeOTyVjI6FiDBVSvX7L/WwaStw2N9+YAiBEFvA1mvqhU9gg7PXFQYrH9O0ufhKDKFWIeFNwEeNLFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":603524},"type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"gitHead":"d851f2006f1918cdc4886d072cda44631c6e4ba7","scripts":{"sim":"node harness/src/cli.ts sim","lint":"oxlint --deny-warnings core harness examples","test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","ratchet":"bash scripts/ratchets.sh","typecheck":"tsc --noEmit"},"_npmUser":{"name":"xxchan","email":"xxchan22f@gmail.com"},"_npmVersion":"10.9.8","description":"A fail-closed upgrade carrier for long-running managed services: two-slot upgrade transactions (promote/rollback), host-driven quiesce/resume handoff, and post-upgrade convergence read-back.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxlint":"^1.0.0","typescript":"^5.6.0","@types/node":"^26.1.2","oxlint-tsgolint":"^7.0.2001"},"_npmOperationalInternal":{"tmp":"tmp/k-carrier_0.1.0_1786695701665_0.6102624556770757","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@botiverse/k-carrier","version":"0.1.5","license":"Apache-2.0","_id":"@botiverse/k-carrier@0.1.5","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"homepage":"https://github.com/botiverse/k-carrier#readme","bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"bin":{"k-harness":"harness/src/cli.ts"},"dist":{"shasum":"0a73f8e2526dd8bebde925848af727afcc1956bd","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.1.5.tgz","fileCount":112,"integrity":"sha512-loJrxgsMtTyaqSbn8gY4C4wlGtVXQ7RYBMh4tRxILNEDrNF1YO0tiD8ob5YpkQicOf8p4lAVPXKbzE7PKQPpjA==","signatures":[{"sig":"MEQCICe0BHRIZ/MxR6blHnUhMjSqHYaWTV/z9lAhusCA7LqFAiBVmlv+UCT0NQL2gpdlalNQBaQhmxJvrb+EJxKlaf410g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@botiverse%2fk-carrier@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":608284},"type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"gitHead":"6e9d1694a9ef876869a28e65afd7df2180870bb4","scripts":{"sim":"node harness/src/cli.ts sim","lint":"oxlint --deny-warnings core harness examples","test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","ratchet":"bash scripts/ratchets.sh","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cf7b89a3-90e6-4b8e-99ce-a69f6c852d7f"}},"repository":{"url":"git+https://github.com/botiverse/k-carrier.git","type":"git"},"_npmVersion":"12.0.2","description":"A fail-closed upgrade carrier for long-running managed services: two-slot upgrade transactions (promote/rollback), host-driven quiesce/resume handoff, and post-upgrade convergence read-back.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.18.0","devDependencies":{"oxlint":"^1.0.0","typescript":"^5.6.0","@types/node":"^26.1.2","oxlint-tsgolint":"^7.0.2001"},"_npmOperationalInternal":{"tmp":"tmp/k-carrier_0.1.5_1786702365355_0.5770249856780085","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@botiverse/k-carrier","version":"0.1.6","license":"Apache-2.0","_id":"@botiverse/k-carrier@0.1.6","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"homepage":"https://github.com/botiverse/k-carrier#readme","bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"bin":{"k-harness":"harness/src/cli.ts"},"dist":{"shasum":"995c7264d5561ae94e560086fd6e3ab97d82cffe","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.1.6.tgz","fileCount":115,"integrity":"sha512-HVOjPZfmCkxYkgsLawIBrkHABmezfHnR8aeCWAPOVHr86qJB6wTSNnYU/GK7hAPPR3kzfUSHAPsK2xtKu4jhiA==","signatures":[{"sig":"MEYCIQCwKHD5nQ21/GRufFc7LHpsW8mkyEImp51qVozEbyDFOwIhAKHAFcl58LreNrFa5NZxA7wpa5e9a4wQOQVWc5622PPy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@botiverse%2fk-carrier@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":623894},"type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"gitHead":"f0f0aa8722c868fb82a76c0191dc02929cd6a21e","scripts":{"sim":"node harness/src/cli.ts sim","lint":"oxlint --deny-warnings core harness examples","test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","ratchet":"bash scripts/ratchets.sh","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cf7b89a3-90e6-4b8e-99ce-a69f6c852d7f"}},"repository":{"url":"git+https://github.com/botiverse/k-carrier.git","type":"git"},"_npmVersion":"12.0.2","description":"A fail-closed upgrade carrier for long-running managed services: two-slot upgrade transactions (promote/rollback), host-driven quiesce/resume handoff, and post-upgrade convergence read-back.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.18.0","devDependencies":{"oxlint":"^1.0.0","typescript":"^5.6.0","@types/node":"^26.1.2","oxlint-tsgolint":"^7.0.2001"},"_npmOperationalInternal":{"tmp":"tmp/k-carrier_0.1.6_1786718064027_0.8331901579619427","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@botiverse/k-carrier","version":"0.1.7","license":"Apache-2.0","_id":"@botiverse/k-carrier@0.1.7","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"homepage":"https://github.com/botiverse/k-carrier#readme","bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"bin":{"k-harness":"harness/src/cli.ts"},"dist":{"shasum":"83951d9377151719468a180ed0024c0bca9f3d62","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.1.7.tgz","fileCount":116,"integrity":"sha512-cSslOGLhV6b5ZRMrJRg3qB+aTiej9JWculNbuFAlzA9oMejI2fmLCm1j2KpgligSg0Tz08qDRg0yQXfu+5gfGw==","signatures":[{"sig":"MEUCIAUq4AtUqpcE33xN3opRAyAkM4eoWosivbe0UUI70vysAiEA/jVFeb+TkYacicqMdMNRPFRvT+lvYTb7cdSwaQn5T3I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@botiverse%2fk-carrier@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":632156},"type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"gitHead":"0456da56febfceec48d2ece180d62c54b11ba683","scripts":{"sim":"node harness/src/cli.ts sim","lint":"oxlint --deny-warnings core harness examples","test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","ratchet":"bash scripts/ratchets.sh","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cf7b89a3-90e6-4b8e-99ce-a69f6c852d7f"}},"repository":{"url":"git+https://github.com/botiverse/k-carrier.git","type":"git"},"_npmVersion":"12.0.2","description":"A fail-closed upgrade carrier for long-running managed services: two-slot upgrade transactions (promote/rollback), host-driven quiesce/resume handoff, and post-upgrade convergence read-back.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.18.0","devDependencies":{"oxlint":"^1.0.0","typescript":"^5.6.0","@types/node":"^26.1.2","oxlint-tsgolint":"^7.0.2001"},"_npmOperationalInternal":{"tmp":"tmp/k-carrier_0.1.7_1788193456680_0.19179475174716076","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@botiverse/k-carrier","version":"0.1.8","license":"Apache-2.0","_id":"@botiverse/k-carrier@0.1.8","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"homepage":"https://github.com/botiverse/k-carrier#readme","bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"bin":{"k-harness":"harness/src/cli.ts"},"dist":{"shasum":"d9144d4b4a3860818366fd333fca243b979e7b42","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.1.8.tgz","fileCount":117,"integrity":"sha512-zjTudB8PUxZkAIErSl0OvPIoi2RGt7ASrSHAGaTGTsVA05rXmObYmAoP8jMfdSyePe9BMTzq/ZhRxOO0yUjPXg==","signatures":[{"sig":"MEUCIQCT0YuYOVT1QhPWoBjpj2D8QmDIxQdWuunyqVJHIx69dwIgMO4vfvcKLs9fG8QCTJRuPBuB6IlXbvQ6Fl8nPvBHoas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@botiverse%2fk-carrier@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":640034},"type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"gitHead":"fe0ddce65af780be3342ab1e2186f1ea11415ca0","scripts":{"sim":"node harness/src/cli.ts sim","lint":"oxlint --deny-warnings core harness examples","test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","ratchet":"bash scripts/ratchets.sh","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cf7b89a3-90e6-4b8e-99ce-a69f6c852d7f"}},"repository":{"url":"git+https://github.com/botiverse/k-carrier.git","type":"git"},"_npmVersion":"12.0.2","description":"A fail-closed upgrade carrier for long-running managed services: two-slot upgrade transactions (promote/rollback), host-driven quiesce/resume handoff, and post-upgrade convergence read-back.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.18.0","devDependencies":{"oxlint":"^1.0.0","typescript":"^5.6.0","@types/node":"^26.1.2","oxlint-tsgolint":"^7.0.2001"},"_npmOperationalInternal":{"tmp":"tmp/k-carrier_0.1.8_1788344260266_0.23906556330724382","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@botiverse/k-carrier","version":"0.2.0","packageManager":"pnpm@11.18.0","description":"Reliable application upgrades run by an independent installer: two-slot transactions with promote/rollback, a durable journal, live readback, and bounded crash recovery for self-distributed services.","repository":{"type":"git","url":"git+https://github.com/botiverse/k-carrier.git"},"license":"Apache-2.0","type":"module","engines":{"node":">=24"},"exports":{".":"./core/src/index.ts","./harness":"./harness/src/index.ts"},"bin":{"k-harness":"harness/src/cli.ts"},"publishConfig":{"access":"public"},"scripts":{"test":"node --test --test-timeout=180000 \"core/src/**/*.test.ts\" \"harness/src/**/*.test.ts\"","typecheck":"tsc --noEmit","lint":"oxlint --deny-warnings core harness examples","ratchet":"bash scripts/ratchets.sh","sim":"node harness/src/cli.ts sim","check":"pnpm typecheck && pnpm lint && pnpm ratchet && pnpm test","test:runner":"node --test --test-timeout=60000 \"core/src/runner/*.test.ts\" \"core/src/launcher/*.test.ts\" \"core/src/protocol/*.test.ts\" \"core/src/lifecycle/commandHost.test.ts\""},"devDependencies":{"@types/node":"^26.1.2","esbuild":"0.28.2","oxlint":"^1.0.0","oxlint-tsgolint":"^7.0.2001","typescript":"^5.6.0"},"gitHead":"7f359ae1d60c7d093e4fe56cdd2a638782f46e24","_id":"@botiverse/k-carrier@0.2.0","bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"homepage":"https://github.com/botiverse/k-carrier#readme","_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-e/rGyeN53x24nRNZFm2cK3pJ2OV91ba0Jdzze0bPeqD2otMnLmAwAKTSZLEX2j1UOrWWnSvU3A1+nesyyhtLQQ==","shasum":"96026090e6537e54133e2024aea4478e09a21860","tarball":"https://registry.npmjs.org/@botiverse/k-carrier/-/k-carrier-0.2.0.tgz","fileCount":133,"unpackedSize":661664,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@botiverse%2fk-carrier@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGwRr0YnyBR8rRAYt/V1/72YpoVk/M1FyxL2BDGNOZnfAiEAhSvtGy3yH99YWuwfULbf7mmv5L1mrWg6ChWIu7bBZjU="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cf7b89a3-90e6-4b8e-99ce-a69f6c852d7f"}},"directories":{},"maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/k-carrier_0.2.0_1789316685836_0.7259644730741637"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T08:21:41.542Z","modified":"2026-09-13T16:24:46.341Z","0.1.0":"2026-08-14T08:21:41.831Z","0.1.5":"2026-08-14T10:12:45.504Z","0.1.6":"2026-08-14T14:34:24.216Z","0.1.7":"2026-08-31T16:24:16.853Z","0.1.8":"2026-09-02T10:17:40.494Z","0.2.0":"2026-09-13T16:24:46.010Z"},"bugs":{"url":"https://github.com/botiverse/k-carrier/issues"},"license":"Apache-2.0","homepage":"https://github.com/botiverse/k-carrier#readme","repository":{"type":"git","url":"git+https://github.com/botiverse/k-carrier.git"},"description":"Reliable application upgrades run by an independent installer: two-slot transactions with promote/rollback, a durable journal, live readback, and bounded crash recovery for self-distributed services.","maintainers":[{"name":"tennyzhuang","email":"zty0826@gmail.com"},{"name":"richardchien","email":"stdrc@outlook.com"},{"name":"yezizp","email":"yezizp2012@gmail.com"},{"name":"lengthmin","email":"lengthmin@gmail.com"},{"name":"xxchan","email":"xxchan22f@gmail.com"}],"readme":"# K (k-carrier)\n\n**Reliable application upgrades, run by an independent installer.**\n\nK is for applications you distribute yourself to end users' machines, across\noperating systems, outside any package manager: desktop agents, background\nservices installed by `curl | sh`, CLIs that update themselves. Nobody\noperates those machines. A failed upgrade means the product silently stops\nworking and nobody can log in to repair it. K combines a rustup-style external\ninstaller with recoverable, verified service upgrades.\n\nIf a package manager, container image or fleet orchestrator already owns your\ninstallation, that manager owns upgrades too. Your adapter identifies that\nownership so K can defer; you probably do not need it.\n\n## Why upgrading is non-trivial\n\nDownloading a new executable is only the beginning. The application may still\nbe running, power may fail halfway through replacement, or the new version may\nfail to start on a particular machine. Replacing the file does not prove the\nservice came back healthy. The installed updater may itself be too old or\nbroken to help.\n\nK stages verified bytes in a second slot, stops the service, starts and probes\nthe candidate, then commits or restores the previous executable. A durable\njournal lets a subsequent installer recover interrupted work. An upgrade ends\npromoted, rolled back, or explicitly unresolved with the evidence preserved;\nit is never reported as a success K did not observe.\n\n## One installer, multiple entrypoints\n\n`install.sh` and your application's `self upgrade` launch the same external\ninstaller, built from K and your product adapter. The installer owns the\nupgrade transaction and exits when finished. It can be updated independently\nof the application and run even when the installed application cannot start.\n\nYou distribute **three things**: the bootstrap script, the installer, and the\napplication release. They can share a hosting location. You supply the\nrelease source and service lifecycle operations; K supplies the transaction\nmachinery. The runner uses Node 24, either as an external runtime or bundled\ninto a Node single executable. A fully runtime-independent installer must also\npackage its supervisor and controller dependencies.\n\nThe installer must survive stopping the application. If a worker crashes,\nthe temporary supervisor runs bounded recovery. After reboot, an operator or\nOS startup hook must start installation again. K rolls back executables,\nnot application data; data migration compatibility remains the product's job.\nArtifact hashes check integrity; your distribution channel establishes trust.\n\n## Status\n\n| Area | State |\n|---|---|\n| Two-slot transaction, journal, lock, receipts | Done; generated crash matrix, seeded simulation, and a Lean model of all phases, rollback and crash/recovery interleavings (host honesty assumed) |\n| External runner protocol, supervisor, bounded recovery | Done; Linux/macOS process tests |\n| Command controller boundary | Done; demo controller only |\n| Verified download with resume and gzip | Done |\n| Single-executable (SEA) runner | Verified manually; build flag provided, no CI |\n| Windows | Core is platform-seamed; harness port incomplete, CI informational |\n| Product-ready `install.sh` template | Not yet |\n| Publisher signing of installer or release metadata | Not provided; hash and size only |\n| Automatic restart after machine reboot | Not provided; product OS hook |\n| Receipt archive garbage collection | Not provided |\n\n## Documentation\n\nGuides, written to be read in order:\n\n- [How an upgrade works](docs/guide.md): the processes involved, one upgrade start to finish, what breaks, how to read the result\n- [Runnable example](examples/external-service/README.md)\n- [Integration and distribution guide](docs/integration.md)\n\nContracts, written to be looked up:\n\n- [Design](docs/design.md): normative execution model, transaction, supervision and controller obligations\n- [Reference](docs/reference.md): protocol, exit codes, budgets, on-disk layout\n- [Test plan](docs/test-plan.md) and [harness design](docs/harness-design.md)\n- [Formal model](formal/README.md)\n\nBackground:\n\n- [Prior art](docs/prior-art/design-influences.md) and [external installer research](docs/prior-art/external-runner-research.md)\n\nIncubating · TypeScript / Node 24 · Apache-2.0. Contributions welcome.\n","readmeFilename":"README.md"}