Repository navigation
Releases: Paffin/AgentGit
Release list
AgentGit v0.3.0-beta.2
Added
-
Reviewed version bumps on main can request the existing release pipeline after all checks pass for the exact commit. Existing complete releases are skipped, incomplete releases can be retried, and version tags are never moved.
-
Reviews can require the exact inspected head through the negotiated
proposals.review_headcapability; stale submissions are rejected atomically without a review or audit entry. -
File search supports arrow keys, Home/End and Enter on any result, preserves IME input and modified link actions, and explains the keyboard controls in the dialog.
-
Faster Web UI test execution with isolated, bounded VM workers, Node environments for pure functions, and cancellable test-worker shutdown. Browser CI shares one verified embedded build and runs each project once in a pinned runtime.
-
Tab-scoped file drafts preserve text, original base, path and proposal description across reload and sign-in; storage failures are explicit and drafts remain separated by account/repository/branch/path.
-
Repository-wide file finding, reviewed rename/move/delete, binary-safe multi-file upload with replacement review, comparison history/swap, and expandable Home summaries with older-repository selection.
-
A platform goal ledger with a 142-row initial coverage inventory, staged backlog and explicit unverified acceptance work. A qualified Vitest mutation adapter detects empty test runs rather than crediting them as killed mutations.
-
ag migrate --dry-runverifies a full Git conversion and shows its reconciliation report before creating a destination. Previewing losses does not authorize a later lossy import. -
ag auth statuslists saved server identities and expiration locally;--checkverifies credentials with a bounded timeout, without printing or rewriting secrets. -
Folder filtering in the web file browser, and download/discard protection for unfinished web edits.
Fixed
-
Python CI and package checks require the committed lockfile; release metadata includes the normalized Python version and regenerated licence list.
-
Account and task-graph controls derive their accessible names from matching text; the account identity remains available to assistive technology when its visible label is hidden on a small screen.
-
Shared browser code is bundled once while views stay lazy; lazy JavaScript no longer adds speculative preload links. Keyboard focus checks poll rendered styles instead of depending on animation frames.
-
Directory navigation removes stale links immediately and retains loaded files after a next-page error. Review submission captures its target and content before waiting; clipboard feedback ignores obsolete requests.
-
History follows Back/Forward filters, isolates each changeset's lazy diff, and preserves revision/path context in native parent links. Clipboard fallback restores keyboard focus and cleans up on failure.
-
Closing a review dialog keeps unfinished text and decisions. A changed head requires explicit re-review; failed submissions preserve the draft, and successful submissions clear it.
-
Lazy route imports no longer preload their own entry twice; dependency and CSS preloads remain, and chunk hashes include the preload policy. Mutation workers now execute their own source copies instead of resolving relative imports into the original tree.
-
Content-hashed UI assets with dots in their names now keep immutable caching, including source maps. Reloads no longer revalidate these unchanged Vite chunks.
-
Reopening a file removed by another participant still recovers its saved tab draft, including the original revision and review conflict checks.
-
Browser qualification uses Playwright 1.64.1 after a native WebKit reload assertion on 1.56.1; the original recovery scenario passes without disabling crash, console or persistence checks.
-
Web file edits now start from the exact revision read, preserving conflict detection when another user advances the branch. New-file editing also checks the expected starting point, including empty branches.
AgentGit v0.3.0-beta.1
Added
- Public beta for the single-server Linux/SQLite/filesystem workflow, with open external qualification gates and explicit migration limits.
- Web import from full Git bundles: private preflight, all-branch/tag reconciliation, content-loss acknowledgement, idempotent publication, and downloadable receipt. Credentials stay with local Git.
- Publication moves the complete prepared directory atomically without replacing an existing destination; a retry can recover after the move but before registry insertion.
ag migrateimports a full local Git clone/mirror or bundle into a new working repository. Original bundles and reports are retained and included in backups.- Deterministic mapping for Git branch names outside AgentGit's naming rules; unsupported refs, submodules, paths, repaired text and external LFS pointers are reported.
- Deployment smoke tests exercise real bundle import and publication in the shipped server image. Git's native bundle/pack runtime is included in the shell-less images.
Scope
- Hosting issues, pull/merge request discussions, permissions, releases, hosted CI settings and external LFS payloads are not imported. Browser migration currently requires local storage; see the migration guide.
- External MCP host qualification, independent pilots, physical-device and screen-reader verification remain open; beta is not a production-readiness certification.
AgentGit v0.2.0-rc.3
Added
-
Home now supports searching visible work, filtering by repository and category, manual refresh and a last-successful-refresh timestamp. Partial reads and truncated summaries are explicitly marked; failures never imply that the work queue is clear.
-
Change-request search and role-aware links to editing files or giving an agent work; glossary hints in repository navigation and table headers.
-
A focused beta programme with public acceptance gates, pilot reporting, contributor entry points and a launch kit. Alpha status remains until external evidence meets the gates.
-
ag remote explain PROPOSALreports a server proposal's blockers, reasons and next commands with machine-readable output and distinct ready/blocked/refused exit codes. -
Policy regression coverage for preset actor/author restrictions, provenance, file limits, approval explanations and validation age formatting.
-
Load scenarios verify acknowledged stream updates and read back each worker's last successfully written files
after concurrent integrations. Empty write runs, zero duration and zero workers are rejected. Performance smoke
runs also cover server/core pull requests and fail on execution or integrity errors without timing thresholds. -
Zero-setup start.
ag-server devmakes a data directory, an administrator with a fresh 8-hour credential (replaced
and the old one revoked at every start), the demo repositorydemo/welcomewith theagentspreset, and a reviewer
user:reviewer, then prints a link that signs you in (...#token=...; the Web UI takes the credential out of the
address bar at once) and the exact commands. Loopback only unless--allow-non-loopback.ag login URL --token-file FILE/ag logout URLkeep a credential per server incredentials.json(mode 0600), whichclone,fetch,pull,
pushandag remotefind on their own afterAG_TOKEN*. The link is not one-time (that needs a new endpoint). -
Policy presets
solo,team,agents,strict, as data inag-policy:ag policy preset list|show|apply,
ag init --preset,ag remote policy --preset,ag-server admin policy-preset.ag policy explain [FILE|current]and
ag remote policy --explainread any policy document in plain words; a test fails whenPolicygains a field without a
sentence. -
ag explain [PROPOSAL]turns a refusal into plain words and the exact next commands (one explanation per refusal
code, checked against the variants); the hints underag integrateandag remote integrate|prepareuse the same
strings. The remote workflow also supportsag remote explain PROPOSAL. -
A Web UI a first-time user can use (
docs/design/web-ux-review.md): Home ("needs your attention") and navigation by
job (Overview, Change requests, Agents & work, Code, Settings); plain labels with the AgentGit word in a tooltip
(lib/glossary.ts, checked against the guide); every blocker carries its fix as an action (request validation, ask a
reviewer, take the lease) and a "Next:" line; guided flows (new-repository wizard, getting-started checklist, "Give an
agent work" that grants the role and mints the credential); a rules editor with presets and sentences, raw JSON under
Advanced; editing a file and proposing it from the browser, with a conflict resolver; empty states that say what to do.
Proven bye2e/jobs.spec.ts: a fresh user does each of the five jobs in a real browser against a real server, using
only what the screen says. No server change. -
Tests that cannot pass by not testing. A shared helper per language (
ag-testkit, Gotestutil,ag_testkit.py,
e2e/support/components.ts): a missing component fails whenAG_REQUIRE_COMPONENTSnames it (orall), otherwise it
skips with anAG-SKIPmarker and a JSON report.scripts/check_skips.pyfails a CI job on a skip not in
tests/skip-allowlist.toml(reason, owner and where it runs for real are mandatory) and, with--scan, on any raw
skip outside the helpers; every test job runs it. Inventory:docs/architecture/test-skips.md. -
ag agent reap --remote [NAME] [--timeout D] [--dry-run]: reaps the silent runs of a server from the command
line (AgentService.ReapRuns, needsagent.operate, audited under the caller asrun.abandon); the local form
gained--dry-run. The periodic reaper takes arun-reaperlease in the control database before each pass, so one
replica of several reaps (the lease is time-based; two replicas briefly reaping together is harmless because a
reap is idempotent). ADR-0011. -
Metadata schema 3: three indexes so that every page of
list_proposalsis read in index order without sorting,
and idempotency records written before they carried a time are dated once by the first sweep and then expire.
Metadata schema 3 is not readable by builds that only know schema 2: in a rolling upgrade start the new build
first (ADR-0007). The control schema stays at 3. -
Decoded-tree cache with a memory budget (
repos.tree_cache_bytes, default 256 MiB;0switches it off) and
metricsagwp_tree_cache_*. At 100 000 files a fast-forward went from about 330 to about 180 ms, a three-way merge
from 880-1 050 to about 200 ms and the publish of one file from 86 to 32-38 ms; peak RSS of that run grew from
168 to 714 MiB with a 512 MiB budget (numbers). -
Bounded retry of same-stream contention inside the call (
repos.integrate_attempts, default 24;
repos.integrate_backoff_ms, default 32;1means one attempt).abortedanswers at 16 writers went from 14-16 %
to 3-4 %; the tail is longer because losers now wait inside the call (p99 0.5-0.6 s to 0.8-1.5 s). -
Job-claim fencing token (ADR-0012): optional
fencing_tokenon job
heartbeat, complete and fail, no schema change; a stale claimant of the same worker name is refused.ag-worker
sends it; the OpenAPI document, both SDKs and the Web UI types are regenerated. It is opt-in per request: an old
worker is as exposed as before.
Changed
- The Go suite requires
ag-serverin CI (ag-server-binary) and finds it throughcargo metadata; the Keycloak Rust
tests are no longer#[ignore](they skip in plaincargo testand are required in the identity-provider job); the
scripts run on Python 3.9 (scripts-py39job,from __future__ import annotations). The Web UI opens on Home; the
old words (proposal, integrate) became Change requests and Land, with the old word in a tooltip. - An integration costs 3 durable commits instead of 7 (fast-forward) or 8 (merge): the intent is written
ready,
tokens only if they changed, one derive commit.ag-bench load streams(16 clients over HTTP, 3 alternating rounds):
87.6 to 100.0 integrations/s (+14 %, on a shared VM where less than 30 % is noise). Crash recovery at every step and
recovery of an operation leftpreparedby an earlier build are unchanged and tested. - Storage API:
Tx::job_heartbeat/complete/failtake aclaim: Option<u32>argument;
Repository::with_tree_cache,with_contention_policyandMeta::committed_writesare new; the tree-size estimate
lives inagentgit-storage(approx_tree_bytes). - The README (English and Russian) and the release documents state the published
v0.2.0-rc.2and what was verified
about it;docs/operations/releasing.mdrecords the owner'sgh attestation verifyof both images.
Fixed
-
Include the shipped
ag-mcpexecutable in the release SBOM inventory. -
Reject incomplete archives before replacing installed binaries and explain when an older GitHub CLI cannot verify attestations.
-
Keep readable proposals when another detail or the agent-run list cannot be loaded.
-
Python and TypeScript SDK integration harnesses enable the startup log used to discover ephemeral ports;
an inheritedRUST_LOG=errorno longer causes false server-start timeouts. -
The orchestrator's process-group timeout test distinguishes a running child from a dead, unreaped Linux
child, avoiding false failures in containers whose PID 1 does not reap orphans. -
Server log-capture tests share a persistent subscriber with per-thread buffers so concurrent tests do not
invalidate each other's tracing callsite cache. The startup-warning test also ignores inherited log filters. -
Update
ctutilsto 0.4.4 in both Cargo lock files (RUSTSEC-2026-0385) and the UI'shappy-domto 21.0.4
(GHSA-834v-8h66-3h79). Remove the obsolete tinypool exceptions after both npm dependency trees became clean. -
Found by the new gate: the
PostgreSQL + S3 backendsjob never lifted the AppArmor restriction on user namespaces, so
every namespace-sandbox test had been silently skipping there; it does now and requiresnamespace-sandbox. -
Test flakes: replicas of one test cluster could be given the same port ("Address already in use"); the
ag-server dev
tests expected a clean exit from a killed process on Windows. -
Dependencies:
rustls-webpki0.103.16 andwebpki-roots1.0.10 (RUSTSEC-2026-0381, -0382),certifi2026.10.19 in
the Python SDK lock; a CodeQL alert in the rules-change sentence of the Web UI. -
Test races found by CI (no product code changed):
ag-mcp'sclosing_stdin_ends_the_process_cleanlywaited for
nothing and raced the stderr drain thread; the server's log-capturing tests lost a line to the shared tracing
callsite andsigterm_and_sigint_stop_the_server_gracefullysent SIGINT before tokio had installed its handler
(the server now installs the stop-signal handlers before it listens).
Known limitations
- Browser editing is one text file per change request (no rename, delete or multi-file); some tab labels and table headers still need glossary hints; Home is polled every 15 s, not live; the rules form le...
AgentGit v0.2.0-rc.2
Second release candidate. v0.2.0-rc.1 was tagged but its Release run failed in the last stage before anything
was attached to a GitHub release (the release notes were requested with a bare version instead of a tag name); no
archive was published for it. Code is otherwise identical to rc.1.
Fixed
- Release workflow: the release notes step passes the tag form (
vX.Y.Z), and an already existing release page
(the GitHub UI creates one with a tag) is filled in instead of makinggh release createfail.
v0.2.0-rc.1
AgentGit 0.2.0-rc.1