Skip to content

Docs/dev loop tooling#20

Merged
emeraldleaf merged 5 commits into
mainfrom
docs/dev-loop-tooling
May 23, 2026
Merged

Docs/dev loop tooling#20
emeraldleaf merged 5 commits into
mainfrom
docs/dev-loop-tooling

Conversation

@emeraldleaf

@emeraldleaf emeraldleaf commented May 23, 2026

Copy link
Copy Markdown
Owner

What changed

added dev loop tolling documentation and diagram

How it was built

AI-assisted,

Summary by CodeRabbit

  • Documentation
    • Updated project status to reflect verified CI results, integration test green state, and updated combined coverage badge
    • Added comprehensive development workflow doc outlining edit/build/test/PR/merge stages, gaps, and remediation plans
    • Added visual Dev Loop diagram illustrating stages and tooling integration

Review Change Stack

emeraldleaf and others added 3 commits May 23, 2026 11:51
…analysis

Three new files in docs/:

- dev-loop.md (markdown inventory) — every tool, hook, agent, skill, and
  config that shapes how code lands in this repo, organized by *when* in
  the dev loop it fires (5 stages: Edit-time, Build-time, Test-time,
  PR-time, Merge/Runtime). For each tool: file path so a reader can
  verify it actually exists.

- dev-loop.svg (visual companion) — the same 5-stage flow as a left-to-right
  diagram with per-stage tool detail and a dotted-loop arrow showing review
  iteration. Hand-written SVG (not generated via Playwright — the excalidraw
  render script hit a 30s+ timeout loading the esm.sh ES module repeatedly
  in this environment).

- dev-loop.excalidraw (editable source) — the highway skeleton in Excalidraw
  format. Open in Excalidraw web/desktop or the VS Code Excalidraw extension
  to extend; export as SVG to refresh dev-loop.svg.

