Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
workflow_dispatch:
inputs:
upcoming_base_cli:
description: "Optional pip requirement suffix for an upcoming build, for example ==0.4.4rc1"
description: "Optional pip requirement suffix for an upcoming build, for example ==0.5.1rc1"
required: false
type: string

Expand All @@ -29,9 +29,9 @@ jobs:
python-version: ["3.10", "3.13"]
base_cli:
- name: minimum released
spec: "==0.4.3"
spec: "==0.5.0"
- name: latest supported
spec: ">=0.4.3,<0.5"
spec: ">=0.5.0,<0.6"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
- name: Set up Python
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/published-release-assets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ jobs:
matrix:
python-version: ["3.10", "3.13"]
base_cli:
- name: minimum-0.4.3
spec: "==0.4.3"
- name: minimum-0.5.0
spec: "==0.5.0"
- name: latest-supported
spec: ">=0.4.3,<0.5"
spec: ">=0.5.0,<0.6"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
Expand Down Expand Up @@ -120,7 +120,7 @@ jobs:
run: |
{
printf 'Release tag: %s\n' "$RELEASE_TAG"
printf 'Declared Base-CLI range: base-cli>=0.4.3,<0.5\n\n'
printf 'Declared Base-CLI range: base-cli>=0.5.0,<0.6\n\n'
find release-dist/compatibility-evidence -name compatibility.txt -print -exec cat {} \;
} > release-dist/COMPATIBILITY.txt
sha256sum release-dist/*.whl release-dist/*.tar.gz release-dist/COMPATIBILITY.txt > release-dist/SHA256SUMS.txt
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and versions are tracked in the repo-root `VERSION` file.

## [Unreleased]

### Changed

- Align the reference consumer, compatibility matrix, release evidence, and
documentation with the Base-CLI 0.5.0 API line; successful telemetry spans
now assert the 0.5.0 `status=OK` lifecycle contract.

## [0.1.0] - 2026-09-02

### Added
Expand Down
26 changes: 15 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,17 @@ $ northstar --quiet status

### Install an existing release

The first immutable demo release is not published yet. The documented
from-source install above is the supported path until
[#28](https://github.com/basefoundry/base-cli-demo/issues/28) completes the
release readiness gates. After publication, this section should be restored
with the verified wheel URL, checksum, and matching `base-cli` dependency line;
do not infer a release from the source `VERSION` file.
To install the first published demo release without cloning the repository:

```bash
python -m pip install \
"https://github.com/basefoundry/base-cli-demo/releases/download/v0.1.0/base_cli_demo-0.1.0-py3-none-any.whl"
```

Verify the artifact against `SHA256SUMS.txt` on the same GitHub Release. The
published `v0.1.0` wheel depends on the released `base-cli>=0.4.3,<0.5`
API line. The current source and next demo release target the
`base-cli>=0.5.0,<0.6` line; neither installs Base or requires a Base workspace.

The default environment is `dev`. Select another fixture environment with the
framework lifecycle option:
Expand Down Expand Up @@ -138,9 +143,8 @@ python -m pip install ".[dev]"
```

The package requires Python 3.10 or newer and pins the supported Base-CLI line
to `>=0.4.3,<0.5`. This checkout carries source version `0.1.0`; immutable
publication is tracked separately in #28, and demo release versioning remains
independent from framework versioning.
to `>=0.5.0,<0.6`. This checkout targets the next demo release after `v0.1.0`;
demo release versioning remains separate from framework versioning.

## Documentation

Expand All @@ -151,8 +155,8 @@ release. To start with a minimal consumer rather than the full demo, use the

For framework-level material, start at the
[Base-CLI repository](https://github.com/basefoundry/base-cli), its
[getting-started guide](https://github.com/basefoundry/base-cli/blob/v0.4.3/README.md#quick-start),
or the [public API reference](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/api-reference.md).
[getting-started guide](https://github.com/basefoundry/base-cli/blob/v0.5.0/README.md#quick-start),
or the [public API reference](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/api-reference.md).

## Repository shape

Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,5 @@ the complete Northstar consumer:

For the framework's complete material, start at the
[Base-CLI repository](https://github.com/basefoundry/base-cli), its
[getting-started guide](https://github.com/basefoundry/base-cli/blob/v0.4.3/README.md#quick-start),
or the [public API reference](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/api-reference.md).
[getting-started guide](https://github.com/basefoundry/base-cli/blob/v0.5.0/README.md#quick-start),
or the [public API reference](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/api-reference.md).
12 changes: 6 additions & 6 deletions docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ The demo is a consumer of the published `base-cli` package, not a source
checkout consumer. Its declared support range is visible in `pyproject.toml`:

```text
base-cli>=0.4.3,<0.5
base-cli>=0.5.0,<0.6
```

The [Compatibility workflow](../.github/workflows/compatibility.yml) builds a
wheel from this repository, installs the minimum released Base-CLI (`0.4.3`)
and the latest release in the supported `<0.5` line, then installs the demo
wheel from this repository, installs the minimum released Base-CLI (`0.5.0`)
and the latest release in the supported `<0.6` line, then installs the demo
wheel without dependencies before running the tests. It covers Python 3.10
and 3.13, the ends of the supported interpreter range used by this repository.

Expand All @@ -20,16 +20,16 @@ quickstart appear healthy.

The update policy is intentionally explicit:

- `0.4.3` is the minimum compatibility floor and changes only with a support
- `0.5.0` is the minimum compatibility floor and changes only with a support
decision.
- `<0.5` keeps the demo on the released 0.4 API line until a future issue
- `<0.6` keeps the demo on the released 0.5 API line until a future issue
evaluates the next minor API boundary.
- A pull request or release should update the range, tests, and this document
together when the supported Base-CLI line changes.

## Upcoming builds

Run the workflow manually and provide a pip requirement suffix such as
`==0.4.4rc1` in the `upcoming_base_cli` input. The `upcoming` job is explicitly
`==0.5.1rc1` in the `upcoming_base_cli` input. The `upcoming` job is explicitly
non-blocking, so it provides early compatibility evidence without turning an
unreleased framework build into the supported release gate.
8 changes: 4 additions & 4 deletions docs/learning-path.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,10 @@ Open `src/base_cli_demo/cli.py` while following the examples:
repository conventions mandatory.

For deeper framework context, continue with the Base-CLI
[API reference](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/api-reference.md),
[consumer profiles](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/consumer-profiles.md),
[output contracts](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/output-contracts.md),
[JSON contracts](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/json-contracts.md),
[API reference](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/api-reference.md),
[consumer profiles](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/consumer-profiles.md),
[output contracts](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/output-contracts.md),
[JSON contracts](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/json-contracts.md),
and [testing guide](https://github.com/basefoundry/base-cli/blob/main/docs/testing.md).

## Current behavior and future scope
Expand Down
3 changes: 3 additions & 0 deletions docs/optional-integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ Without the extra, the command reports `telemetry=unavailable (install
records the span in an in-memory exporter and prints its name/status; it does
not attach argv, configuration, paths, or secrets.

Successful invocations report `status=OK`; failed invocations report an error
status while preserving the command's primary exit result.

The focused tests run in both modes: the normal CI job exercises the minimal
fallbacks, while the optional-integration CI job installs all three extras and
exercises the enabled adapters.
16 changes: 8 additions & 8 deletions docs/should-i-use-base-cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

## Status and compatibility

As of this guide, the newest published Base-CLI release is `0.4.3`; the package
is pre-1.0 and classified as Beta. The demo currently tests the released
`>=0.4.3,<0.5` line. This is not a promise that every future pre-1.0 minor line
As of this guide, the target Base-CLI release is `0.5.0`; the package is pre-1.0
and classified as Beta. The demo tests the released `>=0.5.0,<0.6` line. This
is not a promise that every future pre-1.0 minor line
is compatible: Base-CLI's published policy treats patch releases as compatible
and allows a minor release before 1.0 to be a compatibility boundary. Read the
[API stability policy](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/api-stability.md)
and [migration notes](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/migrations.md)
[API stability policy](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/api-stability.md)
and [migration notes](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/migrations.md)
when changing the dependency range. The demo's lockfile records a reproducible
resolved environment; readers moving to the 0.5 line should also read the
[0.5 migration notes](https://github.com/basefoundry/base-cli/blob/main/docs/migration-0.5.md).
Expand Down Expand Up @@ -50,8 +50,8 @@ and domain policy, but its entry point and tests now follow Base-CLI's
invocation model. The consuming team must maintain its supported dependency
range, lock or otherwise reproduce the environment, and run compatibility
tests when upgrading. Before 1.0, a minor framework upgrade may require a
compatibility review or code changes; this demo's `<0.5` bound deliberately
does not follow a future 0.5 line automatically.
compatibility review or code changes; this demo's `<0.6` bound deliberately
does not follow a future 0.6 line automatically.

## Alternatives and trade-offs

Expand All @@ -63,7 +63,7 @@ does not follow a future 0.5 line automatically.
| Base-CLI with Click or Typer | A shared lifecycle and documented automation/output boundary around a familiar parser. | One more dependency, an integration model to learn, and compatibility work as the framework evolves. |

For the parser-focused comparison maintained by the framework project, see its
[framework choice guide](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/framework-choice.md).
[framework choice guide](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/framework-choice.md).
For primary references, see the official
[argparse documentation](https://docs.python.org/3/library/argparse.html),
[Click documentation](https://click.palletsprojects.com/), and
Expand Down
4 changes: 2 additions & 2 deletions docs/use-in-your-project.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ invocation lifecycle.
Install the released framework line used by this demo:

```bash
python -m pip install "base-cli>=0.4.3,<0.5" "click>=8.1,<8.6"
python -m pip install "base-cli>=0.5.0,<0.6" "click>=8.1,<8.6"
```

Save this as `hello.py`:
Expand Down Expand Up @@ -48,5 +48,5 @@ consumer-owned configuration, and structured output.
The `App` and `attach` calls establish the framework boundary; the Click
function remains your command. See the framework's
[consumer quickstart](https://github.com/basefoundry/base-cli/blob/main/docs/consumer-quickstart.md)
and [API reference](https://github.com/basefoundry/base-cli/blob/v0.4.3/docs/api-reference.md)
and [API reference](https://github.com/basefoundry/base-cli/blob/v0.5.0/docs/api-reference.md)
for the public interfaces.
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description = "Reference consumer and learning application for the base-cli fram
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"base-cli>=0.4.3,<0.5",
"base-cli>=0.5.0,<0.6",
"click>=8.1,<8.6",
]

Expand All @@ -26,7 +26,7 @@ rich = [
"rich>=13.7,<15",
]
yaml = [
"base-cli[yaml]>=0.4.3,<0.5",
"base-cli[yaml]>=0.5.0,<0.6",
]
telemetry = [
"opentelemetry-api>=1.24,<2",
Expand Down
2 changes: 1 addition & 1 deletion tests/test_documentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def test_documented_dependency_windows_match_project_metadata() -> None:
metadata = Path("pyproject.toml").read_text(encoding="utf-8")
starter = Path("docs/use-in-your-project.md").read_text(encoding="utf-8")

for requirement in ('"base-cli>=0.4.3,<0.5"', '"click>=8.1,<8.6"'):
for requirement in ('"base-cli>=0.5.0,<0.6"', '"click>=8.1,<8.6"'):
assert requirement in metadata
assert requirement.strip('"') in starter

Expand Down
2 changes: 1 addition & 1 deletion tests/test_optional_scenarios.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def test_telemetry_sdk_records_the_base_cli_lifecycle_span(tmp_path: Path) -> No
assert result.returncode == 0, result.stderr
assert "recorded_spans=1" in result.stdout
assert "span=base_cli.run" in result.stdout
assert "status=UNSET" in result.stdout
assert "status=OK" in result.stdout


def test_rich_human_renderer_runs_on_a_real_terminal(tmp_path: Path) -> None:
Expand Down
10 changes: 5 additions & 5 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading