Skip to content

agentacct 0.5.3

Choose a tag to compare

@mikehasa mikehasa released this 31 Jul 14:17
· 225 commits to main since this release
4eb87a6

Added

  • Local logs now shows the recording calls agentacct refused, with counts and a
    fixed set of reason codes. A refused call previously left no trace anywhere —
    no store entry, no counter, no log line — so an agent that failed to record
    was invisible to you and to the maintainer, while the dashboard told you to
    record more work. The figure is derived at read time from data already on
    disk, so it covers refusals that predate this release, and it stores only
    counts and reason codes, never the offending value or path.

  • Work now carries honest partial and stopped states instead of collapsing to
    all-or-nothing. A task no longer reads "in progress" just because one step was
    left open: if you demonstrably moved on — kept working in other sessions for a
    day while this one sat untouched — it reads "mostly done"; if you have not been
    active anywhere since, it stays "in progress" (being away is never treated as
    abandonment). A new handed_off section status lets an agent record a clean
    stop when you continue in a new session, as a terminal state rather than a live
    one. Tasks also expose a partial verification count ("3 of 5 steps verified")
    rather than a single verified/unverified flag.

Changed

  • The "usage without work context" prompt no longer blames you for all of it;
    it now points at the refused-recording list for the part agentacct caused.

Fixed

  • Secret redaction no longer destroys the record it was protecting. Any value
    containing something that looked like a credential was replaced in its
    entirety
    with [REDACTED], and the detector fired on ordinary words — the
    api-key pattern matched inside task-, disk- and risk-, and the bearer
    pattern matched the English phrase "Bearer token". On one real ledger that
    destroyed 117 project paths, 20 section ids, 5 summaries and 2 idempotency
    keys; because every casualty collapsed onto the same literal string,
    unrelated sections merged into one phantom section. Redaction now replaces
    only the matched span, and every redaction records which field was cut and
    which pattern class cut it — a repair you cannot see is a bug.
  • Redaction coverage is now broader than before, not narrower. Patterns are
    split into three independent families — prefixed vendor tokens (GitHub,
    GitLab, AWS, Google, Slack, Stripe, npm, PyPI, Hugging Face, Linear,
    DigitalOcean and more, matched anywhere, with or without a Bearer),
    Authorization/Proxy-Authorization headers including their JSON and
    curl -H serializations, and the genuinely ambiguous bare Bearer <token>
    — so a guard added for one can no longer disable another. The ambiguous
    family was calibrated against a real ledger rather than guessed: zero false
    positives across 27k distinct strings. The shapes still missed are named in
    the module, with the method to re-derive them.
  • agentacct_record_section now accepts title as an alias for
    section_title. The recording contract agentacct ships to every client told
    agents to send title, which the schema then rejected outright, losing the
    whole record; the instruction is corrected and the alias keeps
    already-onboarded machines working without re-running onboard.
  • Limit errors now say what was received, not only what is allowed. An agent
    that overshoots a length limit could previously only shrink blindly and
    retry.
  • Metadata size is measured in real UTF-8 bytes on every write surface. It was
    measured against an ASCII-escaped encoding, so each CJK character counted as
    6 bytes and each emoji as 12 — a Chinese-writing agent was refused at roughly
    a third of the advertised budget, by an error naming a parameter it had never
    sent. Size errors now name the field that actually overflowed.
  • files entries: the project-relative rule is published in the schema (it was
    enforced but documented nowhere), and an absolute path that provably lies
    under the call's own project_dir is normalized instead of failing the whole
    call. This was the single largest cause of refused recordings. Paths that
    escape the project are still rejected.
  • A tool call mangled in transit — parameters absorbed into a narrative field
    as literal text — is now flagged with a warning and a marker on the stored
    record instead of being kept silently. It never rejects and never repairs.
  • A check that failed and was then fixed no longer shows as a standing,
    unresolved "Agent finding". The retire-on-rerun logic keyed on the exact
    command, and fixing a build almost always edits the command, so the passing
    re-run never superseded the failure. A later same-scope pass now demotes the
    failure out of Needs attention into a "resolved in a later check" state —
    still visible, counted on its own, and one-click reinstatable — never hidden
    and never upgraded to Verified. Findings whose check exited 0 (a check
    asserting a defect) and passes from another project/session are never demoted.