Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
7a61b11
refactor(flows): collapse per-flow env injection in release-smoke runner
bussyjd May 12, 2026
90b1805
fix(flows): use ERE alternation in run_step_grep / poll_step_grep pat…
bussyjd May 12, 2026
849d9b1
fix(flows): stabilize wallet check + x402-verifier readiness
bussyjd May 12, 2026
190c716
fix(flow-02): poll node-ready + eRPC /rpc instead of one-shot
bussyjd May 12, 2026
5e5d490
test(sell): align TestSellInference_Flags with --price default removal
bussyjd May 12, 2026
c3a4bba
security(frontend): digest-pin obol-stack-front-end v0.1.23
bussyjd May 12, 2026
128f544
Merge remote-tracking branch 'origin/refactor/release-smoke-env-injec…
bussyjd May 12, 2026
04613d7
Merge remote-tracking branch 'origin/fix/release-smoke-ere-alternatio…
bussyjd May 12, 2026
d5ba18e
Merge remote-tracking branch 'origin/fix/release-smoke-wallet-and-ver…
bussyjd May 12, 2026
80b17e6
Merge remote-tracking branch 'origin/fix/release-smoke-flow02-cold-st…
bussyjd May 12, 2026
756aeb5
Merge remote-tracking branch 'origin/test/sell-inference-flag-default…
bussyjd May 12, 2026
f6b0ea5
Merge remote-tracking branch 'origin/security/digest-pin-frontend-v0.…
bussyjd May 12, 2026
ca5dbc0
feat(release-smoke): require OBOL_LLM_ENDPOINT when OBOL/OBOL_FORK ga…
bussyjd May 12, 2026
0a9f063
fix(flow-10): bind anvil to 0.0.0.0 so cluster can reach host fork
bussyjd May 12, 2026
ab21211
chore(x402): bump facilitator image to obolnetwork 1.4.9 prometheus-o…
bussyjd May 12, 2026
bb2f178
fix(x402): pin x402-buyer image to sha256 digest + add anvil cluster …
bussyjd May 12, 2026
1030718
fix(release-smoke): allow locally-built x402 facilitator image
bussyjd May 12, 2026
80fbc7f
feat(release-smoke): paid Alchemy RPC + Bob top-up preflight
bussyjd May 12, 2026
5430afe
fix(release-smoke): scrub Alchemy/Infura/private-key secrets from logs
bussyjd May 12, 2026
a5816d7
fix(release-smoke): scrub drpc paid URL token from logs
bussyjd May 12, 2026
fd95dc5
fix(x402-verifier): normalize ServiceOffer network to CAIP-2 for v2 f…
bussyjd May 12, 2026
66d72c2
debug(x402-verifier): log /verify outbound body + facilitator response
bussyjd May 12, 2026
3dd7cc9
debug(flow-11): capture cluster state on step 43 paid-inference fail
bussyjd May 12, 2026
2045198
debug(x402-buyer): log CanSign DENY branches
bussyjd May 12, 2026
1efbaab
fix(defaults): rewrite tag+digest combo image pins for dev builds
bussyjd May 12, 2026
f90624e
fix(cli): redact paid-RPC tokens from 'obol network add' stdout
bussyjd May 12, 2026
5ec24f5
debug(x402-verifier): log every HandleProxy request + X-PAYMENT presence
bussyjd May 12, 2026
5764ad4
test(defaults): regression guard for tag+digest combo rewrite
bussyjd May 12, 2026
5a10fb8
fix(x402-verifier): rewrite image pins in EnsureVerifier under OBOL_D…
bussyjd May 12, 2026
6c52a67
fix(flow-14): accept remaining>=5 instead of exact 5 auths
bussyjd May 12, 2026
3cc2e7e
fix(x402): ResolveChainInfo accepts CAIP-2 ids (regression from fd95dc5)
bussyjd May 12, 2026
86588aa
fix(flow-10): drop --prune-history; it's an enable-pruning flag
bussyjd May 12, 2026
b46f5d9
fix(flow-07,flow-08): retry 402 body fetch up to 12x5s
bussyjd May 12, 2026
4082961
docs(plans): release-smoke hardening retrospective (2026-05-13)
bussyjd May 13, 2026
58dd89c
security(codeql): fix log-injection + unanchored regex alerts on PR #490
bussyjd May 13, 2026
dba5020
security(redact): collapse paid-RPC URLs to TLD only
bussyjd May 13, 2026
8246d26
docs(skill): rebuild obol-stack-dev skill — denser, lessons folded in
bussyjd May 13, 2026
4db987d
docs(skill): drop scripts/ — markdown snippets are sufficient
bussyjd May 13, 2026
f17cb51
docs(claude.md): refresh stale CLI surface + add release-smoke pitfalls
bussyjd May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
193 changes: 59 additions & 134 deletions .agents/skills/obol-stack-dev/SKILL.md

Large diffs are not rendered by default.

164 changes: 0 additions & 164 deletions .agents/skills/obol-stack-dev/references/dev-environment.md

This file was deleted.

108 changes: 108 additions & 0 deletions .agents/skills/obol-stack-dev/references/dev.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Dev Environment & CLI

