Board skill: CTO draft #40 was filed with the CISO draft body byte-for-byte, losing the CTO record #49

Open
opened 2026-08-23 17:33:10 -04:00 by logan · 1 comment
Owner

Board minutes #42 (2026-08-23) - Ratify BUSINESS_MODEL.md. - process defect found while chairing the first board sitting.

Issue #40, titled Board 2026-08-23 - Ratify BUSINESS_MODEL.md - CTO draft and labelled role:cto, has a body byte-identical to #39 (CISO draft): same position paragraph, same five findings, same "Needs a CEO ruling" list ending in a CISO budget question. The CTO actual findings never reached the record.

This is not cosmetic. The lost findings were the most consequential of the meeting (no AI cost accounting anywhere; per-system gating unlinked to billing) and had to be re-derived from source by the chair before a ruling could be made - see minutes #42 Conflict 0. Had the chair taken the record at face value, the board would have ratified a pricing model with a silent hole in it.

To fix in .claude/skills/board/SKILL.md step 2: the fan-out must guard against one exec draft overwriting or being templated from another. At minimum the CEO step should diff the four draft bodies and refuse to proceed on a duplicate - a cheap check.

Per minutes #42 Dissent, the CTO is not bound by the chair reconstruction and may file a correction; if a correction materially contradicts Conflict 0, minutes #42 re-opens on that point only.

Owner: COO (process). Date: before the next board sitting.

Board minutes #42 (2026-08-23) - Ratify BUSINESS_MODEL.md. - process defect found while chairing the first board sitting. Issue **#40**, titled `Board 2026-08-23 - Ratify BUSINESS_MODEL.md - CTO draft` and labelled `role:cto`, has a body **byte-identical to #39 (CISO draft)**: same position paragraph, same five findings, same "Needs a CEO ruling" list ending in a CISO budget question. The CTO actual findings never reached the record. This is not cosmetic. The lost findings were the most consequential of the meeting (no AI cost accounting anywhere; per-system gating unlinked to billing) and had to be re-derived from source by the chair before a ruling could be made - see minutes #42 Conflict 0. Had the chair taken the record at face value, the board would have ratified a pricing model with a silent hole in it. **To fix in `.claude/skills/board/SKILL.md` step 2:** the fan-out must guard against one exec draft overwriting or being templated from another. At minimum the CEO step should diff the four draft bodies and refuse to proceed on a duplicate - a cheap check. Per minutes #42 Dissent, **the CTO is not bound by the chair reconstruction and may file a correction**; if a correction materially contradicts Conflict 0, minutes #42 re-opens on that point only. Owner: COO (process). Date: before the next board sitting.
Author
Owner

Recurrence, 2026-08-25 — and this issue is now lapsed.

The board skill filed the COO draft for the 2026-08-25 sitting on #69 twice — #70 at 09:28 and #71 at 09:29 — during the unattended morning run. The bodies are identical apart from dash encoding (em-dash vs --), i.e. the first POST was retried after an encoding/transport failure and both landed.

This issue now covers two distinct manifestations of one root cause:

  1. #40 (original): CTO draft filed with the CISO draft body — wrong content, one issue.
  2. #70/#71 (new): correct content, filed twice — no idempotency, no pre-check for an existing draft with the same title.

Root cause in both: draft creation is a blind POST with no pre-search and no post-verify. The gitea skill's duplicate-search rule ("search open AND closed first") is applied to work issues but not to minutes issues, and the board skill does not re-read what it created.

Fix shape: before filing any draft, GET issues?state=all and match on the exact meeting title string; if a draft with that title exists, comment on it instead of creating a second. After filing, re-read the created issue and assert the returned body length matches what was sent.

This issue was due "before the next board sitting". That sitting is the one that just reproduced the bug, so the due date has lapsed.

Separate and worse: the 09:23 run left the 2026-08-25 sitting incomplete — COO draft only, no CTO/CISO/CMO drafts and no final minutes, on an agenda item the owner filed personally (#69). A duplicate draft is noise; an abandoned sitting is a missed answer to the owner. The 21:23 run is completing it.

Refs #70, #71, #69.

**Recurrence, 2026-08-25 — and this issue is now lapsed.** The board skill filed the COO draft for the 2026-08-25 sitting on #69 **twice** — #70 at 09:28 and #71 at 09:29 — during the unattended morning run. The bodies are identical apart from dash encoding (em-dash vs `--`), i.e. the first POST was retried after an encoding/transport failure and both landed. This issue now covers two distinct manifestations of one root cause: 1. **#40 (original):** CTO draft filed with the CISO draft body — wrong content, one issue. 2. **#70/#71 (new):** correct content, filed twice — no idempotency, no pre-check for an existing draft with the same title. Root cause in both: draft creation is a blind POST with no pre-search and no post-verify. The `gitea` skill's duplicate-search rule ("search open AND closed first") is applied to *work* issues but not to *minutes* issues, and the board skill does not re-read what it created. **Fix shape:** before filing any draft, `GET issues?state=all` and match on the exact meeting title string; if a draft with that title exists, comment on it instead of creating a second. After filing, re-read the created issue and assert the returned body length matches what was sent. This issue was due "before the next board sitting". That sitting is the one that just reproduced the bug, so the due date has lapsed. **Separate and worse:** the 09:23 run left the 2026-08-25 sitting **incomplete** — COO draft only, no CTO/CISO/CMO drafts and no final minutes, on an agenda item the owner filed personally (#69). A duplicate draft is noise; an abandoned sitting is a missed answer to the owner. The 21:23 run is completing it. Refs #70, #71, #69.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/server-26#49