The durable, in-repo record of known defects and the triage of incoming
reports for pbr-cpp-memory-pool. One Markdown file per defect, reviewed like any
other artifact (ADR-0039).
This ledger is the source of truth for defects. A GitHub issue, if one exists, is referenced from a record but is not authoritative — the investigation travels with the repo, offline, like the ADRs and the session journal.
The ledger holds the open / in-flight / triaged side of a defect's life; the
closing side — what shipped in which release — is recorded in the CHANGELOG
Fixed category (ADR-0038) and governed by
docs/workflow/maintenance.md. A fixed record and its
CHANGELOG line cross-reference each other.
File naming: BUG-NNNN-<short-kebab-slug>.md, stored under a discovery-date tree:
docs/bugs/<YYYY>/<MM>/BUG-NNNN-<slug>.md
NNNNis a zero-padded, globally monotonic id — never reused, never renumbered (like an ADR number). It is the short stable handle (BUG-0007) used to reference a defect from a commit, a PR, or aCHANGELOGline.- The
<YYYY>/<MM>folders are the discovery year and month, keeping any one directory small — the same idiom as the session journal.
Each record carries structured frontmatter:
| Key | Meaning | Vocabulary |
|---|---|---|
id |
the BUG-NNNN handle — matches the filename |
— |
title |
one-line description | — |
status |
lifecycle state | open · confirmed · fixed · wontfix · duplicate · cannot-reproduce |
severity |
impact level | low · medium · high · critical |
reporter |
who raised it | internal · third-party |
discovered |
discovery date — matches the <YYYY>/<MM> path |
YYYY-MM-DD |
affected-versions |
version range affected | e.g. ">=1.0.0,<1.1.1" |
fixed-in |
release that fixes it (required once status: fixed) |
e.g. v1.1.1 |
Start from template.md.
open ─► confirmed ─► fixed
│ │
└─────────┴─► wontfix | duplicate | cannot-reproduce (terminal)
- open — recorded, not yet root-caused/confirmed.
- confirmed — reproduced and root-caused; awaiting a fix.
- fixed — a release fixes it;
fixed-inis set and theCHANGELOGFixedline links back here. - wontfix / duplicate / cannot-reproduce — terminal; the record documents why (a
duplicatelinks the canonicalBUG-NNNN).
The agent's triage protocol is codified in AGENTS.md §7.7. In short:
- Hunting for bugs → a record is created only for a verified, reproducible defect.
- A third-party report → the agent reproduces and root-causes first; only then a
confirmedrecord (reporter: third-party, repro as evidence). A report that does not hold up is still recorded — ascannot-reproduce/rejected/duplicate— with the investigation that reached that verdict.
The fix lands through the normal hotfix/PATCH flow (docs/workflow/maintenance.md),
which flips the record to fixed, sets fixed-in, and adds the CHANGELOG Fixed line —
all in the same PR. Integrity (frontmatter, ids, index bijection, date agreement) is
checked by python tools/consistency_lint.py (the bugs check).
Newest first, grouped by year and month.
| Id | Title | Status | Severity | Discovered |
|---|---|---|---|---|
| BUG-0001 | Data race on InstrumentedPool::last_growths_ under concurrent use |
fixed |
high | 2026-06-15 |
| BUG-0002 | InstrumentedPool::deallocate underflows live_ on a foreign / double-freed pointer |
fixed |
medium | 2026-06-15 |
| BUG-0003 | InstrumentedPool move-assignment does not notify destroyed for the replaced pool |
fixed |
low | 2026-06-15 |
| BUG-0004 | Unguarded size_t overflow in grow_pool growth-size computation |
fixed |
low | 2026-06-15 |