Skip to content

docs: stamp the OpenClaw fixture corpus with its source version - #24

Merged
bradcypert merged 1 commit into
mainfrom
brad/dno-960-openclaw-fixture-provenance
Sep 1, 2026
Merged

docs: stamp the OpenClaw fixture corpus with its source version#24
bradcypert merged 1 commit into
mainfrom
brad/dno-960-openclaw-fixture-provenance

Conversation

@bradcypert

@bradcypert bradcypert commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of DNO-960.

Why

Nothing recorded which OpenClaw build the agenthookstest/fixtures/openclaw/ frames were captured from, so the version our decoder is actually tested against was unknowable from the repo.

They are from 2026.6.34 (the DNO-950 spike). 2026.7.1-2 is what installs today, so the corpus is already behind — which is exactly the kind of drift that was invisible before.

OpenClaw doesn't version its plugin API independently of OpenClaw itself, so the supported range is whatever we've actually qualified, and that's pinned by this corpus rather than by anything in codec_openclaw.go.

What's here

A README recording:

  • the source version and capture environment
  • what each frame covers, including why after_tool_call_blocked.json exists separately
  • the ctx.runId stability that Gram's canonicalAgentTurnID depends on — if a future OpenClaw build breaks it, turn correlation degrades silently rather than erroring, so it's worth checking explicitly when re-recording
  • the two capture preconditions that fail silently: allowConversationAccess (without it half the corpus is missing), and the embedded runtime vs the claude-cli harness (under which the tool and LLM hooks never fire at all)

Docs only — no code changes.

The customer-facing side of both preconditions is in the Gram repo at docs/runbooks/openclaw-install.md (speakeasy-api/gram#5929).

🤖 Generated with Claude Code

https://claude.ai/code/session_01TiJy9DrFpsmnD2vEkDHKNv


Summary by cubic

Supports DNO-960's version-pin policy by recording the OpenClaw build the agenthookstest/fixtures/openclaw/ corpus was captured from, which was previously unknowable from the repo. The frames come from 2026.6.34; 2026.7.1-2 installs today, so the corpus is already behind — the drift this change makes visible. Docs only; no code changes.

  • Re-recording requires allowConversationAccess: true and the embedded runtime; the claude-cli harness never fires the tool and LLM hooks.
  • The ctx.runId stability across hooks is what Gram's turn correlation depends on, and breaking it degrades silently rather than erroring.

Written for commit c9487ef. Summary will update on new commits.

Review in cubic

Nothing recorded which OpenClaw build these frames came from, so the
version we actually support was unknowable from the repo. They are from
2026.6.34 (the DNO-950 spike); 2026.7.1-2 is what installs today, so the
corpus is already behind.

Also records the two capture preconditions that fail silently —
allowConversationAccess, and the embedded runtime vs the claude-cli
harness — plus the ctx.runId stability that Gram's turn correlation
depends on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiJy9DrFpsmnD2vEkDHKNv
@bradcypert
bradcypert requested a review from a team as a code owner September 1, 2026 13:49
@linear-code

linear-code Bot commented Sep 1, 2026

Copy link
Copy Markdown

DNO-960

@cubic-dev-ai cubic-dev-ai Bot 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.

No issues found across 1 file

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

@bradcypert
bradcypert merged commit 69ca7ec into main Sep 1, 2026
8 checks passed
@bradcypert
bradcypert deleted the brad/dno-960-openclaw-fixture-provenance branch September 1, 2026 14:36
Thegreatsura pushed a commit to Thegreatsura/gram that referenced this pull request Sep 2, 2026
…peakeasy-api#5933)

Closes DNO-960. Split from speakeasy-api#5929 so nothing here shares a rollback fate
with the schema change.

## Why

We ship an OpenClaw observability package but never told anyone how to
install it. The generated ZIP README had sections for Claude Code,
Cursor, Codex and OpenCode, and nothing for OpenClaw.

There was also no runbook for the two things that silently break an
OpenClaw install — both of which produce a *partly* working state rather
than an obvious failure, which is the worst kind.

## What changed

- **Generated package README**: an OpenClaw install section — the
directory install, `--force` when replacing, the required
`allowConversationAccess` block, the Gateway restart, and the coverage
caveat
- **`docs/runbooks/openclaw-install.md`**: laptop and server/CI install
paths, verification, enforcement semantics, version-pin policy, and the
operational gotchas from the DNO-950 spike
- **`docs/plugins/overview.md`**: OpenClaw listed alongside the other
observability packages and in the `downloadObservabilityPlugin` enum

## The two traps the runbook exists for

1. **`allowConversationAccess`.** Without it the conversation hooks
silently never fire — no prompts, no assistant responses, no usage —
while tool hooks keep working. A half-configured install looks partly
fine.
2. **The harness split.** When a model routes through the Claude CLI
harness (`agentRuntime: claude-cli`, which `openclaw models auth login`
writes *by default* when a claude-cli profile exists), OpenClaw
delegates the model and tool loop out-of-process and its tool/LLM hooks
never fire. Those sessions are still covered — by our Claude Code hooks
— so this is complementary coverage rather than a hole, but a customer
in that mode will otherwise think the integration is broken.

## Notes

- `generate.go` is a server implementation file, but the change is
purely the customer-facing install text, so it belongs with the runbook
rather than the feature PR.
- No `hooksGeneratorVersion` bump needed: the README is not part of the
rendered hook-plugin subtree that `check-generator-versions` diffs.
Confirmed by rendering `export-hook-plugin -published` and checking the
file list.
- The runbook records that our fixtures were captured from OpenClaw
2026.6.34 while 2026.7.1-2 is what installs today, and documents the
qualification procedure for that gap. The fixture-side half is
speakeasy-api/agenthooks#24.
- Deliberately no nightly canary against OpenClaw `latest`: it would
page on OpenClaw's release cadence and registry flakes without telling
us what we actually support — the same reasoning that keeps the LiteLLM
real-proxy suite on `workflow_dispatch`.

## Related PRs

Independent — all three branch from `main`, no stacking:

- speakeasy-api#5929 — `feat:` source alias and turn correlation
- speakeasy-api#5932 — `mig:` the materialized-view change

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01TiJy9DrFpsmnD2vEkDHKNv

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds OpenClaw install docs for the observability plugin — the generated
ZIP README now has an OpenClaw section, and a new runbook covers laptop
and server/CI installs. Two configuration states silently break coverage
without any error, and both are now documented.

- The README's OpenClaw section is generated only when a hooks API key
exists, so it never describes files that aren't in the ZIP.
- The runbook details the two traps: missing `allowConversationAccess`
drops prompt and usage capture while tool hooks keep working, and the
Claude CLI harness routes sessions through Claude Code hooks, which
capture them only if those hooks are also deployed on the machine.
- Documents how coverage depends on model-auth mode, the enforcement
timeout budgets, the version-pin qualification procedure, and that the
hooks binary is fetched from the org's Gram server rather than GitHub.
- Adds an OpenClaw package-format section in
`docs/plugins/package-format.md`, and lists OpenClaw in
`docs/plugins/overview.md`, the `downloadObservabilityPlugin` enum, and
the observability slug table in `docs/plugins/publishing.md`.
- Closes DNO-960.

<sup>Written for commit 024520e.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/speakeasy-api/gram/pull/5933?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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