Skip to content

AppRC 0.25.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 15:33
· 86 commits to main since this release
3c4c143

💥 Breaking changes

  • Breaking: Replaced global bootstrap and cached environment mutation with
    AppRC.resolve(), ResolveOptions, and ResolvedConfig.build().
    Affected: Applications using bootstrap, cache/result helpers, or constructing
    settings after implicit environment loading.
    Migration: Resolve per invocation, build registered sections or bundles from
    the snapshot, and use reload_from() for managed-source reloads. Use explicit
    export_environment() only for environment-only dependencies. Custom bundle
    factories need explicitly resolved child injection.
  • Breaking: Removed .kit, .spec, declaration-owned CLI mounting, capability
    required flags, and public raw managed-write helpers.
    Affected: Existing AppRC integrations and advanced file/storage callers.
    Migration: Use .schema, .manage(), rc.cli.mount_config_cli(app, MyRC),
    and invocation storage_required=True. Missing user dotenv files are allowed;
    required field values determine readiness. Textual exports moved to rc.tui.
  • Breaking: CLI state now holds .resolved; doctor validates required fields
    and accepts arbitrary application module layouts. Selector provenance is
    shell_storage_selector.
    Affected: State factories, diagnostic consumers, and provenance comparisons.
    Migration: Replace .env_bootstrap, inspect .resolved.selection, handle
    config_invalid, and update the selector origin literal.
  • Breaking: Split packaging into apprc-core, which owns all Python modules,
    and a metadata-only apprc requiring the exact core version and terminal
    libraries, including Textual.
    Affected: Upgrades from the old wheel, minimal installs, and source installs.
    Migration: Uninstall old apprc before installing the new release, or use a
    fresh environment. Use apprc-core for no terminal dependencies, plain
    apprc instead of apprc[tui], and install the local terminal wrapper for
    terminal development. No managed filenames or registry formats changed.
  • Breaking: Generated config packages no longer provide catalogs, lazy facade
    exports, or facade stubs.
    Affected: Consumers adopting regenerated application scaffolds.
    Migration: Import sections and bundles from their leaf modules, then inspect
    MyRC.schema.owners. See the migration guide.

➕ Added

  • Public re-export annotations let downstream type checkers accept the
    documented rc.AppRC, rc.Config, and field declarations.
  • Independent immutable source snapshots, explicit environment input, deliberate
    export, atomic validated reloads, and archive-backed resource provenance.
  • Shared noninteractive manager for inspection, preview, setup, editing,
    registry operations, archive/restore, migration, and purge.
  • @AppRC.config(..., requires_storage=True) marks sections that are inactive
    without selected storage. Inspection and doctor skip validation of those
    fields while continuing to check storage-independent settings. The new
    importable-client example shows library-owned resolution without caller setup.
  • Matching-distribution generation and isolated pip checks for both wheels and
    source archives, package ownership, wrapper removal, and old-wheel migration.

💔 Changed

  • Separated validated declarations, runtime lifecycle, persistence, shared
    operations, and terminal presentation. Package initializers contain imports
    and docstrings only; declaration dependencies are enforced by tests.
  • Rewrote the README and documentation in learning order, with fixed component
    names, connected explanation and reference tables, independent runnable
    guides, and an Examples page covering every supported application setup.
    Documentation checks execute the examples and validate local links.
  • Updated the example applications and added a two-section Python example.
    Removed the overlapping kit facade and obsolete managed-file resolver.

🔨 Fixed

  • Managed dotenv plans reject stale revisions, including a file created since
    planning. Writes use unique temporary files, clean up failed replacements,
    and serialize same-process management operations. Cross-process transactions
    remain a separate TODO.
  • Independent resolutions no longer share process-global provenance or loading
    state. Editor setup relocation no longer mutates the process environment.