review loop: retire the old skills, add-country as a doc, operating texts fitted to ismap #241

Merged
art merged 2 commits from review-loop-polish into main 2026-10-09 06:58:19 +00:00
Collaborator

This PR retires the old Claude Code skills, makes add-country a design document, and fits the review loop's operating texts (.bob/context/) to ismap. It has two commits.

d448fb4: retire the work-issue skills; fit the operating texts to ismap

Removed: .claude/skills/work-issue, .claude/skills/work-issues, and their .opencode/commands/ wrappers. Every reference is rewritten: AGENTS.md, README, docs/architecture.md, docs/mapsrv.md, the add-country text, and the comments in opencode.jsonc and .claude/settings.json.

Moved, not lost:

  • The map-report recipe now lives in docs/mapsrv.md under Bulk review, next to the format it parses. The old recipe failed with a SyntaxError (escaped quotes inside f-string expressions). It is rewritten without f-strings and was run on #170, #62 and #47.
  • "Flag a full rebuild or a wide -regeneralize, don't start it" is now an AGENTS.md convention.
  • "One worker at a time, because they share the database" is in REVIEW-LOOP.md, as one implementer at a time when the work imports.

Operating texts:

  • IMPLEMENT: a change to a layer's data proves itself with an acceptance test that fails on the current import and passes after reimporting the touched layers. The PR body gets a MUTATION: line for it and the acceptance test results, not ad-hoc SQL.
  • REVIEW-1 and REVIEW-2:
    • Reviewers never import, because the database is shared. They check a conf/ change against the current import. If the PR thread doesn't say the touched layers were reimported from this commit, that's a finding.
    • At level 1, a conf/ change to a query, mapping or layer counts as a code change, so it escalates.
  • REVIEW-2's escalation classes describe ismap's risks:
    • Money and time: import time and download size, instead of language-model cost.
    • Danger: reset-db, the data/ tree and its shared permissions, and secrets, instead of tool hosts and certificate pinning.
    • Legal: data licences.
    • Direction: changes to shared contracts or enums, and the no-OSM rule.
  • Measurements: the figures from bob-agent are restored with their numbers and labelled as bob-agent's, and a garbled sentence about mutation testing is rewritten.
  • REVIEW-LOOP: the orchestrator posts the operator's answer itself with comment-pull.

42e7a0a: add-country becomes docs/adding-a-country.md

The add-country procedure is a plan to read, not something a tool invokes, so it moves to docs/ and is listed in AGENTS.md's index next to country-requirements.md, the spec its steps satisfy. Its step 0 now describes the review loop instead of the old backlog driver: each session gets its own worktree, but there is still one database. References are updated in README, architecture.md, country-requirements.md and .gitignore. No skills are left; .claude/ holds only the legacy settings.json.

After merging

The tool hosts read these texts from a cache, so run:

bob-agent project context refresh     # ismap/code, ismap/review*, ismap/orchestrator
bob-agent project context sync ismap  # from /home/art/src/ismap: the root project pins no tool host

Not in this PR: worktrees still have no data/ link. That is #240, together with art/bob-agent#884 and art/bob-agent#885.

🤖 Generated with Claude Code

