Skip to content

v0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 31 Aug 20:24
· 3 commits to main since this release
7ec3a21

First full release of 0.1.0. It is v0.1.0-rc.2 plus the two entries below —
everything the two release-candidate sections describe is in it, and those sections
stay as the record of when each part arrived.

Published as ghcr.io/sageox/agent-base:0.1.0, and this is the first release to take
the floating tags a candidate is refused: :latest and :0.1. :0 is not published
at all — before 1.0.0 a minor bump may break you, so a major-only alias would promise
a stability that does not exist. Pin the digest recorded on the GitHub Release in
production; the tags are for humans.

Still pre-1.0: configuration format and CLI flags may move between minor versions.

The Helm chart is 0.9.0, unchanged since rc.2. Both entries below are code rather than
templates — jobs[].report.probe is a key an older binary refuses under .strict(),
and announce: reported is a value outside that binary's enum — so roll the image
before setting either, and no chart bump is needed to render an agent that does.

Added

  • A job body can post into its report channel, read the answers back, and mint its
    verdict from what it read.
    jobs[].report.probe: true opens a per-run channel the body
    reaches over HTTP at JOB_CHANNEL_URL with JOB_CHANNEL_TOKEN, carrying two verbs:
    post_message, bounded to the one channel the job declared, and thread_read, bounded
    to a root that same run posted. Until now a body's only channel output was the terminal
    verdict the host mints — right for a job that observes, and unable to express a job
    that probes, where the reply set is knowable from the channel and from nowhere else.
    A fleet roll call is that job: a Deployment can be Ready and green while consuming no
    events at all. The listener is opened before the body is spawned and closed when it
    exits, its token is minted per run, and there is no field for a destination — the brain
    is not offered any of it, and a job body is still not an MCP client of the gateway. A
    surface with no thread model refuses the read rather than answering with an empty thread,
    because "nobody replied" and "this surface cannot tell you" are different findings.
    SurfaceAdapter gains an optional readThread, implemented on Buzz as one REQ on the
    socket it already holds; a job that declares no probe is spawned into exactly the
    envelope it had before.

  • A job that is both scheduled and reporting can be heard only when it has something to
    say.
    jobs[].report.announce gains a third mode, reported, which posts a run whose
    body wrote a detail on some gate, whatever the verdict, and behaves as unproven
    otherwise. Neither existing mode fits a job that ticks every half hour and finds something
    twice a month: always makes it a half-hourly "nothing to report" in a channel, and
    unproven is structurally silent on the runs that did the work, since a run whose gates
    all passed has nothing unproven to announce. Keying on detail is the distinction — gates
    without prose are outcomes the verdict already speaks for, while a detail is a sentence
    the body composed for a human. It buys no pass, because the status word in front of that
    sentence is still minted from the verdict, and it lowers no floor: a body that wrote no
    gates is still UNKNOWN and still posts. unproven and always are unchanged.

Runtime image

ghcr.io/sageox/agent-base@sha256:e84c494f743d2d2fb3f7d1ec025bec271dccae73c26866748085ed3a57b5fe73

Pullable anonymously, linux/amd64,linux/arm64. Pin the digest in production: the 0.1.0 tag is immutable and is never republished.