Skip to content

Scaffold offworld marketplace, core plugin, shared rules and docs - #1

Merged
jonnyspicer merged 30 commits into
mainfrom
feat/offworld-marketplace-scaffold
Jul 15, 2026
Merged

jonnyspicer merged 30 commits into
mainfrom
feat/offworld-marketplace-scaffold

Conversation

@jonnyspicer

Copy link
Copy Markdown
Contributor

Sets up offworldlabs/claude-shared as the org-wide Claude Code resource: a plugin marketplace plus shared reference docs for every repo in the Offworld Labs org.

What's here

  • Marketplace.claude-plugin/marketplace.json declares the offworld marketplace with one plugin, core (./plugins/core).
  • core pluginplugins/core/.claude-plugin/plugin.json (v0.1.0); empty skills/, commands/, hooks/, agents/ dirs (each with .gitkeep); and one real skill, pr-description, to prove the pipeline end-to-end.
  • Shared rulesrules/security.md and rules/code-style.md stubs (TODO imperatives) meant to be symlinked into each repo's .claude/rules/.
  • On-demand docsdocs/architecture.md plus docs/contracts/, docs/decisions/, docs/runbooks/ README stubs. Contracts noted as the source of truth for cross-service interfaces; consuming repos should point at them rather than duplicate.
  • Templatestemplates/settings.json (registers the marketplace via extraKnownMarketplaces and enables core@offworld via enabledPlugins for zero-setup adoption) and a starter templates/CLAUDE.md.
  • README — install, adoption, and contribution process.

Validation

  • claude plugin validate . → passed (marketplace + core plugin).
  • Added this checkout as a local marketplace, installed core@offworld at user scope, and confirmed the skill loads as core:pr-description in a headless session.

Note for reviewers

The GitHub org slug is offworldlabs (no hyphen) per the git remote — used in templates/settings.json, templates/CLAUDE.md, and README.md so /plugin marketplace add offworldlabs/claude-shared resolves. Flag if the intended slug differs.

🤖 Generated with Claude Code

jonnyspicer and others added 30 commits July 13, 2026 21:49
Add the org-wide Claude Code resource for Offworld Labs:

- .claude-plugin/marketplace.json declaring the "offworld" marketplace
  with one plugin, core (./plugins/core).
- plugins/core: plugin.json (v0.1.0) plus empty skills/commands/hooks/agents
  dirs, and one real skill (pr-description) to prove the pipeline end-to-end.
- rules/: security and code-style stubs meant to be symlinked into each
  repo's .claude/rules/.
- docs/: architecture, contracts, decisions, runbooks stubs; contracts noted
  as the source of truth for cross-service interfaces.
- templates/: drop-in .claude/settings.json (registers the marketplace and
  enables core) and a starter CLAUDE.md.
- README.md: install, adoption, and contribution process.

Validated with `claude plugin validate` and confirmed core@offworld installs
and the core:pr-description skill loads.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New repos that set up Claude PR review via /install-github-app hit a recurring
issue: the generated workflows grant read-only tokens, so reviews run green but
never post a comment. Ship the fix as reusable org assets:

- templates/github-workflows/{claude-code-review,claude}.yml: drop-in workflows
  with pull-requests/issues set to write.
- docs/runbooks/github-actions-claude-review.md: symptom, cause, fix, and the
  must-land-on-default-branch guard.
- README: adoption section pointing new repos at the templates instead of the
  broken scaffold.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Approved design for a core plugin skill that scaffolds a new org repo to
standard (Claude enablement + CI + stack tooling), delivered as bundled plugin
assets. Captures locked decisions (self-contained plugin, Python ruff py312,
ts-frontend/ts-backend variants), the repo restructure folding PR #1 templates
into the plugin, the setup procedure, testing, and phasing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolve the two open follow-ups per review: the setup skill runs the stack's
first install, and writes CLAUDE.md as a stub then prompts the dev to flesh it
out from a short description plus the scaffolded stack.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Task-by-task TDD plan for Phase 1: fold PR #1 templates into plugin assets,
add Python stack + CI + editorconfig assets, a deterministic scaffold engine
with an end-to-end test, and the setup-repo SKILL.md procedure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Remove the four placeholder docs stubs (architecture.md and the contracts/
  decisions/runbooks README stubs); keep contracts/ and decisions/ as reserved
  dirs via .gitkeep, runbooks/ keeps its real runbook.
