agentacct 0.5.3
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 newhanded_offsection 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 insidetask-,disk-andrisk-, 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 aBearer),
Authorization/Proxy-Authorizationheaders including their JSON and
curl -Hserializations, and the genuinely ambiguous bareBearer <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_sectionnow acceptstitleas an alias for
section_title. The recording contract agentacct ships to every client told
agents to sendtitle, which the schema then rejected outright, losing the
whole record; the instruction is corrected and the alias keeps
already-onboarded machines working without re-runningonboard.- 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. filesentries: 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 ownproject_diris 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.