Skip to content

feat(examples): add reproducible industrial presenter walkthrough - #327

Merged
carloshvp merged 2 commits into
mainfrom
industrial-presenter-demo
Oct 17, 2026
Merged

carloshvp merged 2 commits into
mainfrom
industrial-presenter-demo

Conversation

@carloshvp

@carloshvp carloshvp commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

The industrial example currently needs three terminals and manual service cleanup. This adds a reproducible, presenter-controlled walkthrough showing why an in-envelope motion still needs workflow authorization.

python present.py starts local cMCP and the simulated controller, then advances through six screens with five Enter presses: mission, undeclared-workflow denial, declared-workflow authorization, session close and service shutdown, offline verification, and rejection of a tampered copy. The controller's measured motion-request counter stays 0 for the denied request and becomes 1 for the authorized request. Every state-read/motion pair stays together so presenter pauses do not weaken the five-second token expiry.

  • Add a complete, hashed Python 3.11 release lock, a timed script, retained logs and fresh evidence directories.
  • Stop only launcher-owned processes, including on interruption, closed input and partial startup failure; refuse occupied ports and support immediate reruns.
  • Verify saved TRACE and controller receipts after shutdown, requiring a receipt before reporting success.
  • Extend the existing industrial CI job with the live suite under its existing dependency-install policy. Preserve the original three-scenario runner and the policy, catalog, manifest and signed fixtures.

Reproduce this PR before merge:

git clone --branch industrial-presenter-demo https://github.com/agentrust-io/integrations.git
cd integrations/examples/industrial-embodied-ai
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install --require-hashes -r requirements-presenter.txt
python present.py --auto
python present.py

Validation on macOS with Python 3.11.12 and a fresh environment installed from the hash lock: 22 unit tests, five live tests, committed artifact validation, Ruff and local documentation links passed. Live tests cover two fresh runs, both first pauses beyond five seconds, offline verification with socket operations forbidden, altered/missing evidence, the original three-path runner, Ctrl+C, EOF and partial startup cleanup. The Linux industrial CI job also passed all 22 unit tests, five live tests, and committed artifact validation.

Evidence remains explicitly software-only. The controller uses a public teaching key; signatures do not establish hardware provenance or physical completion. Agent Manifest validation remains offline, without manifest-to-session identity binding. Forwarding counters are diagnostic observations, not signed hardware telemetry. No frontend or robot hardware is required.

Requested and directed by @carloshvp; implemented with AI assistance.

Add a single-terminal workflow-scope demonstration with owned local services, measured motion forwarding, offline evidence verification and tamper rejection. Include a hashed release lock, a timed presenter guide, and focused unit and live CI coverage.

Signed-off-by: Carlos Hernandez <carloshvp@gmail.com>
@carloshvp
carloshvp requested review from a team and imran-siddique as code owners October 15, 2026 16:29

@imran-siddique imran-siddique left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approving 04043d9. Here, from the hash lock on Python 3.12: 22 controller tests pass and validate_artifacts.py reports 2 valid receipts. The live suite will not start on Windows (SIGINT unsupported, WinError 10013 binding 8443), which PRESENTING.md:16 already scopes to macOS and Linux; the hosted Linux job ran all 5 live tests OK. The links failure is two 503s in unchanged READMEs (alakris-authority-comparison, litzki-systems-sovp), and both URLs return 200 now, so a rerun should clear it.

Comment thread examples/industrial-embodied-ai/verify_evidence.py

@dinakarjs dinakarjs left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Independent approval of the bounded software presenter walkthrough at 04043d9. No blocking runtime finding in this review. This does not certify robot safety, physical completion, independent controller identity, hardware provenance or a cryptographic manifest-to-session binding; PRESENTING.md correctly excludes those claims.

Linux/Python 3.12 with a fresh environment installed from requirements-presenter.txt using --require-hashes: 22 unit/controller tests pass; validate_artifacts.py verifies the committed manifest, TRACE/audit evidence and 2 teaching-controller receipts; all 5 live tests pass after clearing inherited proxy variables. The first live run had one SOCKS dependency failure in the unchanged original agent's trust_env=True client, not the new presenter client; no proxy or runtime behavior was changed. The live tests exercise fresh sessions, delayed presenter pauses, interruption, closed input, partial startup cleanup, stopped-service offline verification and tamper refusal.

I also generated a fresh standalone --auto run, stopped its services, prohibited socket creation and independently checked the original, altered and receipt-stripped evidence. Original verifies; both altered and stripped bundles refuse without partial success text on stdout. The historical committed packet is now outside the verifier freshness window in a direct unpinned-time call, so I used fresh evidence rather than weakening freshness.

Imran's nonblocking portable-coverage suggestion remains confirmed: replacing verify_evidence.verify's 'if not receipts' with False still passes all 5 test_presenter.py tests. An isolated review probe stubbing only the downstream verifier catches that mutation and, after restoration, confirms the refusal happens before the downstream function is called. Removing receipts from a real signed bundle can also be rejected by downstream integrity checks; that case alone does not isolate this guard. Please retain a portable direct verify() no-receipts test as the follow-up, independent of the Linux-only live suite.

Targeted E4/E7/E9/F lint and diff whitespace checks pass. A broader inherited lint configuration additionally reported style/executable-bit diagnostics; that broader scan is not claimed clean or an existing enforced examples gate. Temporary edits restored; worktree clean. No package publication or external service call required.

Copy link
Copy Markdown
Contributor

The nonblocking portable wrapper-test follow-up is now concrete in draft #332, based directly on your unchanged 04043d9 head and targeting this PR's branch. It adds only tests/test_verify_evidence.py: missing receipts refuse before a stubbed downstream verifier is called, the admitted twin forwards once, and downstream failure publishes no partial report. All 25 unit tests pass; the three new tests also pass without loading downstream runtime packages. Removing only the wrapper receipt-presence guard in process makes all three negative subcases fail while the other controls pass. Ruff/diff checks pass. No runtime, fixture, live-host or hardware change; please assess/integrate when convenient. My existing #327 approval remains bounded to its reviewed head.

Signed-off-by: Carlos Hernandez <carloshvp@gmail.com>
@carloshvp

Copy link
Copy Markdown
Member Author

Resolved the failing links check by syncing main into this branch at d3801b7.

The latest failed attempt was two HTTP 404 references to agentrust-io/examples/issues/89, in docs/ecosystem-evaluation-2026-08-24.md and examples/agentic-commerce-accountability/released_ucp/README.md. Both files were unchanged by the presenter implementation. Their fix had already landed in #331 (4949067), so the branch update brings in that reviewed fix without modifying the presenter code or weakening link checking.

The fresh link-check run passes on d3801b7b702e3c336aaf2c1ca5dbe19aa18ec340. After the base sync, all 22 unit tests, five live tests and committed artifact validation also pass locally. Other fresh CI checks are still completing; no failures are currently reported. Existing review approvals refer to the earlier 04043d9 head.

@carloshvp
carloshvp merged commit 9aec8af into main Oct 17, 2026
56 checks passed
@carloshvp
carloshvp deleted the industrial-presenter-demo branch October 17, 2026 09:40
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.

3 participants