Scaffold offworld marketplace, core plugin, shared rules and docs - #1
Merged
Merged
Conversation
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>
…bits, tidy skill description
- 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>
This was referenced Jul 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sets up
offworldlabs/claude-sharedas the org-wide Claude Code resource: a plugin marketplace plus shared reference docs for every repo in the Offworld Labs org.What's here
.claude-plugin/marketplace.jsondeclares theoffworldmarketplace with one plugin,core(./plugins/core).plugins/core/.claude-plugin/plugin.json(v0.1.0); emptyskills/,commands/,hooks/,agents/dirs (each with.gitkeep); and one real skill,pr-description, to prove the pipeline end-to-end.rules/security.mdandrules/code-style.mdstubs (TODO imperatives) meant to be symlinked into each repo's.claude/rules/.docs/architecture.mdplusdocs/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.templates/settings.json(registers the marketplace viaextraKnownMarketplacesand enablescore@offworldviaenabledPluginsfor zero-setup adoption) and a startertemplates/CLAUDE.md.Validation
claude plugin validate .→ passed (marketplace + core plugin).core@offworldat user scope, and confirmed the skill loads ascore:pr-descriptionin a headless session.Note for reviewers
The GitHub org slug is
offworldlabs(no hyphen) per the git remote — used intemplates/settings.json,templates/CLAUDE.md, andREADME.mdso/plugin marketplace add offworldlabs/claude-sharedresolves. Flag if the intended slug differs.🤖 Generated with Claude Code