Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,83 @@
All notable changes to this project are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [0.2.0] — First stable: config validation, distributed control plane, skill family
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Duplicate 0.2.0 headings in changelog need consolidation.

Line 6 introduces a second ## [0.2.0] while another already exists at Line 149. This can make release-note generation ambiguous and mislead consumers about what belongs to the stable tag. Keep exactly one 0.2.0 section (or rename the older one to its correct historical version).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 6, There are two duplicate section headings "##
[0.2.0]" in CHANGELOG.md; locate both occurrences of the heading string "##
[0.2.0]" and consolidate them by either merging the entries under a single "##
[0.2.0] — First stable: config validation, distributed control plane, skill
family" section or by renaming the older/incorrect heading to its actual
historical version, ensuring only one "## [0.2.0]" remains and that related
entries are preserved and de-duplicated for release-note generation.


First stable release on the `@mandarnilange/*` scope. Promotes the rc.2
package layout and adds two substantive tracks (P40 + P45) plus a
docs-and-skills authoring surface that landed since rc.2.

### Added — Configuration validation (P40)

- **`ANTHROPIC_API_KEY`**: friendly startup error in core exec / run-pipeline
instead of a deep SDK stack; dashboard surfaces a read-only banner when
the key is absent.
- **Empty `.agentforge/` warning**: core warns when no agents or pipelines
are discovered at startup so the failure mode is obvious.
- **`AGENTFORGE_POSTGRES_URL`**: platform validates the URL is parseable
and the database is reachable before any controller starts.
- **Docker socket**: nodes hosting Docker executors verify the socket
is reachable and the daemon responds before accepting work, with a
persistent error sink on the probe socket.
- **SSH preflight**: SSH nodes validate key file readability and host
TCP/SSH-handshake reachability at startup.

### Added — Distributed control plane (P45)

- **Heterogeneous worker compose example**: GPU-heavy / Docker-light
worker profiles in `docker-compose.heterogeneous.yml` plus a worked
README walkthrough and `platform-architecture.md` §15.
- **Pluggable event bus**: `PostgresEventBus` adapter with
`LISTEN/NOTIFY` for fan-out across control-plane replicas; factory
selects between in-memory and Postgres transports.
- **DB-backed job queue with claim semantics**: `PostgresJobQueue` —
visibility-timeout based claiming, stale-claim reclaim, and corrupt
payload eviction (no infinite re-claim loop on JSON parse errors).
- **Leader election**: `PostgresLeaderElector` via advisory locks +
pooled-client destroy on error; `LeaderGatedLoop` wraps singleton
loops (reconciler, scheduler) with a self-scheduling async tick and
acquire-then-run / release-on-shutdown lifecycle.
- **Stateless scheduler**: reads active-run counts from the DB
(`DbActiveRunCounter`) instead of in-process state, enabling N
control-plane replicas behind a load balancer.
- **Migrations**: `003-job-queue.sql` and `004-active-run-index.sql`.
- **Limitation note**: README and platform README link to the P45
follow-up roadmap; the 2-replica integration suite (P45-T7) is
scheduled for v0.2.1.

### Added — Skill family + docs (since rc.2)

- **`agentforge-workflow` skill**: guided workflow authoring that emits
a complete schema-valid `.agentforge/` directory.
- **`agentforge-template-author` skill**: contributor guide for shipping
new templates under `packages/core/src/templates/`.
- **`agentforge-debug` skill**: triages stuck or failing pipeline runs.
- **`agentforge-cli` skill**: conversational front-end over the
`agentforge` / `agentforge-core` CLIs.
- **Vercel skills publish pipeline** + validator + skills changelog +
version-bump release flow.
- **README revamp**: harness-first framing, bullet hero, consolidated
"Learn more" launchpad; `npx` invocations scoped under
`@mandarnilange/*` across all docs.

### Fixed

- 8 CodeRabbit findings on PR #14 covering concurrent `acquire()` in the
local leader, overlapping leader-loop executions, postgres event-bus
teardown ordering and listener-leak on `LISTEN` failure, postgres
job-queue corrupt-payload handling, postgres leader-elector
pooled-client destruction on error paths, docker-availability second
`error` event, and a `db-active-run-counter` test that didn't
exercise the empty-rows fallback.

### Notes

- P45-T7 (two-replica integration test) deferred to v0.2.1.
- `uuid <14.0.0` advisory reached through `dockerode@4.x` remains an
audit warning; AgentForge calls `uuid.v4()` exclusively and is not
exposed. Bump to `dockerode@5.x` is queued for v0.3 once
`@types/dockerode` ships v5.

## [0.2.0-rc.2] — Move both packages under `@mandarnilange/*`

The framework package is now published as `@mandarnilange/agentforge-core`
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "agentforge-monorepo",
"version": "0.2.0-rc.2",
"version": "0.2.0",
"private": true,
"description": "AgentForge — open framework for agentic workflows. Bring your process, LLMs, scripts, agents, and infra; we handle the orchestration.",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mandarnilange/agentforge-core",
"version": "0.2.0-rc.2",
"version": "0.2.0",
"description": "AgentForge core: open framework for agentic workflows — compose agent harnesses from LLMs, scripts, and loops in declarative YAML; mix deterministic and non-deterministic steps; pluggable at every layer",
"type": "module",
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion packages/platform/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mandarnilange/agentforge",
"version": "0.2.0-rc.2",
"version": "0.2.0",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify version alignment for release metadata across package manifests.
fd -a package.json | while read -r f; do
  jq -r --arg f "$f" '
    [
      $f,
      .name,
      .version,
      (.dependencies["@mandarnilange/agentforge-core"] // "-"),
      (.peerDependencies["@mandarnilange/agentforge-core"] // "-")
    ] | `@tsv`
  ' "$f"
done

Repository: mandarnilange/agentforge

Length of output: 412


Update @mandarnilange/agentforge-core dependency to stable version.

The platform package publishes as 0.2.0 (stable release), but dependencies and peerDependencies still pin @mandarnilange/agentforge-core to ^0.2.0-rc.2. Since @mandarnilange/agentforge-core is also released as 0.2.0 (stable), both constraints should be updated to ^0.2.0.

Proposed fix
  "dependencies": {
-   "@mandarnilange/agentforge-core": "^0.2.0-rc.2",
+   "@mandarnilange/agentforge-core": "^0.2.0",
    "dockerode": "^4.0.10",
  "peerDependencies": {
-   "@mandarnilange/agentforge-core": "^0.2.0-rc.2"
+   "@mandarnilange/agentforge-core": "^0.2.0"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/platform/package.json` at line 3, Update the
`@mandarnilange/agentforge-core` entries in packages/platform/package.json: change
both the "dependencies" and "peerDependencies" versions from "^0.2.0-rc.2" to
the stable "^0.2.0" so they match the package's "version": "0.2.0" release;
modify the dependency value for the "@mandarnilange/agentforge-core" key in both
sections (dependencies and peerDependencies).

"description": "Production infrastructure for AgentForge — multi-provider LLMs, Docker/remote executors, Postgres state, full OTel, multi-node workers",
"type": "module",
"bin": {
Expand Down