Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

All notable changes to fusionAIze Grid are documented in this file.
Generated from conventional commits using [git-cliff](https://git-cliff.org).

## [1.10.1](https://github.com/fusionAIze/faigrid/compare/v1.10.0...v1.10.1) (2026-09-25)


### Bug Fixes

* **installer:** `install.sh` announced the previous version. Its header comment and the version it prints on start both read 1.9.0 while the release was 1.10.0, so an operator running the installer saw a version that did not match the artifact they had fetched. The repository already carried a test asserting the two agree; it is now green again

## [1.10.0](https://github.com/fusionAIze/faigrid/compare/v1.9.0...v1.10.0) (2026-09-25)


### Features

* **supervisor:** faigrid gains its first HTTP surface. The Supervisor presents the Scheduler, the Runner Pool and the Recovery Engine through a Control API on `faigrid-core:5000` — register a worker, poll status, read a job's recovery history, ask for the worker ceiling. It answers on the control network only; the same request from the inference network is refused, so the first API does not weaken the isolation between the two planes. `recovery_history` reads the journal the recovery engine already writes and preserves its correlation ids rather than keeping a second record of the same events
* **inference gateway:** a gateway can now run as a container on the tenant inference network, where a nested tenant resolves it by name. It publishes no host port and joins exactly one network, so it is reachable from the inference plane and from nowhere else
* **worker, llama.cpp:** `worker/scripts/install.sh` recognises llama.cpp alongside Ollama and LM Studio, names its tunnel port the way it already named the other two, and states the 8GB guidance in llama.cpp's own terms. A worker with none of the three engines present is now told so by engine name instead of completing silently
* **worker, reusable library:** `worker/lib/worker-env.sh` carries the machine-independent half of a worker setup — engine resolution by absolute path, a fail-closed API-key read, a caffeinate-wrapped server command that keeps the key in the environment rather than in the process arguments, an HTTP health check and a liveness helper. Nothing in it names a particular machine
* **worker, health:** `worker/scripts/verify.sh` probes the inference endpoint over HTTP. It previously checked only whether an engine's CLI was installed, which a stopped server passes

### Documentation

* **runbooks:** installing and supervising a worker as a durable service, deploying the gateway on the inference network, delivering tenant images from a registry, and a reference separating what a worker setup contributes generically from what belongs to one machine

### Tests

* the tenant preflight is now proven against a live substrate rather than a local daemon: it succeeds on a ready substrate, and with one tenant network removed it refuses by name and creates nothing, shown by an unchanged container list
* a worker's reachability is asserted from another host — that the endpoint answers without a session holding it open, that the machine is kept awake while the server runs, and that an unreachable worker is named by endpoint instead of failing generically

## [1.9.0](https://github.com/fusionAIze/faigrid/compare/v1.8.0...v1.9.0) (2026-09-24)


### Features

* **tenant substrate:** faigrid can host a nested tenant. Five new modules under `core/tenant/`: isolated control and inference networks, a preflight that refuses a tenant start on an unready substrate, tenant routing with attributable cost, a dual-homed credential mediator with IP forwarding off, and an append-only recovery journal a tenant can poll for gaps
* **tenant networks:** `core/tenant/networks.sh` provisions `faigrid_control_net` and `faigrid_inference_net` as separate bridges, each labelled with its creator. Isolation is verified by a refused cross-network connection, not by reading configuration
* **preflight:** a tenant start is refused by name when either network is absent or unhealthy, before any container is created
* **tenant routing:** a request carrying an organisation and tenant identifier is routed and recorded by value. A request with no tenant identifier is refused or attributed to an explicit default, never silently attributed to nobody
* **credential mediator:** exactly one dual-homed container bridges the two networks with IP forwarding off. Workers obtain scoped tokens through it and cannot reach the broker directly; no long-lived secret is held in a worker environment
* **recovery journal:** a worker restart appends an event preserving the original correlation id, with a readable write position so a consumer can detect a gap from its own cursor. With the notification webhook unreachable the event is still recorded and the job continues


### Bug Fixes

* **install:** `install.sh` completes non-interactively. `--mode local|remote` now sets the execution mode directly; previously passing `--mode` skipped the block that assigned it and the run aborted under `set -u`. The numeric prompt mapping remains for interactive use
* **logging:** `log_event` writes through `sudo` to both log files. The `750 root:adm` permission model granted the `adm` group read access but never write, so every non-root event was discarded silently. Where passwordless sudo for the log path is unavailable, `log_event` now fails by name instead of discarding. The misleading `adm` group membership is removed — the modes never granted write
* **release:** the Forgejo release producer publishes to every destination declared in `.ops.yaml` and gates publication on the release title and the presence of a changelog section for the tag. A refused release no longer reaches the Homebrew tap: the tap notifier keys on the published release object rather than on the tag push


### Documentation

* runbooks for the node install and for reconstructing a compose definition from running containers
* a substrate readiness report stating, per handover clause, met / not met / out of scope


## [1.8.0](https://github.com/fusionAIze/faigrid/compare/v1.7.0...v1.8.0) (2026-08-22)


### Bug Fixes

* **optimization round (O1–O12):** version truth, --setup KeyError, least-privilege logs, .env.topology untracking, _projects precedence, grid-doctor macOS portability, single state registry, eval removal, JSONL logging, executor contract, scoped --force


### Closeout (FAI-207, C1–C11)

* **grid-doctor:** macOS memory reads vm_stat page size; JSONL severity count; read-only (no state writes)
* **logging:** log_event write path reaches disk (adm membership, once-only setup); grid-events.jsonl rotatable; overridable LOG_DIR
* **install:** --yes parity restored (AUTO_YES read), prompt() printf-v; one migration semantic
* **ci:** version check can actually fail (fetch-depth 0, exact-match tag); pytest job on ubuntu+macos; bats --regression/--integration; executor-contract conformance check
* **messenger:** pytest runs against real deps (stubs only on ImportError); /api/v1/health real-routing test
* **skills:** npx dispatch without unquoted expansion


### CI/CD

* **forgejo-first:** unified mirror workflow, CI guards, dev pointers ([#22](https://github.com/fusionAIze/faigrid/issues/22))


## [1.7.0](https://github.com/fusionAIze/faigrid/compare/v1.6.2...v1.7.0) (2026-04-14)


### Features

* **cli:** agent-native CLI surface for faigrid + /api/v1/health ([6487ba9](https://github.com/fusionAIze/faigrid/commit/6487ba905dad1fcf6885daffe97a338a0235168a))
* **messenger:** add fgm CLI + setup wizard + decision polling ([cea991e](https://github.com/fusionAIze/faigrid/commit/cea991e94376fc75bbf2b29b6e9d28e43a650e24))

## [1.6.2](https://github.com/fusionAIze/faigrid/compare/v1.6.1...v1.6.2) (2026-04-14)


### Documentation

* reassessment — README, ROADMAP, AGENTS, cockpit spec, implementation plan ([#12](https://github.com/fusionAIze/faigrid/issues/12)) ([d28fcfc](https://github.com/fusionAIze/faigrid/commit/d28fcfca0f626d84a3968c2395da6a0e2f3c93dd))


### CI/CD

* add workflow_dispatch trigger to ci.yml ([#14](https://github.com/fusionAIze/faigrid/issues/14)) ([37c9a68](https://github.com/fusionAIze/faigrid/commit/37c9a68950f0e6fa67b0622874f131312cb9555f))

## [1.6.1](https://github.com/fusionAIze/faigrid/compare/v1.6.0...v1.6.1) (2026-04-02)


### Bug Fixes

* **ci:** resolve ruff lint failures and add pre-push validation ([ecadc78](https://github.com/fusionAIze/faigrid/commit/ecadc78c1061f86814c8b1ecf00276440ce54ceb))
* **ci:** ruff format + smarter CHANGE_ME smoke test ([56e170c](https://github.com/fusionAIze/faigrid/commit/56e170c3d1ad56295ae0d6738285833dbdb5c5f1))


### CI/CD

* re-trigger release-please after permissions fix ([5c657e6](https://github.com/fusionAIze/faigrid/commit/5c657e60cd7c9972b6d87b041dcd3e2de5bb9dbd))


### Miscellaneous

* complete benchmark template alignment ([73e21d4](https://github.com/fusionAIze/faigrid/commit/73e21d444ee92b162ad112d35cf1ef4182738111))

## [1.6.0] — 2026-04-02

### Features
- (`workbench`) Add Caddy reverse proxy plugin for internal LAN `.grid` TLD setup with Pi-hole DNS integration
- (`workbench`) Add grid-messenger Telegram bridge with multi-type decision framework (approve/choice/input)
- (`workbench`) Add app source registry and Telegram topic thread routing to grid-messenger
- (`workbench`) Add openclaw self-update fallback via GitHub release download
- (`workbench`) Add Projects manager and Skills manager with cross-agent translator
- (`workbench`) Add Doctor menu for installed tool diagnostics

### Bug Fixes
- Move `LOCAL_REGISTRY` and `TOPOLOGY_FILE` to user-scoped `~/.config/faigrid/` paths — fixes Homebrew install not finding registered nodes
- (`core`) Auto-generate n8n encryption key and Postgres password on install
- (`core`) Add n8n startup grace period detection to verify.sh
- (`workbench`) Fix multi-select install, n8n stopped state, navigation

### CI/CD
- Add `.pre-commit-config.yaml` with ShellCheck, conventional commits, file hygiene hooks
- Add `.cliff.toml` for automated changelog generation
- Add `codeql.yml` CodeQL security scanning
- Add `release-please.yml` automated release workflow with Homebrew tap notification
- Add version consistency check to `lint.yml`
- Add Python ruff linting for `core/messenger/src/`
- Add `.devcontainer/` for consistent development environment
- Add `scripts/faigrid-release` release preparation helper

### Miscellaneous
- Add `VERSION` file as single source of truth for version tracking
- Migrate Homebrew formula to `fusionAIze/homebrew-tap`

## [1.5.1] — 2025 (previous)

Initial public release with core orchestrator, edge/core/worker node setup,
workbench plugin system, and openclaw/n8n/faigate integration.