Gap analysis is the load-bearing part of the doc. Each gap (10 total —
cross-service E2E, perf baselines, settings.json cruft, SHA-pinning,
coverage gate, smoke-run automation, secret scanning, prod migrations,
agent-vs-CodeRabbit overlap, AI-commit-tagging) is paired with a sized
pragmatic fix — explicitly not "build a whole new system." The signal
this doc tries to send is: knowing when to stop adding tooling is
more pragmatic than maximum theoretical coverage.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
PR #17 (fix/orderservice-integration-test-hang) merged 2026-05-23 17:56 UTC.
The STATUS.md text I added in that PR had forward-looking phrasing ("this PR,
in flight", "will reflect ... after the next successful CI run", "CI
confirmation pending the fix PR merge") that goes stale the moment the PR
lands. Rewording to describe present state:

- OrderService integration test bullet: cite the merge (PR #17) and the
  first-green CI timestamp + per-step durations (Catalog 58s, Order 40s).
- Codecov sub-bullet: cite the measured delta (18.28% → 56.14%) instead of
  the expected aggregate.
- Build/test state: drop "Local run / CI pending" duality — both pass now.
- Coverage line: state the current badge value, not a future expectation.

Also catches one older stale entry: the EF Core review + fixes bullet still
said "(this session, uncommitted)" — that work landed in 825d6bd already.
Replaced with the commit hash for findability.

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

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 023d3000-84a6-415b-9592-dc383c62c111

📥 Commits

Reviewing files that changed from the base of the PR and between 348e3de and b169131.

📒 Files selected for processing (1)
  • docs/dev-loop.md

Walkthrough

This PR updates project documentation: it records verified CI/integration-test results and EF Core follow-ups in docs/STATUS.md, and adds a new development-loop guide (docs/dev-loop.md) plus an Excalidraw diagram (docs/dev-loop.excalidraw).

Changes

Project Status & Verification

Layer / File(s) Summary
OrderService CI verification and EF Core fixes
docs/STATUS.md
OrderService integration-test status marked first CI-green with catalog/order timings; retains root-cause notes for Wolverine .AutoProvision() gating and OrderApiFactory.DisposeAsync teardown order; updates Codecov/upload wording and records EF Core follow-up commit with ProductRepository identity-resolution and PaymentRecoveryJob outbox transaction fixes.

Development Loop Documentation

Layer / File(s) Summary
Development loop workflow stages and tooling inventory
docs/dev-loop.md
Introduces five-stage development workflow (edit-time, build-time, test-time, PR-time, merge/runtime) with IDE/Claude hooks, static analyzers, test tooling, CI/PR workflows, orchestration (Aspire), observability (OpenTelemetry), messaging/outbox (Wolverine), API docs UI, and correlation middleware.
Development loop gaps and pragmatic remediation plans
docs/dev-loop.md
Documents ten identified gaps with pragmatic remediation plans, lists deliberately unused tools, and adds source links to repository docs/configs.
Development loop visual diagram
docs/dev-loop.excalidraw
Adds a five-stage Excalidraw JSON diagram with labeled stage boxes and connecting arrows representing the dev loop stages.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • emeraldleaf/NextAurora#17: Overlaps with prior STATUS.md updates documenting the OrderService integration-test CI verification and the same hang-root-cause fixes.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Docs/dev loop tooling' directly aligns with the PR's primary purpose: adding developer-loop documentation and a diagram to the docs folder.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/dev-loop-tooling

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented May 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/dev-loop.md`:
- Line 158: The placeholder link `[docs/perf-baselines.md](#)` should be
resolved: either add the new perf-baselines document (docs/perf-baselines.md)
with the baseline template and the two endpoints (`GET /api/v1/products/{id}`,
`POST /api/v1/orders`) and commit it in this PR, or change the markdown in
docs/dev-loop.md to remove the broken link and indicate the work is planned
(e.g., "docs/perf-baselines.md (planned)") so the link no longer points to `#`;
update the reference near the k6/`dotnet-counters`/HybridCache guidance
accordingly.
- Line 176: Replace the placeholder link "[codecov.yml](#)" with a real target:
either add the actual codecov.yml file at repo root in this PR and update the
markdown link to point to it, or change the link text to a non-linked note such
as "codecov.yml (to be added at repo root)" so it no longer points to "#";
ensure you update the markdown occurrence of "[codecov.yml](#)" accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 88cf18bf-2035-4623-9da0-5b386cd3af0b

📥 Commits

Reviewing files that changed from the base of the PR and between 37c295d and 348e3de.

⛔ Files ignored due to path filters (1)
  • docs/dev-loop.svg is excluded by !**/*.svg
📒 Files selected for processing (3)
  • docs/STATUS.md
  • docs/dev-loop.excalidraw
  • docs/dev-loop.md

Comment thread docs/dev-loop.md Outdated
Comment thread docs/dev-loop.md Outdated
CodeRabbit (PR #20) flagged two empty markdown links — perf-baselines.md
and codecov.yml — both rendered as [text](#) because the referenced files
don't exist yet (they're future-work suggestions in the gap analysis).

MD042 (no-empty-links) violation. Fix is dropping the link syntax and
calling out parenthetically that the file isn't yet created — keeps the
prose readable without producing a clickable "#" link that goes nowhere.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@emeraldleaf
emeraldleaf merged commit 5484ac2 into main May 23, 2026
6 checks passed
emeraldleaf added a commit that referenced this pull request May 23, 2026
…erlap

The Gaps section had ten items in two 840px-wide columns (left at x=60,
right at x=900). Each gap's "fix" line is 130-170 chars at 14px monospace
— wider than the column — so left-column fix text was bleeding into the
right-column title/fix text. See screenshot in PR #20 discussion.

Refactor: stack all ten gaps vertically in a single full-width column.
Each gap title at x=60 + fix on the next line. ~60px vertical spacing per
gap. Fix lines now have 1700px to render in — plenty of room for the
longest one.

Side effects:
- viewBox grows: height 1500 → 1750 to fit the now-taller gaps section.
- Dashed border around gaps grows: 490 → 710 tall.
- Background rect grows to match new height.
- Bottom footer position bumped from y=1410 → y=1715.

No content lost. Order changed from interleaved (1-6, 2-7, 3-8, 4-9, 5-10
left-right pairs) to sequential (1, 2, 3, 4, 5, 6, 7, 8, 9, 10 top-down).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
emeraldleaf added a commit that referenced this pull request May 23, 2026
All eight CodeRabbit findings on the initial commit were Quick-Win / Nit /
Minor severity — addressing each:

rebuild-diagrams.sh (4):
  1. Add `uv` PATH check up front (was discovered at first render attempt,
     hiding the real error in a redirect)
  2. Drop `-maxdepth 2` from the find — discovers diagrams at any depth
     under docs/ now (e.g., docs/a/b/c/diagram.excalidraw)
  3. Quote $REPO_ROOT in parameter expansion: `${src#"$REPO_ROOT"/}` —
     shellcheck SC2295, prevents accidental glob interpretation
  4. Capture render output to a temp file instead of `>/dev/null 2>&1` —
     on failure, print the last 20 lines of the actual error so the user
     doesn't need to re-run manually to see what went wrong

render_excalidraw.py (1):
  5. Guard `svg_markup` non-empty before writing the .svg sibling. Earlier
     query_selector already proved the element exists, so this is defensive
     — warn-and-continue on the unexpected empty-outerHTML case rather than
     silently writing a broken SVG.

SKILL.md (3):
  6. Add (PR #20) citation to the "Caught-in-the-wild example" so the
     reference is concrete and grep-able
  7. MD031 blank-lines-around-fences — added blank lines before/after the
     three ```xml fences in "SVG Output for GitHub Embedding"
  8. Restart ordered-list numbering at 1 in every Quality Checklist
     subsection (was continuous 1-31 across all subsections — confused some
     markdown parsers). Plus MD047 trailing newline on the file.

Not addressed: IDE's separate SonarLint warning about render() function
having cognitive complexity 19/15 — pre-existing on the function, not
flagged by CodeRabbit, and refactoring is scope creep.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
emeraldleaf added a commit that referenced this pull request May 23, 2026
#21)

* chore(excalidraw-skill): encode text-overlap + GitHub-SVG lessons; add rebuild script

The recent dev-loop diagram exposed two failure modes the skill didn't guide
against. Both got fixed twice (PR #20) instead of being prevented up front.
This commit encodes the lessons so future diagrams ship right the first time.

SKILL.md additions:

  Text Width Validation (Prevent Overlap) — new subsection in Layout Principles.
  Quantifies the issue: SVG <text> doesn't wrap; 150-char line at 14px = ~1260px
  wide and bleeds into adjacent columns if column width is ~840px. Includes a
  per-character-width table and the four ways out (shorten, multi-element wrap,
  single-column restructure, foreignObject). Cites the caught-in-the-wild
  example from PR #20's Gaps section.

  SVG Output for GitHub Embedding — new top-level section. Three rules for
  hand-written SVG to render correctly on GitHub:
    1. explicit width + height (without it, GitHub downscales to ~50% and text
       becomes illegible)
    2. white background <rect> as first child (without it, transparent
       background = invisible text on GitHub dark theme)
    3. single-column for any text >80 chars (SVG has no auto-wrap)
  Plus guidance on when the .excalidraw and .svg drift (document it inline).

  Quality Checklist — bumped from 27 to 31 items, adding four explicit checks
  for the GitHub-SVG scenario.

render_excalidraw.py changes:

  Path A (Playwright render) now writes a sibling .svg alongside the .png.
  New `_make_github_friendly()` helper post-processes Excalidraw's exportToSvg
  output to add the width/height attributes and white background rect — so
  Playwright-rendered SVGs land with the same GitHub-friendly shape that
  hand-written ones now require. Docstring + main() print line updated.

.claude/scripts/rebuild-diagrams.sh (new):

  Walks docs/*.excalidraw, regenerates .png + .svg outputs for any source
  newer than its outputs. Skips up-to-date files unless --force. Single-file
  mode for targeted rebuilds. CI-friendly exit code on failure.

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

* chore(excalidraw-skill): address CodeRabbit findings on PR #21 (8/8)

All eight CodeRabbit findings on the initial commit were Quick-Win / Nit /
Minor severity — addressing each:

rebuild-diagrams.sh (4):
  1. Add `uv` PATH check up front (was discovered at first render attempt,
     hiding the real error in a redirect)
  2. Drop `-maxdepth 2` from the find — discovers diagrams at any depth
     under docs/ now (e.g., docs/a/b/c/diagram.excalidraw)
  3. Quote $REPO_ROOT in parameter expansion: `${src#"$REPO_ROOT"/}` —
     shellcheck SC2295, prevents accidental glob interpretation
  4. Capture render output to a temp file instead of `>/dev/null 2>&1` —
     on failure, print the last 20 lines of the actual error so the user
     doesn't need to re-run manually to see what went wrong

render_excalidraw.py (1):
  5. Guard `svg_markup` non-empty before writing the .svg sibling. Earlier
     query_selector already proved the element exists, so this is defensive
     — warn-and-continue on the unexpected empty-outerHTML case rather than
     silently writing a broken SVG.

SKILL.md (3):
  6. Add (PR #20) citation to the "Caught-in-the-wild example" so the
     reference is concrete and grep-able
  7. MD031 blank-lines-around-fences — added blank lines before/after the
     three ```xml fences in "SVG Output for GitHub Embedding"
  8. Restart ordered-list numbering at 1 in every Quality Checklist
     subsection (was continuous 1-31 across all subsections — confused some
     markdown parsers). Plus MD047 trailing newline on the file.

Not addressed: IDE's separate SonarLint warning about render() function
having cognitive complexity 19/15 — pre-existing on the function, not
flagged by CodeRabbit, and refactoring is scope creep.

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

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
emeraldleaf added a commit that referenced this pull request May 24, 2026
… timing (#22)

PR #20 was squash-merged at 16:31 with only the placeholder-link fix as its
tip. The visual readability fixes — white background, explicit width/height,
and single-column gaps to eliminate text overlap — were pushed to the same
branch at 16:34, 16:37, and 16:41 (after the merge). Those commits sit on
the orphaned docs/dev-loop-tooling branch but never landed on main.

This commit recovers them by copying the final dev-loop.svg from the
orphan branch directly onto main, collapsing the four follow-up commits
into one. Same content as origin/docs/dev-loop-tooling tip:

  - viewBox 1500 → 1750 (taller, single-column gaps section)
  - Added explicit width="1800" height="1750" so GitHub renders at natural
    size with horizontal scroll instead of downscaling text below readable
  - Added <rect fill="#ffffff"/> as first child so text is readable on
    GitHub's dark theme
  - Bumped fonts: title 32→36, body 13→16, etc.
  - Gaps refactored to single column so the long fix descriptions don't
    bleed across columns

The companion skill update (encoding these as rules so it doesn't happen
again) is on chore/excalidraw-skill-text-overlap-fix.

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.

1 participant