This PR retires the old Claude Code skills, makes add-country a design document, and fits the review loop's operating texts (`.bob/context/`) to ismap. It has two commits. ## d448fb4: retire the work-issue skills; fit the operating texts to ismap **Removed:** `.claude/skills/work-issue`, `.claude/skills/work-issues`, and their `.opencode/commands/` wrappers. Every reference is rewritten: AGENTS.md, README, `docs/architecture.md`, `docs/mapsrv.md`, the add-country text, and the comments in `opencode.jsonc` and `.claude/settings.json`. **Moved, not lost:** - **The map-report recipe** now lives in `docs/mapsrv.md` under *Bulk review*, next to the format it parses. The old recipe failed with a `SyntaxError` (escaped quotes inside f-string expressions). It is rewritten without f-strings and was run on #170, #62 and #47. - **"Flag a full rebuild or a wide `-regeneralize`, don't start it"** is now an AGENTS.md convention. - **"One worker at a time, because they share the database"** is in REVIEW-LOOP.md, as one implementer at a time when the work imports. **Operating texts:** - **IMPLEMENT:** a change to a layer's data proves itself with an acceptance test that fails on the current import and passes after reimporting the touched layers. The PR body gets a `MUTATION:` line for it and the acceptance test results, not ad-hoc SQL. - **REVIEW-1 and REVIEW-2:** - Reviewers never import, because the database is shared. They check a `conf/` change against the current import. If the PR thread doesn't say the touched layers were reimported from this commit, that's a finding. - At level 1, a `conf/` change to a query, mapping or layer counts as a code change, so it escalates. - **REVIEW-2's escalation classes describe ismap's risks:** - **Money and time:** import time and download size, instead of language-model cost. - **Danger:** `reset-db`, the `data/` tree and its shared permissions, and secrets, instead of tool hosts and certificate pinning. - **Legal:** data licences. - **Direction:** changes to shared contracts or enums, and the no-OSM rule. - **Measurements:** the figures from bob-agent are restored with their numbers and labelled as bob-agent's, and a garbled sentence about mutation testing is rewritten. - **REVIEW-LOOP:** the orchestrator posts the operator's answer itself with `comment-pull`. ## 42e7a0a: add-country becomes `docs/adding-a-country.md` The add-country procedure is a plan to read, not something a tool invokes, so it moves to `docs/` and is listed in AGENTS.md's index next to `country-requirements.md`, the spec its steps satisfy. Its step 0 now describes the review loop instead of the old backlog driver: each session gets its own worktree, but there is still one database. References are updated in README, `architecture.md`, `country-requirements.md` and `.gitignore`. No skills are left; `.claude/` holds only the legacy `settings.json`. ## After merging The tool hosts read these texts from a cache, so run: ```sh bob-agent project context refresh # ismap/code, ismap/review*, ismap/orchestrator bob-agent project context sync ismap # from /home/art/src/ismap: the root project pins no tool host ``` Not in this PR: worktrees still have no `data/` link. That is #240, together with art/bob-agent#884 and art/bob-agent#885. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The backlog is now worked by the bob-agent review loop (.bob/context/), so
the work-issue and work-issues skills and their opencode command wrappers
go. Every reference to them is rewritten (AGENTS.md, README, architecture,
mapsrv, add-country, the opencode and legacy Claude Code comments).
add-country stays. What the old skills knew that still applies moves
somewhere else:

- the map-report recipe -> docs/mapsrv.md under Bulk review, next to the
  format it parses. The old recipe did not parse: an escaped quote inside
  an f-string expression is a SyntaxError. It is rewritten without
  f-strings and was run on #170, #62 and #47.
- "flag a full rebuild or a wide -regeneralize, don't start it" ->
  AGENTS.md conventions.
- "one worker at a time, they share the local postgres" ->
  REVIEW-LOOP.md, as one implementer at a time when the work imports.

The operating texts, polished for this repository:

- IMPLEMENT: a data change's red-green is an acceptance test run against
  the layer before and after the reimport, with its own MUTATION: line
  shape and the acceptance tally in the PR body.
- REVIEW-1/2: reviewers never import. A conf hunk is checked against the
  current import, and a thread that does not say the touched layers were
  reimported from this head is a finding. A conf hunk that changes a
  query, mapping or layer counts as a production hunk for level 1.
- REVIEW-2's operator classes now describe ismap's risks: import time and
  download volume instead of LLM spend; reset-db, data/ and its shared
  modes, and secrets instead of tool hosts and certificate pinning; data
  licences; shared contracts and enums, and the no-OSM rule, as direction.
- The measurements from bob-agent are restored with their numbers and
  labelled as bob-agent's, instead of being kept as vague claims. The
  mutation sentence that read as garbled is rewritten.
- REVIEW-LOOP: the orchestrator posts the operator's answer itself with
  comment-pull, which is allowed at every write level.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The repeatable shape for adding a country is a plan people and sessions
read, not a procedure a harness invokes, so it moves out of
.claude/skills/ and is reached from AGENTS.md's index like the other
documents (next to country-requirements.md, the spec its steps satisfy).
The skill frontmatter becomes an introduction, "this skill" becomes "this
document", and the step that assumed the old backlog driver now names the
review loop, which gives each session its own worktree but still shares
one database.

References are updated in AGENTS.md, README, architecture.md,
country-requirements.md and .gitignore. With add-country gone, no skills
are left; .claude/ holds only the legacy settings.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
art merged commit 42e7a0a71d into main 2026-10-09 06:58:19 +00:00
art deleted branch review-loop-polish 2026-10-09 06:58:19 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
art/ismap!241
No description provided.