Skip to content

Changelog

All notable changes to Eidos are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Every major feature and architectural mutation is directly backed by an immutable SpecDelta (DLT-*) stored in the living specifications catalog.


[Unreleased]

Added

  • CLI Spec Document Lifecycle Management and Plugin Multi-Skill Expansion (DLT-2026-001): Expand the CLI with commands to create, list, and delete living specifications and manage SpecDelta lifecycles, and expand the Agent Plugin with specialized skills.

Changed

  • Relocate Schemas and Plugin Reference to Assets Directory (DLT-2026-002): Relocate non-code JSON/YAML schemas and canonical plugin reference assets out of the Python source package directory (src/eidos) into a dedicated top-level assets/ directory, resolving them dynamically and bundling via Hatchling force-include.
  • Modernize Living Web Portal with React 19, Tailwind CSS v4, and Material Design 3 (MD3) (DLT-2026-018): Graduated from validated technical spike EXP-2026-003.

[0.13.1] - 2026-10-20

Changed

  • Replace PyYAML with Rust-Backed fastyaml-rs (fast_yaml) Across Living Specification Parsing and Serialization (DLT-2026-098): Replace PyYAML with the Rust-backed fastyaml-rs (fast_yaml) engine across all specification frontmatter parsing, schema loading, and YAML serialization, achieving ~4.3x faster frontmatter loading and ~12x faster YAML serialization with prebuilt abi3 binary wheels across Python 3.11-3.15+.

[0.13.0] - 2026-10-20

Changed

  • Retire FallbackIndexer Regex Fallback in Favor of Unified AstGrepIndexer and AST Import Extraction (DLT-2026-096): Retire FallbackIndexer, stdlib ast dual-path parsing, is_ast_grep_available/AST_GREP_AVAILABLE flags, and regex import/signature fallbacks in favor of a single unified AstGrepIndexer (SgRoot) pipeline across all 17 supported languages, and synchronize bundled plugin version normalization with PEP 440 package versions.
  • Align FTS Query Engine, Graph Traversal, and ArchitecturalIndex Facade with v1 Schemas and AsciiDoc Templates (DLT-2026-097): Align the SQLite FTS5 query engine (query.py), incremental sync pipeline (sync.py), and ArchitecturalIndex facade (graph_index.py) with the streamlined v1 specification schemas (DLT-2026-091, DLT-2026-093), AsciiDoc prose templates, and unified 17-language AstGrepIndexer (DLT-2026-096) by expanding entity ID prefix recognition and inline CMP-/DEC- exact-ID boosting, indexing component responsibility and delta motivation into specs_fts.jtbd_or_rule while stripping AsciiDoc attribute headers (:toc: left), removing retired symbol_mappings kinds (component_ref, interface_method, interface_signature, interface_command), deriving _FILE_QUERY_EXTS from AstGrepIndexer.LANGUAGE_MAP, resolving inline component titles and domain overrides in graph traversals, and eliminating duplicated path resolution and redundant SQL round-trips in ArchitecturalIndex.

[0.12.1] - 2026-10-20

Fixed

  • Bundle assets/plugin_reference in sdist and normalize plugin SemVer (v0.12.1)

[0.12.0] - 2026-10-19

Changed

  • Harmonize and Canonicalize All v1 Specification Schemas Without Legacy Aliases (DLT-2026-091): Eliminate cross-schema field naming divergences, intra-schema duplicate properties, inconsistent lifecycle status enums, fragmented quality_attributes/external_references shapes, and copy-pasted x-eidos-ref definitions across all 16 Eidos v1 schemas (assets/schemas/v1/) with zero backward-compatibility shims or legacy fallback paths.
  • Simplify Eidos CLI Surface and Standardize Pure Blueprint Specification Scaffolding (DLT-2026-092): Streamline the Eidos CLI by simplifying eidos spec create and eidos delta create to pure blueprint scaffolders, enforcing strict separation between eidos spec (15 living spec types) and eidos delta (SpecDeltas), removing deprecated/duplicate flags (--with-plugin, --repo-root, duplicate --target, standalone version command, retired draft/planned delta status rows), standardizing --json across context and repo-map, and centralizing CLI path resolution.
  • Streamline v1 Specification Schemas, Move Prose to AsciiDoc Body, and Derive Component Dependencies via AST (DLT-2026-093): Eliminate over-engineered prose-in-YAML frontmatter blocks across Eidos v1 schemas, make redundant schema/contract fields optional, replace manual component interface blocks with automatic AST import dependency extraction, unify UI component verification on standard invariants, and remove artificial restrictions on SpecDelta mutations and expect.frontmatter assertions.
  • Consolidate Agent Lifecycle Hooks into a Single Stateless Stop Hook (DLT-2026-094): Reduce src/eidos/plugin/hooks.py from 820 lines to ~65 lines by merging 'eidos-doc-linter' and 'eidos-drift-gate' into a single stateless Stop hook ('eidos hook'), eliminating PreToolUse/PostToolUse per-edit subprocess interception and in-memory edit simulation, deleting the custom SQLite validation snapshot cache (last_stop_validation), and removing all stateful Block-Once SHA-256 fingerprinting and stop-gate.json persistence in favor of a stateless warning ('decision: allow' + 'systemMessage').
  • Remove Stateful delta_baselines Table and Memoize Git Baseline Resolution (DLT-2026-095): Eliminate the last stateful, non-derived SQLite table (delta_baselines) from eidos/.cache/index.db so the architectural knowledge graph cache is 100% stateless and rebuildable from Git, remove the full-catalog SHA-256 snapshot overhead from create_delta, and memoize Git revision/blob lookups in _resolve_git_baseline_sha during SpecDelta verification.
  • Remove backward-compatibility shims and legacy migration cleanups
  • Remove dead scaffolder re-exports, deduplicate delta_engine helpers, and fix ruff checks

