Skip to content

Wire the action job path and demo-level E2E check - #566

Open
aimable100 wants to merge 16 commits into
feat/gha-holder-shimfrom
feat/gha-action-e2e
Open

Wire the action job path and demo-level E2E check#566
aimable100 wants to merge 16 commits into
feat/gha-holder-shimfrom
feat/gha-action-e2e

Conversation

@aimable100

Copy link
Copy Markdown
Collaborator

Summary

  • The action now requests OIDC, infers github-triage from an issues event, calls /v1/exchange, and delivers the warrant into the holder. mcp_config still has only the socket path and gateway URL.
  • Exchange leaves add_comment body free (Pattern("*")) so the holder can bind the exact body per call.
  • run_agent_table replays the isolated-gateway worker from tenuo-github-agentic-demo: allowed get/comment, different issue, GitLost, Gemini dispatch, Clinejection, unsafe path, workflow edit, omitted envelope, no GITHUB_TOKEN.

Test plan

  • cd github-actions && python -m pytest -q (50 passed), including test_oidc_exchange_holder_and_demo_scenarios
  • Live comment on a throwaway repo still needs a reachable gateway with an in-memory App JWT on the operator machine (not this PR)

…mo scenarios.

The job infers github-triage from an issues event, exchanges the OIDC token, and delivers the warrant into the holder. The check table matches the isolated-gateway worker: allowed comment, cross-repo, tripwires, no envelope, no GitHub token.
… issue.

The harness token stays in the gateway. The agent table still runs the demo denials, then the test checks that the authorized comment exists on the disposable issue.
…y hash.

The socket path includes the run id so a later job cannot reuse it. Exchange applies the comment-body size CEL and the leaf binds the exact digest. Package tests now run on every pull request.
…tack.

The action now posts one /v1/exchange model with holder proof, decodes the returned stack, and tears the holder down in a JavaScript post step so Cloud and self-hosted stay on the same client path.
Send task_binding without runner-supplied assurance, sign the shared compact commitment, and install the compatible Tenuo wheel on a clean runner.
--require-hashes was failing on SecretStorage because the lock was compiled for macOS only, which skipped the Tenuo wheel install in CI.
Clean-runner tests now install from vendor/ in a pristine venv, and conformance reads Cloud's ci_exchange_v1.json fixture instead of a second copy of the vectors.
The holder now grants through tenuo-core and marks the leaf terminal. Parent-only envelopes stay for signed denials, but the gateway refuses an allow unless the presented warrant is terminal and the comment digest matches the body it would post.
…all GitHub without a PAT.

The concierge box loads app.pem from the mount, signs an App JWT, and mints an installation token in memory. Doctor, job summary, and a reusable agent workflow land in the same package so a partner can prove the install after the first comment.
Doctor already treats a 503 as a failed install. This makes that probe mean the receipt key and App JWT work, not only that the process started.
…ting a PEM.

The command writes receipt.pem, copies a validated App key to app.pem, and prints only public hex. Existing mount files stay unless --force.
Compose no longer needs a local maturin artifact. linux/amd64 on Trixie matches the PyPI manylinux wheel; an optional file in docker/wheels/ still overrides.
--gateway-only checks /health, /ready, and fail-closed /v1/call. Audience and exchange probes wait until a policy is issued.
The command loads the gateway config, remaps --mount over the compose path, and runs the same self-test as /ready. It prints role and app_id, never a PEM.
…stMCP 3.

The live box died on **kwargs tool registration. Catalog argument names are registered instead, fastmcp stays below 4, and the healthcheck probes /ready rather than /health.
Pin the action as four fields (gateway_url, exchange_url, audience,
trusted_roots), resolve the action root from the script so a SHA checkout
works, and keep a /v1/exchange integration test for stack, leaf, one
GitHub call, root trust, revocation, and receipts.
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