- Remove docs/superpowers/ (spec + plan planning artifacts) and add .gitignore
  ignoring docs/superpowers/ and the .superpowers/ SDD scratch dir.
- Add a README "Documentation" section describing each docs/ subdirectory.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…erview

Replace the removed stub with an evidence-based org-wide architecture doc,
derived from surveying the offworldlabs repos: system tiers (edge Pi5 nodes →
central server → web clients), the two-front signal chain (real SDR vs
simulator), a component catalogue, deployment/fleet lifecycle (owl-os + Mender
OTA), a repository map, and flagged open questions. Interfaces are cited from
code/config; inferred/unverified links are marked as such. Reference it from the
README Documentation section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…on compose

The 3lips-telemetry-solver directory has been removed from the retina tree, so
remove its component/repo-map/open-question references. Also name the file behind
"the integration compose" explicitly: retina-tracker/docker-compose.integration-test.yml,
which builds synthetic-adsb and tracker-host from local ./ build contexts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… server

retina-tracker is not deployed standalone: Tower-Finder includes it (and
retina-geolocator, retina-custody, retina-simulation, retina-analytics) as
libs/ git submodules pip-installed into the server image and imported by the
backend. Its :30100 Dockerfile is integration-test only. Update the component
catalogue, central-server entry, and repo map accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…uestion

- Document the two remaining central-server library submodules: retina-custody
  (node identity, signature/hash-chain custody) and retina-analytics (inter-node
  association, node reputation/trust), with roles derived from the server's
  imports since the submodules aren't checked out locally. Add repo-map rows.
- Add a "Are the simulators used in production?" subsection: synthetic-adsb and
  tracker-host are test-only (referenced solely by retina-tracker's integration
  harness, no prod deploy path); note the central server's separate internal
  _apply_synthetic_adsb + retina-simulation mechanism and the name-collision
  trap. Include a reusable verification method. Drop the now-answered open
  question.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
They aren't part of the live system, so drop them: remove the simulator data-flow
front and the "used in production?" subsection they anchored, and their component
entries. Present the production signal chain (SDR -> blah2 -> central server
tracker/geolocator libs -> map) as the single flow, keep the tracker-before-
geolocator ordering note, and keep a brief testing note pointing at
retina-simulation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reflect the repo rename (landingpage -> landing-page-owl, paralleling
landing-page-retina): update the repo map and open-questions bullet. Tower-Finder
is intentionally left as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Confirmed from code that geolocated tracks reach the map via in-process
geolocation -> in-memory state -> /ws/aircraft* WebSocket -> live-map SPA (not a
file / tar1090 aircraft.json); document it and drop the inferred open question.
Refine the detection-forwarding item: node profile forwards to :30050, server
binds :3012, and no mapping exists in either repo, so it's infra-level -- with
the concrete infra checks to confirm it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A live production node's merged blah2 config shows tracker_forward.enabled:false
with base defaults (blah2_tracker:3012), not the retina profile's
tracker.retnode.com:30050 (NXDOMAIN host, placeholder token) — so the :30050 path
is an unapplied template on that node. Resolve the old :30050<->:3012 open
question accordingly, add a config-gated caveat to the data-flow section, and
leave "does any node forward in prod" as the remaining open item.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The surveyed gaps/inconsistencies now have tracking tickets, so drop the
"Open questions / to reconcile" section and update the two references to it
(the status note and the data-flow caveat) to point at tickets instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
….txt)

uv is a faster drop-in for pip that reads the same requirements.txt, so adopt it
without abandoning the requirements.txt convention every org repo uses:

- ci-python.yml: add astral-sh/setup-uv and install via
  `uv pip install --system -r requirements.txt -r requirements-dev.txt`
  (drop the pip self-upgrade).
- setup-repo SKILL.md: install step now uses `uv venv && uv pip install ...`,
  with a pip fallback when uv is absent.
- test-ci-assets.sh: assert the CI installs with uv and includes a setup-uv step.
- Bump core plugin version 0.1.0 -> 0.2.0 (the org-wide update signal).

Requirements.txt files, stack detection, and the other assets are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jonnyspicer
jonnyspicer merged commit 3d31e93 into main Jul 15, 2026
1 check passed
@jonnyspicer
jonnyspicer deleted the feat/offworld-marketplace-scaffold branch July 15, 2026 21:19
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.

1 participant