Skip to content

Commit a6bfeb7

Browse files
facontidavideclaude
andcommitted
chore!: vendor mcap_catalog directly (de-submodule) + drop CI deploy-key machinery
The Python catalog builder was a git submodule pointing at the PRIVATE AurynRobotics/mcap_server repo — a cross-org dependency that forced CI to carry a read-only deploy key (MCAP_CATALOG_DEPLOY_KEY) just to check the code out, and made a fresh clone of this repo non-self-contained. Vendor its source directly under mcap_catalog/ so this repo is standalone. - Removed the submodule gitlink + .gitmodules; the 47 builder files (source, tests, schema.sql, README/REQUIREMENTS/CLAUDE, CATALOG_CONTRACT.md) are now regular tracked files at the SAME paths, so every reference to mcap_catalog/mcap_catalog_builder in the Go server, scripts, smoke/CI harness and docs keeps working unchanged. Vendored at builder commit a0c3d5c (the single-writer lock); history flattened. - .github/workflows/ci.yml: the builder-tests and integration jobs drop `submodules: true` + `ssh-key: ${{ secrets.MCAP_CATALOG_DEPLOY_KEY }}` — a plain checkout now has the builder. No secret to provision. - ci-integration.sh: the "submodule not initialized" guard message updated to "vendored builder not found". - test_writer_lock: the process-death subprocess derives PYTHONPATH from the package location instead of cwd, so the suite passes from the repo root (vendored) as well as from mcap_catalog/ (CI's cwd). - gofmt: filter.go / resume_test.go / compress_test.go (stray blank lines + struct alignment) — the CI `unit` job's gofmt gate is now clean. - CLAUDE.md: "the only submodule" prose updated to "vendored". Verified: 180/180 builder pytest (from both cwds), go build ./..., gofmt clean, SMOKE PASS (the harness invokes the vendored builder as a real subprocess). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 062e7f5 commit a6bfeb7

55 files changed

Lines changed: 7789 additions & 56 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -100,33 +100,17 @@ jobs:
100100
builder-tests:
101101
# M6 §5.4: the Python mcap_catalog builder's own pytest suite (schema,
102102
# key-parsing round-trip, reconcile, dedup/topic-set, tag-edit IPC,
103-
# atomic-publish/rebuild, ...). Needs the submodule checked out. No cloud
104-
# SDKs required: the S3/GCS clients are injected/test-doubled (see
105-
# mcap_catalog/CLAUDE.md's storage `Source` seam) — this job proves the
106-
# builder library itself, independent of the {s3,gcs} integration legs
107-
# below (which exercise it as a real subprocess against real emulators).
103+
# atomic-publish/rebuild, single-writer lock, ...). The builder is now
104+
# VENDORED directly in this repo (mcap_catalog/, no longer a submodule), so
105+
# a plain checkout has it. No cloud SDKs required: the S3/GCS clients are
106+
# injected/test-doubled (see mcap_catalog/CLAUDE.md's storage `Source`
107+
# seam) — this job proves the builder library itself, independent of the
108+
# {s3,gcs} integration legs below (which exercise it as a real subprocess
109+
# against real emulators).
108110
runs-on: ubuntu-latest
109111
timeout-minutes: 10
110112
steps:
111113
- uses: actions/checkout@v4
112-
with:
113-
submodules: true
114-
# ⚠️ FORWARD-PROVISIONING (read before activating this workflow on
115-
# GitHub): mcap_catalog's .gitmodules URL is
116-
# git@github.com:AurynRobotics/mcap_server.git — a PRIVATE repo in a
117-
# DIFFERENT org (AurynRobotics) than this repo's org (PlotJuggler).
118-
# actions/checkout's default GITHUB_TOKEN can only fetch submodules
119-
# within the SAME repo/org it was minted for, so `submodules: true`
120-
# alone CANNOT fetch this one. Before CI is ever activated on GitHub:
121-
# 1. Create a READ-ONLY deploy key on AurynRobotics/mcap_server
122-
# (repo Settings -> Deploy keys -> Add deploy key; do NOT allow
123-
# write access).
124-
# 2. Add its PRIVATE half as the `MCAP_CATALOG_DEPLOY_KEY` secret on
125-
# THIS repo (Settings -> Secrets and variables -> Actions).
126-
# Without both steps this job's checkout step fails immediately (a
127-
# submodule-fetch permission error), before any test runs — expected
128-
# and by design until the secret is provisioned.
129-
ssh-key: ${{ secrets.MCAP_CATALOG_DEPLOY_KEY }}
130114
- uses: actions/setup-python@v5
131115
with:
132116
python-version: "3.11"
@@ -177,21 +161,10 @@ jobs:
177161
--health-timeout 3s
178162
--health-retries 20
179163
steps:
164+
# M6 §5.4: the ci_integration test invokes the Python builder as a real
165+
# subprocess (mcap_catalog/mcap_catalog_builder), now VENDORED in this
166+
# repo — a plain checkout has it (no submodule, no deploy key).
180167
- uses: actions/checkout@v4
181-
with:
182-
# M6 §5.4: the ci_integration test invokes the Python builder as a real
183-
# subprocess (mcap_catalog/mcap_catalog_builder), so the submodule must
184-
# actually be checked out here (unlike unit/race/seam, which never touch it).
185-
submodules: true
186-
# ⚠️ FORWARD-PROVISIONING (see the identical note on the builder-tests
187-
# job above): mcap_catalog is a PRIVATE submodule in a DIFFERENT org
188-
# (AurynRobotics) than this repo (PlotJuggler) — the default
189-
# GITHUB_TOKEN cannot fetch it. A READ-ONLY deploy key on
190-
# AurynRobotics/mcap_server must be created and its private half
191-
# stored as the `MCAP_CATALOG_DEPLOY_KEY` secret on THIS repo BEFORE
192-
# CI is activated on GitHub; until then this checkout step fails at
193-
# the submodule-fetch step, by design.
194-
ssh-key: ${{ secrets.MCAP_CATALOG_DEPLOY_KEY }}
195168
- uses: actions/setup-go@v5
196169
with:
197170
go-version: "1.23"

.gitmodules

Lines changed: 0 additions & 3 deletions
This file was deleted.

CLAUDE.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ PlotJuggler-class clients on demand.
1111

1212
This repo (`pj-mcap-server`, a git repo on branch `main`) holds the design spec, the
1313
implementation plans, the commercial proposal, the **Go server + connector plugin**
14-
implementation, and (2026-06-22) the **vendored auryn Python catalog builder** (the
15-
`mcap_catalog/` submodule). **[LOCAL DECISION 2026-06-04]** The
14+
implementation, and (2026-06-22) the **vendored auryn Python catalog builder** (in
15+
`mcap_catalog/` — VENDORED directly as of 2026-07-17; formerly a submodule of
16+
`AurynRobotics/mcap_server`, de-submoduled so this repo is fully self-contained).
17+
**[LOCAL DECISION 2026-06-04]** The
1618
implementation code goes **in this repo**: every `pj-cloud/<path>` reference in the
1719
plans maps to `/home/gn/ws/PJ4_Server_Template/pj-mcap-server/<path>` (the plans were
1820
originally written for a separate `pj-cloud/` repo at
@@ -24,7 +26,7 @@ new repo).
2426

2527
**The auryn catalog migration (M1–M6 incl. the full M6 tail) is DONE and pushed.** The
2628
production architecture is a **two-process system**: the Python **`mcap_catalog/`**
27-
builder (submodule) is the SOLE catalog writer (schema v3, atomic publish via temp+rename,
29+
builder (vendored) is the SOLE catalog writer (schema v3, atomic publish via temp+rename,
2830
`--tag-socket` tag-edit IPC, `--no-watch` rescan-only daemon mode) and the Go server is a
2931
**pure read-only catalog reader + unchanged streamer**`catalog.OpenReadOnly` is the
3032
ONLY constructor, `internal/indexer/` and every catalog write API are DELETED (−2k LOC),
@@ -36,9 +38,9 @@ reads are generation-pinned). `-external-builder`/`-poll-interval` are deprecate
3638
and `mcap_catalog/`) is the cross-language contract — schema/IPC changes MUST update it.
3739

