Skip to content

Commit 03ba268

Browse files
committed
feat(ci): add BM Bossbot PR gate
Signed-off-by: phernandez <paul@basicmachines.co>
1 parent de53e0e commit 03ba268

23 files changed

Lines changed: 2415 additions & 17 deletions

.agents/skills/basic-machines-review/SKILL.md renamed to .agents/skills/code-review/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: basic-machines-review
2+
name: code-review
33
description: Use when reviewing Basic Machines code for house style, architecture risk, pre-merge hardening, or whether a change fits basic-memory/basic-memory-cloud conventions.
44
license: MIT
55
---
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
name: fix-pr-issues
3+
description: Use when addressing Basic Memory pull request feedback, failed checks, or BM Bossbot blockers from Codex.
4+
---
5+
6+
# Fix Basic Memory PR Issues
7+
8+
Resolve PR feedback and failed checks, then wait for BM Bossbot to approve the
9+
new head SHA. This skill never merges a PR.
10+
11+
## Gather
12+
13+
1. Identify the PR:
14+
- `gh pr view --json number,url,headRefOid,mergeStateStatus,statusCheckRollup`
15+
16+
2. Collect feedback:
17+
- PR comments and review summaries
18+
- inline review comments and unresolved review threads
19+
- failed GitHub Actions jobs and relevant logs
20+
- the managed `BM_BOSSBOT_SUMMARY` block in the PR body
21+
22+
3. Build a short issue ledger:
23+
- source
24+
- concrete problem
25+
- expected fix
26+
- verification needed
27+
28+
## Fix
29+
30+
1. Address one ledger item at a time.
31+
2. Read each file in full before editing it.
32+
3. Keep diffs narrow and preserve unrelated user changes.
33+
4. Run the smallest meaningful verification first, then widen as needed.
34+
5. Commit with `git commit -s` when code or docs changed.
35+
36+
## Push And Recheck
37+
38+
1. Push the branch.
39+
2. Watch checks for the new `headRefOid`.
40+
3. Wait for the required `BM Bossbot Approval` status to pass on that exact SHA.
41+
4. If BM Bossbot reviews an older SHA, treat the approval as stale and keep
42+
waiting for the current one.
43+
44+
## Reply
45+
46+
For each addressed comment or blocker, reply with the fix commit, verification
47+
run, and current BM Bossbot status. Do not resolve or dismiss substantive
48+
feedback without evidence.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
interface:
2+
display_name: "Fix PR Issues"
3+
short_description: "Address PR feedback and BM Bossbot blockers"
4+
icon_small: "./assets/icon.svg"
5+
icon_large: "./assets/icon.svg"
6+
brand_color: "#2563EB"
7+
default_prompt: "Use $fix-pr-issues to address PR feedback and wait for BM Bossbot Approval on the latest head SHA."
Lines changed: 5 additions & 0 deletions
Loading
Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,256 @@
1+
---
2+
name: infographics
3+
description: Use when generating Basic Memory PR, changelog, release, or weekly infographics from Codex.
4+
---
5+
6+
# Basic Memory Infographics
7+
8+
Generate repository visuals with evidence-grounded content and canonical output
9+
paths. The file names still say "infographic", but the image may be an
10+
infographic, map, poster, scene, tableau, cover, or other visual form when that
11+
better describes the intent of the PR. PR images are non-gating BM Bossbot
12+
artifacts; changelog and release-summary images are manual evidence-pack
13+
workflows.
14+
15+
## Output Contract
16+
17+
- Base output directory: `docs/assets/infographics/`
18+
- PR infographic: `docs/assets/infographics/pr-<number>.webp`
19+
- Changelog infographic: `docs/assets/infographics/changelog.webp`
20+
- Weekly infographic:
21+
- This is always a 2-Week Retro window: previous ISO week through current ISO
22+
week (`start-week = current-week - 1`, `end-week = current-week`).
23+
- Same year window: `docs/assets/infographics/<year>-w<start-week>-w<end-week>.webp`
24+
- Cross-year window:
25+
`docs/assets/infographics/<start-year>-w<start-week>-<end-year>-w<end-week>.webp`
26+
27+
## PR Mode
28+
29+
PR mode uses the BM Bossbot summary block as source material. Do not hand-write
30+
claims that are not present in the PR body.
31+
32+
1. Fetch the PR body:
33+
34+
```bash
35+
gh pr view <number> --json body --jq '.body // ""' > /tmp/bm-pr-body.md
36+
```
37+
38+
2. Generate the canonical asset:
39+
40+
```bash
41+
uv run --script scripts/generate_pr_infographic.py \
42+
--pr-number <number> \
43+
--pr-body-file /tmp/bm-pr-body.md \
44+
--theme "<optional visual theme>" \
45+
--visual-format auto \
46+
--provenance-output /tmp/bm-infographic-provenance.md \
47+
--output docs/assets/infographics/pr-<number>.webp
48+
```
49+
50+
If the PR body contains a managed infographic theme block, the script reads it
51+
automatically:
52+
53+
```markdown
54+
<!-- BM_INFOGRAPHIC_THEME:start -->
55+
<theme>
56+
<!-- BM_INFOGRAPHIC_THEME:end -->
57+
```
58+
59+
Before spending an image call, test the prompt path locally:
60+
61+
```bash
62+
uv run --script scripts/generate_pr_infographic.py \
63+
--pr-number <number> \
64+
--pr-body-file /tmp/bm-pr-body.md \
65+
--theme "<optional visual theme>" \
66+
--visual-format auto \
67+
--output docs/assets/infographics/pr-<number>.webp \
68+
--print-prompt
69+
```
70+
71+
`--dry-run` is an alias for `--print-prompt`; both print the final prompt and
72+
exit without calling OpenAI.
73+
74+
Use `--visual-format auto` by default so the model can choose the strongest
75+
form. Use `--visual-format infographic` when the user wants a structured,
76+
text-forward map/infographic. Use `--visual-format image` when the user wants an
77+
actual editorial scene, movie poster, painting, photograph, tableau, cover, or
78+
symbolic visual moment with minimal text.
79+
80+
When the image is generated, also write provenance with
81+
`--provenance-output <path>`. BM Bossbot publishes that managed block into the
82+
PR body with these markers:
83+
84+
```markdown
85+
<!-- BM_INFOGRAPHIC_PROVENANCE:start -->
86+
...
87+
<!-- BM_INFOGRAPHIC_PROVENANCE:end -->
88+
```
89+
90+
The provenance block records the generated asset path, image model, size,
91+
quality, visual format, theme source, theme or category-choice instruction, and
92+
the exact "Image prompt sent to" the image model. When the Images API provides
93+
a revised prompt, the block records that model interpretation too. Treat this
94+
block as debugging and creative provenance only; it is not a merge gate.
95+
96+
The PR infographic is visual support only. The authoritative merge gate is the
97+
GitHub commit status named `BM Bossbot Approval`.
98+
99+
## Changelog Mode
100+
101+
Build an evidence pack before writing a prompt:
102+
103+
- diff truth source: merged PR diffs, merge commits, or local reconstructed diffs
104+
- changed-file orientation: `git diff --stat` plus key file reads
105+
- impact ledger: before/after outcomes tied to actual changes
106+
- discard list: misleading titles, reverted work, rename-only churn, speculative TODOs
107+
- chosen visual format: infographic, map, poster, scene, tableau, cover, or let
108+
the model choose
109+
- chosen BM style category: exactly one category from the selection pool below
110+
111+
Read these references before drafting the prompt:
112+
113+
- `references/prompt-blueprint.md`
114+
- `references/style-balance.md`
115+
116+
Read the current `CHANGELOG.md` entries and include the latest meaningful
117+
changes.
118+
119+
## Style And Category Selection
120+
121+
Select exactly one BM style category per infographic based on semantic fit. The
122+
visual language should be recognizable and tasteful, while staying
123+
business-readable.
124+
125+
Also choose the visual form that best communicates the change. Use an
126+
infographic or map when the work has several discrete facts, gates, checks, or
127+
before/after points. Use a poster, scene, tableau, cover image, illustrated
128+
moment, or other image when the PR has a clear intent that is better described
129+
as a visual story. If neither is obvious, let the model choose.
130+
131+
BM category pool:
132+
133+
- computer science college textbooks: SICP-style diagrams, algorithms lectures,
134+
compiler pipelines, automata, database systems, type theory, operating systems
135+
- classic literature subjects: sea voyages, gothic manors, Dickensian city maps,
136+
Austen social graphs, library marginalia, travel journals
137+
- fantasy/D&D-inspired: quest maps, dungeon keys, guild ledgers, spellbooks,
138+
bestiaries, tavern notice boards; no copyrighted settings
139+
- Music: Metal, Hard Rock, Punk, techno, soul, reggae bands; no pop music, no
140+
direct band logos, album covers, or musician likenesses
141+
- sci-fi: Star Wars inspired knockoff, Spaceballs-adjacent space opera, fleet
142+
routes, mission consoles, contraband manifests; avoid copyrighted characters,
143+
logos, or named fictional universes
144+
- Conan the barbarian-inspired sword-and-sorcery: ruined temples, desert routes,
145+
battle standards, ancient maps; no named character likenesses
146+
- Comic books: issue covers, splash pages, action-panel maps, caption boxes,
147+
halftone energy, clean sound-effect typography
148+
- French new wave movies: poster style, stark typography, city route maps,
149+
jump-cut sequencing, high-contrast editorial photography cues
150+
- WWII propaganda posters: home-front public-information poster language,
151+
logistics arrows, ration charts, mobilization maps, bold simplified figures;
152+
no real-world party symbols, hate imagery, dehumanizing slogans, or false
153+
historical claims
154+
- Italian movie posters: hand-painted drama, bold credits, expressive color,
155+
route-map collage, 1960s or 1970s cinema energy; no direct film titles or
156+
actor likenesses
157+
- Shakespeare: stage maps, acts and scenes, dramatis personae, royal courts,
158+
backstage cue sheets
159+
- Greek mythology: temple diagrams, constellation routes, hero's journey maps,
160+
oracle tablets, labyrinths, ship routes
161+
- noir detective boards: case files, red-string maps, typed evidence labels,
162+
precinct wall charts
163+
- NASA mission-control dashboards: launch timelines, telemetry maps, orbital
164+
routes, status boards
165+
- space exploration and astronomy: celestial atlases, observatory charts,
166+
star-field maps, orbital mechanics diagrams, planetary survey routes,
167+
telescope annotations, mission trajectories, deep-space timelines
168+
- paintings: abstract painting, classical landscape, Remington-inspired western
169+
action painting, Rembrandt-inspired chiaroscuro, historical mural, stormy
170+
seascape, allegorical editorial painting
171+
- classic black-and-white photography: documentary field report, newsroom
172+
archive print, editorial photo essay, street photography, high-contrast
173+
darkroom print, contact sheet, civic infrastructure photograph
174+
- 80's action movies: practical explosions, smoky backlit warehouses, neon city
175+
streets, helicopter searchlights, mission dossiers, heroic silhouettes,
176+
high-stakes countdowns, painted ensemble posters; no direct actor likenesses,
177+
real film titles, franchise marks, or catchphrases
178+
- alchemy manuscripts: transformation diagrams, annotated symbols, recipe-like
179+
process maps, illuminated margins
180+
- brutalist civic planning: transit maps, concrete signage, zoning blocks,
181+
infrastructure diagrams
182+
183+
Selection rules:
184+
185+
- Pick one category only; do not create mixed mashups.
186+
- Pick the most appropriate visual form; do not force a text-heavy infographic
187+
when an actual scene, poster, painting, photograph, tableau, or cover would
188+
communicate the intent better.
189+
- Match metaphor to content, but do not overthink it. The category is a creative
190+
catalyst, not a semantic constraint.
191+
- Use a polished upscaled editorial rendering direction: smooth anti-aliased
192+
text, high contrast, clean edges, readable labels.
193+
- Go bold with a map backbone when using an infographic or map. For scene-first
194+
images, make the category drive the composition through a readable staged
195+
moment, editorial composition, symbolic environment, route, artifact, or
196+
visual metaphor.
197+
- Keep the structure literal enough to aid understanding, but not so heavy that
198+
it obscures engineering meaning.
199+
- Give the image generator creative latitude on layout, structure, color palette,
200+
and visual metaphors. Be precise about what content to show, loose about how
201+
to show it.
202+
- Do not use copyrighted characters, logos, or named fictional universes. Use
203+
genre cues, knockoffs, and original compositions instead.
204+
205+
## Content-First Aesthetic Contract
206+
207+
The meaning must be readable and clearly hierarchical. Everything else is
208+
creative territory: visual format, layout, visual metaphors, decorative
209+
elements, color choices, and category-specific visual language.
210+
211+
Hierarchy:
212+
213+
1. Meaning: what shipped, what changed, and why it matters must be clear.
214+
2. If the image uses text, labels, sections, or evidence bullets, they must be
215+
legible.
216+
3. The selected category's visual DNA should drive the composition, whether that
217+
is a readable map structure, a poster, a scene, a tableau, or a symbolic
218+
object arrangement.
219+
4. Do not play it safe. A visually striking image that someone wants to look at
220+
beats a correct but boring one.
221+
222+
Hard rules:
223+
224+
- Content sections and labels must be readable when present. Text cannot be
225+
obscured by decorations.
226+
- Do not use lore-heavy copy that competes with engineering or business meaning.
227+
- Every prompt must include a clear composition cue: map regions, route lines,
228+
checkpoints, node graphs, a staged scene, a poster composition, a symbolic
229+
tableau, or a hero object.
230+
- Do not over-prescribe exact coordinates or panel geometry; give a composition
231+
backbone and let the model compose around it.
232+
233+
## Generation
234+
235+
1. Write the final prompt to a temporary markdown file.
236+
2. Generate with the shared image helper:
237+
238+
```bash
239+
uv run --script scripts/generate_infographic.py \
240+
--prompt-file /tmp/bm-infographic-prompt.md \
241+
--output docs/assets/infographics/<name>.webp
242+
```
243+
244+
3. Verify the image exists and is readable before reporting success.
245+
246+
## Quality Bar
247+
248+
- Tell a concrete before/after value story, not vague improvement claims.
249+
- Stay understandable for both engineers and non-technical stakeholders.
250+
- Use plain-language section titles and labels when text is present.
251+
- Include clear visual hierarchy: title, sections, evidence bullets, staged
252+
focal point, or symbolic scene.
253+
- Avoid invented facts; only use provided source material.
254+
- Favor shipped outcomes over intermediate or reverted work.
255+
- Preserve readability with high contrast, non-tiny labels, and uncluttered
256+
layout.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
interface:
2+
display_name: "Infographics"
3+
short_description: "Generate Basic Memory repo infographics"
4+
icon_small: "./assets/icon.svg"
5+
icon_large: "./assets/icon.svg"
6+
brand_color: "#2563EB"
7+
default_prompt: "Use $infographics to generate a Basic Memory PR or changelog infographic with canonical output paths."
Lines changed: 5 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)