Fixed

  • Drop retired user tables during ensure_cache_schema migration
  • Deterministic dirty-check sorting, duplicate-ID promotion, and ResourceWarning cleanup
  • Resolve 35 deep-audit bugs across Groups A-D and add regression test suites
  • Resolve Group 1 and Group A-D deep audit bugs across lifecycle, validator, drift, CLI, plugin, and portal
  • Resolve 21 audit bugs across validator, delta, index, context, drift, and portal

[0.11.0] - 2026-10-18

Changed

  • Simplify SpecDelta Schema & Engine, AST Fallback Indexer, Context Slicer, and Delta Catalog (DLT-2026-090): Eliminate five high-maintenance areas of over-engineering across Eidos without backward-compatibility shims: (1) retire the legacy 44-verb action and 15 target_* SpecDelta schema branch in favor of composable (operation, target, parent) mutations; (2) remove mechanical YAML string-splicing spec execution (execute_delta_mutations and eidos delta apply --execute) so apply_delta is strictly declarative verification + SpecValidator pre-commit check + status transition; (3) delegate core ast-grep languages in FallbackIndexer to AstGrepIndexer instead of maintaining duplicate regex extractors; (4) remove dead reconcile_specs and consolidate workspace/context.py (CMP-CONTEXT-SLICER) into index/context.py (CMP-TIERED-CONTEXT-COMPRESSOR); and (5) remove eidos/deltas/by-status/ symlink views and the eidos delta sync-views CLI command.

[0.10.0] - 2026-10-18

