Skip to content

Empty the misfiled sustainabot slot; add anti-vendoring guardrails#297

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/determined-cerf-s4zaob
Jun 20, 2026
Merged

Empty the misfiled sustainabot slot; add anti-vendoring guardrails#297
hyperpolymath merged 2 commits into
mainfrom
claude/determined-cerf-s4zaob

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

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 chore(deps): bump anyhow from 1.0.101 to 1.0.102 in /robot-repo-automaton #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 untouchedshared-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.ai/code/session_01RozeeLxpJsd3WWFngaZWz3


Generated by Claude Code

…guardrails

A full standalone copy of OikosBot (its own Rust workspace, Haskell analyzer,
AffineScript bot, containers and policies) had been vendored into
bots/sustainabot/ — one of which even grew a hard path dependency back into
shared-context/. That implementation has been extracted to its own repo,
hyperpolymath/oikosbot, and renamed oikosbot-*.

This commit resets the slot and guards against recurrence:
- 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 homes for
  standalone products, and bot crates must not add repo-escaping path deps.
- CLAUDE.md: new critical invariant #6 (thin adapters; sustainabot is NOT
  OikosBot and NOT the oikos DSL).
- README/ROADMAP/docs: mark sustainabot's 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.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RozeeLxpJsd3WWFngaZWz3
@hyperpolymath hyperpolymath marked this pull request as ready for review June 20, 2026 01:58
@hyperpolymath hyperpolymath merged commit ded43d0 into main Jun 20, 2026
6 of 7 checks passed
@hyperpolymath hyperpolymath deleted the claude/determined-cerf-s4zaob branch June 20, 2026 01:58
hyperpolymath added a commit that referenced this pull request Jun 20, 2026
Follow-ups after the sustainabot→oikosbot extraction (#297). Companion
PR: **hyperpolymath/oikosbot** branch `claude/determined-cerf-s4zaob`.

## Matter 1 — Repo Integrity Guard
When #297 deleted the 98 vendored files, the guard fired and the PR was
merged via override. Root cause (besides not knowing the marker): the
guard's own comment promises `[mass-delete-ok]` works in "a commit
message **or the PR title/body**", but the code only grepped commit
messages.

- **Implement the documented PR-title/body escape hatch** (via `env:` +
`grep -F`, injection-safe — untrusted PR text is never `eval`'d).
Accidental stale-base gut-merges are still blocked; only
explicitly-marked intentional removals pass. **The guard is not
weakened** — threshold and critical-file checks are unchanged.
- **CLAUDE.md invariant #7** documents the tripwire + marker convention
so future cleanups are marked, not force-merged.

## Matter 2b — fix rhodibot's broken sibling link
`bots/rhodibot/README.adoc` linked the non-existent
`hyperpolymath/sustainabot` repo. Repointed to the in-repo slot
`bots/sustainabot/` and clarified it's the **reserved fleet slot, not**
the standalone OikosBot (avoids re-creating the conflation).

## Matter 2c (fleet side) — distinct identity for OikosBot
- Add **`BotId::Oikosbot`** to `shared-context` so the optional
`oikosbot-fleet` bridge can publish under its own identity instead of
borrowing `BotId::Sustainabot`. Modelled on `Custom`: **deliberately
excluded from `BotId::all()`**, so the bot roster and coordinator
dispatch are unchanged — OikosBot is an *external publisher*, not a
managed roster bot. (`+22/−1` in `bot.rs`; **84 shared-context tests
pass**.)

### Notes
- `robot-repo-automaton` has a **pre-existing, unrelated** build error
in `src/detector.rs` (regex `is_match` wants `&str`, gets `&Vec<u8>`) —
present on `main` before this change, out of scope here.
- I deliberately avoided running `cargo fmt` (the crate has pre-existing
rustfmt drift); the diff is the minimal `bot.rs` change only.

🤖 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>
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.

2 participants