Skip to content

[PATCH] chore: merge develop to main - #74

Merged
alain-sv merged 41 commits into
mainfrom
release/patch-20260702-162458
Jul 2, 2026
Merged

[PATCH] chore: merge develop to main#74
alain-sv merged 41 commits into
mainfrom
release/patch-20260702-162458

Conversation

@alain-sv

@alain-sv alain-sv commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Release PR created by just ship patch. Merge this PR after required checks pass; the publish workflow will bump the patch version from the merge commit token.

alain-sv and others added 30 commits May 13, 2026 14:20
Pin all uses of actions/checkout@v6 and actions/setup-python@v6 to
their commit SHAs across every workflow, closing the remaining
floating-tag attack surface.

- actions/checkout  → de0fac2e (v6)
- actions/setup-python → a309ff8b (v6)
…facts (#46)

Prevents parallel matrix jobs racing on the same Actions cache
reservation. Also records two CI tooling facts in AGENTS.md.
* feat: add supervaizer v2 contract primitives

* feat: add supervaizer v2 a2a action endpoint

* feat: expose supervaizer v2 registration in a2a card

* feat: add supervaizer v2 action decorator

* docs: update supervaizer v2 changelog

* precommit fix

* refactor: move controller api version to contracts

* minor

* fix: scope v2 action handlers by agent

* feat: guard supervaizer v2 agent identity

* feat: include v2 job state in sync result

* feat: add v2 resource form fields

* feat: add v2 resource option sources

* feat: add v2 awaiting form fields

* feat: load supervaizer v2 surfaces over a2a

* feat: expose local hello world v2 contract

* feat: add v2 job source target type

* feat: stream v2 action effects over a2a

* fix: advertise v2 push notifications as unsupported

* refactor: remove legacy dynamic choices

* feat: complete local hello world v2 hitl flow

* refactor: remove legacy job poll

* docs: refresh generated contract docs

* test: align v2 prompt editor fixture

* test: align v2 contact import fixture

* test: align v2 scenario builder fixture

* test: align v2 overview fixture

* test: align v2 campaign contact fixture

* feat: add v2 registration builder

* feat: type v2 dataset display metadata

* minor

* fix: precommit

* feat: add comprehensive documentation for SUPERVAIZER API, Admin Interface, CLI, Parameter Validation, Persistence, Protocols, and REST API

* minor

* chore: change copyright dates

from 2024-2025 to 2024-2026

* fix: harden agent model surface and v2 contract hygiene

Use modern typing in agent.py, keep server encrypted params internal,
document deterministic agent ids, tighten A2A health status rules, drop
legacy hello-world v2 input aliases, and clarify v2 contract fields.

* feat: enhance agent method validation and improve v2 action safety

- Introduced validation to reject agent methods using blocked module

  roots.- Added checks to ensure declared method paths are used in

  agent execution.- Enhanced v2 action results with replay safety

  metadata validation.- Updated changelog and documentation to reflect

  these changes.

* feat: add v2 resource import contracts

* test: align v2 contract fixtures

* minor

* fix: require auth for a2a controller

* minor
…alidation improvements

- Added optional `metadata` field to `V2CaseSnapshot` for case-level context.
- Implemented validation for Studio registration handshake to ensure API key consistency.
- Enhanced server API key handling for stability during reloads.
- Updated tests to cover new functionality and validation paths.
* docs: plan workspace agent grants

* docs: add Studio grant acceptance UX

* feat: add workspace agent authorization

* feat: add workspace binding protocol

* fix: stabilize workspace authorization

* ✨feat: add workspace auth helpers and use them in tests

* ✨feat: require workspace auth and tighten agent checks

* fix: require workspace auth for Studio A2A

* fix: harden workspace authorization checks

* fix: normalize malformed workspace auth inputs
…bility

- Added support for newline-delimited JSON logging when `SUPERVAIZER_LOG_FORMAT=json` is set.
- Updated logging configuration to allow structured logs for access-denial events.
- Enhanced `log_access_denied_api` and `log_access_denied_tailscale` functions to include structured fields.
- Added tests to verify structured logging outputs in `tests/test_common.py`.
# Conflicts:
#	docs/CHANGELOG.md
* Clean up Supervaizer lifespan shutdown

* Document Supervaizer import placement rule

* Fix lifespan cleanup test determinism

* Address lifespan shutdown review feedback

* ✨feat: rename test and assert scheduled step task

* ✨ feat: update GitNexus index counts in AGENTS.md
* Refactor Supervaizer server modules

* ✨ feat: update GitNexus index stats in AGENTS.md

* ✨docs update changelog AGENTS guidance

* ✨feat: add v2 methods, tests and license header
* Clean up Supervaizer lifespan shutdown

* Document Supervaizer import placement rule

* Fix lifespan cleanup test determinism

* Address lifespan shutdown review feedback

* ✨feat: rename test and assert scheduled step task

* ✨ feat: update GitNexus index counts in AGENTS.md

* feat(v2): add agent action methods
- Updated mypy hook to use project-specific configuration for consistency with uv.lock.
- Improved validation for v2_registration and v2_method_declarations in Agent class to ensure proper type handling.
- Enhanced logging configuration to cast message records for structured logging compatibility.
Bumps [uv](https://github.com/astral-sh/uv) from 0.11.14 to 0.11.15.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.11.14...0.11.15)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.11.15
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [starlette](https://github.com/Kludex/starlette) from 0.50.0 to 1.0.1.
- [Release notes](https://github.com/Kludex/starlette/releases)
- [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md)
- [Commits](Kludex/starlette@0.50.0...1.0.1)

---
updated-dependencies:
- dependency-name: starlette
  dependency-version: 1.0.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.95.3 to 3.95.5.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](trufflesecurity/trufflehog@37b7700...d411fff)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.95.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Add 21 skill symlinks under .agents/skills/ pointing to the local
runwaize_skills_cookbook installation, covering cloud-run basics,
Pulumi migration/tooling skills (terraform, CDK, ARM, ESC, component,
automation-api, upgrade-provider, best-practices, neo-handoff),
Google Cloud WAF pillars (security, reliability, performance,
cost-optimization, operational-excellence), google-cloud-recipe-auth,
google-cloud-networking-observability, cloudformation-to-pulumi,
package-usage, provider-upgrade, and upstream-patches.

Update AGENTS.md GitNexus index stats to reflect the current index
(6273 symbols, 11483 relationships, 281 execution flows).
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.1.0 to 8.2.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@0880764...fac544c)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@de0fac2...df4cb1c)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dependabot Bot and others added 9 commits June 20, 2026 16:06
Bumps [starlette](https://github.com/Kludex/starlette) from 1.0.1 to 1.3.1.
- [Release notes](https://github.com/Kludex/starlette/releases)
- [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md)
- [Commits](Kludex/starlette@1.0.1...1.3.1)

---
updated-dependencies:
- dependency-name: starlette
  dependency-version: 1.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [cryptography](https://github.com/pyca/cryptography) from 48.0.0 to 48.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](pyca/cryptography@48.0.0...48.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 48.0.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3 to 7.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@df4cb1c...9c091bb)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@b430933...718ea10)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.95.5 to 3.95.6.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](trufflesecurity/trufflehog@d411fff...30d5bb9)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.95.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat: add managed context SDK client

* ✨ feat: update gitn docs to use local run.cjs and paginate list_repos

* ✨ feat: add MPLv2 license headers to module and test files

* fix: address managed context review feedback
* ✨ feat(contracts): add V2ContextAssignment for context.assign

* ✨ feat(contracts): constrain context scope and document assignment semantics

Address PR #71 review: V2ContextAssignmentItem.scope is now Literal["workspace", "mission"] (matching other closed v2 vocabularies) with a ValidationError regression test, and the v2 doc gains explicit context.assign semantics: refs-not-content payload, freeze-on-pull with provenance, mandatory fetched-vs-assigned version check that fails the assignment on mismatch, and no live context reads during execution.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🐛 fix(contracts): require mission_id for mission-scoped context assignments

Address PR #71 follow-up review: a V2ContextAssignment containing scope="mission" items but no mission_id passed validation while the agent-side ContextClient.open() would have no mission context to fetch with. A model_validator now rejects that combination; workspace-only assignments still allow a null mission_id.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🐛 fix(contracts): reject whitespace-only mission_id for mission-scoped assignments

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	docs/CHANGELOG.md
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Refresh dependency floors and fix A2A route-scope test for FastAPI 0.139

⚙️ Configuration changes 🧪 Tests 📝 Documentation 🕐 10-20 Minutes

Grey Divider

AI Description

• Raise runtime and extra dependency lower bounds to newer patched releases.
• Make A2A events scope test resilient to FastAPI included-router wrappers.
• Document the dependency/security refresh and test fix in the Unreleased changelog.
Diagram

graph TD
  A["Release patch"] --> B["pyproject.toml"] --> C["FastAPI >=0.139.0"] --> D["Router wrappers"] --> E["tests/test_a2a.py"]
  B --> F["docs/CHANGELOG.md"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Name the /a2a/events route and locate it via url_path_for / route name
  • ➕ Avoids brittle structural introspection of router internals
  • ➕ Makes tests more intention-revealing (assert on named route)
  • ➖ Requires changing production route registration (route naming conventions)
  • ➖ Still may need a fallback if name changes or multiple mounts exist
2. Assert scope behavior via request outcome instead of dependency inspection
  • ➕ Black-box test aligned with user-visible authorization behavior
  • ➕ Less coupled to FastAPI internal route/dependant structures
  • ➖ Harder to guarantee you’re testing the exact dependency chain / scope guard
  • ➖ May require additional fixtures or auth plumbing to isolate read vs write scopes

Recommendation: Current approach (recursive traversal through included-router wrappers) is a pragmatic minimal change: it preserves the existing direct dependency assertion while adapting to FastAPI’s new wrapper structure. Consider route naming in a follow-up if router structure churn continues across FastAPI upgrades.

Files changed (3) +38 / -12

Tests (1) +12 / -1
test_a2a.pyTraverse nested routers when locating /a2a/events route +12/-1

Traverse nested routers when locating /a2a/events route

• Introduces a small recursive iterator helper to walk FastAPI included-router wrappers via the 'original_router' attribute. Updates the route lookup in the read-scope test to use the flattened iterator, preserving the scope assertion under FastAPI 0.139.0.

tests/test_a2a.py

Documentation (1) +15 / -0
CHANGELOG.mdAdd Unreleased notes for dependency refresh and A2A test fix +15/-0

Add Unreleased notes for dependency refresh and A2A test fix

• Adds an Unreleased entry documenting updated dependency lower bounds and a test fix required for FastAPI 0.139.0 routing wrapper behavior. Includes a brief pass/skip/fail test run summary table.

docs/CHANGELOG.md

Other (1) +11 / -11
pyproject.tomlRaise runtime and optional dependency lower bounds +11/-11

Raise runtime and optional dependency lower bounds

• Bumps runtime lower bounds for FastAPI, sse-starlette, Typer, and Uvicorn. Updates several optional dependencies in the deploy and dev extras (e.g., boto3, google-cloud-run, hatch, pytest, pytest-asyncio, ruff).

pyproject.toml

ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3919acb948

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread pyproject.toml Outdated
"google-cloud-run>=0.16.0",
"google-cloud-secret-manager>=2.28.0",
"google-cloud-run>=0.16.1",
"google-cloud-secret-manager>=2.23.0",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the Secret Manager floor at the tested version

For published supervaizer[deploy] installs that are resolved without this repository's uv.lock, this lowers the allowed google-cloud-secret-manager version from the previous >=2.28.0 to >=2.23.0 while the refreshed lock still tests 2.28.0. That means constrained environments can now run the Cloud Run secret-manager deploy path against an older, unverified client than the prior release allowed; keep the lower bound at >=2.28.0 unless 2.23.x is intentionally supported and tested.

Useful? React with 👍 / 👎.

@qodo-code-review

qodo-code-review Bot commented Jul 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 32 rules

Grey Divider


Remediation recommended

1. Unverified lowered deploy bound ✓ Resolved 🐞 Bug ☼ Reliability
Description
pyproject.toml lowers the deploy extra lower-bound for google-cloud-secret-manager to
>=2.23.0, but the repo’s lockfile still resolves google-cloud-secret-manager==2.28.0, so
CI/tests won’t validate the declared minimum supported version. This can lead to a published lower
bound that isn’t actually supported/tested for the Cloud Run deploy path.
Code

pyproject.toml[57]

+    "google-cloud-secret-manager>=2.23.0",
Relevance

⭐⭐ Medium

No historical evidence team enforces testing declared minimum versions; deps updates usually just
refresh uv.lock (e.g., PR73).

PR-#73

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR changes the minimum allowed version to >=2.23.0, but the repository lockfile still pins
google-cloud-secret-manager to 2.28.0, so the test environment does not validate the new
minimum. The deploy driver directly imports and uses secretmanager.SecretManagerServiceClient,
making this minimum-version claim relevant to runtime behavior when using the deploy extra.

pyproject.toml[51-58]
uv.lock[605-620]
src/supervaizer/deploy/drivers/cloud_run.py[37-87]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pyproject.toml` declares a lower minimum version for `google-cloud-secret-manager` in the `deploy` extra than the version actually exercised by the repo lockfile, meaning the advertised lower bound is not validated by CI.

## Issue Context
- `pyproject.toml` now allows `google-cloud-secret-manager>=2.23.0` for `deploy`.
- `uv.lock` currently resolves `google-cloud-secret-manager` to `2.28.0`, so CI/test runs based on the lock won’t catch incompatibilities introduced by lowering the minimum.
- The Cloud Run deploy driver imports and uses `google.cloud.secretmanager.SecretManagerServiceClient`, so this is a real runtime path for the `deploy` extra.

## Fix Focus Areas
- pyproject.toml[51-58]
- uv.lock[605-620]
- src/supervaizer/deploy/drivers/cloud_run.py[37-87]

## Suggested fix
Choose one of:
1) Restore the previous lower bound (e.g., `>=2.28.0`) to match the version you’re actually locking/testing, or
2) Keep `>=2.23.0` but add a CI job (or a dedicated constraints/lock) that installs and runs deploy-path checks/tests against the minimum supported version set (or at least `google-cloud-secret-manager==2.23.*`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread pyproject.toml Outdated
@alain-sv
alain-sv merged commit aa523ed into main Jul 2, 2026
6 checks passed
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.

1 participant