Changed

  • Consolidate Overlapping SQLite & In-Memory Caches, Adopt Typed FrontmatterModel, and Remove VCS Test-Mock Introspection Shims (DLT-2026-086): Eliminate triple parsing/caching of specification and test files across catalog.py (_SPEC_CATALOG_CACHE), validator.py (spec_validation_cache), invariants.py (test_binding_cache), and sync.py (indexed_files) by consolidating SQLite file-state caching under storage.py and routing frontmatter access through typed Pydantic FrontmatterModel (SpecDocument.model), while removing runtime inspect.signature (_accepts_kwarg) and sys.modules['eidos.vcs.drift'] monkeypatch introspection shims from production VCS modules.
  • Composable SpecDelta Mutation Schema (operation + target) and Stop-Scoped Drift Hook Execution (DLT-2026-087): Eliminate the combinatorial 44-value verb-noun mutations[].action enum and 15 type-specific target_*/new_capability_id keys in delta.schema.yaml by introducing an orthogonal composable mutation contract (operation: add | modify | remove | deprecate paired with prefix-aware target and optional parent resolution), while removing the noisy per-turn PostInvocation drift hook (handle_drift_post_invocation) so full detect_drift gating runs strictly at task completion (Stop) and PreToolUse/PostToolUse remain fast single-file AsciiDoc schema linting.
  • Default-Verified SpecDelta Application, Safe Deterministic Mutation Execution, and Single-Pass os.scandir Index Dirty Checking (DLT-2026-088): Prevent unverified SpecDeltas from silently transitioning to status: applied when running 'eidos delta apply' without flags, eliminate destructive raw-text appending and hardcoded '.py' file extensions during 'eidos delta apply --execute', and remove the redundant double-stat + os.walk bottleneck in check_index_dirty by switching to a single-pass os.scandir traversal.
  • Decorator-Aware AST Symbol Signatures and AST-Backed Polyglot Test-Binding Verification (DLT-2026-089): Eliminate the structural drift blind spot where decorator and attribute modifications (@app.command, @staticmethod, @property, @dataclass, #[derive], route/auth annotations) are omitted from CodeSymbol.line_start and CodeSymbol.signature in AstGrepIndexer and FallbackIndexer, while replacing the raw word-boundary regex fallback in SpecValidator._test_symbol_exists with AST-backed polyglot test symbol verification covering parameterized TS/JS (test.each/it.each/Deno.test), Go subtests (t.Run), and Rust attribute test macros (#[tokio::test], #[rstest], #[test_case]).

[0.9.0] - 2026-10-17

Added

  • Persistent AST Symbol Locations and Recursive Multi-Package Code Indexing (DLT-2026-034): Persist AST symbol coordinates (file, lines, signature, parent) in the SQLite knowledge graph so 'find-symbol' can report where a symbol is defined and 'repo-map' no longer re-parses every source file, and index every declared container 'package_path' recursively with a deterministic, order-independent ownership precedence.

Changed

  • Continuous Code-Aware AST Indexing and Status Telemetry (DLT-2026-023): Make the Eidos Architectural Knowledge Graph continuously up-to-date by extending sub-5ms dirty checking to source code files and tests, and enhance 'eidos index status' with rich AST engine telemetry, symbol breakdown by syntax kind, test-to-invariant assertion metrics, and machine-readable '--json' output for autonomous AI coding agents.
  • Tool-Only Installation, CLI-Native Agent Hooks, and Block-Once Stop Gate (DLT-2026-024): Eliminate virtual-environment coupled hook scripts and project dependency pollution by standardizing Eidos as a standalone developer tool ('uv tool install eidos-ai', 'pipx install eidos-ai', 'uvx --from eidos-ai eidos'), migrating agent lifecycle hooks into native CLI subcommands ('eidos hook lint', 'eidos hook drift'), and enforcing a stateful Block-Once Stop gate.
  • Decommission Unimplemented GitHub and GitLab VCS Bridge (DLT-2026-025): Remove the unimplemented GitHub/GitLab API bridge ('src/eidos/vcs/bridge.py') and update VCS lifecycle specifications so Eidos focuses strictly on local Git-native drift detection and living specification reconciliation.
  • 100% Generic Engine, Zero-Config Path Standardization, and Graph-Inferred Design Paths (DLT-2026-026): Make the Eidos runtime engine and bundled agent skills 100% repository-agnostic with zero configuration files by standardizing 'package_path' on containers, 'source_path' on components, inferring design client/system paths via the knowledge graph, and relocating the index cache to 'eidos/.cache/'.
  • Strict Static-Only Invariant-to-Test Function Verification (DLT-2026-027): Enforce strict static-only verification of invariant 'test_binding' declarations ('file::func' existence and exact word-boundary '# INV-*' reference within the bound test function) without executing tests or reading test runner artifacts.
  • Scoped 1-Hop Graph Neighborhood and AST Structural Drift Detection (DLT-2026-028): Replace coarse boolean repository-wide drift checks ('any code changed and no spec changed') with AST structural change detection and 1-hop knowledge graph neighborhood verification so internal body-only refactors do not cause false-positive spec churn and unrelated spec edits cannot mask component drift.
  • Normalize PreToolUse and PostToolUse Hook Payloads Across AI Agent Harnesses (DLT-2026-033): Ensure 'eidos hook lint' ('PreToolUse' and 'PostToolUse') accurately extracts target file paths and proposed content edits across Antigravity, Claude Code, Cursor, Cline, OpenCode, and OpenAI Codex instead of only matching Antigravity tool payload keys.
  • Incremental SQLite Caching for Specification Validation and Static Invariant Verification (DLT-2026-035): Eliminate O(N) full-repository specification parsing and test-suite AST scanning on every 'PostInvocation' and 'Stop' agent lifecycle hook by caching per-file schema validation and test-function invariant bindings in 'eidos/.cache/index.db' keyed by mtime and SHA-256.
  • Structured Architectural Decisions and Trade-Off Records Embedded in Living Specifications (DLT-2026-036): Preserve architectural 'why', rejected alternatives, and trade-offs directly inside living specifications ('product/system', 'tech/architecture', 'tech/container', 'tech/component') via a structured 'decisions:' schema block without reintroducing standalone ADR graveyard files (POL-001).
  • Consolidate 14 Fragmented Agent Skills into 4 Cohesive Workflow Skills (DLT-2026-037): Reduce AI agent system-prompt skill index bloat and eliminate multi-hop skill file reads by consolidating the 14 fragmented Eidos skills into 4 cohesive workflow-aligned skills ('eidos', 'eidos-spec', 'eidos-plan', 'eidos-ops').
  • Modularize Core and CLI God Modules into 1-to-1 C4 Component Modules (DLT-2026-038): Decompose monolithic 'src/eidos/core/scaffolder.py' (2,039 lines) and 'src/eidos/cli/main.py' (2,636 lines) so each declared C4 Level 3 component maps 1-to-1 to a focused Python module, and declare the SpecDelta engine that currently hides inside 'scaffolder.py' as its own component.
  • Diff-Aware Specification Coverage for Structural Code Additions (DLT-2026-039): Close the 'touch-to-appease' loophole in 'eidos drift': today any change to a 1-hop spec file (a blank line, a '//' comment) silences drift for newly added source files and public symbols.
  • Enforce Strict C4 Container (CNT-) vs Component (CMP-) Target Separation Across Schemas and Validator (DLT-2026-042): Eliminate lingering C4 Level 2 Container (CNT-, tech/container) and Level 3 Component (CMP-, tech/component) conflation in v1 schemas, x-eidos-ref annotations, and SpecValidator reference checks so container fields exclusively target containers and component fields exclusively target components.
  • Enforce Strict Enum Taxonomies in SpecDelta Schema (intent.kind, bug_classification, severity, and mutations[].action) (DLT-2026-043): Replace open regex string patterns on SpecDelta categorical fields ('intent.kind', 'intent.bug_classification', 'intent.severity', and 'mutations[].action') in 'assets/schemas/v1/delta/delta.schema.yaml' with strict JSON Schema 'enum' taxonomies—separating strategic intent ('feature', 'enabler', 'bug') from structural mutation actions ('add_', 'modify_', 'extend_', 'patch_', 'deprecate_', 'remove_') and enforcing deterministic schema validation and Keep-a-Changelog classification.
  • Remove CLI Shortcuts and Duplicate Aliases, Nest Component Under Spec (DLT-2026-044): Eliminate all root-level CLI shortcut commands, intra-group duplicate aliases, and redundant C4/reconcile commands so every CLI operation has a single canonical command path and 'component' is nested under 'eidos spec component'.
  • Enforced Token-Budget Context Slicing, Mtime Refresh on Sync, and Qualified Polyglot AST Indexing (DLT-2026-047): Align context slicing, incremental graph synchronization, and polyglot AST indexing with their architectural guarantees by enforcing real token truncation across Markdown and JSON slices, updating stored mtime when SHA-256 matches on dirty checks, promoting ast-grep-py to a core dependency, and qualifying test methods by Class::method so duplicate method names across test classes never overwrite each other.
  • Core Module Decomposition, Build-Time Portal Asset Bundling, CI Pinning, and Progressive Eidos Lite Profile (DLT-2026-050): Improve long-term maintainability, repository hygiene, and onboarding ergonomics by decomposing 1,000-2,500 LOC god modules, replacing the committed 4.7 MB portal/assets.py literal with build-time bundling and CI frontend tests, deduplicating schemas/models and plugin reference trees, fixing CI ruff drift, and introducing a progressive Eidos Lite onboarding profile.
  • Pluggable Contract Protocol Verifier Registry for Multi-Protocol CTR- Specifications* (DLT-2026-056): Replace the hardcoded Python Typer-only CLI contract check in SpecValidator with a pluggable protocol verifier registry supporting cli_args, python_protocol, rest_openapi, json_schema, grpc_proto, and graphql so non-Typer CTR-* contracts cannot silently diverge from their specification_file.
  • Git-Portable SpecDelta Baselines, Collision-Free Delta IDs, and Copy-on-Write Mutation Transactions (DLT-2026-057): Make SpecDelta verification 100% deterministic across machines and CI without relying on gitignored SQLite .cache/index.db state by recording vcs.base_commit in DLT-* frontmatter, support collision-free branch/slug delta IDs to prevent parallel branch merge conflicts, and replace the full-directory eidos/ RAM snapshot in _MutationTransaction with copy-on-write snapshotting.
  • FTS5 Stop-Word Filtering, Incremental Spec Edge Sync, and Progressive Context Budget Compression (DLT-2026-058): Eliminate FTS5 stop-word query dilution in build_fts_match_query, scope rebuild_spec_edges to incrementally update modified specification edges instead of wiping all edges globally, and progressively compress verbose prose fields before dropping invariants or policies in _enforce_token_budget.
  • Validate Component source_path, UI Component test_bindings, and Invariant test_binding File & Symbol References in SpecValidator (DLT-2026-059): Extend SpecValidator (eidos validate) so that when a repository source/test tree is present on disk, declared tech/component and inline components[].source_path, design/ui-component test_bindings, and INV-* test_binding references (file::func or file::Class::method) are validated for file and test symbol existence, closing the reference-validation gap in _validate_source_and_contract_paths without performing INV-* token matching.
  • Unify YAML Frontmatter Delimiter Parsing and Adopt Typed Pydantic Domain Models Across Core Engines (DLT-2026-060): Eliminate the three divergent YAML frontmatter delimiter regexes across parser.py, structural.py, and catalog.py in favor of a single block-scalar-safe parser anchored at file start, and expand Pydantic domain models in models.py so core engines operate on typed attributes rather than raw dictionary lookups.
  • Working-Tree Digest Short-Circuit in Agent Hooks and Mtime-Cached Portal HTTP Server (DLT-2026-063): Short-circuit PostInvocation lint and drift hooks in <5ms when the working tree and HEAD SHA are unchanged since the last clean run, and cache portal HTTP API responses by specification directory dirty state so /api/data, /api/overview, and /api/validate do not re-parse all specifications on every HTTP request.
  • Validate Design System W3C DTCG Token Manifests and Acyclic Inheritance in SpecValidator (DLT-2026-064): Extend SpecValidator to verify that design/system specifications reference an existing, valid JSON tokens.manifest adhering to W3C DTCG ($value / $type) structure and that inheritance.extends chains across DS-* specifications are acyclic.
  • Structured Mutation Post-Condition Assertions (body/frontmatter) and Closed Schema Validation for SpecDeltas (DLT-2026-079): Enforce strict JSON Schema validation for mutations[].expect in delta.schema.yaml by replacing untyped object and additionalProperties: true with a strictly closed schema (additionalProperties: false) separating structured body assertions (contains, not_contains) and typed frontmatter assertions (responsibility, source_path, rule, test_binding, status, version, category, custom), paired with comment-stripped body evaluation, list-subset matching, baseline-modification verification, and failure_reason diagnostics in DeltaEngine and DeltaCommands.
  • Cross-Ref Collision-Safe SpecDelta ID Resolution, Optional ID/Slug CLI Ergonomics, and Applied Delta Fast-Path Validation (DLT-2026-080): Eliminate SpecDelta ID collisions across parallel feature branches and explicit CLI invocations, streamline delta creation ergonomics with optional IDs and --slug support, and prevent O(N) historical validation slowdowns as applied SpecDeltas accumulate in eidos/deltas/.
  • Boundary-Aware Direct Mode Symbol Anchoring for Exported Package and Contract Symbols (DLT-2026-081): Prevent low-level module helper function names from leaking into high-level C4 Container and Capability specifications during Direct Mode drift checks by distinguishing true package/contract boundary exports from module-internal functions.
  • Bidirectional Contract Parity Verification and Multi-Framework CLI Contract Extraction (DLT-2026-082): Catch stale/phantom contract documentation when endpoints, RPCs, or CLI commands are deleted from source code, and expand CLI contract verification beyond top-level Python Typer commands to cover sub-apps and common polyglot/Python CLI frameworks.
  • Polyglot AST/Diff Parity, Unified SQLite Baselines & Git Enumeration, Weighted Context Slicing, and Lossless YAML Mutations (DLT-2026-083): Resolve Issues #6, #7, #8, and #9 in a unified engine foundation upgrade: align polyglot AST/diff file extensions, unify delta_baselines into managed SQLite storage and replace full-repo os.walk scans with Git-tracked enumeration and cached catalog lookups, improve context slicing precision via edge-weighted traversal, two-tier FTS queries, and YAML/code-calibrated token estimation, and preserve YAML comments during invariant frontmatter mutations.
  • Stateful Block-Once Stop Gate with TTL/Session Expiry and Explicit Bypass Warning Message (DLT-2026-084): Preserve the loop-preventing Block-Once Stop Gate contract (INV-HOOK-BLOCK-ONCE) while fixing stale cross-session fingerprints in stop-gate.json via TTL/session scoping and surfacing an explicit systemMessage warning when a second identical Stop attempt releases the gate.
  • Eliminate Hand-Authored affects and blast_radius from SpecDelta Schema in Favor of Graph-Derived Scope and Impact (DLT-2026-085): Eliminate 3-way entity duplication across mutations, affects, and blast_radius in SpecDelta frontmatter by making mutations[].target_* the single source of truth, removing manual affects and blast_radius blocks from delta.schema.yaml, restricting drift.py Planned Mode target authorization strictly to mutations[].target_*, and computing 0-hop affected entities and k-hop blast radius (including bound invariants) dynamically from the SQLite knowledge graph for the Portal and CLI.
  • Remove legacy scripts/ wrappers in favor of direct CLI hooks

Fixed

  • Preserve Test-to-Invariant Assertion Edges in Knowledge Graph Sync (DLT-2026-029): Prevent orphan-edge cleanup at the end of 'GraphIndex.sync()' from deleting 'asserts' edges that link AST test function bindings ('file.py::test_func') to technical invariants ('INV-*').
  • Strict 1-Hop Drift Scoping: Remove Global System Spec Escape Hatch and Graph-Scope Design Drift (DLT-2026-030): Close two gaps left by DLT-2026-028: (1) the global drift bypass in '_collect_1hop_spec_targets()' where modifying the root system or system-architecture specifications silences structural code drift for every component, and (2) the legacy extension-based 'design_drift' heuristic that ignores the knowledge graph, ignores Planned Mode SpecDelta targets, and treats every CSS edit as structural.
  • Enforce Static Invariant Verification Across C4 Level 3 Component Specifications (DLT-2026-031): Ensure invariants ('INV-*') declared in standalone 'tech/component' specifications under 'eidos/architecture/components/' and inline container components are verified by 'eidos drift' under POL-002 alongside capability and policy invariants.
  • Fix Component Spec Scaffolding, Add Client/Flow Scaffolding, and Enforce Safe YAML Serialization (DLT-2026-032): Fix 'create_spec()' routing where 'component' erroneously creates a 'tech/container' spec, add missing 'design/client' ('CLT-') and 'design/flow' ('FLOW-') scaffolders, replace unsafe f-string YAML frontmatter generation with 'yaml.safe_dump()', and remove stale co-located 'src/' component references from schemas and validator docstrings.
  • Require Modification Evidence in SpecDelta Verification (DLT-2026-040): 'eidos delta verify' still reports modify_/extend_/patch_* mutations as fulfilled without evidence of change: it falls back to filesystem mtimes when no local baseline exists, hashes inline component targets at container-file granularity, accepts structural sub-target membership (capability/invariant, container/component, container/contract) as proof of modification, and resolves composite mutations like patch_invariant to target_capability instead of the action's primary target.
  • Air-Gapped Portal Bundle with Embedded Mermaid, Fonts, and Asciidoctor.js Rendering (DLT-2026-041): The Living Web Portal loads Mermaid.js from cdn.jsdelivr.net and web fonts from fonts.googleapis.com, so C4 diagrams break in air-gapped environments, and its regex AsciiDoc renderer fails on standard blocks used by living specs (e.g.
  • Transactional SpecDelta Execution, Complete Action Coverage, and Git-Backed Baseline SHAs (DLT-2026-045): Uphold INV-MUTATION-REVERSIBILITY by making 'eidos delta apply --execute' atomic with pre-commit schema validation and rollback, handling or explicitly rejecting all schema mutation actions, enforcing target type checks before file deletion, and recovering pre-delta baseline SHAs from Git history when the gitignored SQLite cache is absent.
  • Manifest-Tracked Plugin Uninstall, Non-Destructive Force Semantics, and Version-Pinned Hook Runner (DLT-2026-046): Prevent 'eidos plugin uninstall' from deleting user-owned directories (.codex/, .github/plugin/, or arbitrary --dest paths), honor the 'force' overwrite flag when installing into existing workspace files, refuse symlinked destinations, and pin the package version in 'uvx' fallback hook commands.
  • Unified SQLite Cache Schema Versioning and Path-Keyed Entity Eviction on Spec ID Rename (DLT-2026-048): Eliminate SQLite cache invalidation thrashing caused by validator.py and drift.py stamping schema_version 2.2.0 while graph_index.py expects 2.3.0, and prevent ghost entities and orphan edges when a specification ID is renamed in place.
  • Repo-Relative Path Normalization and Configurable Governance Checks Across Validator and Drift (DLT-2026-049): Eliminate false-positive INV-COMPONENT-CENTRALIZATION-MANDATE failures when a repository resides under a parent directory named 'src', support custom '--path' specification directories in drift classification, and decouple Eidos-repo-specific CLI parity checks from generic foreign-repository validation.
  • Close Spec-to-Code Drift Detection Bypasses for Unowned Code, Non-Addition Diffs, and Scoped 1-Hop Neighborhoods (DLT-2026-051): Eliminate spec-to-code drift bypasses where unowned source files pass whenever any unrelated spec or SpecDelta is touched, non-addition structural changes pass via trivial comment/whitespace spec edits, editing a shared policy (POL-) satisfies 1-hop coverage across all linked containers, and production code under docs/ or test_ paths is misclassified.
  • Fix Batched is_generated_or_vendored Invocation and Single-Pass Base Ref Resolution in Drift (DLT-2026-052): Fix the broken is_generated_or_vendored(effective_root, str(rel_f)) call in classify_changed_files (classify_git_changes) that splits a path string into single characters and spawns a git subprocess per file, and resolve the base Git reference once per drift run instead of re-spawning git rev-parse for every modified file.
  • Strict Base Git Reference Validation and Merge-Base Diff Resolution Without Silent Fallbacks (DLT-2026-053): Prevent 'eidos drift --base ' from silently falling back to '--uncommitted' (and passing on clean CI checkouts) when the base ref is missing or unresolvable, eliminate the fallback from 3-dot ('base...HEAD') to 2-dot ('base HEAD') diff when a branch has zero changes, and compare file contents against the exact merge-base commit.
  • Portal Data Engine Synchronization, Full C4 Target Schema Coverage, and UI Navigation Polish (DLT-2026-054): Synchronize portal data generator with promoted components, embedded decisions, container-level invariants, full mutation target schemas, and polish UI navigation and AsciiDoc rendering.
  • Polyglot Public Visibility Heuristics, Anchored Boundary Symbol Coverage, and Substantive SpecDelta Apply (DLT-2026-055): Eliminate false-positive structural drift on private polyglot functions by enforcing language-native visibility rules in AstGrepIndexer, prevent false-negative 1-hop neighborhood bypasses by requiring symbol anchoring when public boundary symbols are added to existing files, and remove the self-contradictory '// {details}' comment-append fallback in SpecDelta execution.
  • Filter Unapplied Deltas, Deduplicate Unreleased Commits, and Batch Git Tag Ancestry Queries in ChangelogGenerator (DLT-2026-061): Filter ChangelogGenerator.get_applied_deltas strictly to status == 'applied' so proposed, draft, and rejected SpecDeltas do not leak into CHANGELOG.md, deduplicate Unreleased Git commits against unreleased_deltas, and replace the O(D * T) per-delta git log and git merge-base subprocess storm with batched Git queries.
  • Word-Bounded Multi-Term Reference Matching, Polyglot Test Classification, Archive Exclusion, and Fail-Loud Graph Checks in DeltaAuditor (DLT-2026-062): Eliminate substring false positives and early single-term loop breaks in AuditEngine._scan_and_classify_references by evaluating all target terms per line with word-bounded regexes, skip compressed .gz bundles in SKIP_EXTENSIONS, classify polyglot test files via is_test_code_path instead of hardcoding 'tests/', and surface SQLite index errors in _check_graph_integrity instead of silently swallowing exceptions.
  • Lossless C4 Component Promotion/Inlining and Word-Bounded Specification Reference & Scalar Mutations (DLT-2026-065): Eliminate YAML corruption and silent metadata loss in promote_component / inline_component, prevent substring false positives and symlink duplicates in find_references_to_spec, and safely escape YAML scalar writes in _set_frontmatter_scalar.
  • Parameterized Repository Initialization (--name, --title) and Scoped Empty Root System Specification Parser & Validator Exemption (DLT-2026-066): Honor the --name and --title parameters in init_repository when provided, remove the dead with_plugin parameter, and scope the 0-byte / whitespace-only empty-file exemption in both parse_spec_file and SpecValidator._load_or_validate strictly to the root system specification file so empty non-system specification files fail validation.
  • Read-Only SQLite Cache Connections, db_path-Aware Index Singleton, and Automatic repo_root Resolution (DLT-2026-067): Eliminate unconditional SQLite write transactions on read-only cache opens, include db_path and connection cleanup in the get_architectural_index singleton, and automatically resolve repo_root via find_repo_root when custom --path directories are passed.
  • Unquoted Git Path Resolution, Container-Level Invariant Verification, Single-Pass Test Cache Loading, and reconcile_specs Graph API Fix (DLT-2026-068): Disable Git C-style octal path quoting in diff/status/ls-files queries, verify top-level container invariants in extract_invariants_and_verify, eliminate duplicate working-tree os.walk scans per drift run, skip unchanged applied deltas in detect_drift, and fix the broken max_hops TypeError in reconcile_specs.
  • HTML-Safe JSON Serialization in Static Web Portal Builder (DLT-2026-069): Escape closing sequences (and U+2028/U+2029 line separators) when embedding JSON portal state into index.html in build_static_portal so specifications containing literal tags cannot break or inject markup into the static web portal.
  • eidos doctor Custom --path Support and Virtualenv-Aware CLI Invocation Check (DLT-2026-070): Allow eidos doctor to inspect custom specification directories via --path / -p and avoid failing with exit code 1 when invoked inside a virtualenv (uv run / python -m) where eidos is not on the global system PATH.
  • Isolated project Plugin Install Target, Accurate Fallback Version Path Reporting, AIDER Created-Files Typing, and Retired reconcile.md Command Cleanup (DLT-2026-071): Prevent PluginInstallTarget.PROJECT from implicitly mutating or deleting .cursor/ and .claude/, remove the retired broken reconcile.md Claude slash command, fix AIDER post_install_hook appending a boolean into InstallResult.created_files, report the actual matched manifest directory in check_plugin_version_status, and use line-anchored YAML frontmatter parsing in _validate_skill_md.
  • Collision-Free Schema Cache Keying, 16-Schema eidos info, and Functional Typer Root CLI Contract Parity (DLT-2026-072): Eliminate the basename collision between product/system.schema.yaml and design/system.schema.yaml in SpecValidator._load_bundled_schemas and eidos info, sort schema hashing deterministically, and detect functional app.command(...)(fn) and *_commands.register(app) root CLI commands in _verify_cli_contract_commands.
  • Unified v1 JSON Schema Parity for Container & Policy Invariants, Cross-Layer Embedded Decisions, Contract Versioning, and SpecDelta Design References (DLT-2026-073): Align the bundled v1 JSON Schemas (container, policy, domain, capability, contract, and delta) with the living specification engine, knowledge graph indexer, drift detector, and SpecDelta lifecycle so valid invariants, embedded DEC-* decisions, contract SemVer versions/consumers, and design entity references are not rejected by additionalProperties: false.
  • Project-Agnostic Living Web Portal Views & C4 Context Diagram, Complete Portal & Design Subgraph Extraction, Modal TOC Scroll-Spy, and Frontend SPA Component Mapping (DLT-2026-074): Remove hardcoded Eidos repository paths, external system nodes (EXT_GIT/EXT_IDE), and IDs ('systems/core', 'web-portal', 'DS-CORE', 'Eidos') from the Portal generator and frontend, complete get_portal_data and _collect_design_subgraph extraction across all schema types and relationships, fix SpecReader modal Sheet TOC scroll-spy, HomeView active delta metrics, and DesignView cross-client flows, and map src/eidos/portal/frontend/src in CNT-EIDOS-PORTAL.
  • Accurate Non-Code Invariant/Delta/Validation Drift Diagnostics in Hooks & CLI and Push-Aware CI Drift Base Resolution (DLT-2026-075): Ensure handle_drift_stop, execute_drift_hook, generate_remediation_prompt, and eidos drift report accurate root causes when drift is triggered by broken invariant bindings, unverified SpecDelta mutations, or spec validation failures with 0 modified code files, and fix .github/workflows/ci.yml so push events to main diff against github.event.before instead of origin/main (HEAD...HEAD).
  • Synchronize Bundled Agent Skills (eidos, eidos-spec, eidos-plan, eidos-ops) with v1 JSON Schemas and Canonical Design Paths (DLT-2026-076): Align all YAML frontmatter templates, property descriptions, enum values, and directory paths in the 4 bundled Agent Skills (assets/plugin_reference/skills/*/SKILL.md) with the v1 JSON Schemas and scaffolder conventions so AI agents following the skills author specifications that pass eidos validate.
  • CLI Contract Flag Parity, Design Scaffolder Hygiene, and Documentation & Living Specification Synchronization (DLT-2026-077): Implement missing CLI flags and positional arguments promised by CTR-EIDOS-CLI, POL-004, bundled skills, and docs/ (eidos spec list --json, eidos index search --json, eidos delta create --branch, eidos delta status [ID] [STATUS] --json, eidos delta list --json, and eidos spec create --platform / --spec-file), fix hardcoded DS-CORE and fake packages/ui/src/*.stories.tsx scaffolding in build_design_spec, and synchronize schema-invalid YAML examples and stale CLI/entity references across docs/concepts/ and eidos/ capability/screen specifications.
  • Knowledge Graph Container & Inline-Component Invariant Indexing, AST Symbol FTS5 Projection, and Anchored Graph Traversal (DLT-2026-078): Index top-level tech/container and inline CMP-* component invariants into SQLite entities, specs_fts, edges, and symbol_mappings; promote owning container/component entities when container/component invariants are directly matched in build_tiered_context_slice; project primary AST code_symbols into specs_fts.symbols for code-aware task/search retrieval; and anchor SQLite LIKE suffix and recursive CTE cycle checks while including source_path in check_index_dirty.
  • Close SQLite cache connections to eliminate ResourceWarnings
  • Use get_k_hop_neighborhood in SpecDelta blast-radius test
  • Resolve deep adversarial review edge cases across all subsystems
  • Preserve BM25 rank order, two-stage budget eviction, and invariant parent promotion
  • Complete index decomposition, portal gzip asset hook, shared schema defs, and declarative TargetAdapter

[0.8.0] - 2026-10-13

Added

  • Polyglot AST Symbol Indexing, AI Code Graph, and Granular Invariant Traceability via ast-grep (DLT-2026-021): Integrate ast-grep (ast-grep-py) to empower the Eidos Architectural Knowledge Graph indexer with deep polyglot AST symbol mapping (classes, functions, methods, interface signatures), a high-speed structural AI Code Graph / Repo Map engine, and granular test-function invariant traceability ((test_fn) -[asserts]-> (INV-*)).
  • Scope doc linter to eidos specs and add dedicated drift gate hook

Changed

  • Automated Living Architecture Changelog Generation Engine (DLT-2026-022): Provide a zero-dependency automated changelog generation engine that parses applied SpecDeltas (DLT-*) and Git release tags into a standard Keep a Changelog compliant CHANGELOG.md and docs/changelog.md, establishing bidirectional traceability between release notes, git tags, and living specifications.

[0.7.0] - 2026-10-13

Changed

  • Hierarchical C4 Level 2 Container Topology and Inter-Container Connection Architecture (DLT-2026-020): Enhance the C4 Level 2 Container Diagram in the Living Web Portal to visually represent the system boundary, tiered architectural hierarchy (presentation, extensibility, core engine, and persistence layers), and explicit inter-container dependency connections and contracts.

[0.6.0] - 2026-10-13

Added

  • Enhance UI ergonomics, dark theme contrast, reader layout, and introduce Eidos brand mark

Changed

  • Living Web Portal Reading-Friendly Design Revamp (DLT-2026-019): Revamp the Living Web Portal's typography, document layout, and reading experience to transform dense technical specifications into an effortless, reading-friendly documentation surface.

[0.5.0] - 2026-10-12

Added

  • Integrate Embedded Architectural Knowledge Graph & Hybrid Context Retrieval Index (DLT-2026-011): Graduated from validated feasibility exploration EXP-2026-002 to transition Eidos context slicing from linear filesystem scanning to an embedded SQLite knowledge graph with FTS5 lexical retrieval and tiered token-budgeted compression.
  • Centralized Hybrid C4 Level 3 Component Manifests (DLT-2026-015): Following the conclusion of EXP-2026-004, introduce first-class support for dedicated C4 Level 3 Component specifications (type: tech/component, CMP-*).
  • Change inspector to centered popup modal with spacious max-w-5xl width
  • Render formatted living spec bodies with AsciiDocRenderer and add multi-level hierarchy to living catalog
  • Add prominent POL-* system policies section, make domains, capabilities, policies, and personas interactive and clickable with inspection drawers
  • Enforce centralized C4 L3 component manifests in eidos/architecture/components/
  • Enrich Design Systems page with living W3C DTCG tokens, UI components, screen state machines, and interactive flows
  • Add intelligent auto-fit zoom, pan-and-drag, and expandable viewport to C4 Mermaid diagrams
  • Add clickable C4 navigation, hierarchical catalog tree, and Vite dev server
  • Prototype React 19, Tailwind v4, MD3 & singlefile bundle (EXP-2026-003)
  • Promote architectural knowledge graph to standalone C4 container CMP-EIDOS-INDEX
  • Synchronize system architecture and domain capabilities with knowledge graph engine
  • Wire ArchitecturalIndex universally across context, components, spec listing, drift, and skills
  • Wire ArchitecturalIndex into CLI, MCP, and agent skills with auto-sync

Changed

  • Dynamic Clickable Hierarchical C4 Architecture Explorer (L1-L3) (DLT-2026-012): Current C4 diagrams in the Eidos Web Portal and static site export are static, vertically stacked Level 1 and Level 2 views without interactive drill-down navigation or Level 3 (Component Whitebox) visualization.
  • Remove Deprecated PRCheckResult Backwards Compatibility Alias (DLT-2026-013): Eliminate redundant PRCheckResult backwards compatibility alias from eidos.vcs and drift modules, maintaining dead-code hygiene and streamlining the public VCS API surface.
  • Formalize First-Principles C4 Architecture: Level 2 Containers (CNT-) and Level 3 Components (CMP-) (DLT-2026-014): The historical conflation of C4 Level 2 Containers and Level 3 Components under the overloaded 'tech/component' document type and 'CMP-*' prefix causes recurring cognitive dissonance.
  • Deprecate and Remove MCP Server in Favor of Direct CLI and Progressive Agent Skills (DLT-2026-016): Sunsets the stdio Model Context Protocol (MCP) server (CNT-EIDOS-MCP) and its interface contract (CTR-EIDOS-MCP).
  • SpecDelta Deletion and Deprecation Audit Engine (eidos delta audit) (DLT-2026-017): Provides a context-aware reverse-dependency blast-radius audit engine ('eidos delta audit') to verify that entities removed or deprecated by a SpecDelta do not leave unacknowledged dangling references or active leaks in living specifications, code generators, documentation, or contracts.

Fixed

  • Fallback to PORTAL_HTML_TEMPLATE in test when dist not present and ignore node_modules in root gitignore
  • Default C4 to Context view, fix Level 2 container and Client Flow auto-fit zoom, add flows layout toggle
  • Optimize dirty checking and batch queries in get_tiered_context_slice
  • Normalize auto-fit zoom to prevent over-zooming on small diagrams and remove drill-down helper pill
  • Prevent double-scaling by enforcing natural 1:1 SVG dimensions and bold readable default zoom
  • Resolve zoom reset loop in MermaidDiagram, add wheel zoom and height expansion, and improve default zoom readability
  • Resolve dark theme switching and W3C token color mappings

[0.4.0] - 2026-10-12

Added

  • Release v0.4.0 with context slicing, persona matrix, and bounded context domains
  • Implement multi-client architecture (CLT-) and interaction flows (FLOW-)
  • Refine tree-grid with SVG rotating chevrons, sleek search bar, and streamlined columns
  • Implement unified hierarchical tree-grid for living specs catalog
  • Implement interactive master-detail tree navigation for Living Specs Catalog
  • Make sidebar collapsible on desktop and replace home icon with SVG house
  • Revamp living portal with responsive sidebar, home dashboard, and business-first IA
  • Add POL-003 and INV-DOCS-SYNCHRONIZATION enforcing continuous documentation synchronization with automated test suite
  • Register docs system as first-class component CMP-EIDOS-DOCS

Changed

  • Revamp Eidos Personas and Core Domains Architecture (DLT-2026-010): Restructure Eidos personas and bounded context domains to align with its true agent-agnostic ecosystem, multi-client experience, and Git-native lifecycle architecture.
  • Remove themes and supported_themes in favor of color_modes
  • Clarify design_system vs supported_themes distinction

Fixed

  • Format screen state machines as compact horizontal cards in a responsive grid
  • Enlarge C4 diagrams with padded nodes, 16px font, and zoom controls
  • Resolve C4 Level 1 context Mermaid syntax error and tab re-render

[0.3.0] - 2026-10-12

Added

  • Add eidos-product, eidos-explore, eidos-review, and eidos-portal skills
  • Replace check-pr with eidos drift, add eidos_detect_drift AI tool, and author eidos-drift skill
  • Implement eidos check-pr, eidos reconcile, and dual workflow governance

[0.2.0] - 2026-10-12

Added

  • Configure dynamic package versioning from git tags using hatch-vcs
  • Add Python 3.15 to CI testing matrix, release workflow, and documentation

Fixed

  • Track .agents/plugins/eidos and make parity test robust to uninstalled environments

[0.1.0] - 2026-10-11

Added

  • AI Plugin Lifecycle Hooks for Automated Documentation Linting (DLT-2026-008): Introduce lifecycle hooks in the AI agent plugin to enforce syntax and schema validation of living documentation on edit and task completion.
  • Eidos Living Web Portal & Interactive Architecture Visualizer (DLT-2026-009): Provide an interactive web portal (eidos serve and eidos build-site) for non-IDE stakeholders to visualize C4 architecture, living specs, multi-design systems, and SpecDelta Kanban boards.
  • Add docker-in-docker, configure Python 3.15, and remove just
  • Add uv and ty toolchain support
  • Add Ubuntu 26.04 development container
  • Isolate gitignore inside eidos/.gitignore to remove dependency on host project
  • Add 'eidos-extract' skill for reverse-engineering living specs from codebases
  • Add living spec and SpecDelta lifecycle commands with multi-skill plugin expansion
  • Add SemVer 2.0.0 versioning, inspection, and update lifecycle
  • Add 'eidos plugin uninstall' and 'eidos plugin remove' commands
  • Restrict installer to project-scoped installation
  • Add agent-plugins.org v1.0.0 conformant plugin, MCP server, and CLI installer
  • Formalize Arc42 and C4 model alignment in architecture and component schemas
  • Add architecture, component, and contract schemas supporting dual centralized and co-located layouts
  • Separate Python engine, bundled schemas, and living specifications under eidos/
  • Initialize Eidos product specification architecture and schemas

Changed

  • Flat SpecDelta Storage with Gitignored Lifecycle Symlink Views (DLT-2026-003): Store SpecDeltas at permanent flat file paths under eidos/deltas/ and manage browseable lifecycle views via gitignored symlinks in eidos/deltas/by-status/.
  • Repository Initialization Engine and eidos-init Agent Skill (DLT-2026-004): Provide eidos init command, eidos_init_repo MCP tool, and eidos-init agent skill to bootstrap living specification workspaces.
  • Multi-Design System Engine, W3C Tokens, and Product Capability Linkage (DLT-2026-005): Enable multi-tenant/multi-brand design systems with W3C tokens, UI component contracts, screen specs, and bidirectional linking to product capabilities.
  • Solution Architecture Synchronization with Multi-Design Systems, MCP Contract, and Lifecycle Scaffolding (DLT-2026-006): Synchronize CMP-EIDOS-ENGINE and ARCH-EIDOS-001 with current engine capabilities including MCP stdio contract, multi-design systems, repository initialization, and plugin validation.
  • Architectural Decomposition of Monolithic Engine into C4 Level 2 Containers (DLT-2026-007): Decompose monolithic CMP-EIDOS-ENGINE into 4 distinct C4 containers: CMP-EIDOS-CORE, CMP-EIDOS-CLI, CMP-EIDOS-MCP, and CMP-EIDOS-PLUGIN.
  • Move VS Code settings to .vscode/settings.json and clean devcontainer
  • Remove Claude support from configuration and post-create
  • Streamline configuration and post-create setup for Eidos
  • Use ubuntu:26.04 image directly without Dockerfile
  • Relocate schemas and plugin reference out of src/ into assets/
  • Remove artificial restrictions and closed enums across all v1 schemas
  • Remove rigid required fields from cross_cutting_concepts to align with Arc42 open catalog model
  • Organize v1 schemas into product/, tech/, and delta/ subdirectories
  • Make archetypes open and extensible without closed enum restrictions
  • Change archetype from single enum to composite archetypes array

Fixed

  • Resolve all ruff issues in lint_docs.py and hooks.json
  • Use mcp_config.json exclusively and remove redundant mcp.json
  • Unify project and workspace installation target under .agents/plugins/eidos
  • Update Antigravity workspace plugin path to .agents/plugins/eidos