Skip to content

Release 1.0.2a1 - #43

Open
github-actions[bot] wants to merge 35 commits into
masterfrom
release-1.0.2a1
Open

github-actions[bot] wants to merge 35 commits into
masterfrom
release-1.0.2a1

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

Human review requested! This supersedes any earlier open release proposal for this repository.

JarbasAl and others added 30 commits June 16, 2023 00:48
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* feat: modernize CI to gh-automations@dev and add ACL e2e tests

- Bump hivemind_bus_client to >=0.4.4,<1.0.0; add ovos-bus-client>=0.0.8
- Replace legacy per-step workflows with OpenVoiceOS/gh-automations@dev
  reusable workflows (build-tests, license-check, publish-alpha,
  publish-stable, conventional-label); remove obsolete dev2master and
  split publish_*.yml
- Add tests/e2e/test_acl.py + conftest.py: allowed_types denial
  (ACL_DISALLOWED_TYPE), skill-blacklist injection
  (assert_session_blacklists_injected), and xfail default-session-id
  defence-in-depth test; pin hivescope@fix/acl-resolve-user
- Verified: 2 passed, 1 xfailed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: pin full policy stack for e2e ACL tests

Install hivescope==0.2.2a1, hivemind-plugin-manager==0.6.0a1,
hivemind-ovos-agent-plugin==0.2.0a1, and hivemind-core from
feat/policy-chain-runner (git pin until #89 merges) so the
MessageTypeACLPolicy + OVOSAgentPolicy admission chain is available
in CI. Local run: 2 passed, 1 xfailed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: include requirements.txt in sdist via MANIFEST.in

setup.py reads requirements.txt at build time; without MANIFEST.in the
file is absent from the sdist and the wheel build fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: exclude orjson from license check

orjson is Apache+MIT+MPL-2.0; MPL 2.0 is file-level copyleft and safe
to use as a library.  The checker flags it WeakCopyleft before the
MPL exclude-license pattern can apply.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: move pytest_plugins to root conftest.py

pytest no longer allows pytest_plugins declarations in non-top-level
conftest files.  Move the hivescope fixture registration to a root
conftest.py so collection succeeds on all Python versions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: fix orjson license exclude — plain name not regex

pip-licenses --ignore-packages takes exact package names, not a regex
pattern; strip the anchors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: use warn_only for license check — orjson MPL-2.0 transitive dep

orjson ships Apache+MIT+MPL-2.0; the pilosus checker categorises it
WeakCopyleft before the exclude-license MPL pattern fires.  MPL-2.0 is
file-level copyleft and safe as a library dep.  Use warn_only so the
check reports but does not block the merge.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(e2e): add BRIDGE-1 conformance suite + XPASS warning; pin hivescope==0.3.0a1

* fix: depend on ovos-spec-tools for SESSION-1 §4 conformant lang handling (no pt-PT->pt normalization)

* fix(deps): bump ovos-bus-client to 1.x (matches the hivemind stack; spec-tools lang handling)

* test(bridge1): anchor lang propagation expectation to serialized session (§4 tests bridge fidelity, not client canonicalization)

* ci: pin hivemind-core==4.3.0a2 (drop the policy-chain-runner branch pin; #89 merged)

* build: migrate to pyproject.toml (dynamic version from version.py); set license Apache-2.0

* docs: zero-to-hero docs + expanded README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Dependencies / packaging:
- consolidate requirements.txt into pyproject [project.dependencies]; drop
  requirements.txt + MANIFEST.in (pyproject is the single source of truth)
- bump the whole graph to the bus-client 2.x stack via prerelease floor pins
  (no --pre): hivemind-bus-client>=0.9.2a1, ovos-bus-client>=2.0.0a3,
  ovos-spec-tools>=0.8.0a1, hivemind-presence>=0.0.2a2
- rename the test extra to [e2e] (hivescope>=0.5.2a1, hivemind-core>=4.6.2a1,
  policy plugins); keep a [test] alias and add a [license] extra

Test layout:
- consolidate to a single tests/ directory; drop the stale test/ dir and the
  redundant license_tests.py (covered by the shared license-check workflow)
- remove dead importlib/skipif machinery from the bridge conformance test
  (the policy stack is now a hard [e2e] dependency)
- add tests/e2e/test_cli_client.py: boot a real hivemind-core master in-process
  over hivescope's loopback WebSocket and drive the real JarbasCliTerminal over a
  real HiveMessageBusClient; stdin/stdout I/O is mocked (no TTY, loopback only)

CI:
- build_tests installs the [e2e] extra instead of pre_install_pip pins
- wire missing shared gh-automations workflows @dev: lint, coverage, pip_audit,
  release_preview, repo_health

Docs:
- refresh README (install-from-source, bus-client 2.x note, testing) and add
  docs/development.md; drop the stale lowercase readme.md
- fix bare except in __main__.py; add .gitignore and untrack committed pyc

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
docs/architecture.md:
- "destination: hive" does not make the client route upstream. Nothing
  branches on it; HiveMessageBusClient.emit sends every BUS message upstream.

docs/usage.md, docs/configuration.md:
- piped input does not terminate cleanly. The reader loop is
  "while True: input()" with no EOFError handling, so EOF ends in a traceback.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…p stale bus-client cap (#38)

Bumps the hivescope e2e floor to >=0.8.0a1 and syncs the vendored
tests/e2e/test_bridge1_conformance.py to the shipped session model:
hivemind-core >=4.13.18a1 NATs a non-admin's declared session_id to
conn_nonce:declared before it reaches the bus, so the inbound test now
checks session CONTENTS via assert_session_inbound_preserved (no
session_id) and the NAT itself via the new assert_session_id_natted
helper (hivescope 0.8.0a1).

e2e conformance: 8 passed, 1 skipped, 1 xpassed (was failing
test_session_inbound_preserved on the old expected_session shape).
configuration.md said JarbasCursesTerminal is 'silently aliased' to
JarbasCliTerminal when curses can't be imported. hivemind_cli_terminal/__init__.py
prints 'WARNING: curses interface not available' at import time in that case
(confirmed on origin/dev) - troubleshooting.md already documents this correctly,
this was the one inconsistent file.
JarbasAl and others added 5 commits September 7, 2026 16:21
A `conftest.py` at the repository ROOT makes pytest put the root on
`sys.path`. The root carries a second copy of `hivemind_cli_terminal`, and
that copy wins the import, so `build_tests` installs a wheel it never tests
and cannot detect a packaging defect.

The root conftest held two things. `pytest_plugins` cannot move down, because
pytest refuses that key in a non-top-level conftest, so hivescope's fixtures
now load through `-p hivescope.pytest_fixtures` in `addopts`. That is the same
plugin, loaded the same way, with no file at the root. The
`pytest_terminal_summary` hook needs no top-level conftest and moves into
`tests/` unchanged.

Measured on dev 0a712e3, with the wheel built by `uv build` and installed
non-editable with the `e2e` extra, which is what both workflows pass. The
instrument prepends `raise ImportError(...)` to the WORKING TREE copy of
`hivemind_cli_terminal/__init__.py` and changes nothing else, so a green run
proves the wheel was imported. Path `tests/`, which is what `build_tests` and
`coverage` both pass:

    root conftest, clean          19 passed, 1 skipped, 1 xfailed, 1 xpassed
    root conftest, tree poisoned  1 error during collection
    addopts, clean                19 passed, 1 skipped, 1 xfailed, 1 xpassed
    addopts, tree poisoned        19 passed, 1 skipped, 1 xfailed, 1 xpassed

The counts are identical, which is the control for the fixtures: this suite is
end to end and every cell needs hivescope's hub, so a plugin that failed to
load could not leave 19 passing. The hook has its own control in the same
output: the suite holds a real xpass, and the "XPASS - flip these xfail
markers" banner still prints after the move.

Co-authored-by: JarbasAi <jarbasai@mailfence.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 855d47cf-2545-49c7-9a27-ea4dc0e9c618

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants