Skip to content

Commit ba70f04

Browse files
Propose CH-015: capture build/distribution/guide/downloader idea as a plan
Adds G-003 (proposed goal: legacy robots easy to obtain, wrap, and run) and P-002 (draft plan serving it, four milestones: Gradle version-catalog cleanup, artifact distribution, a usage guide pointing to rumble.robowiki.net, and bot-acquisition tooling with feasibility left open). Regenerates the goals and plans README indexes. Flags an M-prefix identity-ledger gap in open-questions.md: P-001's existing milestone IDs were never registered with clue id, so `next M` offers colliding numbers; this plan's milestones continue P-001's sequence directly instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6pPpd8gWaqE3w1PWYr4qn
1 parent 7dc8046 commit ba70f04

8 files changed

Lines changed: 108 additions & 0 deletions

File tree

.clue/id-ledger.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,15 @@ events:
140140
- {id: OQ-005, kind: numeric, state: reserved, prefix: OQ, component: "5"}
141141
- {id: TASKS-007, kind: numeric, state: live, prefix: TASKS, component: "7"}
142142
- {id: OQ-005, kind: numeric, state: live, prefix: OQ, component: "5"}
143+
- {id: CH-015, kind: numeric, state: reserved, prefix: CH, component: "15"}
144+
- {id: G-003, kind: numeric, state: reserved, prefix: G, component: "3"}
145+
- {id: P-002, kind: numeric, state: reserved, prefix: P, component: "2"}
146+
- {id: M-001, kind: numeric, state: reserved, prefix: M, component: "1"}
147+
- {id: M-002, kind: numeric, state: reserved, prefix: M, component: "2"}
148+
- {id: M-003, kind: numeric, state: reserved, prefix: M, component: "3"}
149+
- {id: M-004, kind: numeric, state: reserved, prefix: M, component: "4"}
150+
- {id: G-003, kind: numeric, state: live, prefix: G, component: "3"}
151+
- {id: P-002, kind: numeric, state: live, prefix: P, component: "2"}
143152
high-water:
144153
- {id: ADR-002, kind: numeric, state: reserved, prefix: ADR, component: "2"}
145154
- {id: AN-014, kind: numeric, state: reserved, prefix: AN, component: "14"}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Open questions
2+
3+
## Milestone-ID (`M-xxx`) ledger gap
4+
5+
`clue id next M` returned `M-001` through `M-004` as the next free milestone identities, but `docs/plans/P-001-bridge-parity-campaign.md` already declares `M-001` through `M-007` and `M-101` through `M-143` in its milestone tables — confirmed live by `clue context M-001` resolving to `P-001`. The `.clue/id-ledger.yaml` had zero prior entries for the `M` prefix, so the allocator has no record of `P-001`'s existing milestone IDs and offered ones that would collide if used.
6+
7+
This change did not use the allocator's output for milestones. Instead, `P-002`'s four milestones are numbered `M-144``M-147`, continuing `P-001`'s existing sequence directly in the plan file, matching how `P-001`'s own milestones appear to have been authored (not through `clue id next M`, since the ledger had no trace of them). The four colliding reservations the allocator produced (`M-001``M-004`) were not released — the ledger is append-only and hand-editing it is out of scope here — so they sit unused in `.clue/id-ledger.yaml`.
8+
9+
This is not blocking for this change (`clue validate` passes cleanly with `M-144``M-147` used directly in prose), but it means the `M` prefix in this repository's identity ledger is out of sync with the corpus and `clue id next M` cannot currently be trusted for milestone allocation. Flagging for a human decision: whether to backfill the ledger with `P-001`'s existing milestone IDs (so future `next M` calls resume correctly at `M-148`), or whether milestone IDs are intentionally kept outside ledger tracking and numbered by direct inspection as done here.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
links: [G-003]
3+
---
4+
5+
# CH-015 — Record the build/distribution/guide/downloader idea as a plan
6+
7+
## What
8+
9+
Adds `G-003` (a new, `proposed` goal: legacy robots should be easy to obtain, wrap, and run) and `P-002` (a `draft` plan serving it, with four milestones: Gradle version-catalog cleanup, artifact build & distribution, a usage guide pointing to https://rumble.robowiki.net/, and bot-acquisition tooling whose mechanism is left open pending feasibility investigation). Regenerates the `docs/goals/README.md` and `docs/plans/README.md` indexes.
10+
11+
## Why
12+
13+
The user asked, in a prior conversation, to capture a future improvement idea — better Gradle/version-catalog hygiene for `robocode-api` and `robots-wrapper`, publishable artifacts, a usage guide linking to the rumble bot archive, and eventually a tool to download bots and run `robots-wrapper` on them — as a durable corpus artifact rather than a private note. This change creates that plan. No implementation work against the plan's own milestones is in scope here; the plan is deliberately `draft`/`todo` throughout, recording intent for later pickup.
14+
15+
This change is not plan-less: it exists to create `P-002`, so it links the goal (`G-003`) that plan serves rather than a pre-existing plan item.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Tasks
2+
3+
- [x] Check `clue validate --intent` for a stated corpus vision before proposing new goal/plan content
4+
- [x] Allocate `G-003` and draft the goal artifact (`docs/goals/G-003-legacy-robots-are-easy-to-obtain-wrap-and-run.md`), `status: proposed`
5+
- [x] Allocate `P-002` and draft the plan artifact (`docs/plans/P-002-build-distribution-and-bot-acquisition.md`), `status: draft`, linking `G-003`, with four milestones (build/catalog cleanup, artifact distribution, usage guide, bot-acquisition tooling)
6+
- [x] Regenerate `docs/goals/README.md` and `docs/plans/README.md` indexes with `clue scaffold`
7+
- [x] Mark `G-003` and `P-002` live in the identity ledger and confirm `clue validate` passes
8+
- [ ] Record the stray off-ledger milestone-ID numbering convention (`M-144`..`M-147` chosen by continuing P-001's sequence rather than via `clue id next M`, since that prefix has no prior ledger entries despite P-001 already using `M-001`..`M-143` in prose) as an open question for the human to confirm or correct
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
id: G-003
3+
type: goal
4+
status: proposed
5+
links: []
6+
title: Legacy robots are easy to obtain, wrap, and run on Tank Royale
7+
provenance: inferred
8+
reversal-cost: low
9+
---
10+
11+
# G-003 — Legacy robots are easy to obtain, wrap, and run on Tank Royale
12+
13+
## Who wants it
14+
15+
Everyone `G-001` promises fidelity to, once they try to actually reach it: newcomers trying the bridge for the first time, anyone running a personal or club rumble, and the project itself. The parity campaign (`P-001`, milestone `M-006`) already depends on a local rumble jar collection existing on disk; there is no documented or automated way to build one today.
16+
17+
## What they want
18+
19+
To go from "here is a directory of classic Robocode robot jars" — or from nothing at all — to "these robots are running as Tank Royale bots." That means a build that produces artifacts someone can download rather than compile from source, and a guide that says where bots come from (https://rumble.robowiki.net/) and how to wrap them, replacing the current undocumented manual steps.
20+
21+
## Why it matters
22+
23+
Fidelity work has no audience if nobody can practically reach it. Today, using `robocode-api` and `robots-wrapper` means building from source with per-module hardcoded dependency versions and no shared catalog, no published jars, and a module README that stops at "copy this jar into a `lib` folder you create yourself." A user who cannot get the bridge running cannot benefit from anything `G-001` or `G-002` prove about it.
24+
25+
## What this does not commit to
26+
27+
Redistributing rumble bot jars itself, or guaranteeing that any particular automation against rumble.robowiki.net (scraping, or otherwise) is feasible or welcome there — that feasibility is explicitly open and belongs to whichever plan work picks it up. Nor does it commit to a specific artifact-publishing mechanism (Maven Central vs. GitHub Releases); that is an implementation choice, not a goal-level one.

docs/goals/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ A goal artifact answers three questions: who wants it, what they want, and why i
77
<!-- clue:index:start -->
88
- [G-001 — Legacy Robocode robots run unmodified on Tank Royale and behave as they do on classic Robocode](G-001-legacy-robots-behave-the-same-on-tank-royale.md) · `accepted` — The people who wrote the robots, and the people who still compete with them.
99
- [G-002 — Every test proves the criterion its name claims](G-002-conformance-evidence-proves-the-criterion-it-names.md) · `proposed` — Anyone reading the corpus to find out what is proven — a maintainer deciding whether a milestone can close, a reviewer deciding whether a criterion may leave `@draft`, the next agent picking up the…
10+
- [G-003 — Legacy robots are easy to obtain, wrap, and run on Tank Royale](G-003-legacy-robots-are-easy-to-obtain-wrap-and-run.md) · `proposed` — Everyone `G-001` promises fidelity to, once they try to actually reach it: newcomers trying the bridge for the first time, anyone running a personal or club rumble, and the project itself.
1011
<!-- clue:index:end -->
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
id: P-002
3+
type: plan
4+
status: draft
5+
links: [G-003]
6+
title: Make the bridge buildable, distributable, and easy to point at real robots
7+
provenance: inferred
8+
reversal-cost: low
9+
---
10+
11+
# P-002 — Make the bridge buildable, distributable, and easy to point at real robots
12+
13+
## The campaign
14+
15+
`G-003` asks for an easy path from "I want to run legacy robots on Tank Royale" to "I have them running." This campaign is that path, sequenced so each milestone gives the next one something to build on: a fat jar isn't worth publishing until its dependency versions are deliberate rather than accidental, a guide isn't worth writing until there's something a reader can download, and a downloader isn't worth building until the wrapper it drives has a stable, documented way to run.
16+
17+
`M-147`'s exit criterion is deliberately open on mechanism. Rumble.robowiki.net has no documented bulk-download API, and whether a scraper against its live pages is feasible or welcome there is unknown; forcing that choice at plan time would commit the campaign to an approach nobody has yet checked is viable.
18+
19+
## Milestones
20+
21+
| ID | Milestone | Exit criterion | Status |
22+
|---|---|---|---|
23+
| M-144 | build cleanup + version catalog | `robocode-api`, `robots-wrapper`, and `conformance-test` share a Gradle version catalog (`gradle/libs.versions.toml`) for their dependency and plugin versions, and use a consistent Java target declaration style. `./gradlew build` succeeds across all modules from the catalog-sourced versions. | todo |
24+
| M-145 | artifact build & distribution | A tagged build produces downloadable `robocode-api` and `robots-wrapper` jars (via `maven-publish`, GitHub Releases, or an equivalent mechanism) that a fresh clone can fetch and run without building from source. | todo |
25+
| M-146 | usage guide | A guide documents the end-to-end flow from an existing robot jar to a running Tank Royale bot, replaces or removes the current undocumented manual `lib`-folder step, and points readers to https://rumble.robowiki.net/ as a source of robot jars. | todo |
26+
| M-147 | bot acquisition tooling | A documented, feasible acquisition path exists for building a local bot collection — either scripted downloading or a documented pointer to an existing bundle, whichever investigation at implementation time finds workable — and running it against `robots-wrapper` produces correctly wrapped bot directories for a sample set of bots. | todo |
27+
28+
## Why this order
29+
30+
`M-144` comes first because `M-145`'s published artifacts are only worth having if their dependency versions were chosen deliberately; publishing first would just make the current accidental version drift (`robocode-api` and `conformance-test` at `0.5.0`, `robots-wrapper` independently at `0.3.1`, every dependency version hardcoded per module) a public commitment instead of an internal one.
31+
32+
`M-146` follows `M-145` because a guide that tells someone to download an artifact that doesn't exist yet is worse than no guide — it would need to be rewritten once publishing lands anyway.
33+
34+
`M-147` is last because it is the only milestone whose mechanism is not yet known to be feasible, and because it depends on `robots-wrapper` already having the stable, documented invocation that `M-146` establishes. Automating a step that isn't yet reliably documented for a human would just automate the wrong thing.
35+
36+
## What would change this plan
37+
38+
If investigation for `M-147` finds that rumble.robowiki.net cannot be scraped (technically or by its own terms) and no equivalent bundle exists to point to instead, that milestone's exit criterion would need to be revised to something narrower than "acquisition tooling" — for example, a curated instructions page rather than a tool. That is a semantic change to the milestone's promise and needs the same human-accepted revision any other plan-promise change does.

docs/plans/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ Every full change proposal names the plan item it serves, or explicitly declares
1010

1111
<!-- clue:index:start -->
1212
- [P-001 — Make the bridge's parity claims measurable, then close the gaps it measures](P-001-bridge-parity-campaign.md) · `active` — The campaign, sequenced so the instrument is built before the gaps it finds are closed.
13+
- [P-002 — Make the bridge buildable, distributable, and easy to point at real robots](P-002-build-distribution-and-bot-acquisition.md) · `draft``G-003` asks for an easy path from "I want to run legacy robots on Tank Royale" to "I have them running." This campaign is that path, sequenced so each milestone gives the next one something to build…
1314
<!-- clue:index:end -->

0 commit comments

Comments
 (0)