3840
- **Remaining follow-ups:** `matrix.sh` migration (fail-fasts with exit 2 today; needs the
39-
`jkk_dataset02` corpus machine); GitHub CI activation (needs a read-only deploy key on
40-
the private `AurynRobotics/mcap_server` submodule as the `MCAP_CATALOG_DEPLOY_KEY`
41-
secret, plus the push decision); the C++ facet UI (client-side `GetVocabulary`
41+
`jkk_dataset02` corpus machine); the CI `integration` legs' service containers (minio +
42+
fake-gcs) fail their health checks on the GitHub runner (pre-existing infra, not a code
43+
regression); the C++ facet UI (client-side `GetVocabulary`
4244
`docs/catalog-vocabulary-rpc.md`); real-bucket GCE smoke (`docs/gce-deploy-smoke.md`);
4345
builder gaps by design: `derive_tags()` stub, GCS Pub/Sub discovery, `file_metrics`.
4446
- **Team rule:** technical decisions are cross-checked with a standing Codex instance
@@ -145,7 +147,7 @@ local codebases first. Do not guess SDK/plugin APIs — read the real headers.
145147
> `plotjuggler_sdk-cloud/`). The connector plugin builds **standalone** at
146148
> `plugin/toolbox_dexory_cloud/` against the SDK Conan package (**0.11.0** — built on
147149
> this machine 2026-07-06 from `~/ws_plotjuggler/plotjuggler_sdk-cloud`). The ONLY
148-
> submodule of this repo is **`mcap_catalog/`**. Prose below that mentions `PJ4/` as a
150+
> directory `mcap_catalog/` is VENDORED (formerly the only submodule). Prose below that mentions `PJ4/` as a
149151
> submodule or SDK 0.8.1 is a stale reference-reading aid — the fork/vendoring history
150152
> lives in `docs/history.md`. Paths below were verified 2026-06-04 on the original
151153
> machine (`/home/gn/...`).
@@ -407,7 +409,7 @@ in batches so the client can show already-received data while the rest downloads
407409
cancel-mid-stream.
408410

409411
- **Two-process backend** (the "one static binary" property is GONE — M6):
410-
- **Python `mcap_catalog` builder** (submodule; sole SQLite writer): discovers bucket
412+
- **Python `mcap_catalog` builder** (vendored; sole SQLite writer): discovers bucket
411413
objects (S3 SQS events / rescan; `--no-watch` = rescan-only), extracts MCAP
412414
footer/summary metadata (1–2 range-GETs), writes the auryn schema (v3: Hive
413415
dimensions, topic-set dedup, `tags_effective` override layer, `catalog_failures`

mcap_catalog

Lines changed: 0 additions & 1 deletion
This file was deleted.

mcap_catalog/.gitignore

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Python
2+
__pycache__/
3+
*.pyc
4+
*.pyo
5+
.pytest_cache/
6+
.mypy_cache/
7+
.ruff_cache/
8+
*.egg-info/
9+
.venv/
10+
venv/
11+
12+
# Catalog artifacts (regenerable; default lives at /tmp anyway)
13+
*.db
14+
*.db-wal
15+
*.db-shm
16+
17+
# OS / editor
18+
.DS_Store
19+
20+
# Git worktrees (kept inside the repo under .worktrees/)
21+
.worktrees/

0 commit comments

Comments
 (0)