Releases: ydnikolaev/a2ahub
Release list
v0.18.2
v0.18.2 — Notes land cleanly, release versions stay current, and the public product surface matches the dashboard
Released 2026-08-01.
What changed
A failed Git push is no longer mistaken for denied access just because its path contains 403
fix · low impact
The fork fallback now recognizes GitHub's complete HTTP 403 failure phrase instead of matching the three digits anywhere in stderr. A local path or generated fixture name containing 403 therefore remains the original push error and cannot trigger an unrelated fork attempt.
Affects: Git push classification, fork fallback
A note is validated before its pull request opens and remains legal in every artifact state
fix · high impact
a2a note and its MCP twin now ask the shared fold legality engine before writing. A note remains transition-free and does not change the artifact state, but only either party named by the artifact may add one. This is the same rule the space validator applies, so an authorized note on a submitted response passes the required check instead of opening a pull request that can never merge, while an outsider is refused locally before any branch or pull request is created.
Affects: a2a note, MCP lifecycle tools, fold legality, space validation
What to do (local): Update the a2a binary before adding notes to active exchange artifacts; no document or space migration is required.
Check: a2a version
a2a update --yesThe website and local release tooling no longer report the release before the one actually published
fix · normal impact
Public releases are now derived only from exact immutable tag refs, and the Pages build fetches complete tag history. After a proven candidate is promoted, the publisher imports the exact verified public tag back into the private source checkout before it returns. This closes the filtered history gap that left the website, roadmap and release-aware agents on 0.18.0 even though GitHub, the installed binary and operated spaces were already on 0.18.1. Authored notes without a matching tag remain hidden as release candidates rather than being mistaken for shipped software.
Affects: release publisher, changelog, roadmap, GitHub Pages
The public site demonstrates the real dashboard instead of describing it with a second interface
feat · normal impact
The product homepage now embeds the same exchange map, artifact proof, status badges, filters, disclosures and visual tokens as the local dashboard. Features is generated from the dashboard Guide source, public page headers follow one component grammar, and compact cards, popovers, modals, mobile layouts and dark mode share the same interaction and spacing rules. Human owners can carry locally cached GitHub avatars after an explicit sync while every offline render keeps a monogram fallback and performs no network request. Doctor reports missing active-owner images as a non-blocking advisory with the exact a2a sync repair, so people never need to inspect or manage the cache themselves.
Affects: a2ahub.dev, a2a html, a2a doctor, design tokens, dashboard map, avatar cache
Search engines and agents get canonical, complete and provenance-labelled product evidence
feat · low impact
The static site now publishes canonical route metadata, a sitemap, Atom release feed, permissive crawler policy, structured data, security.txt, a compact llms.txt and a complete llms-full.txt assembled from the current embedded documentation and tagged releases. The synthetic dashboard is excluded from indexing, Google Analytics loads only on the public site, and the quality gate checks accessibility, links, metadata, bundle shape and Lighthouse budgets before Pages deploys. The shared runtime also keeps unbooted design markup out of the first visible frame, eliminating a timing-dependent changelog layout shift; a deliberately delayed-runtime browser check now guards that first-paint contract.
Affects: SEO, agent discovery, llms.txt, accessibility, performance, analytics
Prompt refreshes finish independently without turning optional avatar downloads into shell latency
fix · normal impact
The detached statusline refresh now owns a real operating-system session, carries a five-second end-to-end budget and skips optional avatar downloads while retaining mirror and update-notice refreshes. Explicit a2a sync still refreshes avatars normally. Scoped e2e verification also refuses a cached CLI from an earlier run, so a stale binary can no longer hide a regression in the source currently under test.
Affects: a2a statusline, background sync, avatar cache, scoped verification
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
Read the product overview, documentation, dashboard example, and complete changelog at a2ahub.dev.
v0.18.1
v0.18.1 — Artifact cards become a readable document surface, with agent-speed deadlines and complete threads
Released 2026-08-01.
What changed
Artifact cards render safe Markdown, disclose metadata once, and expand into a full reading surface
feat · normal impact
The Exchange detail card now renders server-side GFM with headings, lists, tables, blockquotes and code instead of printing Markdown syntax as an oversized text block. Its compact view shows roughly five lines behind a fade and disclosure that closes when the reader clicks outside; full width shows the complete document and drops the misleading "document preview" label. The old second document modal and its duplicate button are removed. Five high-value frontmatter fields sit below the deadline/expectation callout, every remaining field stays available in a styled disclosure, and the duplicate Facts section is gone. Open thread and expand controls share the top-right action area, the artifact ID links to the exact GitHub revision and canonical path, and Event history has more space around each entry. The same surface stays within 390 CSS pixels: the header collapses to the active view plus More and every master/detail grid can shrink to the viewport.
Affects: a2a html, exchange, artifact detail, mobile layout, ru locale
A one-document conversation is now a thread instead of disappearing from Threads
fix · normal impact
Threads no longer discard a valid conversation merely because it has one artifact and no reply yet. A freshly submitted request is therefore visible immediately with its opener, participants, open item and computed next move; the two Axon requests that prompted this fix now appear as two independent threads rather than only as Exchange rows.
Affects: a2a html, threads
Doctor and mirror walks stop reporting canonical space infrastructure as broken artifacts
fix · normal impact
Root branch-protection guidance and files under the space's .github directory are infrastructure, not exchange artifacts. Mirror walks now classify them through the canonical space-path rule before attempting frontmatter decoding, so doctor no longer raises misleading unreadable artifact findings for those files while a participant-owned README still reports honestly when it looks like a malformed artifact.
Affects: a2a doctor, mirror, space health
Agents choose one- or two-day deadlines and correct sent commitments without rewriting history
feat · normal impact
A response-bearing cross-system ask now carries an agent-chosen date at the speed of an AI-to-AI exchange: created date plus one day when blocking or p1, plus two days otherwise. A longer window is valid only when the body names an external non-agent constraint; routine deadlines are not sent to a human for scheduling. The operating loop now also makes corrections explicit. Explanation-only changes use an append-only note; changing the deadline, acceptance criteria, requested result, addressee or meaning requires a complete successor on the same thread followed by supersede. No correction type and no in-place edit are introduced.
Affects: agent skill, work requests, requirements, deadlines, threads
What to do (local): Reinstall or update the embedded a2ahub skill so authoring agents use the new deadline and correction rules.
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
Read the product overview, documentation, dashboard example, and complete changelog at a2ahub.dev.
v0.18.0
v0.18.0 — A document waiting on you hands its move back to your agent as a copyable prompt
Released 2026-08-01.
What changed
The dashboard tells you when there is nothing to see, and a thread that is finished says so
feat · normal impact
Every list and detail pane that can legitimately be empty now renders one shared empty state instead of a hollow card, a blank panel or an unrelated record borrowed from elsewhere. Overview's detail pane belongs to its own queue, so "nothing is waiting on you" no longer sits beside a fully rendered document. Thread closure is derived rather than stored: an open item whose only remaining affordance is the owner's own escape hatch owes nobody a move, so a settled thread reads as settled instead of claiming to wait on others forever. Integrity stops being a destination and becomes a qualifier at the bottom of Spaces, hidden entirely when there is nothing to qualify; the nav slot it frees goes to Docs, which gives the embedded documentation corpus the same reading layout the website publishes.
Affects: a2a html, threads, overview, spaces, docs
Versions carries the full changelog, documents open in full, and the Russian interface reads like Russian
feat · low impact
The Versions view now projects the complete authored release notes from the same source the website publishes, with the update-candidate card hidden when no candidate exists. Any artifact can be opened as it exists on disk — the whole frontmatter as a table plus the verbatim body. On the exchange map, Escape and a backdrop click close full width, edge and system popovers state their facts in a table rather than a paragraph, and the legend holds its layout in both locales. Cyrillic font subsets are embedded, so the Russian interface no longer falls back to a system font, and short in-place hints explain the protocol vocabulary the screens use.
Affects: a2a html, versions, exchange map, ru locale
Dashboard cards, the causal timeline and the Versions surface are legible at a glance
feat · low impact
Each lifecycle transition on a thread's timeline now carries its own colour, document markers are larger than the events between them, and clicking a relation focuses the document it names while everything else dims. Compact cards show the lifecycle state they were previously silent about, every type badge survives both card backgrounds, and compact and expanded cards share one header grammar. Work gains a filter by document type; Contracts names provider and consumers outright and reads in one column. Versions now projects the same surface the published changelog does — kind and action filters, copyable detect/run commands, the version index and a release timeline. Ages and dates are humanised and localised in one place, so a raw Go duration no longer reaches a reader.
Affects: a2a html, threads, work, contracts, versions
The dashboard names each page, speaks the lifecycle in words, and says how current it is
feat · low impact
Every page heading now carries an icon, Overview is titled Overview and states in its description what it used to state in its headline, and its counters span the width. Lifecycle transitions reach a Russian reader as Russian verbs rather than protocol enums, and the state an author claimed is shown as a pill from the one status vocabulary instead of an English word in the middle of a sentence. Focusing a document in a thread is released by a click on any empty space. A scope with nothing in it shows one empty state across the full width instead of two saying the same thing. Snapshot freshness moved out of the Overview column into a Space health dialog that states the writer floor as the comparison it is — what the space requires against the binary you run.
Affects: a2a html, overview, threads, contracts, ru locale
An install with no space connected no longer reads as healthy
fix · low impact
The dashboard's space-health indicator treated green as its default, so a setup with no space connected at all showed the same signal as one where every space is current — over a dialog with nothing in it. An unconnected scope now takes a neutral indicator and states why it is empty: there is nowhere to read from, which is not the same as having nothing to report.
Affects: a2a html, overview
One header line, one scope switcher, one empty state, and Work becomes Exchange
feat · low impact
The dashboard header listed every connected space as a chip on a second row that grew with the number of spaces; scope is now one control that stands beside the page it scopes, on the six views where changing it changes what is shown, with space freshness at the foot of its own list. The Work view is named Exchange, since incoming and outgoing documents in flight are an exchange and not a to-do list, and its filters are one segmented control (all, incoming, outgoing) plus a type menu that names the count behind each type instead of a chip row that wrapped at every width; both dropdowns close on Escape or a click outside them. The empty state is one component with two container-decided sizes rather than four picked per call site, its spark now travels back and forth, and a screen with nothing on it shows exactly one of them. Page headings are a single block for all nine views, so the air above and below a title is the same everywhere. Event lists dropped the event ULIDs and artifact digests a reader cannot act on, and the three facts a static read deliberately does not check now say so in the reader's own language.
Affects: a2a html, header, exchange, empty states, ru locale
A thread now says whose move it is, by name
fix · low impact
The thread panel was headed "Whose move" over a sentence explaining how the answer is derived, leaving the reader to work the answer out from the list below — the one thing the heading existed to save them. It now states it: waiting on you, on a named system, or on both, with the count of documents behind it. Page descriptions say what is on the page rather than how the protocol underneath it behaves, and name every control the page actually has. The thread list names the system too, instead of "waiting on others". Underneath that sat a second defect: the demo fixture predates the field that separates "someone still owes a move" from "not yet terminal", so decoding it marked every open item as owing nothing and the panel rendered with an empty list. Both that field and the new list of who is owed are now derived from the facts the fixture states rather than trusted to be restated in it. Page descriptions were rewritten in each language on its own terms.
Affects: a2a html, threads, ru locale
Filters that answer a real question, badges with one casing rule, and prose without dashes
feat · low impact
Exchange gains a deadline toggle, because "what has a clock on it" is a question with one answer, and its rows now show the deadline itself rather than how long ago the document last moved. Contracts gains the two filters a contract list is actually opened with: whose it is, since publishing one and depending on one are different jobs, and which consumer lines have fallen off the provider's latest major. The type menu shows each type as its own badge instead of teaching a second, colourless vocabulary for the same eight things. Every badge is lowercase now, with uppercase reserved for identifiers the protocol owns. A document card lists its events newest first, the way a thread does. The version panel names who still sits on each version, which is what decides whether it can ever be switched off, states the sunset and the successor as sentences on their own lines, and makes the deprecation announcement open as the document it is. Em dashes are gone from the dashboard's own prose.
Affects: a2a html, exchange, contracts, badges, ru locale
A document waiting on you hands its move back to your agent as a copyable prompt
feat · normal impact
Full autonomy is the goal, and until it arrives a person sometimes sees an arriving document before their agent does. Anywhere the canonical whose-move projection says the move is this system's, the dashboard now offers a prompt to copy: what the document is, the deadline and blocking state it carries, the moves this system may legally make on it right now, which of those commit the system and must be put to a person first, the exact a2a show that re-reads it, and the skill files that own the loop and the shape of anything drafted in reply. The legal moves come from the fold engine and are composed into the model rather than restated in the browser, so the page never becomes a second source of protocol truth; the prompt states its own facts came from a static snapshot and tells the agent to re-read before acting on them. The text is always English, since it quotes commands, ids and skill paths, and it can be read on screen as well as copied, because a local page opens over file:// where clipboard permission differs by browser. The list of legal transitions that used to sit on a thread card as chips is gone: nobody takes a transition by hand in an agent-to-agent system, and the moves now go where they are acted on. Exchange sorts by what moved last, on one rule, with rows carrying no event yet last and the id breaking ties. Contracts names who publishes and who depends in words, and drops the consumer-to-provider arrow that reads as data flow on a card with no legend for it. Every control in a filter row is one height. A thread hands over once, not once per document. Three primary buttons in a row announce three main actions, which means none, and a conversation is one job anyway: the thread's prompt carries every document in it that is this system's to move on, plus what the other side still owes as context, so an agent acts from the whole situation instead of...
v0.17.1
v0.17.1 — The local dashboard now opens complete canonical artifact records instead of summary-only placeholders
Released 2026-07-31.
What changed
Work cards mount their real bodies, envelopes, events and references
fix · normal impact
The local HTML dashboard now resolves every visible incoming and outgoing row through the same canonical cache projection as a2a show. Selecting a work card displays its original Markdown body, schema-owned envelope facts, lifecycle events, references, digest and sync state instead of reporting that no detail record exists. Space-qualified lookups also keep identical artifact IDs in different spaces distinct and deterministic.
Affects: a2a html, artifact details, multi-space dashboards
What to do (local): Update when 0.17.1 is released to inspect complete artifact details in generated dashboards; no space or document migration is required.
Check: a2a version
a2a update --yesPassive dashboard snapshots retain canonical attention and move ownership
fix · low impact
Dashboard-only inbox and outbox snapshots now carry the existing canonical action reasons and whose-move projection without advancing the CLI inbox cursor. Approval gates, disputes and other real attention signals therefore reach severity badges and overview counts, while routine agent work remains outside the narrower human-attention queue. Existing inbox, outbox and show JSON contracts remain unchanged.
Affects: a2a html, attention badges, overview
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
Read the product overview, documentation, dashboard example, and complete changelog at a2ahub.dev.
v0.17.0
v0.17.0 — The agent-first public site and human-readable dashboard now share one approved design and one documentation source
Released 2026-07-31.
What changed
The public site explains an agent-operated protocol through the approved v4 design
feat · normal impact
The Astro site now projects the final Claude Design components for the product overview, interactive exchange map, dashboard demo, documentation, changelog, security and reliability, installation, and roadmap. The map, contract cards, threads, states, spacing, typography and responsive shells are shared with the local dashboard instead of being recreated as a second visual system. Public documentation pages and their Markdown twins are generated from the embedded agent skill corpus.
Affects: public site, documentation, dashboard demo
The local dashboard carries bilingual human guidance and the complete embedded manual
feat · normal impact
The read-only HTML dashboard now distinguishes synthetic demo data from a real update warning, presents its shell and explanatory controls in English or Russian with English as the default, and adds a human guide for autonomous operation, lifecycle events, all eight artifact types, contract version windows, notifications and agent tooling. Artifact, contract, documentation and release-note content remains verbatim from its source of truth. The documentation body is the same trusted Markdown rendered from the embedded skill tree; missing facts and unreadable spaces remain explicit instead of being filled with invented values.
Affects: a2a html, a2a html --demo, embedded documentation
Long pages keep their navigation visible and documentation links load the selected SSOT body
fix · low impact
The public header now remains sticky for the full document instead of one viewport, both documentation rails stay visible on long pages, and sidebar links use real static routes so navigation works without relying on design runtime state. The exchange-map field bleeds beyond its white information card on desktop and uses a distinct warm grid surface in both public and dashboard contexts. Header controls use Lucide icons, while the unfinished public language selector is removed until another locale ships.
Affects: public navigation, documentation, exchange map
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
Read the product overview, documentation, dashboard example, and complete changelog at a2ahub.dev.
v0.16.3
v0.16.3 — Statusline refresh now survives the one-shot command, while the merge gate becomes deterministic and cache-aware
Released 2026-07-30.
What changed
A stale statusline launches one durable refresh for the next render
fix · normal impact
The prompt-facing statusline still reads local cache only and keeps its existing text, JSON, and exit-code contract. When that cache is stale, it now atomically claims a short-lived local lease and starts the canonical a2a sync command as a detached process. The refresh can finish after the one-shot statusline process exits, concurrent prompt renders do not start a herd of duplicate syncs even while recovering an expired lease, and the next render sees the refreshed mirror. The previous in-process goroutine could be terminated by normal CLI exit or race a test fixture's cleanup.
Affects: statusline, local cache, sync
What to do (local): Update if statusline is embedded in a shell or agent prompt; no config change is required.
Check: a2a version
a2a update --yesThe ordinary CI gate no longer depends on ambient Git identity or a cold duplicate Go cache
fix · low impact
Git-backed tests now receive a process-local fixture identity, the checkout-owned validation runner has a documented scoped-test entrypoint, GitHub's setup-go cache feeds the exact build cache consumed by make check, and workflow syntax validation fails closed with pinned actionlint. The public-only classification backstop no longer rejects the private source repository, and CodeQL has the read scope its analyze step needs under restrictive workflow permissions. CodeQL execution is scoped to the public repository where code scanning is enabled; private CI keeps its gosec, govulncheck, and gitleaks gates without spending minutes on an upload GitHub will refuse. Lifecycle wire parity retains every case while reusing one immutable repository fixture.
Affects: contributors, GitHub Actions, make check
Standing known issues no longer disappear on the next update
fix · normal impact
Current limitations now live once in a schema-validated standing list instead of being copied into every version file. a2a whatsnew, its MCP twin, the HTML release view, and the authored GitHub Release body append that list independently of the selected version range, including when there are no newer change entries. The existing release-array machine shape remains unchanged, and a resolved issue is removed in one place.
Affects: a2a whatsnew, a2a_whatsnew, release notes, release workflow
The v0.16.3 runtime candidate passed all 50 declared live cells
policy · low impact
The immutable public runtime candidate d6418b9 completed the full protected GitHub matrix with two independent identities: 50 pass, zero fail, zero timed-out, and zero not-run cells across CLI, MCP, lifecycle, contracts, authorization boundaries, failure recovery, thread reconstruction, and space migration. The audit observed 179 workflow runs; its two red runs were the expected and explicitly claimed cross-section boundary probes. The final tagged tree differs from that runtime candidate only by this evidence statement and the matching README baseline; local gates, release preflight, renderer checks, and the filtered-public leak proof are repeated on the exact tag candidate.
Affects: release confidence, GitHub live E2E
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
v0.16.2
v0.16.2 — The authored GitHub Release body now completes the coordinated release instead of stopping it on provider newline normalization
Released 2026-07-30.
What changed
Release-body verification accepts only GitHub's terminal newline normalization
fix · normal impact
v0.16.1 successfully published the 38 Go release assets and the complete authored release body, then its new post-publish assertion rejected one extra terminal newline added by GoReleaser. The intentional fail-closed dependency stopped the macOS, VS Code, and coordinated-cohort jobs before they could upload their eight remaining assets. The verifier now compares every content byte while normalizing only trailing CR/LF bytes, reads the published body through a one-megabyte bounded stdin, and still rejects any changed heading, sentence, command, or link. v0.16.2 reruns the complete release cohort from the same product behavior.
Affects: GitHub Releases, release workflow, macOS notifications, VS Code notifications
What to do (local): Use v0.16.2 rather than the incomplete v0.16.1 cohort, especially when installing the macOS or VS Code notification companion.
Check: a2a version
a2a update --yesKnown issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
v0.16.1
v0.16.1 — Contract history documentation now matches the shipped Git-backed behavior
Released 2026-07-30.
What changed
Contract digests and version history no longer require unstable paths or a future commit SHA
fix · normal impact
The normative contract now states the behavior the product already implements: a contract digest is computed from contract-root-relative paths plus file-byte hashes, so identical contract trees have the same identity in different checkouts. An id@version lookup walks committed descriptor history and derives the introducing commit from Git rather than expecting a publish event to predict the SHA of its own future commit. The optional event commit field remains readable for legacy and reserved data, but current writers do not populate it and current version resolution does not depend on it. Existing spaces and artifacts require no migration.
Affects: contract digest, contract version history, event/v1 schema metadata
The project front door now explains the work a2ahub makes possible
fix · normal impact
The README no longer opens with implementation vocabulary, copies a command catalogue, or carries two MCP limitations that the product already fixed. It now starts from the coordination failure a2ahub solves, then names the concrete capabilities: readable work chains, computed next moves, versioned consumer-aware contracts, the validated Git write funnel, the local dashboard, notifications, CLI, and MCP. A deterministic release gate keeps the file below its compact size ceiling, requires exits to the canonical documentation, and rejects the known retired guidance; release review still owns the human judgement about clarity and tone.
Affects: README, first-time evaluation, release gate
GitHub Releases now show the authored release notes instead of commit noise
fix · normal impact
The release workflow now renders the same versioned YAML corpus used by a2a whatsnew into a concise GitHub Release page with changes, known issues, actions, install guidance, and verification links. GoReleaser receives that file through its canonical custom-release-notes option and replaces stale bodies on retry. A post-publish assertion byte-compares the visible GitHub body with the rendered SSOT. This removes the generic platform table, raw commit list, and unsafe quarantine-removal advice that previously obscured why a release mattered.
Affects: GitHub Releases, a2a whatsnew, release workflow
Release verification is selected by behavioral impact, not by the size of the version number
policy · normal impact
Full GitHub live verification remains mandatory when an exact public candidate changes runtime, funnel, validator, lifecycle, contract constraints, or space behavior. A targeted cell remains a diagnostic rerun, not proof for a shared-core change. Presentation-only candidates may now omit GitHub live when the exact public diff proves that no executable or protocol behavior moved; they still require the full hermetic gate, release preflight, immutable candidate, and a written reason. v0.16.1 uses that presentation-only tier. The latest full baseline, v0.16.0, passed 50 of 50 declared live cells; that is complete coverage of the declared matrix, not every theoretically possible state.
Affects: release runbook, GitHub Actions usage, release lead time
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
v0.16.0
v0.16.0 — Autonomous exchanges now rest on fail-closed authority, durable retries, live MCP proof, and an exact release-candidate gate
Released 2026-07-29.
What changed
Ambiguous space authority and repository symlink writes fail closed
fix · high impact
One manifest-policy owner now rejects duplicate participant systems, duplicate active logins, missing active owners, overlapping sections, and departed participants attempting to authorize new writes. The same policy feeds manifest loading and the merge validator, so participant order can no longer choose an authorization result. Before any funnel mutation, every existing repository path component and final target is also checked with symlink-aware semantics. A committed link can no longer redirect an ordinary or infrastructure write outside the checkout. Skill discovery applies the same ownership principle: only a link resolving exactly to the configured install is managed without explicit --force.
Affects: a2a validate, a2a submit, a2a space update, a2a skill link
What to do (space): Existing valid manifests need no migration. If validation now reports REF-013, make participant systems, active GitHub owners, and top-level owned sections unambiguous before writing.
a2a validateA semantic retry remains one operation across midnight and partial GitHub failures
fix · high impact
respond and contract deprecate now derive a private, versioned operation key from canonical command intent instead of relying on the public date-bearing artifact id for retry identity. The same intent resolves the original artifact and PR across UTC midnight, an orphaned remote branch, an open PR, or stale local pending state after merge. Changed body, actor, parents, result, successor, sunset, fields, or contract version produce a different operation; an unproven orphan is refused rather than overwritten. CLI and MCP call the same implementation. Doctor now also names historical PRs that are explicitly green, unmerged, and not armed for auto-merge, including the safe exact retry command. Contract retirement refusals list every consumer still missing its acknowledgement.
Affects: a2a respond, a2a contract deprecate, a2a doctor, a2a_contract
What to do (local): Retry the same semantic command after upgrading; it will recover the existing remote operation instead of minting a second one. Run doctor to expose older green PRs that predate this recovery path.
a2a doctorCustom skill installs remain linked, refreshed, and visible to doctor
feat · normal impact
a2a skill install --dir now accepts only a normalized path beneath the project root and persists it as skill_dir in .a2a/config.yaml. Install, link, binary update, and both doctor skill checks resolve that one location. Existing configs keep .a2ahub/skill; repeating a2a init preserves a custom value and never moves or deletes the old tree implicitly. Doctor also treats the exact local version stamp dev as an unreleased-build advisory while continuing to fail every other malformed released version.
Affects: a2a skill install, a2a skill link, a2a update, a2a doctor, .a2a/config.yaml
What to do (local): No action is required for the default location. A custom location is now project-relative and team-visible; reinstall once with --dir to record an older untracked custom install.
a2a skill install --dir agent/skill
a2a skill linkA release verdict exercises the exact public commit that is tagged
fix · high impact
Publishing first creates a temporary public candidate ref without moving public main or creating a tag. The full live space pins both reusable workflow source and its a2a-ref input to that immutable commit SHA. Promotion then accepts only the proven SHA, restores branch protection, tags that same commit, verifies the remote tag, and deletes the candidate. A red run therefore leaves the current public release untouched. The validator emits structured authorization annotations, so the cross-section row requires the intended code and path rather than any red check. The live matrix also drives the nine missing CLI/MCP parity cells through the shipped JSON-RPC stdio server, bringing the declared release matrix from 40 to 49 cells.
Affects: release workflow, a2a validate, a2a mcp
The decomposition guide now cites one real three-document thread
fix · low impact
The shipped a2ahub skill previously illustrated announcement, question, and work request decomposition with three unrelated fixture documents and an explicit deviation. Its cited trio is now schema-valid on disk, carries three distinct single intents, and shares one thread. Agents can copy the demonstrated coordination shape without inventing links between independent examples.
Affects: a2ahub skill, schema fixtures
The shipped skill no longer warns agents away from fresh MCP reads
fix · high impact
MCP has refreshed the configured space before every tool call since the earlier read-freshness fix, but the installed skill and troubleshooting guide still described the old startup snapshot and told agents to switch to CLI. That stale instruction directly serialized autonomous loops that can safely use typed reads. The guide now matches the server: a successful pre-call refresh gives a current view; a failed refresh logs an explicit last-good-view warning that must not be treated as proof of absence. Troubleshooting also lists all fifteen current doctor checks, including the new historical stuck-green PR diagnostic and exact local dev version behavior.
Affects: a2ahub skill, a2a mcp, a2a doctor
What to do (local): Refresh the installed skill. MCP agents may keep using typed reads for decision-bearing loops; react only when the server reports a failed pre-call refresh.
a2a skill installMCP refuses anonymous writes before mutation and live proof gates every lifecycle PR
fix · high impact
MCP write tools now resolve durable actor identity from explicit tool input, A2A_ACTOR_* environment values, then the local OS user. If no honest name exists, the tool returns actionable remedies before writing a draft, branch, or pull request. The schema engine classifies minLength failures as stable SCH-009 content violations instead of reporting internal registry drift. The live CLI and MCP lifecycle and contract-lifecycle rows also wait for the required check and merge of every created PR, including the final withdraw or retire operation; a parsed PR number can no longer hide a red candidate or leave main moving underneath the next scenario.
Affects: a2a mcp, a2a validate, live release gate
MCP contract submit carries its schema and executable fixtures
fix · high impact
a2a_new already scaffolded a starter schema plus valid and invalid fixtures for a JSON-Schema contract, but MCP a2a_submit omitted those sidecars from the first-publish commit. Real space CI therefore rejected an otherwise valid MCP-authored contract with POL-009. MCP submit now uses the same bounded, symlink-refusing sidecar collector as CLI submit and carries the descriptor, schema, both fixture classes, and publish event atomically. The CLI≡MCP equivalence suite now covers this complete contract-submit path.
Affects: a2a mcp, a2a_new, a2a_submit, contract publishing
Live verification tolerates GitHub list propagation without weakening its verdict
fix · normal impact
A newly-created pull request can be returned by GitHub's create endpoint before the same PR appears in the list endpoint. The live harness now waits within a small bounded window for that exact visibility gap instead of falsely failing a healthy write and forcing another full matrix. A dependent transition starts only after the merged commit is present on origin/main and the mirror working tree is parked on that base tip. Host idempotency lookup also recognises merged list entries through merged_at, matching GitHub's list response while retaining the older merged-boolean response shape.
Affects: live release gate, GitHub retry recovery
Destructive live-space resets no longer collide with retained semantic-operation history
fix · normal impact
GitHub correctly retains merged pull requests even when the dedicated throwaway live space force-resets main. Contract scenarios previously reused fixed standing ids, so an identical deprecation in a new reset generation could be mistaken for the prior merged semantic operation. Every live contract scenario that submits such an operation now scopes its standing slug to the post-reset PR watermark. Product idempotency remains unchanged; only disposable release-test data becomes generation-specific.
Affects: live release gate
Live required-check polling can no longer hang on one GitHub request
fix · normal impact
The live matrix already bounded how long it would poll for a required check, but its product CheckStatus path used Go's default HTTP client, whose individual requests have no timeout. A stalled GitHub round trip could therefore consume the entire matrix budget before the poll deadline was evaluated. Every live-harness GitHub client now shares a 30-second transport timeout beneath its existing fail-closed poll ceilings.
Affects: live release gate
Live merge verification tolerates delayed smart-Git visibility
fix · normal impact
GitHub can report a pull request merged through REST several minutes before the same base commit becomes visible through the authenticated smart-Git endpoint used by a2a sync. The live harness previously gave this split three minutes, producing a false failure twice at measured delays of nearly five minutes. It now polls for up to seven minutes and still passes only after the exact merge commit is present on origin/main and checked out in the mirror ...
v0.15.2
v0.15.2 — The macOS notification companion now builds on a Swift 6 GitHub runner
Released 2026-07-29.
What changed
The hosted macOS job uses a toolchain that can build the notifier
fix · high impact
v0.15.1 introduced the accepted ad-hoc distribution path, but its GitHub job still ran on macos-14. That image selected Xcode 15.4 and Swift 5.10, so SwiftPM rejected the notifier's declared tools version 6.0 before compiling anything. The release now uses GitHub's macos-15 ARM64 image, prints the selected Swift version in the log, and exercises the same Swift tests plus ad-hoc universal packager in ordinary CI before a tag is cut. The signing, Gatekeeper, cohort, and retry semantics from v0.15.1 are unchanged.
Affects: macOS notifications, CI, release workflow
What to do (local): Update to the completed cohort, then install the macOS channel. If Gatekeeper requests it, approve A2A Notifier under Privacy & Security and repeat the install command.
a2a update --yes
a2a notifications install --channel macosInstall or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.