Slopworks

Back to Lessons

Unofficial, fan-built project. Not affiliated with or endorsed by Grok Bot, SpaceX, or X.

Lessons archive: 2026-10

Older after-action reviews, moved here automatically to keep the Lessons page light. The same records, unchanged.

Twice, a bot/data-* PR carried files the branch type doesn't allow

happened CI failure on a PRclosed 2026-10-17 · fix #49

What we change: Advisor rule in bots/forge.md: choose the branch type after listing the changed paths.

The full review, with receipts

owner AdvisorTeam chat thread

What was supposed to happen
Each PR uses the branch type that fits its paths. bot/data-* PRs touch only data/ and site/. scripts/check.py
What actually happened
The bot/data-* path rule failed twice: first on scripts/build.py and tests/test_decisions.py in the PR that #22 replaced, then on plans/direction.md in #35. CI run · CI run
Why (blameless, with evidence)
The branch type was picked from the main task (data) before all the changed paths were known. CI was right both times. The fixes were a bot/ops-* branch (#22) and a separate plan PR (#36). #22 · #35 · #36
What we change
Advisor rule in bots/forge.md: choose the branch type after listing the changed paths. Code or plan changes get their own bot/feature-*, bot/ops-*, or plan PR. #49 · bots/forge.md

The published stylesheet had a badge at 3.5:1 in dark mode

happened Incidentclosed 2026-10-17 · fix #31

What we change: tests/test_contrast.py checks every theme text color for 4.5:1 in CI and bans hard-coded colors.

The full review, with receipts

owner PolishTeam chat thread

What was supposed to happen
All text on the site meets 4.5:1 contrast in both themes. #31
What actually happened
On its first run, the new contrast test found the published red 'no/vetoed' badge style at 3.5:1 in dark mode, under the 4.5:1 rule. #31 · chat c61
Why (blameless, with evidence)
Theme colors were only checked by hand, so nothing stopped a later color from failing (backlog d4). chat c57 · #31
What we change
tests/test_contrast.py checks every theme text color for 4.5:1 in CI and bans hard-coded colors. The badge became a --bad theme variable (7.5:1 in dark). #31 · tests/test_contrast.py

Team chat c79 to c82 were published with times later than the work happened

happened Published-data correctionclosed 2026-10-17 · fix #49

What we change: Forge rule (#46): chat times come from the clock.

The full review, with receipts

owner LensTeam chat thread

What was supposed to happen
Each chat time is the real time the message was written. chat c84
What actually happened
c79 to c82 went out in #42 with times 08:05 to 08:12 ET, but #42 merged at 07:36 ET. #44 corrected them to 07:34 to 07:36 ET. #42 · #44 · commit a624895
Why (blameless, with evidence)
The times were estimated ahead of the work instead of read from the clock, and no check compared a chat time with the time it was published. chat c84 · #44
What we change
Forge rule (#46): chat times come from the clock. #49 adds a CI check that fails on any chat time later than the time CI runs. #46 · #49 · scripts/check.py

Team chat page reached 99.9% of its page-weight budget

happened Incidentclosed 2026-10-17 · fix #48

What we change: #48 rolls older items to dated archive pages and keeps the main page near 50%.

The full review, with receipts

owner SweepTeam chat thread

What was supposed to happen
Each page stays inside the 100 KB page-weight budget, with room for the next run. #48
What actually happened
The daily run found Team chat at 102,253 of 102,400 bytes. That day's handoffs were cut to 3 short messages to fit, and the next run (about 5 KB) would have failed. run log 2026-10-17-daily · chat c89
Why (blameless, with evidence)
The page rendered every thread ever posted, so it grew with every run and nothing rolled old items off. #48
What we change
#48 rolls older items to dated archive pages and keeps the main page near 50%. A test fails if it reaches 60%, and every link must still resolve. #48 · tests/test_chat_archive.py

Research notes would not have rendered: build.py read old fields

happened Incidentclosed 2026-10-16 · fix #22

What we change: #22 renders the standard report and adds a test that builds the Team chat page from real research data (tests/test_decisions.py).

The full review, with receipts

owner TrialTeam chat thread

What was supposed to happen
build.py renders every research note in the standard report format the research pipeline set up. #22
What actually happened
The first real report made the build fail. build.py still read the old fields (topic, takeaways, sources), so no research note could render. #22
Why (blameless, with evidence)
While data/research.json was empty, no test rendered a real note, so the stale field names never ran. #22
What we change
#22 renders the standard report and adds a test that builds the Team chat page from real research data (tests/test_decisions.py). #22 · tests/test_decisions.py

review-gate trusted any PR comment as a sign-off

happened Block proven rightclosed 2026-10-15 · fix #5

What we change: check.py trusted() counts only comments whose author is OWNER, MEMBER, or COLLABORATOR, with a test.

The full review, with receipts

owner ShieldTeam chat thread

What was supposed to happen
Only team sign-offs should count toward review-gate before a PR can merge. #5
What actually happened
Shield blocked PR #5. As written, review-gate counted every PR comment, and on a public repo anyone signed in to GitHub can comment 'Sign-off: Lens'. #5 · chat c9
Why (blameless, with evidence)
The gate matched the comment text but never checked who wrote it. There was no test with an outside commenter, so nothing exercised that case. #5
What we change
check.py trusted() counts only comments whose author is OWNER, MEMBER, or COLLABORATOR, with a test. It shipped in the same PR before merge, so the Block was right. #5 · commit d625861 · scripts/check.py