v0.1.7 — App reliability
v0.1.7 — "App reliability"
2026-05-25 · Patch bump (no epic gating a minor)
Highlights
Reliability
- Operator dashboard Restart button is reliable again — closes a respawn race that killed the daemon with
EADDRINUSEthe moment the operator clicked Restart; the panel now reconnects through a fresh handshake in one cycle (#561, in-branch follow-upc627afc2). - Discovery indexer outages fail loudly —
discovery.fallbackToOnchaindefaults tofalse, so a stale or broken Ponder indexer surfaces an explicitDiscoveryUnavailableErrorimmediately instead of silently degrading every operator's task discovery for hours (638228f). Operators who self-host an RPC with generousgetLogsquotas opt in viaJINN_DISCOVERY_FALLBACK=1. - Daemon recovery no longer wedges on backlog scans — chunked delivery scans, pruned dead evaluation opportunities, and a swapped testnet RPC default (#555). Combined with #466 (HF outage cache) and #476 (eval cleanup + disk-floor guard), the swe-rebench v2 generator survives a wider class of transient infrastructure failures.
- Eval subprocess bounded to 2 h wall clock — SWE-rebench
eval.pyinvocations that wedge under Apple-Silicon emulation after a native crash are now killed by a hard guardrail; controllable viaJINN_SWE_REBENCH_EVAL_TIMEOUT_MS(6ec021d).
Operator app
- shadcn migration finished across the dashboard — every primary surface (configuration, captures, execution data, build, leaderboard, launcher create wizard, launcher launched cluster, operator catalogue, onboarding finish) now uses shadcn primitives. Consistent look-and-feel + accessibility (#451, #455, #457, #458, #459, #460, #461, #462, #473).
- Activity-first information architecture — the Overview reshuffle (#449) puts Activity, Wallet, and Node Health at the top; activity rows are framed as task runs with proper tJINN unit fixes (#504); the Overview activity panel renders a real SSE event stream (#434) and highlights currently-active tasks with the effective plugin list (#450, #390).
- Standalone checkpoint loop + Node Health surface — checkpoint cadence decoupled from claim activity; dashboard exposes daemon + RPC health under one card with restart / RPC-manage affordances (#511, #505).
- Canonical notifications surface — Phase 1 of the spec-aligned notification model: structured events + dismissal semantics + per-channel routing (#426).
- Real tJINN earned in WalletCard — wallet card now shows lifetime + recent tJINN earned by the operator's Safe, with proper unit handling (#456).
- Polish + paper-cut fixes — Claude Code harness dropdown selects on click (#342); Leave SolverNet copy clarifies immediate vs deferred effects (#353); join-success affordance + banner consistency (#376); SolverNet join inline decision-context help (#365); per-harness readiness wired into the join harness selector (#362); gas top-up requires explicit click (#360); daemon-disconnect state surfaces in the SPA (#361); retire-confirm typed-name gate is case-insensitive (#500).
Release infrastructure
- Tier-3 release-readiness now runs on the canonical SolverNet — Tier 3 passes green on the mainline SWE-rebench v2 manifest (
bafkreichdzxtjav…), not the isolated workaround used in v0.1.6. Real-network validation matches what operators actually see (PR #529). - Tiered release-prep + release-readiness skills shipped — mechanical Tier 1 floor (#347), Tier 2 cross-op gates (#352), Tier 3 + meta-skill (#359), substrate foundation (#340), all integrated (#375).
Known issues
- Per-operator claim quota does not refund on attempt expiry — failed attempts permanently consume slots (#576). Design discussion in progress.
- Daemon's in-memory
claimedRestorationTaskIdsgate floors one claim per task per daemon, below what the contract'smaxClaimsPerOperatorallows (#582). Affects single-operator dogfooding throughput. - Ponder indexer
TaskCreatedhandler regression — operator-app launcher and daemon discovery may show stale state until the indexer's handler chain is diagnosed (#567). Workaround: operators with direct chain access fall back to the on-chain canonical scan automatically. - Safe
execTransactionretry helper resubmits stale nonce afternonce too lowrevert; bounded but observable under concurrent posting + claiming (#562). - Tier-2
T2.3 multi-op-spa-flowexceeds Playwright budget intermittently (#525).
Changes
feat
- (#281) feat(broadcast-bot): open-source bot that posts network state to X — @oaksprout
- (#339) feat(testing-jinn-app): multi-operator extension (Plan B) — @ritsuKai2000
- (#340) feat(substrate): foundation lifecycle scripts (Plan A) — @ritsuKai2000
- (#345) feat(331): cost surfacing + confirmation gate for paid-API-key harnesses — @ritsuKai2000
- (#347) feat(release-prep): Tier 1 mechanical floor + release-prep skill (Plan C) — @ritsuKai2000
- (#352) feat(release-prep): Tier 2 scenarios + cross-op gates (Plan D) — @ritsuKai2000
- (#359) feat(release-readiness): meta-skill + Tier 3 scenario (Plan E) — @ritsuKai2000
- (#365) feat(334): inline decision-context help in SolverNet join form — @ritsuKai2000
- (#375) feat(release-readiness): substrate + tiered release gates — integrated stack (Plans A-E) — @ritsuKai2000
- (#379) feat(launcher): surface operator-join count on launched dashboard (#351) — @ritsuKai2000
- (#426) feat(operator-app): canonical notifications surface (Phase 1 of spec alignment) — @oaksprout
- (#449) feat(overview): IA reshuffle — Activity / Wallet / Node Health surfaces — @oaksprout
- (#456) feat(operator-app): show real tJINN earned in WalletCard — @ritsuKai2000
- (#482) feat(client): expose live generator state on launched records — @ritsuKai2000
- (#486) feat(client): publish swe-rebench vetted pool artifact — @ritsuKai2000
- (#494) feat: add creator batch posting infrastructure — @ritsukai
- (#511) feat(daemon): standalone checkpoint loop + dashboard rework (#505) — @oaksprout
fix
- (#241) fix(hjex.1): preserve local state on retire failure; refuse stake on bound agent — @ritsuKai2000
- (#243) fix(hjex.6): bootstrap retry endpoint + structured halt envelope + funding auto-resume — @ritsuKai2000
- (#247) fix(hjex.10): donation toggle writes through on confirm — @ritsuKai2000
- (#284) fix: use delivery event time for recovery expiry — @ritsuKai2000
- (#285) fix: preserve verdict claim metadata on mech delivery retry — @ritsuKai2000
- (#286) fix: cut operator log noise so real failures stay visible — @ritsuKai2000
- (#287) fix: scope failed counters to the joined SolverNet — @ritsuKai2000
- (#342) fix(329): Claude Code harness dropdown selects on click — @ritsuKai2000
- (#343) fix(289): in-process respawn on operator-triggered restart — @ritsuKai2000
- (#344) fix(330): claim loop gates on hermes harness readiness — @ritsuKai2000
- (#353) fix(338): clarify Leave SolverNet copy — explain immediate vs deferred effects — @ritsuKai2000
- (#355) fix(290): wire PluginPublication indexing for plugin:* MetadataSet events — @ritsuKai2000
- (#356) fix(308): deep-fetch tag ancestry in promote-main workflow — @ritsuKai2000
- (#357) fix(337): clear all-good indicator after jinn update — @ritsuKai2000
- (#358) fix(309): document permissions + graceful PR-creation fallback in changelog-mirror — @ritsuKai2000
- (#360) fix(336): gas top-up requires explicit click; no auto-fire — @ritsuKai2000
- (#361) fix(335): surface daemon disconnect in the operator SPA — @ritsuKai2000
- (#362) fix(332): wire per-harness readiness into JoinFlow harness selector — @ritsuKai2000
- (#363) fix(348): codex variant of claim-loop readiness gate — @ritsuKai2000
- (#376) fix(333): SolverNet join success affordance + banner consistency — @ritsuKai2000
- (#377) fix(engine): clean up engine/work task dirs after terminal state (#320) — @ritsuKai2000
- (#378) fix(release): rewrite T2.1 against real corpus artifact API (#349) — @ritsuKai2000
- (#380) fix(release): rewrite T2.2 against real on-chain producer/evaluator loop (#350) — @ritsuKai2000
- (#390) fix(219): surface activity as a primary section on the Dashboard — @ritsuKai2000
- (#391) fix(366): codex readiness probe validates auth liveness — @ritsuKai2000
- (#393) fix: v0.1.6 operator-app dogfood follow-ups (#328) — @ritsuKai2000
- (#396) fix(325): surface RPC throttling distinctly + first-run BYO-RPC nudge — @ritsuKai2000
- (#411) fix(engine): canAcceptTask uses cached harness readiness, not a per-task blocking probe — @ritsuKai2000
- (#412) fix(mech): classify terminal evaluation reasons from the structured revert name — @ritsuKai2000
- (#450) fix(overview): highlight active tasks + show effective plugins — @oaksprout
- (#463) fix(learner): validate hooks assets in resolvePluginRoot — @ritsuKai2000
- (#472) fix(client): codex readiness gates on id_token expiry, deadlocking claims — @ritsuKai2000
- (#475) fix(client): swe-rebench-v2 generator survives HF outages via disk pool cache (#466) — @ritsuKai2000
- (#479) fix(client): swe-rebench eval cleanup — prune every round + disk-floor guard (#476) — @ritsuKai2000
- (#483) fix(client): show task run claim start time — @ritsuKai2000
- (#484) fix(client): recover underpriced tx replacements — @ritsuKai2000
- (#485) fix(client): throttle evaluator HF requests — @ritsuKai2000
- (#500) fix(dashboard): retire-confirm typed-name gate is case-insensitive — @ritsuKai2000
- (#503) fix(creator): drop un-bindable legacy tasks[] config entries at startup — @ritsuKai2000
- (#551) fix(test): stub JSON-RPC + relay daemon stderr in funding-sequence e2e — @oaksprout
- (#555) fix(mech): unwedge daemon recovery — chunked delivery scan, prune dead evals, swap testnet RPC default — @oaksprout
refactor
- (#434) refactor(operator-app): render real SSE event stream on /overview/activity (§3.3) — @oaksprout
- (#451) refactor(spa): progressive shadcn migration across operator dashboard — @oaksprout
- (#455) refactor(spa): shadcn C.2 — captures + execution-data — @oaksprout
- (#457) refactor(spa): shadcn C.7 — onboarding finish — @oaksprout
- (#458) refactor(spa): shadcn C.6 — build + leaderboard — @oaksprout
- (#459) refactor(spa): shadcn C.1 — configuration core — @oaksprout
- (#460) refactor(spa): shadcn C.3 — launcher create wizard — @oaksprout
- (#461) refactor(spa): shadcn C.4a — launcher launched cluster — @oaksprout
- (#462) refactor(spa): shadcn C.4b — operator catalogue — @oaksprout
- (#473) refactor(spa): finish shadcn — C.5 + C.8 + visible polish (final) — @oaksprout
- (#504) refactor(dashboard): reframe activity rows as runs + tJINN unit fixes — @oaksprout
chore
- (#270) chore(waxs.2): retire scripts/bd-mirror + friday-triage workflow — @ritsuKai2000
- (#271) chore(waxs.3): release-notes-scaffold + changelog-mirror — verify bd-free + unify closed-ref aggregation — @ritsuKai2000
- (#272) chore(waxs.4): disposition report for 34 unmirrored open beads — @ritsuKai2000
- (#273) chore(waxs.5): freeze-beads runbook script + handbook archive-mechanic clarification — @ritsuKai2000
- (#274) chore(waxs.6): GitHub Issue templates — work-unit + epic + config — @ritsuKai2000
- (#315) chore(ci): operator-gate continue-on-error pending jinn-mono-lrey — @ritsuKai2000
- (#354) chore(326): hide embedded agent surface until more robust — @ritsuKai2000
- (#364) chore(327): hide plug-in builder UI surfaces behind a feature flag — @ritsuKai2000
- (#389) chore(307): auto-open a release-review PR as the holistic-review gate — @ritsuKai2000
- (#392) chore(367): converge client feature flags onto window.JINN_FEATURES — @ritsuKai2000
- (#401) chore(spa): stop tsc -b emitting .js into src/ — @ritsuKai2000
- (#499) chore: ignore CLAUDE.local.md for per-operator Claude context — @oaksprout
- (#501) chore(learner): ship plugin tree inside dist/ so it version-locks with compiled code — @ritsuKai2000
docs
- (#269) docs: retire bd as issue substrate (DR-2026-05-18 + agent canon rewrite) — @ritsuKai2000
- (#324) docs(release-readiness): design spec for substrate + release-prep + release-readiness — @ritsukai
- (#394) docs: add OPERATOR-APP-SPEC.md as canonical operator app data model — @oaksprout
- (#400) docs(307): document holistic release-review gate in the engineering handbook — @ritsuKai2000
- (#452) docs(claude): add Frontends section — spec + domain model + shadcn rule — @oaksprout
- (#454) docs(plan): shadcn thoroughness — agent prompt + SPA inventory + 8-phase sequence — @oaksprout
- (#488) docs: SWE-rebench-v2 generation & claiming semantics (DR for #487) — @ritsukai
- (#565) docs(spec): phase 2 chain architecture — staged launch proposal — @oaksprout
- (#568) docs(press): two independent operators earned tJINN on Sepolia — @oaksprout
- (#571) docs(comms): add External Communication canon + create-press-release skill — @oaksprout
other
- (#407) [codex] test-gate and redeploy TaskClaimEmitter — @ritsuKai2000
- (#408) [codex] add emit-only JINN claim loop — @ritsuKai2000
- (#409) [codex] add standing JINN claim relayer — @ritsuKai2000
- (#447) [codex] expose real tJINN status balance — @ritsuKai2000
- (#495) Implement SWE-rebench-v2 generation policy — @ritsuKai2000
- (#509) [#220] Default testnet JINN claim loop on — @ritsuKai2000
- (#510) [codex] Fix operator tJINN reward surfaces — @ritsuKai2000
- (#529) release: v2026.05.25 — SHIP (driver run, 25 fixes incl. discovery default-off, Tier 3 GREEN on MAINLINE SolverNet) — @ritsuKai2000
Closed this week
- #219
- #258
- #263
- #264
- #265
- #266
- #267
- #268
- #289
- #290
- #307
- #308
- #309
- #320
- #325
- #326
- #327
- #329
- #330
- #331
- #332
- #333
- #334
- #335
- #336
- #337
- #338
- #341
- #348
- #349
- #350
- #351
- #366
- #367
- #369
- #370
- #371
- #372
- #373
- #398
- #399
- #402
- #403
- #404
- #405
- #406
- #413
- #415
- #417
- #418
- #432
- #444
- #448
- #464
- #466
- #467
- #469
- #470
- #476
- #478
- #505
- #507
- #508
- #524
- #526
- #528
- #552
Stats
- Window: v0.1.6 → HEAD (2026-05-25)
- 434 commits · 562 files changed, 68180 insertions(+), 11923 deletions(-) · 100 PRs · 3 contributors
Known issues
- <placeholder — Captain edits>