Repository navigation
Conversation
|
I am preparing a separate preservation-export transaction; #140135 contains only its bounded admission prerequisite. Your activation-evidence PR touches the same control-server handler map in May I prepare an additive export-handler entry in my own isolated follow-on, preserving your activation-evidence handlers and registration order, or is there a preferred registration hook to use? The export transaction would own its authority and output evidence; callers would not supply trusted roots or digests. I will leave your branch and PR unchanged. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Adds an opt-in, read-only
activation-evidenceverb to the existing local Gatewaycontrol transport. A fleet auditor can observe the resolved webhook activation
flag for every served profile without reading credentials or reconstructing state
from configuration files that may differ from the running process.
gateway.activation_evidence_exportdefaults tofalse. An omitted or falseoption does not register the new verb and preserves the existing control verbs.
Only YAML booleans are accepted, including through the nested-key loader bridge
and config roundtrip. Invalid explicit values refuse startup. If YAML loading
fails while legacy
gateway.jsonenables the export, startup is refused ratherthan silently falling back to that enabled setting.
The generic
hermes.gateway-activation-evidence/v1snapshot contains only servedprofile identifiers,
webhookEnabled, installation/code/process identity andobservation time. Incomplete startup, reconciliation and ambiguous state refuse
the snapshot. This observes activation intent, not network connection health.
No credential traversal, configuration serialization, new network listener,
model tool, background export or model request is added. Existing local endpoint
permissions remain the access boundary; profile names and installation paths can
still reveal host layout.
Projection runs on the Gateway loop without awaits between profiles. Windows
inline pipe dispatch does not wait on its own event loop; thread dispatch uses
a bounded loop hop. Snapshot exceptions are sanitized at the RPC boundary. The
optional module client validates the snapshot and publishes to a new external
file without overwriting an existing destination. Product-specific proof-contract
adaptation stays outside Hermes.
Related Issue
New proposal; no existing issue is claimed as fixed. Searched existing issues and
PRs for the exact verb and option, then checked the upstream source before posting.
Type of Change
Changes Made
gateway/activation_evidence.py: allowlisted in-memory projection, boundedcontrol handler, strict response validation and non-overwriting export client.
gateway/config.pyandgateway/config_loader.py: disabled default, strictboolean validation, presence-based precedence, serialization and safe refusal
of enabled legacy fallback after YAML failure.
gateway/run_bootstrap.py: conditional control registration; no facade growth.tests/gateway/test_activation_evidence.py: 17 behavior cases using actualconfig classes, YAML loading, control registration and Windows named pipes.
cli-config.yaml.exampleand developer documentation: opt-in and contract.How to Test
Use the repository's disposable test environment and canonical runner:
identifystill answers andactivation-evidenceis absent. Set the option to true and restart a disposableGateway to expose the new verb.
the change. Reconciliation or a missing resolved profile must refuse it.
file must not re-enable an opt-in from an existing legacy
gateway.json.Fresh local Windows x64 / Python 3.14.7 verification on upstream base
3bdb82d6ec4bb1dfb6b7f5a9306d79a7cb6ad3df:file retries disabled.
scripts/check: 12 checks passed, with no blocking or advisory health findings.The one documented broad catch is the RPC sanitization boundary.
git diff --checkpassed.Earlier verification on the preceding upstream base passed 124 scoped tests
with 20 POSIX/Linux cases skipped. A v0.22.0 backport was separately exercised
through five real CLI startup cases in synthetic homes: omitted, false, true,
invalid boolean and malformed YAML with an enabled legacy setting. Successful
starts served 20 synthetic profiles and exited cleanly; enabled export was
accepted by an external identity-checking consumer.
These are scoped local results, not an upstream CI result. Full repository tests,
Linux/macOS execution, full CLI lifecycle on the current main base, and real
messaging connections are not claimed. The cross-platform thread path and
non-disclosure canary were also exercised in the isolated transport qualification.
Checklist
cli-config.yaml.example.Linux/macOS execution remains unverified.
AI-assisted implementation and executed local verification. Submitted as a draft
for maintainer review; no merge or runtime installation is requested by this PR.