Upstream Capability Discovery (UCD)¶
Platform law. Alias: Smallest Stable Owner.
UCD is not OpenClaw-specific. It applies whenever an engineer or agent integrates, extends, or replaces a capability owned by an upstream platform or OSS project.
This file is the only binding process law for discovery and the Capability Audit gate. Do not create sibling essays, Cursor rules, or repo docs/runtime/* copies of this law.
Binding SHALL¶
When a Business Requirement implies software work against an upstream surface, engineers and agents SHALL:
- Run a Capability Audit for that requirement before writing Bluefly code.
- Answer from current upstream evidence (docs, CLI, OpenAPI, package registries, source, capability index), not remembered expertise.
- Prefer the smallest stable owner that already provides the capability.
- Treat Bluefly custom code as LAST — thin adapter / domain glue only after upstream ownership is exhausted with recorded evidence.
Absence of memory is not absence of capability. “Couldn’t find a plugin” without a recorded search is a policy violation.
Universal algorithm¶
Business Requirement
|
v
Can upstream already do it? (native / built-in / CLI / config)
| no
v
Official extension? (plugin, provider, hook, middleware, module)
| no
v
Official SDK / API? (SDK, OpenAPI, MCP, documented protocol)
| no
v
Maintained upstream package / delegated ecosystem owner?
| no
v
Smallest Bluefly adapter (LAST) — domain glue only; never replace the owner
Stop at the first level that satisfies the requirement with equivalent governance, security, observability, and operational behavior.
Applies to (non-exhaustive)¶
OpenClaw · Gas City · Gas Town · Beads · Drupal · GitLab · Tailscale · DDEV · Cloudflare · Docker · Kubernetes · Keycloak · Dolt · 1Password · Synology DSM · Oracle deploy substrates · any other upstream OSS or platform with a published contract.
Mandatory gate¶
First prompt before implementation: Capability Audit: <X>
Do not open an implementation branch, write custom code, or invent a Bluefly service until every row for the scoped capability is filled with evidence links (or an explicit NOT FOUND with query + corpus recorded).
Capability Audit table¶
| Column | Meaning |
|---|---|
| Capability | Named requirement under audit |
| Native? | Built-in / CLI / runtime already owns it |
| Config? | Expressible as upstream desired-state config |
| Plugin? | Official or catalog plugin / module |
| Extension? | Hook, provider, middleware, extension point |
| Official SDK? | First-party SDK package |
| Official API? | Documented HTTP/RPC/OpenAPI/MCP/protocol |
| Recommended upstream approach? | What current docs prescribe |
| Community standard? | Maintained ecosystem pattern (cite source) |
| Bluefly code actually required? | None | thin adapter + justification |
| Evidence | Docs URL(s), CLI receipt, registry hit, source path — or NOT FOUND + exact query |
| Capability | Native? | Config? | Plugin? | Extension? | Official SDK? | Official API? | Recommended upstream approach? | Community standard? | Bluefly code actually required? | Evidence |
|---|---|---|---|---|---|---|---|---|---|---|
| (name) | None | thin adapter |
Forbidden¶
| Forbidden | Why |
|---|---|
| Implementation-first | Skips ownership resolution; creates permanent Bluefly liability |
| Memory-driven claims (“I know OpenClaw can’t…”) | Upstream moves; memory is not evidence |
| “No plugin exists” without search evidence | Must record query + corpus + result |
| Narrative expertise dumps as substitute for an index | Searchable capability indexes beat essay corpora |
| Replacing the upstream owner when upstream owns it | Violates Smallest Stable Owner |
| Treating Bluefly OpenAPI / projections as upstream contract without labeling them | Projection ≠ authority |
| New platform-law siblings (Cursor rules, repo docs trees, ES Integration essays) that restate this file | One law, many pointers |
Evidence-driven, not memory-driven¶
| Do | Do not |
|---|---|
Query a capability index / docs corpus / qmd / registry |
Rely on prior chat “expertise” |
| Refresh live docs when versions may have changed | Assume last year’s mental model |
Record NOT FOUND with exact search |
Equate “I don’t remember” with “doesn’t exist” |
| Re-run Capability Audit per feature | Reuse an old audit for a different requirement |
When the deployed binary and its own upstream docs disagree, probe the binary directly (--help, error text, --json-schema, version -m) and trust that over the doc for this specific host |
Assume the doc is current for the exact build actually running, or invent a local substitute to reconcile the disagreement |
Index convention¶
Each upstream platform may publish a machine-readable capability index (JSON) plus optional markdown shards for qmd. Reuse the same schema; do not invent parallel essay corpora.
| Artifact | Path |
|---|---|
| Schema | /Volumes/AgentPlatform/Scratch/openclaw-capability-index/schema.yaml |
| OpenClaw index (example) | /Volumes/AgentPlatform/Scratch/openclaw-capability-index/capabilities.json |
qmd shards |
/Volumes/AgentPlatform/Scratch/openclaw-capability-index/md/ |
jq -r '.capabilities[] | select(.keywords | index("health")) | "\(.title)\t\(.docs_urls[0])"' \
/Volumes/AgentPlatform/Scratch/openclaw-capability-index/capabilities.json
rg -n -i 'healthz|readyz' /Volumes/AgentPlatform/Scratch/openclaw-capability-index/md/
qmd search -c openclaw-capability-index 'gateway health'
Worked example: OpenClaw (Scratch only)¶
Disposable evidence — not a second Engineering-Standard:
| Role | Path |
|---|---|
| Working Capability Audit (one file) | /Volumes/AgentPlatform/Scratch/OpenClaw-Integration-Contract-Capability-Audit.md |
| Docs crawl synthesis (evidence, do not duplicate into ES) | /Volumes/AgentPlatform/Scratch/OpenClaw-Docs-Expertise-2026-07-21.md |
| Crawl extracts | /Volumes/AgentPlatform/Scratch/openclaw-docs-crawl-2026-07-21/ |
| Searchable index | /Volumes/AgentPlatform/Scratch/openclaw-capability-index/ |
Locked operator decisions for Oracle OpenClaw edge (re-audit only with new evidence):
- Serve / ingress owner: host Tailscale (not Compose; not OpenClaw
gateway.tailscale.mode: "serve"). - Target: Tailscale Services →
set-config→ Git → Deployment. - Today: classic Serve until a Service resource exists; never hand-author Services JSON (generate from
get-configonly). - OpenClaw owns gateway runtime (
mode: "off"for Tailscale Serve automation). Health roles per upstream docs:/healthzliveness,/readyzreadiness,GET /healthuptime SaaS —/health≡/healthzremains UNKNOWN in docs.
Repo deploy identity (Current / Target / Blocker only): agent-docker → deployments/oracle/configs/README.md. Architecture and law stay here + Scratch.
Relationship to Capability Convergence¶
UCD is the discovery and audit process. Capability Convergence is the ownership gravity doctrine. Both agree: responsibility falls to the smallest stable owner; Level 6 (local custom) is last and must be evidenced.