## Bootstrap

Dev mode uses `.workspace/` instead of XDG dirs. Without `OBOL_DEVELOPMENT=true`, `obolup.sh` downloads the released binary and your branch changes never run.

```bash
OBOL_DEVELOPMENT=true ./obolup.sh
```

Layout:

```
.workspace/
├── bin/ # obol + kubectl, helm, k3d, helmfile, k9s
├── config/ # k3d.yaml, kubeconfig.yaml, .cluster-id, applications/
└── data/ # PVC content (root-owned for some namespaces)
```

## Build

```bash
go build -o .workspace/bin/obol ./cmd/obol
.workspace/bin/obol version
```

**Always replace the wrapper before running flows.** `obolup.sh` with `OBOL_DEVELOPMENT=true` installs a `go run -a` wrapper at `.workspace/bin/obol`. It recompiles on every invocation; backgrounded port-forwards (e.g. `flow-06` step 15) false-FAIL because the listener isn't ready in 5–8 seconds.

```bash
mv .workspace/bin/obol .workspace/bin/obol.wrapper
go build -o .workspace/bin/obol ./cmd/obol
```

## Foundry

`obolup.sh` does not manage Foundry. Install **nightly**, not stable. Stable lags far enough that Base Sepolia archive-lookup support drifts and `flow-08`/`flow-11` payment verification dies with `state at block #N is pruned` from the facilitator.

```bash
curl -L https://foundry.paradigm.xyz | bash
foundryup --branch nightly
```

## Env Resolution (`internal/config/config.go`)

1. `OBOL_CONFIG_DIR` (explicit)
2. `XDG_CONFIG_HOME/obol`
3. `~/.config/obol`

`OBOL_DEVELOPMENT=true` flips all three to `.workspace/...`. All k8s passthrough commands (`obol kubectl`, `obol helm`, `obol helmfile`, `obol k9s`) auto-set `KUBECONFIG=$OBOL_CONFIG_DIR/kubeconfig.yaml`.

## Required Test Env

```bash
export $(grep -v '^#' .env | xargs)
export OBOL_DEVELOPMENT=true
export OBOL_CONFIG_DIR=$(pwd)/.workspace/config
export OBOL_BIN_DIR=$(pwd)/.workspace/bin
export OBOL_DATA_DIR=$(pwd)/.workspace/data
go build -o .workspace/bin/obol ./cmd/obol # rebuild after every code change
```

## CLI Surface

| Group | Subcommands |
|---|---|
| `stack` | `init` `up` `down` `purge -f` |
| `agent` | `init` (deploys obol-agent singleton); `auth --runtime <runtime> obol-agent` (auth token) |
| `model` | `setup [--provider \| custom]` `prefer` `sync` `status` `list` `remove` |
| `network` | `list` `install` `add` `remove` `status` `sync` `delete` |
| `sell` | `inference` `http` `list` `status` `stop` `delete` `pricing` `register` |
| `hermes` | `onboard` `setup` `sync` `list` `delete` `wallet` `skills` (plus legacy `token` — **do not use**) |
| `openclaw` | `onboard` `setup` `sync` `list` `delete` `dashboard` `cli` `token` `skills` |
| `app` | `install` `sync` `list` `delete` |
| `tunnel` | `status` `login` `provision` `restart` `logs` |
| passthrough | `kubectl` `helm` `helmfile` `k9s` |
| meta | `update` `upgrade` `version` |

## `obol sell http` — easy-to-misuse flag set

Common mistakes: `--model`, `--pay-to`, and `--network` do **not** exist on `sell http`.

```
--wallet 0x... USDC recipient (NOT --pay-to)
--chain base-sepolia Payment chain (NOT --network)
--per-request 0.001 Or --price / --per-mtok / --per-hour
--upstream ollama Upstream k8s service name
--port 11434
--namespace llm Sets BOTH the ServiceOffer ns AND the upstream service ns
--health-path /api/tags
```

Always pass the same `-n <ns>` to follow-ups (`sell status`, `sell stop`, `sell delete`). The CLI prints the correct ns on creation; copy that.

## Dev Registry Cache

When `OBOL_DEVELOPMENT=true`, `obol stack up` creates k3d pull-through caches and a local push target at cluster-create time:

| Upstream | Cache | Purpose |
|---|---|---|
| `docker.io` | `k3d-obol-docker-io.localhost:54100` | pull-through |
| `ghcr.io` | `k3d-obol-ghcr-io.localhost:54101` | pull-through |
| `quay.io` | `k3d-obol-quay-io.localhost:54102` | pull-through |
| n/a | `k3d-obol-local.localhost:54103` | local push target (`localhost:54103/...:dev`) |

Caveats:

- Pull-through caches do **not** speed up local-build flows (`docker build` runs on the host daemon, `k3d image import` bypasses registries). Use the local push target (`just dev-frontend` does this).
- Registry config is only set up at cluster create. If `obol stack up` is starting an existing cluster, registry setup is skipped — recreate (`obol stack down && obol stack up`) once to pick up new entries.
Loading
Loading