LoopCoder v0.8.1
Production-path closure for native macOS Apple Silicon.
v0.8.1 connects the orchestration contracts that v0.8.0 published but did not
fully wire into everyday commands. After a post-v0.8.0 product-path audit,
unpinned workers still defaulted to Codex without a durable route decision,
nested children lacked permission-safe routing, waiters and progress hosts were
incomplete, installer custom PATH was broken, and release evidence for real
providers was missing. v0.8.1 closes those gaps on darwin/arm64 only.
Product-path Full GO (packaged gates + live Codex/Claude canaries) passed
on the freeze candidate before tag. Live Apple Developer ID + notarize is
optional and recommended only when you want Gatekeeper-friendly browser
downloads. CLI install via this release uses Sigstore-verified checksums.
| Item | Value |
|---|---|
| Platform | native macOS Apple Silicon (darwin/arm64) only |
| Tracking | #1002 |
| Runbook | docs/reference/v0.8.1-release-runbook.md |
| Go/No-Go gate | docs/reference/v0.8.1-go-no-go.md |
| Capability matrix | docs/reference/v0.8.0-capability-matrix.md |
| Changelog | CHANGELOG.md |
v0.7.0 remains the final legacy multi-platform release. v0.8.0 remains the
prior Darwin arm64 public tag for controlled canary/dev work.
Why this release exists
v0.8.0 shipped important building blocks (inventory, routing contracts,
nested-run records, progress receipts, waiters, budgets). A later audit found
several of those blocks were not connected end to end in the commands
operators actually run:
| Area | v0.8.0 gap | v0.8.1 outcome |
|---|---|---|
| Worker launch | Unpinned dispatch often defaulted to Codex without a durable route decision |
Unpinned workers call route decide, persist authority, then launch the selected adapter/model/effort |
| Verifier | Independent verifier routing incomplete | loopreview persists a verifier route and enforces independence from the worker |
| Delivery | Claim-dispatch of one ready DeliveryRun task incomplete | delivery claim-dispatch is a product path |
| Nested | No permission-safe production nested child routing | Nested children resolve permission-safe routes; orchestrate / unbridged native stay refuse-closed |
| Fallback | Typed provider failures not wired outside worker | Bounded typed fallback after classified Worker failures |
| Wait | Approval / outbox / detached waiters not production-wired | Provider-free loopcoder wait watchers against durable local state |
| Progress hosts | Host visibility contracts incomplete | Codex / Claude / Paseo / generic CLI host contracts |
| Installer | Custom install dir not honored for PATH | LOOPCODER_INSTALL_DIR drives PATH, profile lines, and instructions |
| Release evidence | No protected real-provider canaries / product-path gate | Canaries + go/no-go gate + runbook |
| Live nested canary | Route/inventory/budget gaps blocked live Codex/Claude | Live nested canaries pass on product-path Full GO |
Highlights (operator-facing)
1. Automatic Worker route authority
- Ordinary unpinned
loopcoder dispatchpersists a routing decision before
any provider process starts. - The Worker launches with the selected adapter / model / effort exactly.
- Explicit
--provideris a durable pin with user provenance. - Empty-provider implicit Codex defaults are removed from the prepare path.
no_routereturns exit code 20 with zero provider launches.
2. Independent Verifier route authority
- Unpinned
loopreviewpersists a verifier route decision before launch. - Independence from the configured worker is enforced by policy.
- When no independent read-only verifier is available, the path returns
needs-human rather than silently reusing the worker adapter.
3. DeliveryRun claim-dispatch
delivery claim-dispatchclaims one ready DeliveryRun task under durable
ownership and dispatches it through the product path.- Aligns local DeliveryRun state with worker launch authority.
4. Nested permission-safe child routing
- Nested children resolve a permission-safe route from the immutable child
execution contract before plan persistence and claim/launch. - Mixed read-only / write plans may select different eligible adapters.
- Explicit child or global
--providerpins pass the same nested permission
matrix (read-only vs bounded-write matrix). - Orchestrate permission and unbridged native provider delegation remain
refuse-closed. - Route receipts (decision id, adapter, model, outcome, reason) appear on child
results for audit. - Live release canaries exercise this path with real Codex and Claude CLIs.
5. Typed provider failure → bounded fallback
- After Worker classifies a provider failure,
dispatchand
delivery claim-dispatchcan callrouting.ApplyTypedProviderFailurewhen a
route decision exists. - Pins and needs-human classes stay fail-closed.
- Auto-eligible classes may persist a bounded successor without relaunching
a provider in-process.
6. Production wait wiring
loopcoder waitships provider-free watchers:approvaloutboxdetached-workerquota-reset(still available)
- Restartable file checkpoints; zero provider launches on the wait path.
- GitHub CI waiting remains on the existing orchestration path.
7. Host progress visibility
- Negotiated foreground sinks for Codex, Claude, Paseo, and generic CLI.
- Worker progress delivery annotates the selected host.
- Unknown hosts degrade to generic.
- Active delivery still never uses a model to “poll progress”.
8. Installer custom directory PATH
LOOPCODER_INSTALL_DIRis used for PATH detection, shell profile lines, and
printed instructions (quoted for spaces).- Re-runs stay idempotent.
LOOPCODER_NO_MODIFY_PATH=1prints guidance without editing profiles.- Relative install directories are rejected.
9. Release evidence harnesses
- Blocking Codex/Claude canaries:
scripts/release-provider-canary.sh
(fixture + live; live requiresLOOPCODER_REAL_PROVIDER_CANARY=1). - Non-blocking Grok/Antigravity canaries (
blocking:false; soft
not_availableoutcomes). - Product-path go/no-go gate:
scripts/v081-product-path-gate.sh→
loopcoder.v081_go_no_go.v1JSON + human report. - Apple sign/notarize harness: dry-run always; live opt-in
(APPLE_SIGN=1+ Developer ID + notary profile). - Operator runbook: freeze → Full GO → publish.
10. Live nested canary reliability (pre-tag fixes)
Fixes required so live Codex/Claude nested canaries actually route and launch
on a real machine (not just fixtures):
- Valid canary plan run IDs (
state.IsRunIDshapes) and fixture-repo
core.hooksPath=/dev/null. - Nested route authority (
router/ user pin provenance), display-name model
pin resolution to opaquemcap_*inventory IDs, nested budget authority
seeding, and no hard pin of unsupported deep/fast invocation profiles. - Inventory: promote
usable_for_invocation=yeswhen auth readiness is ready;
adapter-declared models available for routing; passUSER/LOGNAMEinto
provider auth probes (required for Claudeauth status --json). - Routing: derive availability scores when none are persisted; low-risk paths
may proceed without uncollected quota/budget telemetry. - Product-path Full GO does not require live Apple Developer ID.
Platform support
| Host | v0.8.1 |
|---|---|
native macOS Apple Silicon (darwin/arm64) |
Supported |
| Windows / Linux / WSL / containers as runtime | Unsupported (use v0.7.0) |
| Intel macOS / Rosetta amd64 | Unsupported (use v0.7.0) |
Unsupported hosts fail closed with exit code 78 /
ErrUnsupportedPlatform before network, credentials, provider launch, or
storage mutation.
Published archive shape:
loopcoder_0.8.1_darwin_arm64.tar.gz
SHA256SUMS
SHA256SUMS.sigstore
Install
Release installer (recommended)
curl -fsSL https://raw.githubusercontent.com/jasonhnd/loopcoder/main/scripts/install.sh | sh -s -- --version 0.8.1
loopcoder version
loopcoder doctorCustom directory:
LOOPCODER_INSTALL_DIR="$HOME/tools/loopcoder" \
curl -fsSL https://raw.githubusercontent.com/jasonhnd/loopcoder/main/scripts/install.sh | sh -s -- --version 0.8.1Guidance only (do not edit shell profiles):
LOOPCODER_NO_MODIFY_PATH=1 \
curl -fsSL https://raw.githubusercontent.com/jasonhnd/loopcoder/main/scripts/install.sh | sh -s -- --version 0.8.1Go install (supported host with Go toolchain)
go install github.com/jasonhnd/loopcoder/cmd/loopcoder@v0.8.1
loopcoder versionFirst consumer repository
loopcoder init --repo .
loopcoder skill install --repo .
loopcoder projects register --repo .
loopcoder doctor --repo .
loopcoder report --repo .
# then: /loopcoder <your need> (or dispatch / tick / loopreview)Prerequisites on PATH
git- authenticated
gh - at least one registered provider CLI (
codexdefault worker;claudefor
independent verification; optionalgrok,agy/ antigravity)
Provider registration is not proof of authentication, usable capacity, or
safe role support. Run loopcoder providers refresh and consult the capability
matrix before unattended dispatch.
Upgrade from v0.7.0 / v0.8.0
On native Darwin arm64 only:
loopcoder upgrade --version 0.8.1
loopcoder version
loopcoder migrate storage --format json
loopcoder migrate storage --apply --format json
loopcoder skill install --repo .
loopcoder projects register --repo .
loopcoder doctor --repo . --format json
- Storage migrate is plan-only unless
--applyis present. - Stop all LoopCoder processes before apply or offline rollback.
- Schema-30 databases cannot be opened by v0.7.0; rollback requires the
verified pre-migration backup (see
storage-migration.md).
Integrity and trust
| Mechanism | What it proves |
|---|---|
SHA256SUMS + Sigstore (SHA256SUMS.sigstore) |
Archive integrity and release provenance |
| Live Apple Developer ID + notarize | Gatekeeper-friendly download UX (optional; only when release workflow has APPLE_SIGN=1 and secrets) |
v0.8.1 product-path Full GO does not require Apple live signing. If the
published Mach-O is not Developer ID signed, release notes must not claim
notarized / Gatekeeper trust. Users can still install via installer + Sigstore,
go install, or local build.
Product-path Full GO definition
Required
- Fixture / packaged product-path gates on the freeze candidate
- Live Codex canary (
LOOPCODER_REAL_PROVIDER_CANARY=1) - Live Claude canary
- Zero open
release-blockerissues (except the tracking epic closed after
publication)
Optional / recommended
- Live Apple Developer ID + notarize (
--include-apple-live 1) for browser
download UX
Harness:
bash scripts/v081-product-path-gate.sh \
--mode packaged \
--binary ./loopcoder \
--expected-digest <sha256> \
--candidate-sha <git-sha> \
--include-live-canaries 1 \
--artifact-dir ./gate-fullFixture success never substitutes live canaries.
Known limitations
- Platform: darwin/arm64 only.
- Apple trust: public Mach-O may ship without Developer ID/notarize; then
Gatekeeper may warn on some download paths. Prefer installer + Sigstore or
go install/ source build. - Quota / inventory: installation and auth readiness are not usable capacity.
Uncollected quota remains explicit; do not invent five-hour limits. - Nested: orchestrate permission and unbridged provider-native nested
subagents remain refused without an approved bridge. - Antigravity: write-oriented; pure read-only nested canary may be
not_availablewithout product regression for non-blocking canaries. - Grok: non-blocking canary capacity; missing CLI/auth →
not_available. - Direct
geminiadapter: experimental / unverified for production. - Human merge: LoopCoder-core keeps
adapters.gate: human-mergefor safety;
legacy empty gates still normalize toautoat runtime.
Breaking / support changes (vs multi-platform era)
Inherited from the v0.8 line:
- No Windows/Linux/WSL/container/Intel macOS artifacts or CI commitments.
- Unsupported platform → exit
78/ErrUnsupportedPlatform. - Schema-30 cannot be opened by v0.7.0 without offline restore of a verified
backup.
Documentation map
| Doc | Role |
|---|---|
v0.8.1-release-runbook.md |
Freeze → Full GO → publish |
v0.8.1-go-no-go.md |
Gate contract and modes |
release-provider-canaries.md |
Codex/Claude + Grok/Antigravity |
macos-codesign.md |
Optional Developer ID / notarize |
progress-hosts.md |
Host progress visibility |
usage.md |
Setup and end-to-end usage |
storage-migration.md |
Migrate / rollback |
CHANGELOG.md |
Full version history |
Tracking and closeout
- Production-closure epic: #1002
- After public verification, attach gate evidence and close the tracking issue.
Thank you
Thanks to everyone who ran product-path audits, canaries, and release dry-runs
that turned “contracts exist” into “commands actually route, nest, wait, and
ship evidence.”