Skip to content

Commit ded43d0

Browse files
Empty the misfiled sustainabot slot; add anti-vendoring guardrails (#297)
## What & why `bots/sustainabot/` had a full standalone copy of **OikosBot** vendored into it — an entire Rust workspace, Haskell analyzer, AffineScript bot, containers and policies (99 files), one crate of which even grew a hard `path` dependency back into `shared-context/`. A bot slot is meant to be a *thin adapter*, not a home for an entire external project. This PR resets the slot and guards against recurrence. The implementation itself moves to its own repo in the companion PR: **`hyperpolymath/oikosbot` branch `claude/determined-cerf-s4zaob`**. ## Changes - **Remove the 99 vendored files** from `bots/sustainabot/`; leave a placeholder `README.adoc` that reserves the slot and points to `hyperpolymath/oikosbot`. - **Add `bots/README.adoc`** — bot directories are THIN ADAPTERS; never vendor standalone products, never add repo-escaping `path` deps. - **`.claude/CLAUDE.md`** — new critical invariant #6 (thin adapters; `sustainabot` is **not** OikosBot and **not** the `oikos` DSL). - `README.adoc` / `ROADMAP.adoc` / `docs/ARCHITECTURE.md` — mark the sustainabot slot **Reserved** and disambiguate. ## The fleet KEEPS sustainabot as a member `BotId::Sustainabot`, the coordinator roster, and safety-triangle routing in `shared-context/` are **untouched** — `shared-context` still builds green. Only the vendored *directory* was emptied; the bot remains a first-class (now reserved) fleet member to be prototyped later. ### Follow-up (not in this PR) The coordinator/`shared-context` still treat sustainabot as a *ready* verifier; once a real thin adapter is built (or the slot is wired to consume OikosBot externally), the roster status can be updated to match. A couple of other bots' notes reference the old `hyperpolymath/sustainabot` name (e.g. `bots/rhodibot/README.adoc`) and could be repointed at `oikosbot` separately. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01RozeeLxpJsd3WWFngaZWz3 --- _Generated by [Claude Code](https://claude.ai/code/session_01RozeeLxpJsd3WWFngaZWz3)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent f55e737 commit ded43d0

104 files changed

Lines changed: 75 additions & 15034 deletions

File tree

Some content is hidden

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

.claude/CLAUDE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,17 @@ Control (report < 0.85) → Human review required
8181
3. No hardcoded secrets — use env vars with `${VAR:-}` defaults.
8282
4. Fix scripts must be idempotent (safe to run multiple times).
8383
5. Confidence thresholds gate all automated actions.
84+
6. **`bots/<name>/` directories are THIN ADAPTERS, not homes for standalone
85+
products.** Never vendor an entire external project (its own Cargo
86+
workspace, analyzers, containers, deployment, docs) into a bot slot, and
87+
never let a bot crate add a `path` dependency that escapes the repo. If a
88+
capability deserves its own project, build it in its own repository and
89+
depend on it externally. See [`bots/README.adoc`](../bots/README.adoc).
90+
- **Disambiguation:** `sustainabot` (this fleet's eco/econ slot, kept as
91+
`BotId::Sustainabot`) is **not** `OikosBot` and **not** `oikos`. A misfiled
92+
full copy of OikosBot once lived in `bots/sustainabot/`; it was extracted to
93+
`hyperpolymath/oikosbot` and the slot reset to a placeholder. `oikos` is a
94+
separate DSL (`hyperpolymath/oikos-economics-accounting-dsl`).
8495

8596
## Repo health
8697

README.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ The historical `TOPOLOGY.md` dashboard is at the repo root.
6767
|Active
6868

6969
|**sustainabot**
70-
|Ecological and economic code standards. Carbon intensity, resource efficiency, technical debt modeling.
71-
|Active
70+
|Ecological and economic code standards. *Adapter slot reserved — see link:bots/sustainabot/README.adoc[`bots/sustainabot/`].* The standalone eco/econ App once misfiled here is **OikosBot**, now at https://github.com/hyperpolymath/oikosbot[`hyperpolymath/oikosbot`] (a separate project — not sustainabot).
71+
|Reserved
7272

7373
|**glambot**
7474
|Presentation quality. Visual polish, accessibility (WCAG), SEO, machine-readability for AI/bots.
@@ -87,7 +87,7 @@ The historical `TOPOLOGY.md` dashboard is at the repo root.
8787
|Active
8888
|===
8989

90-
*Status legend:* `Active` = Tier 1 Verifier or Specialist bot running on every push. `Complete` = Tier 2 Finisher bot that runs after verifiers to validate final release readiness.
90+
*Status legend:* `Active` = Tier 1 Verifier or Specialist bot running on every push. `Complete` = Tier 2 Finisher bot that runs after verifiers to validate final release readiness. `Reserved` = fleet member retained in `shared-context` but without an in-repo adapter yet (the directory is a placeholder; see that bot's `README.adoc`).
9191

9292
Standalone repos that are intentionally not fleet bots:
9393

ROADMAP.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ based on confidence thresholds (Eliminate >= 0.95, Substitute >= 0.85, Control <
2424

2525
| rhodibot | Git operations, RSR enforcement | Yes
2626
| echidnabot | Quality verification, multi-prover | Yes
27-
| sustainabot | Dependency management | Yes
27+
| sustainabot | Eco/econ standards — _reserved slot, empty_ (standalone impl extracted to `hyperpolymath/oikosbot`) | Yes
2828
| glambot | Presentation, badges, formatting | Yes
2929
| seambot | Integration seam maintenance | Yes
3030
| finishingbot | Completion of partial work | Yes

bots/README.adoc

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
= bots/ — fleet bot adapters
4+
:icons: font
5+
6+
Each subdirectory here is one member of the gitbot fleet. A bot directory is a
7+
**thin adapter**: a small Rust crate (`Cargo.toml` + `src/` + `tests/`) that
8+
wires one analysis capability into the fleet's `shared-context` interface and the
9+
safety-triangle router. The canonical `BotId` set lives in
10+
link:../shared-context/src/bot.rs[`shared-context/src/bot.rs`].
11+
12+
== Guardrail — do NOT vendor standalone products here
13+
14+
A bot slot is an *adapter*, not a home for an entire external project. Do not
15+
copy a whole standalone repository (its own workspace, analyzers, containers,
16+
deployment, docs…) into `bots/<name>/`.
17+
18+
[IMPORTANT]
19+
====
20+
This rule exists because it was once broken: a full copy of **OikosBot** (a
21+
separate eco/econ code-analysis App) was vendored into `bots/sustainabot/`,
22+
including a Rust workspace that grew a hard `path` dependency back into
23+
`shared-context/`. It has since been extracted to its own repo,
24+
https://github.com/hyperpolymath/oikosbot[`hyperpolymath/oikosbot`], and the slot
25+
reset to a placeholder. See `sustainabot/README.adoc`.
26+
====
27+
28+
If a bot needs a heavyweight capability that deserves its own project, build that
29+
project in its **own repository** and have the adapter here depend on it as an
30+
external crate or service. Keep the adapter thin.

bots/sustainabot/ARCHITECTURE.md

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

0 commit comments

Comments
 (0)