Skip to content

hygiene(#268): pr-preservation drain-log for #377 (setup-tooling research)#444

Merged
AceHack merged 4 commits intomainfrom
drain/377-pr-preservation-log
Apr 25, 2026
Merged

hygiene(#268): pr-preservation drain-log for #377 (setup-tooling research)#444
AceHack merged 4 commits intomainfrom
drain/377-pr-preservation-log

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 25, 2026

Summary

Otto-268 backfill: drain-log for PR #377 (research: ace first-class adoption — setup-tooling-scratch + sqlsharp migration), covering 13 threads with notable high stale-resolved density (38%).

Per Otto-250 (PR review comments + responses + resolutions are high-quality training signals).

Coverage — three outcome classes

  • FIX (4 threads → 4 distinct fixes, 6 thread-IDs counting dups):
  • STALE-RESOLVED-BY-REALITY (5 threads, ~38%): three-repo-split ADR, .mise.toml actionlint+shellcheck, HB-005 definition (twice), trinity memory file — all in-tree per Otto-114 forward-mirror or adjacent-PR landings.
  • OTTO-279 SURFACE-CLASS (2 threads): Aaron name in research surface — research = history-class.

Pattern observations

  1. High stale-resolved density (38%) when research doc forward-authors against future state of main; adjacent PRs landing during the review window produces natural drift. Forward-author-to-future-state-of-main pattern.
  2. "CLAUDE.md-level rule" cite shape is undisciplined — Otto-NNN IDs live in memory files; CLAUDE.md has rule shapes only. Fix template: cite memory file explicitly, note CLAUDE.md captures shape.
  3. Runner-matrix vs current-truth drift is recurring; research docs need explicit "post-#NNN landing" annotations to prevent being read as present-day truth.
  4. Otto-114 forward-mirror is a high-leverage substrate improvement — every doc that cites a memory file now has a one-line resolution path instead of a per-doc fix. Compounding dividends.

Test plan

  • All 13 thread IDs preserved verbatim with severity + outcome class.
  • Drain-log shape matches existing docs/pr-preservation/*-drain-log.md template.

🤖 Generated with Claude Code

@AceHack AceHack enabled auto-merge (squash) April 25, 2026 06:59
Copilot AI review requested due to automatic review settings April 25, 2026 06:59
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 82ba6bbb9c

ℹ️ 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".

Comment thread docs/pr-preservation/377-drain-log.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a PR-preservation drain log for PR #377 to capture review-thread outcomes as a durable, in-repo training/audit artifact.

Changes:

  • Add docs/pr-preservation/377-drain-log.md documenting 13 review threads, outcomes, and pattern observations for PR #377.

Comment thread docs/pr-preservation/377-drain-log.md
Comment thread docs/pr-preservation/377-drain-log.md Outdated
Comment thread docs/pr-preservation/377-drain-log.md Outdated
Comment thread docs/pr-preservation/377-drain-log.md Outdated
Comment thread docs/pr-preservation/377-drain-log.md Outdated
AceHack added a commit that referenced this pull request Apr 25, 2026
Reviewer caught that the Otto-248 cite was using a made-up shortened
path `memory/feedback_never_ignore_a_flake_otto_248_2026_04_24.md`
(which doesn't exist). Actual file is
`memory/feedback_never_ignore_flakes_per_DST_discipline_flakes_mean_determinism_not_perfect_otto_248_2026_04_24.md`
(verified via `ls memory/`).

This was my fix-induced citation error — when adding the Otto-248
cite during prior drain on #377, I wrote a plausible-looking path
that wasn't real. The corresponding drain-log on #444 inherited
the same wrong path and will be corrected in a follow-up to that PR.
AceHack added a commit that referenced this pull request Apr 25, 2026
…n-log

Codex P1 caught that the cited memory file path in #377's drain-log
()
doesn't exist; actual file is the longer
.

This was a fix-induced citation error inherited from #377's research
doc (which used the same wrong abbreviated path). Both #377 and
#444 needed correction — landed paired (#377 force-pushed earlier
this tick, #444 corrected here). The drain-log inherited the wrong
citation from the research doc it was logging.
AceHack added 3 commits April 25, 2026 03:49
…arch)

Otto-268 backfill: drain-log for PR #377 covering 13 threads — notable
for high stale-resolved density (38%, 5 of 13) where the doc was
authored against a future-state of main that adjacent PRs landed
during the review window.

Per Otto-250 training-signal discipline. Pattern observations capture
four load-bearing patterns:
1. High stale-resolved density (38%) when research doc forward-
   authors against future state of main; adjacent PRs landing
   produces natural drift.
2. "CLAUDE.md-level rule" cite shape is undisciplined — Otto-NNN IDs
   live in memory files; CLAUDE.md has the rule shapes. Fix template
   for any factory-rule cross-reference.
3. Runner-matrix vs current-truth drift is recurring; research docs
   need explicit "post-#NNN landing" annotations.
4. Otto-114 forward-mirror landing is a high-leverage substrate
   improvement — converts memory-file dangling-citation findings from
   re-fix-required to verify-and-resolve.
…n-log

Codex P1 caught that the cited memory file path in #377's drain-log
()
doesn't exist; actual file is the longer
.

This was a fix-induced citation error inherited from #377's research
doc (which used the same wrong abbreviated path). Both #377 and
#444 needed correction — landed paired (#377 force-pushed earlier
this tick, #444 corrected here). The drain-log inherited the wrong
citation from the research doc it was logging.
…rain-log

Multiple Codex/Copilot threads on #444 caught:

- L16: '3 were Otto-279' → '2 were Otto-279' (matches body's
  Threads C1-C2 = 2 OTTO-279 SURFACE-CLASS).
- L22: 'Outcome distribution: 4 OTTO-279' → '2 OTTO-279 + 2 dups'
  (matches L161 final-resolution math: 4 + 5 + 2 + 2 dups = 13).
- L56: Thread A3 'Copilot P1 ×2' → 'Copilot P1 ×3' (3 thread IDs
  listed: ejy1 + eenN + eenr).
- L87: non-portable `grep -i "actionlint\|shellcheck"` → portable
  `grep -iE "actionlint|shellcheck"` (BSD/macOS grep doesn't
  support `\|` BRE alternation; the `-E` extended-regex form is
  POSIX-portable). Captured the rationale inline so the verification
  command actually works on macOS.

Same count-vs-list cardinality pattern (Class B in PR #465 doc-lint
suite BACKLOG row) — third drain-log of mine to exhibit it (after
#195 and #231). The shellcheck-rule-precision class also surfaces
via the `\|` portability finding (related to SC2086-vs-SC2046 from
#427 drain-log).
Copilot AI review requested due to automatic review settings April 25, 2026 07:50
@AceHack AceHack force-pushed the drain/377-pr-preservation-log branch from 83a652f to fcd62e0 Compare April 25, 2026 07:50
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fcd62e0fea

ℹ️ 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".

Comment thread docs/pr-preservation/377-drain-log.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment thread docs/pr-preservation/377-drain-log.md Outdated
AceHack added a commit that referenced this pull request Apr 25, 2026
Codex P2 + Copilot threads on #437 caught:

- Lines 6-7 fragment + count mismatch: header said '10 unresolved
  ..., 1 P1' (suggesting 11) while body summarized 14 = 10 first-
  wave + 4 second-wave. Reworded into a single unambiguous summary:
  '10 unresolved at first-wave; post-merge cascade then surfaced
  3 more (1 Codex P1 + 2 Copilot P2). Total 13.'
- Second-wave header '1 P1 + 3 P2 post-merge cascade' → '1 Codex P1
  + 2 Copilot P2 — 3 threads total' (only 3 thread sections A/B/C
  exist in body).
- Pattern observation 2 'Stale-resolved-by-reality at ~70%' (7 of
  14) → '~54%' (7 of 13) matching corrected total.
- Final-resolution 'All 14 threads' → 'All 13 threads (10 first-
  wave + 3 second-wave)'.

Same count-vs-list cardinality pattern as #195/#231/#377/#444
drain-log fixes — fourth instance in my own logs. Strong validation
that doc-lint Class B (PR #465 BACKLOG) would compound.
AceHack added a commit that referenced this pull request Apr 25, 2026
* hygiene(#268): pr-preservation drain-log for #135 (auto-loop-35 Itron mapping)

Otto-268 backfill task: drain-log for PR #135 covering 14 total threads
across 2 waves (10 first-wave pre-merge + 4 second-wave post-merge cascade).

Per Otto-250 training-signal discipline: full per-thread record with
reviewer authorship, severity, outcome class (FIX / STALE-RESOLVED-BY-
REALITY / OTTO-279 SURFACE-CLASS), and resolution path. Pattern
observations capture the three load-bearing patterns: Otto-279 as
mature uniform reply stamp; stale-resolved-by-reality at ~70% on this
PR; Codex catching subset-vs-superset framing errors in benchmark
canonical definitions (DORA / K-relations).

* drain(#437 follow-up): fix count mismatches in #135 drain-log

Codex P2 + Copilot threads on #437 caught:

- Lines 6-7 fragment + count mismatch: header said '10 unresolved
  ..., 1 P1' (suggesting 11) while body summarized 14 = 10 first-
  wave + 4 second-wave. Reworded into a single unambiguous summary:
  '10 unresolved at first-wave; post-merge cascade then surfaced
  3 more (1 Codex P1 + 2 Copilot P2). Total 13.'
- Second-wave header '1 P1 + 3 P2 post-merge cascade' → '1 Codex P1
  + 2 Copilot P2 — 3 threads total' (only 3 thread sections A/B/C
  exist in body).
- Pattern observation 2 'Stale-resolved-by-reality at ~70%' (7 of
  14) → '~54%' (7 of 13) matching corrected total.
- Final-resolution 'All 14 threads' → 'All 13 threads (10 first-
  wave + 3 second-wave)'.

Same count-vs-list cardinality pattern as #195/#231/#377/#444
drain-log fixes — fourth instance in my own logs. Strong validation
that doc-lint Class B (PR #465 BACKLOG) would compound.
AceHack added a commit that referenced this pull request Apr 25, 2026
…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.
Codex P2 + Copilot both caught: header said '4 FIX + 2 dups' but
Section A enumerates 6 FIX thread-IDs (A1×1 + A2×2 + A3×3) and
Section B enumerates 5 STALE thread-IDs (B5 explicit dup of B3).
Header didn't match the per-section enumeration end-to-end; intro
prose ('3 were real-fix factual corrections' + '2 were combined')
disagreed with the header in turn.

Pick a single counting rule (by thread-ID) and apply it
consistently:
- 6 FIX (3 unique findings, 3 duplicate reviewer threads on the
  same fixes — combined into one fix commit c8d91b5)
- 5 STALE-RESOLVED-BY-REALITY (4 unique + 1 dup B5≡B3)
- 2 OTTO-279
- = 13 thread-IDs covering 9 unique findings

Fix header + intro prose + final-resolution all to match this
single rule. The 'unique findings' count (9) is preserved in
parentheses for cross-reference.
@AceHack AceHack merged commit 1ea5d8a into main Apr 25, 2026
13 checks passed
@AceHack AceHack deleted the drain/377-pr-preservation-log branch April 25, 2026 08:15
AceHack added a commit that referenced this pull request Apr 25, 2026
Append-only row per Otto-229 discipline: drained 17 unresolved
threads across 8 of my own drain-log PRs (initial 13 + 4 cascade
findings on this drain wave's fixes). Documents the
'drain-log self-correction at scale' pattern — Codex/Copilot
reviews caught Class A/B pattern instances inside the same doc-lint
BACKLOG row that promotes them to lint candidates (appropriate
self-application).

PRs drained: #449 / #442 / #441 / #464 / #456 / #465 / #467 / #444.
Auto-merge SQUASH armed across the queue.

Cron f38fa487 minutely fire verified live throughout the tick.
AceHack added a commit that referenced this pull request Apr 25, 2026
…e) (#377)

* research: ace first-class adoption in Zeta (scratch/SQLSharp pattern)

Captures Aaron's 2026-04-24 direction setting `../scratch` as the
start of "ace" — his declarative-native package manager — and Zeta
as its first-class consumer / testbed.

Key reframes from raw cross-OS setup refactor to product
integration:

- scratch is not just a reference pattern; it's ace.
- Zeta adoption of ace is first-class, not opportunistic.
- Bun+TS post-bootstrap substrate is ace's shared runtime, not
  Zeta-local.
- Twin files at bootstrap edge are FORCED (pre-install user has
  nothing). PowerShell ONLY for vanilla-fresh-Windows initial
  install; bash for everything else including Windows WSL.
- 4 Windows matrix legs (deferred): windows / windows-arm /
  windows-wsl / windows-arm-wsl (last TBD pending Aaron's local
  test).

Current Zeta state: partial declarative via `.mise.toml` +
`tools/setup/manifests/`, but still has bash-based
`tools/setup/common/*.sh` and no bun+TS post-bootstrap layer, no
top-level `declarative/` tree, no profile/category system, no
dev-container base.

Phased migration: 0 (declarative split) → 1 (bun+TS post-bootstrap
scaffold) → 2 (profiles/categories) → 3 (dev-container + Codespaces
base sharing scripts) → 4 (Windows pre-bootstrap ps1) → 5
(idempotency test harness). Each phase stands alone.

Open questions surfaced for Aaron: ace productization timing, ace
repo stability, Phase-0 immediate vs deferred, dev-container base
image choice, ace-in-Zeta contribution flow when Zeta surfaces ace
gaps.

Design-only; no code changes in this PR.

Composes with: Otto-247 (version-currency for pinned versions),
Otto-248 (DST flake-fix discipline), GOVERNANCE §24 three-way-
parity, HB-005 AceHack-mirror-LFG (adjacent Windows bootstrap).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* research: correct Windows setup — full ps1 for native, bash via WSL

Aaron clarification 2026-04-24: "so will need full ps1 setup for
windows too not just wsl, wsl is bash after installed by windows
ps1. like ../scratch the start of ace the package manager"

Two distinct setup chains on Windows, not one bridge:

1. Windows native (windows, windows-arm): FULL PowerShell
   end-to-end. ace supports PowerShell as first-class runtime.
2. Windows WSL (windows-wsl, windows-arm-wsl): ps1 installs WSL2,
   then bash inside WSL (same path as macOS + Linux).

Implication for ace: first-class support for BOTH PowerShell AND
bash runtimes — not just bash-with-ps1-bridge. scratch's README
already shows this shape (`scripts/setup/windows/` + bootstrap.ps1
+ shared Windows layer).

Added a matrix summary table clarifying which runners use which
setup chain.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* research: rewrite — soul-file-independence + ace/Forge/Zeta Ouroboros trinity

Major corrections per maintainer 2026-04-24:

1. "never reference ../scratch we build in Zeta or start a new
   repo" — removed every external-path citation from the doc.
   Soul-file-independence discipline: a reader with this repo +
   auto-memory alone must be able to reproduce the thinking.
   Previous revision cited `../scratch/README.md`, `../SQLSharp/
   scripts/setup/`, etc. All removed.

2. "look up Ouroboros (or Uroboros)" — restored the three-repo-
   split / Ouroboros / trinity context that I'd failed to surface.
   Per-user memory:
   - user_trinity_of_repos_emerged_zeta_forge_ace_three_in_one.md
   - project_ace_package_manager_agent_negotiation_propagation.md
   - project_three_repo_split_zeta_forge_ace_software_factory_named_forge.md

   Three-repo target: Zeta (database/SUT) + Forge (factory,
   self-hosting) + ace (package manager). Closed Ouroboros
   dependency cycle plus Forge→Forge self-loop.

3. ADR-landing status surfaced: the ADR
   `docs/DECISIONS/2026-04-22-three-repo-split-zeta-forge-ace.md`
   was drafted on commit 41d2bb6 but was on PR #54's diff,
   which I closed-as-superseded earlier this session. The
   split decision lives in memory but NOT in committed docs.
   New Phase 0: re-land the ADR before operational split.

4. Matrix corrected per chronological maintainer directives:
   - 4 Windows legs, not 2 (windows / arm / wsl / arm-wsl)
   - Windows native uses full ps1 end-to-end, not ps1-bridge-to-bash
   - WSL on ARM TBD pending local test

5. ace reframe centered: Zeta is ace's first-class consumer +
   testbed, not a passive pattern-borrower. Zeta's adoption
   validates ace's design.

All references now resolve inside Zeta (docs, tools, in-repo
memory) or inside the per-user auto-memory substrate (by name,
not by path).

Composes with: Otto-247 version-currency, Otto-248 DST flake
discipline, GOVERNANCE §24 three-way-parity.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* research: redact external paths inside preserved quotes

3 remaining `../scratch` references were all inside verbatim quote
blocks. Even in quotes, external paths commit non-reproducible
references into the committed repo. Redacted to `[external
reference]` while preserving each quote's substance.

Soul-file-independence discipline prefers path-redaction over
verbatim-preservation for committed docs; memory layer preserves
verbatim.

Zero external-path references remain in the doc body.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* drain(#377): fix Codex/Copilot factual + cross-reference findings

P1 (L238) — symlink suggestion conflicts with no-symlinks discipline:
Reworded to recommend a generated copy + tooling-kept-in-sync, citing
Otto-244 + docs/research/build-machine-setup.md "No symlink" rule and
the Windows brittleness rationale.

P1 (L324) — Otto-247/248 "CLAUDE.md-level rule" cite was unresolvable:
Replaced with explicit memory-file paths
(memory/feedback_version_currency_*otto_247* and
memory/feedback_never_ignore_a_flake_otto_248_*) — those are the actual
source-of-truth files. Noted CLAUDE.md "Version currency" bullet
captures the rule shape (the bullet exists; "Otto-247" the ID does
not appear there directly).

P1 (L197) — runner-matrix labels not in current gate.yml:
Reframed the entire matrix as "proposed/future ... post-#375 state,
not present-day truth" with explicit pointer to current gate.yml
(ubuntu-22.04 + macos-14 on forks). All "Active" → "Proposed". Added
"assumes future GitHub-hosted Windows runner availability" annotations
on Windows rows.

Stale-resolved-by-reality:
- L69 ADR exists: docs/DECISIONS/2026-04-22-three-repo-split-zeta-forge-ace.md
  is in-tree (verified via ls).
- L121 .mise.toml has actionlint+shellcheck: verified via grep
  (both pinned: actionlint=1.7.12, shellcheck present).
- L327 HB-005 defined: docs/HUMAN-BACKLOG.md L240 has the row.
- L10 trinity memory: memory/user_trinity_of_repos_emerged_zeta_forge_ace_three_in_one.md
  exists in-tree.

Otto-279 surface-class:
- L22 + L267 Aaron name attribution in research surface — research is
  history-class; first-name attribution preserved as faithful
  provenance.

* drain(#377 follow-up): correct Otto-248 memory file path citation

Reviewer caught that the Otto-248 cite was using a made-up shortened
path `memory/feedback_never_ignore_a_flake_otto_248_2026_04_24.md`
(which doesn't exist). Actual file is
`memory/feedback_never_ignore_flakes_per_DST_discipline_flakes_mean_determinism_not_perfect_otto_248_2026_04_24.md`
(verified via `ls memory/`).

This was my fix-induced citation error — when adding the Otto-248
cite during prior drain on #377, I wrote a plausible-looking path
that wasn't real. The corresponding drain-log on #444 inherited
the same wrong path and will be corrected in a follow-up to that PR.

* hygiene(#377): mirror extensionless manifest naming convention

Copilot P2: Phase 1 declarative/ proposal had .brew/.apt/.winget
extensions on the manifest filenames; in-tree convention at
tools/setup/manifests/ uses extensionless semantic names
(brew, apt, dotnet-tools, uv-tools). Mirror existing convention
to avoid creating two parallel naming styles.

* hygiene(#377): fix MD032 — line-leading '+' parsed as list marker

Pre-existing MD032 failure: line 137 started with '+' (continuation
of a multi-line bold span '**partial declarative pinning via mise
+ manifest files**'), but markdownlint treats '+' at line start as
a list-item marker. Reflow to 'partial declarative pinning via
mise plus manifest files' (close the bold before the '+', use
'plus' instead) so no line starts with a list-marker character.

Same shape as the inline-code-span line-wrap pattern in Class A:
multi-line construct splits across lines and the wrap point hits
a CommonMark special character.

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants