All notable changes to the apcore-cli specification will be documented in this file.
The format is based on Keep a Changelog.
0.7.0 - 2026-04-12
- FE-12: Module Exposure Filtering — Declarative control over which discovered modules are exposed as CLI commands. Feature spec:
docs/features/exposure-filtering.md.exposesection inapcore.yamlwith three modes:all(default),include(whitelist),exclude(blacklist).- Glob-pattern matching on module IDs (e.g.,
admin.*,webhooks.*,*.sse). ExposureFilterclass withis_exposed()andfilter_modules()methods.create_cli(expose=...)parameter acceptingdictorExposureFilterinstance.list --exposure {exposed,hidden,all}filter flag.- 4-tier config precedence:
CliConfig.expose>--expose-modeCLI flag > env var >apcore.yaml. - Hidden modules remain invocable via
exec <module_id>(UX filter, not a security boundary).
- Apache 2.0 license added (
LICENSEfile). - SRS: added requirement sections for FE-10 (Init Command), FE-11 (Usability Enhancements), FE-12 (Exposure Filtering) as TODO backfill items (B-004).
- Tech Design v2.0 — Major revision:
BUILTIN_COMMANDScanonicalized as a 14-entry alphabetically sorted constant, referenced throughout.create_cli()consolidated signature (§8.2.7) is now the authoritative reference; feature specs reference it incrementally.create_cli()gainsexposeparameter for programmatic exposure filtering.
- SRS references updated from "Tech Design v1.0" to "Tech Design v2.0" throughout.
- SRS AC-1 for FR-DISP-001 updated: help output must list all 14 built-in commands from
BUILTIN_COMMANDS. - Conformance fixture
cli_parity.jsonupdated:run→exec,--json→--format json,--inputs→--input, exit code127→44, removedis_perceivablekey. - FE-11 version label corrected from "v0.7.0" to "v0.6.0" in feature overview.
0.6.0 - 2026-04-06
- Dependency bump: requires
apcore >= 0.17.1(was>= 0.15.1). Incorporates three apcore releases:- apcore 0.16.0: Execution Pipeline Strategy (
ExecutionStrategy,PipelineEngine,PipelineTrace, 11 built-in steps, preset strategies),Executor.strategyparameter,call_with_trace()/call_async_with_trace(), Config Bus enhancements (env_style,max_depth,env_prefixauto-derivation,env_map),ContextKey<T>typed accessors,ModuleAnnotations.extrafield, ACL condition handlers (register_condition(),$or/$not,async_check()). - apcore 0.17.0: Pipeline v2 declarative step metadata (
match_modules,ignore_errors,pure,timeout_ms),PipelineContext.dry_run/version_hint/executed_middlewares,StepTrace.skip_reason,safety_check→call_chain_guardrename, pipeline step reorder (middleware_before now executes before input_validation), YAML pipeline configuration. - apcore 0.17.1:
minimalexecution strategy preset (4-step pipeline),requires/providesstep dependency metadata.
- apcore 0.16.0: Execution Pipeline Strategy (
- Updated SRS, Tech Design, Project Manifest, and feature spec to reflect
apcore >= 0.17.1dependency. - Updated ADR-03 (Executor Integration) to document optional
strategyparameter andcall_with_trace()availability. - Updated SRS Execution Constraint to reference the standard 11-step pipeline and custom
ExecutionStrategysupport via pre-configured Executor.
- FE-11: Usability Enhancements — 11 new capabilities implemented across Python, TypeScript, and Rust SDKs:
--dry-runpreflight mode (§3.1) — Validates module call without executing viaExecutor.validate(). Standalonevalidatecommand also added.- System management commands (§3.2) —
health,usage,enable,disable,reload,config get/config set. Delegates tosystem.*modules; graceful no-op when unavailable. - Enhanced error output (§3.3) — Structured JSON errors with
ai_guidance,suggestion,retryable,user_fixable,details. TTY mode shows suggestion and retryable; JSON mode includes all fields. --tracepipeline visualization (§3.4) — Displays per-step execution trace viacall_with_trace().- ApprovalHandler integration (§3.5) —
--approval-timeout(configurable),--approval-token(async resume).CliApprovalHandlerclass wraps TTY prompt as standardApprovalHandlerprotocol. --streamoutput (§3.6) — JSONL streaming viaExecutor.stream()for modules withannotations.streaming=true.- Enhanced
listcommand (§3.7) —--search,--status,--annotation,--sort,--reverse,--deprecated,--depsfilters. --strategyselection (§3.8) — Choose execution pipeline:standard,internal,testing,performance,minimal. Newdescribe-pipelinecommand.- Output format extensions (§3.9) —
--format csv|yaml|jsonland--fieldsfor dot-path field selection. - Multi-level grouping (§3.10) —
cli.group_depthconfig (default: 1, max: 3). - Custom command extension point (§3.11) —
create_cli(extra_commands=[...])for downstream projects.
- New error code: Handle
CONFIG_ENV_MAP_CONFLICTfrom apcore 0.16.0. - New config keys:
cli.approval_timeout(60),cli.strategy("standard"),cli.group_depth(1). - New environment variables:
APCORE_CLI_APPROVAL_TIMEOUT,APCORE_CLI_STRATEGY,APCORE_CLI_GROUP_DEPTH.
- Schema parser: Required schema properties now correctly enforced at CLI level (was silently optional).
- Approval gate: Fixed inverted logic in annotation type guard that could crash on malformed annotations.
0.5.1 - 2026-04-03
- FR-DISP-008: Pre-populated registry support —
create_cli()accepts optionalregistryandexecutorparameters. When a pre-populated Registry is provided, filesystem discovery is skipped entirely. This enables frameworks that register modules at runtime (e.g. apflow's bridge) to generate CLI commands from their existing registry without requiring an extensions directory on disk. - Cross-language API table in tech-design §8.2.7 and core-dispatcher §4.5: Python
create_cli(registry=), TypeScriptcreateCli({ registry })viaCreateCliOptions, RustCliConfig { registry }. - Verification tests T-DISP-18 through T-DISP-20 for pre-populated registry path.
- Passing
executorwithoutregistryis a validation error (ValueError/throw).
0.5.0 - 2026-03-31
- Dependency bump: requires
apcore >= 0.15.1(was>= 0.13.0). Adds Config Bus namespace registration, canonical event type naming, Error Formatter Registry support, and simplified env var prefix convention. - Updated SRS, Tech Design, and Project Manifest to reflect
apcore >= 0.15.1dependency.
- Config Bus integration —
apcore-cliregisters namespaceapcore-cliwith env prefixAPCORE_CLIat import time viaConfig.register_namespace(). Supports unifiedapcore.yamlconfiguration in namespace mode alongside legacy flat-key mode. - Canonical event types — Spec updated to reference dot-namespaced canonical event names (
apcore.module.toggled,apcore.config.updated,apcore.module.reloaded,apcore.health.recovered) from apcore 0.15.0. SDKs should adopt these names when implementing event subscriptions. - New error codes — Handle
CONFIG_NAMESPACE_RESERVED,CONFIG_NAMESPACE_DUPLICATE,CONFIG_ENV_PREFIX_CONFLICT,CONFIG_MOUNT_ERROR,CONFIG_BIND_ERROR,ERROR_FORMATTER_DUPLICATEfrom apcore 0.15.0.
0.4.0 - 2026-03-29
- FR-DISP-007: Verbose help mode — Built-in apcore options (
--input,--yes,--large-input,--format,--sandbox) are now hidden from--helpoutput by default. Pass--help --verboseto display the full option list. Addedverboseto reserved flag names to prevent schema property collisions. - FR-SHELL-002: Universal man page generation —
build_program_man_page()generates a complete roff man page covering all registered commands (including downstream business commands).configure_man_help()adds--help --mansupport to any CLI program. Downstream projects get man pages with a single function call. - Documentation URL support —
set_docs_url()/setDocsUrl()sets a base URL for online documentation links in help footers and man pages. Documented in tech-design §8.7.6 and shell-integration §4.10.
--sandboxis now always hidden from help (not yet implemented). FR-DISP-007 updated from "five" to "four" toggled options.- Improved built-in option descriptions across all three SDKs for clarity.
- Updated
core-dispatcher.mdfeature spec: added FR-01-07 traceability entry and built-in option visibility note. - Updated
tech-design.md: documented verbose help behavior,build_program_man_page(§8.7.4), andconfigure_man_help(§8.7.5). - Updated
srs.md: added FR-DISP-007 requirement; updated FR-SHELL-002 with full-program mode and acceptance criteria. - Updated
shell-integration.mdfeature spec: added FR-06-03, §4.8 (build_program_man_page), §4.9 (configure_man_help), and verification tests T-SHELL-09 through T-SHELL-13.
0.3.0 - 2026-03-23
- Display overlay routing (§5.13) —
LazyModuleGroupnow readsmetadata["display"]["cli"]for alias and description when building the command list and routingget_command()._alias_map: built frommetadata["display"]["cli"]["alias"](with module_id fallback), enabling invocation by alias._descriptor_cache: populated during alias map build to avoid doubleregistry.get_definition()calls._alias_map_builtflag only set on successful build, allowing retry after transient registry errors.
- Display overlay in JSON output —
format_module_list(..., "json")readsmetadata["display"]["cli"]forid,description, andmetadata["display"]["tags"].
_ERROR_CODE_MAP.get(error_code, 1): guarded withisinstance(error_code, str)to preventNone-key lookup.- Dependency bump: requires
apcore-toolkit >= 0.4.0forDisplayResolver. - Updated feature specs:
core-dispatcher.md(alias map, descriptor cache),output-formatter.md(JSON branch display overlay).
TestDisplayOverlayAliasRouting(6 tests):list_commandsuses CLI alias,get_commandby alias, cache hit path, module_id fallback,build_module_commandalias and description.test_format_list_json_uses_display_overlay: JSON output uses display overlay alias/description/tags.test_format_list_json_falls_back_to_scanner_when_no_overlay: JSON output falls back to scanner values.
- Feature spec
grouped-commands.md(FE-09) — nested subcommand groups for CLI. Auto-groups by first.segment, withdisplay.cli.groupoverride. Includes 10 requirements (FR-09-01 through FR-09-10), boundary values, error handling table, and 18 verification test cases. - Tech Design v2.0 — full rewrite incorporating both §5.13 Display Overlay and Grouped CLI Commands. 3 alternative solutions with weighted comparison matrix, 8 ADRs, 5 sequence diagrams.
- Updated
core-dispatcher.md— references FE-09, documentsGroupedModuleGroupas v2.0 root group. - Updated
overview.md— added FE-09 row to feature table.
apcore-cli init module <id>— scaffolding command with--style(decorator, convention, binding) and--descriptionoptions. Generates module templates in the appropriate directory.--commands-dirCLI option — path to a convention commands directory. When set,ConventionScannerfromapcore-toolkitscans for plain functions and registers them as modules.
- 6 new tests in
tests/test_init_cmd.pycovering all three styles and options.
0.2.2 - 2026-03-22
- Rebrand: aipartnerup → aiperceivable
0.2.1 - 2026-03-19
- Schema Parser (FE-02): Help text truncation limit increased from 200 to 1000 characters (configurable via
cli.help_text_max_length) - Schema Parser (FE-02):
_extract_helpsignature updated — addedmax_length: int = 1000parameter - Schema Parser (FE-02):
schema_to_click_optionssignature updated — addedmax_help_length: int = 1000parameter - Core Dispatcher (FE-01):
build_module_commandsignature updated — addedhelp_text_max_length: int = 1000parameter - Config Resolver (FE-07): DEFAULTS dict expanded to 6 keys — added
cli.stdin_buffer_limit,cli.auto_approve,cli.help_text_max_length - Config Resolver (FE-07):
logging.leveldefault corrected from"INFO"to"WARNING"across all spec documents (tech-design, SRS, config-resolver, core-dispatcher)
cli.help_text_max_lengthconfig key (default: 1000) withAPCORE_CLI_HELP_TEXT_MAX_LENGTHenv var supportAPCORE_CLI_LOGGING_LEVELadded to tech-design environment variables table (was documented in feature spec but missing from tech-design)
- Spec chain contradiction:
logging.leveldefault was"INFO"in 5 locations but"WARNING"in core-dispatcher — now consistently"WARNING"everywhere - Spec chain contradiction:
check_approvalpseudocode passed 3 arguments but signature defined 2 — removed stalectxargument from pseudocode cli.auto_approvewas listed in config keys table but missing from DEFAULTS dict — added to both tech-design and config-resolver- core-dispatcher SRS header now includes FR-DISP-005 and FR-DISP-006
0.2.0 - 2026-03-16
- Core Dispatcher (FE-01): Added 3-tier log level precedence spec —
--log-levelflag >APCORE_CLI_LOGGING_LEVEL>APCORE_LOGGING_LEVEL>WARNING; renumberedcreate_clilogic steps accordingly - Core Dispatcher (FE-01):
register_shell_commands()call now passesprog_name=prog_name(FR-DISP-006 alignment) - Core Dispatcher (FE-01):
--log-levelaccepted choices updated:WARN→WARNING - Core Dispatcher (FE-01): Added FR-DISP-006 requirement — CLI program name resolved from
argv[0]basename with explicitprog_nameparameter override - Shell Integration (FE-06): Added
4.2 _make_function_namehelper spec with POSIX identifier conversion example - Shell Integration (FE-06): Updated all generator function signatures to include
prog_name: strparameter; documentedshlex.quote()usage in all shell directive positions (not just embedded subshell commands) - Shell Integration (FE-06): Added
4.6 register_shell_commandsspec withprog_nameparameter and closure capture semantics - Shell Integration (FE-06): Man page
.SH ENVIRONMENTsection now specifies 4 env vars includingAPCORE_CLI_LOGGING_LEVEL; updatedWARN→WARNING - Approval Gate (FE-03):
check_approvalsignature corrected — removedctx: click.Contextparameter (was not used in implementation) - Approval Gate (FE-03):
annotationsguard updated to support both dict access and attribute access - Security Manager (FE-05):
_hash_inputformula updated to includesecrets.token_bytes(16)per-invocation salt (prevents cross-invocation correlation) - Security Manager (FE-05):
_get_userextended withpwd.getpwuid()as second fallback step before env var lookup
APCORE_CLI_LOGGING_LEVELenvironment variable to CLI Reference and Environment Variables table in README (CLI-specific log level; takes priority overAPCORE_LOGGING_LEVEL)
- README:
--log-leveldefault corrected toWARNING(wasINFO); accepted values updated fromWARN→WARNING
0.1.0 - 2026-03-15
- Initial specification and design documents
- Tech Design v0.4 and v1.0
- Software Requirements Specification (SRS) v0.1
- 8 feature specifications: Core Dispatcher, Schema Parser, Approval Gate, Discovery, Security Manager, Shell Integration, Config Resolver, Output Formatter
- Project manifest with feature table and implementation order
- Idea draft with problem validation and requirement IDs
- Beginner guide (Getting Started) section in README
- GitHub repository links and SDK reference table
- Related Projects section linking to ecosystem repos
- Full CLI Reference section (global options, commands, execution options, exit codes)
- Configuration section with 4-tier precedence and environment variables
- Architecture diagram and apcore-to-CLI mapping table
- CHANGELOG.md