comgu

Open source

Apache-2.0, and reproducible from a clean clone

Two repositories. One is the product; the other is the simulated commerce ecosystem it patches — separate on purpose, because a tool that opens pull requests against itself proves nothing.

Architecture

packages/datahub/   MCP gateway, context builder, quality signals, write-back
packages/rules/     five deterministic checks over observed output
packages/patch/     constrained generation + registered-command validation
packages/planner/   AI planner behind a validated schema
packages/github/    pull requests
apps/api/           workflow state machine, screens, auth, persistence
apps/worker/        resumes runs stranded by a crash or a deploy
seed/               Commerce Lab topology + emitter
skill/              the DataHub Skill contributed upstream

Deterministic where facts are concerned

MCP calls are made from code, not chosen by a model. The model reads a persisted snapshot and ranks registered templates. It never invents a value, approves anything, or reaches a shell.

Degrades rather than guesses

If DataHub is unavailable the run fails visibly and says why. There is no hardcoded lineage fallback — a confidently wrong blast radius is worse than none.

Contributed back

datahub-skills

datahub-commerce-change-impact

A vendor-neutral DataHub Skill teaching any agent to assess a commerce change: resolve authority from the catalog rather than infer it, trace the blast radius with an explicit hop count, compare output rather than configuration, surface ownership gaps, refuse to guess when no source of truth is marked, and stop before mutating.

Pull request #58 →

datahub

A reproducible quickstart defect

ES_BULK_REFRESH_POLICY=WAIT_UNTIL makes every OpenSearch bulk write block until the next index refresh. Under ingestion load the MAE consumer is evicted mid-batch, replays against already-written documents, hits version conflicts, and stalls permanently without committing an offset. The catalog under-indexes silently — we measured 428 of 1,267 entities.

Setting the policy to NONE drained a 1,748-message backlog in 140 seconds. Diagnosis, fix and measurements are in infra/README.md.

Reported upstream as datahub#18642 →

Verify it yourself

Nothing here needs DataHub or a network connection.

# rule engine, patch safety, planner guards, workflow, auth, prompt injection
pytest apps packages tests -q

# the security suite on its own
pytest tests/security -q

# the lab fails before remediation, passes after
cd ../comgu-commerce-lab && pytest -q     # 6 failed, 1 passed

With a DataHub instance, python -m apps.api.scripts.golden_path --assert-completed runs the whole chain unmocked and fails the build if any stage did not genuinely succeed.

Read it, run it, break it