Conversation
Codex P2 + Copilot P1 both flagged that `_patterns.md` was classified as "current-state operational substrate" while sitting in `docs/pr-preservation/**` (which the file itself classifies as history-class). Internal contradiction. Resolved by introducing a third named surface class: **synthesis-over-history** — current-state-tracking abstractions over history-class corpora. Co-located with the corpus they abstract over (so `_patterns.md` stays in `docs/pr-preservation/` alongside the per-log records). The underscore prefix is named as a candidate convention for "synthesis-indices over history-class corpora." Updated three sections: 1. "Surface-class taxonomy" — added "Synthesis-over-history surfaces" section with `_patterns.md` as the canonical example. 2. "How to update this file" — replaced the "current-state operational substrate" claim with the synthesis-over-history distinction + co-location rationale. 3. Closing line — clarified Otto-279 carve-out applies to the per-log records (history-class); synthesis-over-history is the third class distinct from both pure history-class and pure current-state. Composes with the future BP-NN promotion path: the four-stable- outcome-classes + history-class surfaces + synthesis-over-history third class are mature enough to codify together in `docs/AGENT-BEST-PRACTICES.md` as a single stable rule. Other #448 reviewer findings (cited drain-logs not in current corpus) are stale-resolved-by-reality — drain-logs are landing across PRs #437-#465; the corpus is converging.
There was a problem hiding this comment.
Pull request overview
Resolves an internal surface-class taxonomy contradiction in docs/pr-preservation/_patterns.md by introducing a third surface class (“synthesis-over-history”) to distinguish synthesis indices from the underlying history-class drain-log corpus.
Changes:
- Adds “synthesis-over-history surfaces” as an explicit third surface class in the taxonomy.
- Updates the “How to update this file” guidance to clarify co-location and the per-file carve-out.
Codex/Copilot caught 4 findings on PR #466's surface-class clarification: - Three hyphen-line-wrap renderings (`synthesis-` / `synthesis-over-` / `synthesis-` at end-of-line render with extra space when Markdown treats newline as whitespace). Reflowed all three to keep the term contiguous on one line. - Surface-class taxonomy still listed `docs/pr-preservation/**` as history-class which would include `_patterns.md`. Tightened to the per-log glob `docs/pr-preservation/*-drain-log.md` with explicit pointer to the synthesis-over-history exception below. Same shape as the inline-code-span line-wrap class documented in `_patterns.md` (Class A in PR #465 BACKLOG row) but for prose-line hyphenation rather than code-span line-wrap. Worth noting in a future expansion of the doc-lint suite — extend the regex to catch `\w-$` end-of-line patterns.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cb62527eb2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - `docs/ROUND-HISTORY.md` | ||
| - `docs/aurora/**` | ||
| - `docs/pr-preservation/**` | ||
| - `docs/pr-preservation/*-drain-log.md` (per-log records; |
There was a problem hiding this comment.
Keep CI-fix logs in the history-class surface
Narrowing docs/pr-preservation/** to docs/pr-preservation/*-drain-log.md drops existing provenance docs like docs/pr-preservation/141-ci-fix-log.md out of history-class, so that file now implicitly falls under current-state rules even though it is the same point-in-time record type (names, checks, and audit trail). This reintroduces taxonomy drift for review tooling and attribution guidance; the history-class selector should include all preservation logs in this directory (or explicitly include the CI-fix log shape).
Useful? React with 👍 / 👎.
…iated shape divergence (#467) * hygiene(_patterns.md): document Otto-250-canonical vs Otto-268-abbreviated drain-log shape divergence Multiple post-merge reviewer threads on the Otto-268-wave drain-logs (#437-#465) flagged that the abbreviated inline shape doesn't match the canonical Otto-250 multi-section format used in older drain-logs (#108, #247, etc.). The findings are correct: the shapes ARE different, and the abbreviated shape compresses verbatim reviewer/reply text into short prose. Documenting both shapes here in `_patterns.md` as a known divergence + three maintainer-decision options: (a) Rewrite — high churn, highest faithfulness. (b) Accept divergence — document both as valid. (c) Hybrid — canonical for substantive logs (math / crypto / algorithms / ADRs); abbreviated for low-substance. Until maintainer decides, drain-runners writing future logs default to canonical; existing Otto-268-wave logs stay abbreviated with this known-divergence pointer. This is the right place for the documentation per the synthesis- over-history surface-class declaration: `_patterns.md` reflects current corpus state including known shape divergences, separate from the per-log records. Composes with the per-PR drain-log threads currently flagging the shape-conformance gap on #437/#441/#442/#444/#445/#446/#447/#449/ #460/#461/#464/#466 — those threads can now reply with a one-line pointer to this section instead of repeating the maintainer- decision-pending framing. * hygiene(#467): fix 4 Copilot findings on shape-divergence section Four Copilot catches converging on the same root cause: the shape-divergence section was citing drain-log PR-numbers (#437-#465) when readers will look for #437-drain-log.md etc. and not find them — drain-log FILE numbers reference the PRESERVED PR (e.g., #421/#422/#423), not the drain-log PR itself. The current file corpus ends at #434. Fixes: - :374 + :394 — drop the misleading "#437-#465" PR-range citation; cite the actual in-repo abbreviated-shape examples (#421/#422/#423) by file path; drop the unsupported "22+" numeric estimate in favour of "the 2026-04-25 backfill wave". - :380 — abbreviated template snippet now matches what the in-repo abbreviated logs actually use: `Finding:` bullet included, `Thread ID:` and `:LINE` placeholders dropped (those are canonical-shape fields, not abbreviated-shape). Reader can now copy/paste the template accurately. - :388 — soften the "Substance is preserved" overstatement to the objective claim: key metadata (reviewer/severity/outcome/ commit) is preserved; verbatim original-comment + verbatim reply text are NOT preserved; multi-section structure + file:line locator + Thread ID are also typically omitted. The fixes are themselves Class A (count-vs-list cardinality on "#437-#465" range) + truth-drift on a freshly-landed doc — appropriate self-application of the discipline this section documents.
Summary
Codex P2 + Copilot P1 both flagged a real internal contradiction on #448's
_patterns.md: the file declareddocs/pr-preservation/**as history-class (per the surface-class taxonomy section), then later claimed_patterns.mditself is "current-state operational substrate" (in the "How to update this file" section). Both can't be true — directory-level surface-class declaration conflicts with file-level reclassification.Resolved by introducing a third named surface class: synthesis-over-history — current-state-tracking abstractions over history-class corpora.
Coverage
docs/pr-preservation/*-drain-log.mdstays history-class (per-log records preserve provenance, Otto-279 carve-out applies).docs/pr-preservation/_patterns.md(this file) is synthesis-over-history — a third surface class distinct from both pure history-class and pure current-state._patterns.mdstays indocs/pr-preservation/); the underscore prefix is named as a candidate convention.Three sections updated
_patterns.mdas the canonical example.Stale-resolved-by-reality (other #448 reviewer findings)
The remaining #448 reviewer findings cite drain-log PRs that don't yet have logs in current main (#191, #219, #231, #377, #135, #85, #195, #206, #427, #428, #430, #425, #426, #432, #435). Those drain-logs are landing across PRs #437-#465 (Otto-268 backfill is the in-flight wave). The corpus is converging — those findings will be stale-resolved-by-reality as the cited PRs land in main.
Test plan
🤖 Generated with Claude Code