Skip to content

Wire tool-manifest (S24) observe-only - #52

Merged
im-tyler merged 3 commits into
mainfrom
claude/w4-tool-manifest-wiring
Oct 4, 2026
Merged

im-tyler merged 3 commits into
mainfrom
claude/w4-tool-manifest-wiring

Conversation

@im-tyler

@im-tyler im-tyler commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Changes

  • teploy-ship tool validate <manifest.json> [--grant <json|file>] [--json]: read-only dry run (validateManifest + effectivePermissions with an admin-entered grant, excess reported, exit 1 if invalid). Persists nothing. No grant means nothing granted.
  • src/tool-manifest-shadow.ts, hooked into executeAction (agent.ts, shared by live and durable loops): SHIP_TOOL_MANIFEST=shadow|on (default off) runs conformanceChecks on every executed action and appends findings to tool-manifest-shadow.jsonl (SHIP_TOOL_MANIFEST_SHADOW_FILE). on also logs to stderr. Never blocks, quarantines or alters a call. Manifest comes from SHIP_TOOL_MANIFEST_FILE; none configured means nothing recorded; a bad one records one error record.
  • SHIP_EVENT_ENVELOPE=on (default off): run webhooks gain two additive headers X-Teploy-Event (signed EventEnvelope: eventId = delivery id, cursor = event_seq, data.payloadSha256 binds the body) and X-Teploy-Event-Signature. Body and all existing headers unchanged. No envelope without a secret or an event_seq.
  • examples/http-client.mjs: verifyEvent port + EventDedupe; docs/HTTP_CLIENT.md: event verification section.

Checks

  • lint clean; build clean; node --test dist/**/*.test.js: 1997 pass, 0 fail (14 new in src/tool-manifest-wiring.test.ts); scripts/http-client.test.mjs 1 pass.
  • Default-off byte identity: golden headers/body built independently of the new code; asserted equal (incl. header order) for flag unset, explicit false, and unrecognised env value.
  • Negative controls (code broken, tests failed, restored): envelope always on (3 fail), cursor off by one (3 fail), shadow ignores off (1 fail), shadow write failure escaping (4 fail).
  • Skipped grader-sensitivity and pj-b-deploy-recovery (fixed port 8901, per wave-4 instructions); CI runs them. Web untouched.

Not verified / still open

  • Executor sees only action kind: bash/python = exec, edit/create = write. undeclared-host, secret-in-argv, secret-in-prompt cannot fire from this path until the executor/credential layer reports hosts and injected secrets.
  • No requestId on run webhooks (not a reply to a client call). No web dry-run page (CLI output is the view). No live receiver tested.
  • Ship has no installed-tool registry; the manifest file is operator-supplied.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VqsBNqvaWezf1DwQrAnVgX


Generated by Claude Code

claude added 3 commits October 4, 2026 03:17
…ance shadow, flagged event envelope headers

SHIP_TOOL_MANIFEST=shadow|on records conformance findings from executeAction,
never blocking. SHIP_EVENT_ENVELOPE=on adds two signed headers to run webhooks;
off is byte-identical. http-client example gains verifyEvent/EventDedupe.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VqsBNqvaWezf1DwQrAnVgX
Keeps both the tool validate and placement shadow-report commands in cli.ts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VqsBNqvaWezf1DwQrAnVgX
@im-tyler
im-tyler merged commit bd7054e into main Oct 4, 2026
4 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.

2 participants