Skip to content

LoopCoder v0.8.1

Latest

Choose a tag to compare

@jasonhnd jasonhnd released this 19 Jul 17:08
94194ae

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 dispatch persists a routing decision before
    any provider process starts.
  • The Worker launches with the selected adapter / model / effort exactly.
  • Explicit --provider is a durable pin with user provenance.
  • Empty-provider implicit Codex defaults are removed from the prepare path.
  • no_route returns exit code 20 with zero provider launches.

2. Independent Verifier route authority

  • Unpinned loopreview persists 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-dispatch claims 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 --provider pins 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, dispatch and
    delivery claim-dispatch can call routing.ApplyTypedProviderFailure when 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 wait ships provider-free watchers:
    • approval
    • outbox
    • detached-worker
    • quota-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_DIR is used for PATH detection, shell profile lines, and
    printed instructions (quoted for spaces).
  • Re-runs stay idempotent.
  • LOOPCODER_NO_MODIFY_PATH=1 prints 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 requires LOOPCODER_REAL_PROVIDER_CANARY=1).
  • Non-blocking Grok/Antigravity canaries (blocking:false; soft
    not_available outcomes).
  • Product-path go/no-go gate: scripts/v081-product-path-gate.sh
    loopcoder.v081_go_no_go.v1 JSON + 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.IsRunID shapes) and fixture-repo
    core.hooksPath=/dev/null.
  • Nested route authority (router / user pin provenance), display-name model
    pin resolution to opaque mcap_* inventory IDs, nested budget authority
    seeding, and no hard pin of unsupported deep/fast invocation profiles.
  • Inventory: promote usable_for_invocation=yes when auth readiness is ready;
    adapter-declared models available for routing; pass USER/LOGNAME into
    provider auth probes (required for Claude auth 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 doctor

Custom directory:

LOOPCODER_INSTALL_DIR="$HOME/tools/loopcoder" \
  curl -fsSL https://raw.githubusercontent.com/jasonhnd/loopcoder/main/scripts/install.sh | sh -s -- --version 0.8.1

Guidance 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.1

Go install (supported host with Go toolchain)

go install github.com/jasonhnd/loopcoder/cmd/loopcoder@v0.8.1
loopcoder version

First 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 (codex default worker; claude for
    independent verification; optional grok, 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 --apply is 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

  1. Fixture / packaged product-path gates on the freeze candidate
  2. Live Codex canary (LOOPCODER_REAL_PROVIDER_CANARY=1)
  3. Live Claude canary
  4. Zero open release-blocker issues (except the tracking epic closed after
    publication)

Optional / recommended

  1. 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-full

Fixture 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_available without product regression for non-blocking canaries.
  • Grok: non-blocking canary capacity; missing CLI/auth → not_available.
  • Direct gemini adapter: experimental / unverified for production.
  • Human merge: LoopCoder-core keeps adapters.gate: human-merge for safety;
    legacy empty gates still normalize to auto at 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.”