Skip to content
Apothem

Registro de cambios

CHANGELOG de Apothem — notas de lanzamiento seleccionadas, seguidas de los grupos de Keep-a-Changelog para versiones posteriores.

Las notas de lanzamiento a continuación se inyectan desde el CHANGELOG.md de la raíz en tiempo de compilación mediante node site/scripts/update-reference-inventory.mjs; el archivo raíz es la única fuente de verdad.

Changelog — Apothem

All notable changes to this project are documented in this file.

This changelog follows Keep a Changelog and the project adheres to Semantic Versioning.

Unreleased

[1.1.0] - 2026-08-16

Added

  • Per-folder README file coverage is now gated. A folder's README is its operating contract, so its file table is load-bearing: a reader who cannot find a module there concludes it does not exist. Nothing held that table against the folder's actual contents, and the drift is invisible from both sides — you do not notice a missing row while reading, nor the README while adding a file. scripts/dev/check_readme_file_coverage.py reports every shipped file its folder's README never names, and runs --strict in CI across all 31 folders.

Fixed

  • status and verify no longer swallow a profile that fails to load. status hardcoded an empty warnings array and printed nothing in plain mode; with nothing installed there was no unknown drift cell either, so the failure left no trace at all. verify --harness all discarded the failure to read its exclusions, so excluded harnesses rejoined the sweep and the run died later on a missing project path that named them — with no sign of the real cause. Both now surface a structured advisory naming the diagnostic code and the fix.
  • The PowerShell interpreter locator no longer throws where its contract promises $null. find-pwsh.ps1 built its Windows install-root fallbacks with an unguarded Join-Path $env:ProgramFiles, which is unset under PowerShell on Linux and macOS. The list was built eagerly, so the throw pre-empted even the PATH probe that would have succeeded.
  • A duplicate run: key made the CI workflow unparseable. Adding the README coverage gate consumed the Install release toolchain step header and left its run: line attached to the new step. GitHub rejects a workflow file with a duplicate mapping key outright, so runs ended immediately with no jobs and no logs, and the release build lost its toolchain install.
  • migrate-workspace honored a custom directory name for its target but not its discovery, so a non-default workspace name was written correctly and then never found again.
  • Documentation corrections across the conformity gate's hook scope, the design tokens' consumers, the OpenCode example's provenance, two harness convention pins, and four architecture pages that were unreachable from ten locale indexes.

Changed

  • Kimi Code's uninstall routes through the shared project-scope factory. It was the one project-scope adapter still deriving its project root by walking up from the output path — the hardcoded ascent the factory exists to remove.
  • LearningStore._append is now append_signal. It was reached across a module boundary by workspace_migration and four test modules while named private; the rename matches how it is actually used, and its docstring now states what it deliberately does not do.

1.0.2 - 2026-08-14

Fixed

  • The Stop hook no longer re-asserts the session-end protocol on every turn. Stop fires at the end of every assistant turn, not only at the end of a session, and the hook emitted hooks/messages/stop.md verbatim each time. Because that body reads as a fresh work order rather than a status check, every response triggered another firing and nothing the agent did changed what the hook asserted — the loop had no fixed point, and an operator could only escape it by restarting the harness, since hook configuration and message bodies are both snapshotted at session start. A new dispatch-routed handler, hooks/session_end_gate.py, supplies the missing termination condition: the protocol is emitted at most once per session, and only once the session has accumulated enough turn-ends to have state worth externalizing. The message file still owns the protocol text — the gate decides only when it is emitted — so its path and its cross-references from rules/context-management.md and rules/auto-memory.md are unchanged. Two environment variables tune it: APOTHEM_SESSION_END_MIN_STOPS (default 3) sets the firing floor, and APOTHEM_SESSION_END_ENABLED=0 silences the protocol entirely without editing installed plugin files.
  • The detection pseudocode in the canonical option-shapes rule is fenced as text rather than Python. The block uses the hyphenated schema field names the same document defines in its field table, so formatting it as Python rewrote read(probe-record-path) into a subtraction expression and changed what the documentation said. Correcting the fence language leaves the pseudocode byte-identical and restores the format gate to green.

1.0.1 - 2026-07-07

Apothem is a host-agnostic AI-harness configuration manager: one governed shared profile materializes into the native configuration of seventeen assistant harnesses behind a conformity governance gate and signed, reproducible releases.

Added

  • Shared-profile model. One governed profile at ~/.config/apothem/profile.yaml is the single source for the synced unit — rules, slash-commands, skills, hooks, output-styles, settings, schemas, docs, and MCP servers — plus the wrapped-workflow orchestrators that drive whole missions end to end (/plan, /research, /audit, and the /fortress closed-loop production-hardening pipeline).
  • Seventeen harness adapters. Antigravity, Claude Code, CodeBuddy, Codex, Cursor, Gemini CLI, GitHub Copilot, Hermes, Kimi Code, Kiro, Open-Claw, OpenCode, Qwen Code, Trae, Windsurf, Zed, and GLM (Z.ai) each install, verify, update, and uninstall through a shared, reversible adapter contract that emits the tool's native file layout. Installs back up existing targets before replacement; uninstalls reverse cleanly with zero orphans.
  • CLI. quickstart, install, uninstall, update, verify, status, diff, rollback, migrate-workspace, harnesses, profile, doctor, and completion, with dry-run reporting, drift detection, and structured JSON output (--format json). The engine is self-contained — the source tree carries its vendored dependencies and runs from a checkout as python -m apothem on system Python 3.10+.
  • Conformity governance gate. A pre-emission validator suite checks the synced unit — authorship headers, frontmatter contracts, naming, determinism, cross-references, and harness capability coverage, including a cross-file binding-reciprocity validator that keeps every rule cross-binding closed at its cited peer — before any surface is materialized.
  • Install paths. The Claude Code plugin (/plugin marketplace add ahmed-g-gad/apothem), a Gemini CLI extension, a Qwen Code extension, a Codex plugin, a VS Code-family extension on the Visual Studio Marketplace, the npm shim (npx @ahmed-g-gad/apothem <command>), and the one-shot POSIX and PowerShell installers (install.sh / install.ps1) with matching update and uninstall scripts.

Changed

  • Unified install layout. Materialized machinery (hooks, the conformity gate, schemas, templates) and non-native cohorts (rules, skills, agents) install under a single Apothem-owned .apothem/support/ tree inside each harness's configuration root, so each profile carries one Apothem-owned dotted directory rather than two similarly-named siblings.
  • Leaner always-on rules tier. The always-loaded behavioral rules were consolidated to twenty-eight, with situational depth moved into demand-loaded companion rules, so a session — or a fleet of sub-agents — ingests fewer tokens up front while every discipline still fires where it applies.

Security

  • Every release attaches an sdist, a wheel, SHA-256 checksums, Sigstore cosign signatures, SLSA build provenance, and a CycloneDX SBOM as verification evidence; the npm package publishes with Sigstore build provenance signed from the GitHub Actions OIDC identity, and a conformity validator holds every release workflow to a provenance-signed, pinned publish path.
  • The pipeline gates every change on lint, tests, type checks, a documentation build, CodeQL, OpenSSF Scorecard, dependency review, a scheduled OSV vulnerability scan, and supply-chain checks before publication. The one-shot installers pin their click / rich prerequisites to the engine's declared constraints and document an inspect-first alternative to the pipe-to-shell one-liner.

On this page