Skip to content

5dive

v0.15.7 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agent-runtime agentic-engineering agentic-loops agents ai-agents ai-assistant
+14 more
ai-coding-assistant ai-tools antigravity autonomous-agents claude claude-code codex codex-cli coding-agent loop-engineering multi-agent openclaw self-hosted zero-human-company

Summary

AI summary

Fixed task JSON output failing to render when no precedent exists.

Full changelog

5dive task need --json returned nothing at all — not a smaller object, not an error, zero bytes — for any gate filed without a matching precedent, which is the overwhelming majority of them. Measured on the rolled 0.15.6 binary.

  • one field killed the whole envelope. precedent_ref:(($pr|select(length>0))|tonumber? // null): with no precedent $pr is empty, select yields empty, and because the // null bound to tonumber? instead of to the whole expression, empty | (tonumber? // null) stayed empty and propagated OUT of the object constructor. jq does not build a smaller object in that situation; it builds nothing.
  • the discriminator is where // null BINDS, not whether a pipe follows select. (($x|select(length>0)) // null) is safe and (($x|select(length>0)|tonumber?) // null) is safe — both enclose the empty. Only (($x|select(length>0))|tonumber? // null) leaves it uncaught. map(select(...)) and [ ... | select(...) ] are comprehensions and never at risk. The fix is one closing paren.
  • it was a ONE-line point fix, not a 19-site sweep. The ticket was scoped from grep hits on select(length>0); enumerating the 23 sites in src/ by GUARD SHAPE instead found six safe // null forms, comprehensions, two streaming into jq -cs where empty correctly yields [], one map(select(...))|length false positive, and exactly one defect. Editing the other eighteen would have been eighteen chances to introduce the bug being removed.
  • the only case that worked was the rare one, which is why it survived. A gate WITH a precedent rendered fine. Its regression test asserts both directions, so "fix" by deleting the field fails too — and against the pre-fix line 5 of 6 assertions fail, the sole pass being that rare path.
  • a shape guard grep rejects the dangerous binding coming back.
  • the goal path could never have caught it: it captured the envelope into a gate_json it never read. A capture that is never inspected reads at review time like a checked result and is not one. Now discarded explicitly, matching the objective path, so the exit status is visibly the only thing that call is trusted for.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track 5dive

Get notified when new releases ship.

Sign up free

About 5dive

All releases →

Related context

Earlier breaking changes

  • v0.11.22 council amend now requires constitutional-class motion for constitution changes
  • v0.11.9 CLI now only OFFERS a veto to the genesis principal; EXERCISE requires authenticated tap.
  • v0.11.5 Raw bench add/rm of the primary council is refused.
  • v0.11.5 `council init` now requires sudo and seeds the primary council bench.
  • v0.10.7 Changes delegated-push grant to be BUILDER-SCOPED, limiting push permissions.

Beta — feedback welcome: [email protected]