Skip to content

feat(extract): wire connection detection into CLI with performance instrumentation (#239) - #252

Merged
NTCoding merged 11 commits into
mainfrom
issue-239-m1-d1-8-d1-9-wire-connection-e
Feb 6, 2026
Merged

NTCoding merged 11 commits into
mainfrom
issue-239-m1-d1-8-d1-9-wire-connection-e

Conversation

@NTCoding

@NTCoding NTCoding commented Feb 5, 2026 •

Copy link
Copy Markdown
Owner

Closes #239

Deliverable: CLI integration for connection extraction with performance timing and new flags

Context

PRD: `docs/project/PRD/active/PRD-phase-12-connection-detection.md` — M1 D1.8, D1.9

Connection detection must be wired into the existing `riviere extract` CLI command. This includes the breaking output format change, new flags (--patterns, --stats), and performance instrumentation showing per-phase timing.

Traceability

  • PRD Section: M1-D1.8 (Performance instrumentation), M1-D1.9 (CLI integration)
  • Functional Requirements: CLI flags, output format change, timing display
  • Success Criteria: SC-7 (performance baselines documented)

Acceptance Criteria

  • ✓ `riviere extract` output changes from `{ success: true, data: EnrichedComponent[] }` to `{ success: true, data: { components: EnrichedComponent[], links: ExtractedLink[] } }` (breaking change)
  • ✓ `--components-only` flag continues to output components without links (backward compat)
  • ✓ `--patterns` flag enables Configurable layer in addition to Golden Path
  • ✓ `--allow-incomplete` enables lenient mode (emit uncertain links with _uncertain instead of failing)
  • ✓ `--stats` appends summary: connection counts by type (sync/async), by detection method, uncertain link count
  • ✓ `--dry-run` runs full extraction, outputs to stdout, does not write file
  • ✓ Performance timing: extraction completed summary line with per-phase breakdown (call graph, detection, filtering)
  • ✓ When no connections detected, links is empty array
  • ✓ Output conforms to Riviere schema Link type
  • ✓ Structured errors for connection detection failures use existing CLI error format with new CliErrorCode values

Edge Case Scenarios

  • No components extracted → links is empty array, no connection detection attempted
  • Connection detection fails in strict mode → structured error with file/line/reason, non-zero exit
  • --components-only with --stats → stats only show component counts (no connection stats)
  • --dry-run with --stats → stats displayed to stderr, JSON to stdout
  • --patterns without any connection patterns in config → Golden Path only, no error
  • --allow-incomplete with no uncertain links → same output as strict mode

Implementation Guidelines

  • Architecture: Extend `features/extract/` in riviere-cli per §9.1.4
  • Firm constraints: §9.1.4 (extend existing extract command, not new command)
  • Flexible decisions: Implementation details of flag wiring
  • Wire `detectConnections(project, enrichedComponents, config)` from riviere-extract-ts
  • Add new CliErrorCode values for connection detection failures (UNRESOLVABLE_TYPE, AMBIGUOUS_INTERFACE, MISSING_EVENT_MATCH)
  • Follow existing extract entrypoint pattern in `packages/riviere-cli/src/features/extract/entrypoint/extract.ts`
  • Performance timing: wrap each phase in timing calls, format as final summary line

Embedded Reasoning

Why: Connection detection is useless without CLI integration. The extract command is the primary user interface.
What: Extended extract command with connection detection wiring, new flags, output format change, performance timing.
How: After enrichment phase, call detectConnections(). Merge results into output. Add flag handling. Wrap phases in timing. Display summary.

Testing Strategy

  • Unit: Flag parsing for new options. Output format with components + links. Stats formatting. Error code mapping.
  • Integration: Full extract command producing links from test fixtures. --components-only backward compat. --dry-run output behavior.
  • Edge Cases: Empty components, strict mode failures, flag combinations.

Dependencies

Depends on #237 #238

Verification

```bash
pnpm nx test riviere-cli -- --testNamePattern "extract"
pnpm nx test riviere-cli -- --coverage
```

Summary by CodeRabbit

  • New Features

    • Added --stats (prints component/link counts to stderr), --patterns (pattern-based connection detection), and now includes detected links in extract output; timing info is printed after runs.
  • Documentation

    • CLI reference and docs updated to describe the new extract flags, link output, and timing/statistics behavior.
  • Tests

    • Expanded test coverage for extraction, connection detection, stats formatting, and CLI flag handling.

NTCoding and others added 4 commits February 5, 2026 20:51
…strumentation (#239)

Wire `detectConnections` from riviere-extract-ts into the `riviere extract`
CLI command. Change output format from flat component array to
`{ components, links }` object. Add `--stats` and `--patterns` flags.

- Return `ConnectionDetectionResult { links, timings }` from detectConnections
- Add ConnectionDetectionFailure error code and exit handler
- Add formatExtractionStats and formatTimingLine for stderr output
- Create detectAndOutputConnections command for connection pipeline
- Update existing tests for new output shape
- Add 8 new tests for connection detection, stats, timing, flags
- Regenerate CLI reference docs

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Addresses SD-019 code review finding: use Zod schemas instead of type
guards for runtime validation of parsed JSON in test fixtures.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Connection detection is a read/output operation, not a write/mutate
operation. Moves to queries/ layer per CS-010 layer responsibility
alignment.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Pure query (detect-connections-query.ts) returns data only.
Presentation logic (timing, stats, output) stays in entrypoint.
Fixes CS-010 layer responsibility alignment.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Feb 5, 2026 •

Copy link
Copy Markdown

Deploying living-architecture with  Cloudflare Pages  Cloudflare Pages

Latest commit: 5d2380d
Status: ✅  Deploy successful!
Preview URL: https://ee77bb10.living-architecture.pages.dev
Branch Preview URL: https://issue-239-m1-d1-8-d1-9-wire.living-architecture.pages.dev

View logs

@coderabbitai

coderabbitai Bot commented Feb 5, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Wires connection detection into the riviere extract CLI: adds --stats and --patterns flags, invokes detectConnections after enrichment, returns nested data: { components, links }, captures per-phase timings, emits optional extraction stats to stderr, and surfaces structured connection-detection failures.

Changes

Cohort / File(s) Summary
CLI docs & option type
apps/docs/reference/cli/cli-reference.md, packages/riviere-cli/src/platform/infra/cli-presentation/extract-validator.ts
Added --stats and --patterns flags to docs and exported ExtractOptions with optional stats and patterns.
Extract entrypoint
packages/riviere-cli/src/features/extract/entrypoint/extract.ts
Integrated detectConnections post-enrichment; handles ConnectionDetectionError via new exit handler; emits timings and optional stats to stderr; changed success payload to include links; wired CLI flags and adjusted dry-run/output flow.
Connection detection domain & exports
packages/riviere-extract-ts/src/domain/connection-detection/detect-connections.ts, packages/riviere-extract-ts/src/domain/connection-detection/detect-connections.spec.ts, packages/riviere-extract-ts/src/shell/index.ts
Instrumented timing (setup, callGraph, async detection, total); changed return to ConnectionDetectionResult { links, timings }; added ConnectionTimings; updated tests and re-exports.
Presentation: stats & timing formatting
packages/riviere-cli/src/platform/infra/cli-presentation/format-extraction-stats.ts, packages/riviere-cli/src/platform/infra/cli-presentation/format-extraction-stats.spec.ts
Added countLinksByType, formatExtractionStats, formatTimingLine and unit tests to format stats/timings for stderr.
Exit handling & error codes
packages/riviere-cli/src/platform/infra/cli-presentation/error-codes.ts, packages/riviere-cli/src/platform/infra/cli-presentation/error-codes.spec.ts, packages/riviere-cli/src/platform/infra/cli-presentation/exit-handlers.ts
Added ConnectionDetectionFailure enum member and exitWithConnectionDetectionFailure to emit structured connection-detection errors and exit with extraction failure code.
Test fixtures: schema validation
packages/riviere-cli/src/features/extract/__fixtures__/extraction-test-fixtures.ts
Replaced manual interfaces with Zod schemas; introduced extractionOutputSchema / fullExtractionOutputSchema; added parseFullExtractionOutput and stricter validation for tests.
Extract tests updated / added
packages/riviere-cli/src/features/extract/entrypoint/.../*.spec.ts (multiple files), packages/riviere-cli/src/features/extract/entrypoint/extract.connections.spec.ts
Updated tests to use parseFullExtractionOutput and new data.components/data.links shape; added comprehensive connection-detection tests covering flags, timing output, edge cases, and stats.
Docs & process
docs/continuous-improvement/post-merge-reflections/...-wire-connection-e.md, various reflection docs
New post-merge reflection and workflow updates documenting the integration, instrumentation, findings, and proposed follow-ups.
Dev workflow: push-reflection & git client
tools/dev-workflow/.../push-reflection.ts, .../cli.ts, .../git-client.ts, tests
Added follow-ups flag flow, new PushReflectionOptions and prior-commit file lookup (branchFilesPriorToHead), updated CLI wiring and tests.

Sequence Diagram(s)

sequenceDiagram
    participant CLI as User/CLI
    participant Entrypoint as Extract Entrypoint
    participant Enricher as Enrichment Phase
    participant Detector as Connection Detector
    participant Formatter as Stats Formatter
    participant Output as Stdout/Stderr

    CLI->>Entrypoint: riviere extract --stats --patterns ...
    Entrypoint->>Enricher: run enrichment -> EnrichedComponent[]
    Enricher-->>Entrypoint: EnrichedComponent[]
    Entrypoint->>Detector: detectConnections(components, { patterns })
    Note over Detector: measure setup (rgba(0,128,0,0.5)), callGraph (rgba(0,0,255,0.5)), async detection (rgba(255,165,0,0.5)), total (rgba(128,0,128,0.5))
    Detector-->>Entrypoint: { links, timings }
    Entrypoint->>Formatter: countLinksByType(...) / formatExtractionStats(...)
    Formatter-->>Entrypoint: stats lines
    Entrypoint->>Formatter: formatTimingLine(timings)
    Formatter-->>Entrypoint: timing summary
    Entrypoint->>Output: write { success:true, data: { components, links } } to stdout
    Entrypoint->>Output: write stats/timings to stderr (if requested)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related issues

Possibly related PRs

Suggested labels

Review effort 4/5

Poem

🐰 I hopped through code to wire each link,

Timings counted while I gave a wink,
Patterns flagged and stats in tow,
Components, links in tidy row,
Tests green now — carrots for the win! 🥕

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately describes the main change: wiring connection detection into the CLI with performance instrumentation, matching the core objective.
Linked Issues check ✅ Passed The PR implements all acceptance criteria from #239: output format change (data.components + data.links), new flags (--patterns, --stats, --allow-incomplete, --dry-run), performance timing instrumentation, edge case handling, and error codes.
Out of Scope Changes check ✅ Passed All changes are in-scope. While PR includes documentation updates (post-merge reflections, anti-patterns, review feedback checks) and dev-workflow tool enhancements (push-reflection), these are supporting infrastructure tied to the main extraction work, not unrelated scope creep.

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

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-239-m1-d1-8-d1-9-wire-connection-e

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@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: 6

🤖 Fix all issues with AI agents
In
`@packages/riviere-cli/src/features/extract/__fixtures__/extraction-test-fixtures.ts`:
- Around line 54-58: parseExtractionOutput currently throws TestAssertionError
with only result.error.message while parseFullExtractionOutput throws a richer
message including a custom JSON preview; make their error formatting consistent
by changing parseExtractionOutput (and the other parse helper at the other
location) to throw TestAssertionError with a combined message that includes both
the structured Zod error (result.error.message) and a short JSON preview of the
invalid input (use JSON.stringify(parsed) truncated/previewed), preserving the
existing TestAssertionError usage and the extractionOutputSchema/result
identifiers so the message mirrors parseFullExtractionOutput’s format for
uniform debugging.

In
`@packages/riviere-cli/src/features/extract/entrypoint/extract.connections.spec.ts`:
- Around line 68-105: Add a file-level afterEach hook to restore mocks so
vi.spyOn(console, 'error') in the tests does not leak into other tests;
specifically, add an afterEach that calls the Vitest restore function (e.g.,
vi.restoreAllMocks()) near the top of the test file (alongside createTestContext
/ setupCommandTest) so any spying on console.error is cleaned up after each
spec.

In `@packages/riviere-cli/src/features/extract/entrypoint/extract.ts`:
- Around line 51-52: The CLI --patterns flag is parsed but not used; add a
boolean patterns property to the ConnectionDetectionOptions type in
ConnectionDetectionOptions (used in detect-connections.ts), propagate that field
through detectConnectionsQuery (ensure the query builder accepts and forwards
options.patterns), and update detectConnections (the function that inspects
source files) to branch into pattern-based detection when options.patterns is
true (apply the existing pattern matching logic or add pattern matching steps
there and ensure return shape matches current ConnectionDetectionResult). Also
update any callers that construct ConnectionDetectionOptions to pass the parsed
patterns flag through.

In
`@packages/riviere-cli/src/features/extract/queries/detect-connections-query.ts`:
- Around line 10-13: DetectConnectionsInput duplicates the existing
ConnectionDetectionOptions type; replace the local interface by importing and
reusing ConnectionDetectionOptions so changes stay in sync. Update
detect-connections-query.ts to import the type (e.g., import type {
ConnectionDetectionOptions } from the extract package) and change any references
from DetectConnectionsInput to ConnectionDetectionOptions (remove the duplicate
interface declaration and adjust function/method signatures that use
DetectConnectionsInput such as the detect-connections query entry point).

In
`@packages/riviere-cli/src/platform/infra/cli-presentation/format-extraction-stats.spec.ts`:
- Around line 128-139: Rename the test to reflect that it checks truncation to
zero rather than precision: update the test description string in the spec that
calls formatTimingLine from "formats timing with sub-millisecond precision" to
something like "formats timing by truncating sub-millisecond values to 0.00s"
(or "truncates sub-millisecond timings to 0.00s") so the intent matches the
assertion.

In
`@packages/riviere-extract-ts/src/domain/connection-detection/detect-connections.ts`:
- Around line 47-50: The timing variable currently named filteringMs incorrectly
includes both ComponentIndex construction and file filtering; change the name
(e.g., indexingAndFilteringMs or componentIndexAndFilteringMs) to reflect that
it measures the duration between performance.now() assigned to filteringStart
and the later timestamp after new ComponentIndex(components) and
computeFilteredFilePaths(...) complete, update the variable declaration and all
usages, and also update the ConnectionTimings type/field names to match the new
identifier so semantics remain correct (references: filteringStart,
ComponentIndex, computeFilteredFilePaths, filteringMs, ConnectionTimings).

Comment thread packages/riviere-cli/src/features/extract/entrypoint/extract.ts
Comment thread packages/riviere-cli/src/features/extract/queries/detect-connections-query.ts Outdated
Comment thread packages/riviere-extract-ts/src/domain/connection-detection/detect-connections.ts Outdated
- Align error message format in parse fixtures (use Zod error.message)
- Add afterEach mock restore in connection detection spec
- Rename test: 'truncates sub-millisecond values to zero'
- Rename filteringMs to setupMs (measures indexing + filtering)
- Update timing output label from 'filtering' to 'setup'

Co-Authored-By: Claude Opus 4.6 <[email protected]>

@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: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/riviere-extract-ts/src/domain/connection-detection/detect-connections.ts (1)

1-76: 🛠️ Refactor suggestion | 🟠 Major

Keep timing side effects out of core detection logic.

Line 45+ reads from performance.now(), making detectConnections time-dependent. Consider injecting a now() dependency (or moving timing to a wrapper) so the core detection stays deterministic while the CLI supplies the clock.

💡 Possible refactor (inject clock via options)
 export interface ConnectionDetectionOptions {
   allowIncomplete?: boolean
   moduleGlobs: string[]
+  now: () => number
 }

 export function detectConnections(
   project: Project,
   components: readonly EnrichedComponent[],
   options: ConnectionDetectionOptions,
   globMatcher: GlobMatcher,
 ): ConnectionDetectionResult {
-  const totalStart = performance.now()
+  const now = options.now
+  const totalStart = now()

-  const setupStart = performance.now()
+  const setupStart = now()
   const componentIndex = new ComponentIndex(components)
   const sourceFilePaths = computeFilteredFilePaths(project, options.moduleGlobs, globMatcher)
-  const setupMs = performance.now() - setupStart
+  const setupMs = now() - setupStart

-  const callGraphStart = performance.now()
+  const callGraphStart = now()
   const syncLinks = buildCallGraph(project, components, componentIndex, {
     strict,
     sourceFilePaths,
   })
-  const callGraphMs = performance.now() - callGraphStart
+  const callGraphMs = now() - callGraphStart

-  const asyncStart = performance.now()
+  const asyncStart = now()
   const publishLinks = detectPublishConnections(project, components, { strict })
   const subscribeLinks = detectSubscribeConnections(components, { strict })
-  const asyncDetectionMs = performance.now() - asyncStart
+  const asyncDetectionMs = now() - asyncStart

-  const totalMs = performance.now() - totalStart
+  const totalMs = now() - totalStart

As per coding guidelines, implement detection logic as pure functions with no side effects.

…ry wrapper

The detect-connections-query was a thin pass-through with no real
orchestration. Inline the call directly in the entrypoint to satisfy
CS-010 layer responsibility rules.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

@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

🤖 Fix all issues with AI agents
In `@packages/riviere-cli/src/features/extract/entrypoint/extract.ts`:
- Line 82: Replace the implicit-return arrow callback passed to
formatDryRunOutput(...).forEach so it uses a block body that explicitly calls
console.log; locate the expression using formatDryRunOutput and change the
forEach callback from an expression-bodied arrow to a block-bodied arrow that
calls console.log(line) inside the block to silence the lint warning.
- Around line 139-143: The stats printing uses a concise arrow in
formatExtractionStats(stats).forEach((line) => console.error(line)) which
creates an implicit return; change the forEach callback to a block body to avoid
that by rewriting the callback to use braces and an explicit statement (for
example: forEach((line) => { console.error(line) })); update the call site that
references options.stats, countLinksByType, enrichmentResult.components.length,
and formatExtractionStats to use the block-bodied arrow so the console.error is
executed as a statement rather than implicitly returned.

Comment thread packages/riviere-cli/src/features/extract/entrypoint/extract.ts Outdated
Comment thread packages/riviere-cli/src/features/extract/entrypoint/extract.ts
…ions call

Address CodeRabbit feedback: replace forEach with implicit returns
with block-body for-of loops. Compact detectConnections arguments
to stay within 150-line entrypoint limit.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

@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: 1

🤖 Fix all issues with AI agents
In
`@docs/continuous-improvement/post-merge-reflections/2026-02-05-issue-239-m1-d1-8-d1-9-wire-connection-e.md`:
- Line 1: The document title and its storage directory are inconsistent: the
top-level heading "# Pre-Merge Reflection:
issue-239-m1-d1-8-d1-9-wire-connection-e" should match the directory name
"post-merge-reflections"; either change the heading to "Post-Merge Reflection:
issue-239-m1-d1-8-d1-9-wire-connection-e" to keep the file in its current
directory, or move the file into a "pre-merge-reflections/" directory if the
pre-merge label is intentional—update the heading or relocate the file
accordingly so naming is consistent.

NTCoding and others added 2 commits February 6, 2026 19:35
Add AP-009 anti-pattern for inconsistent patterns between related functions.
Add RFC-016 for mock cleanup detection (vi.spyOn without afterEach restore).
Update pre-merge-reflection template with pipeline improvement proposals section.
Fix stale hardcoded RFC range in bug-scanner agent.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Allows pushing convention/process changes after the reflection file
has been committed. Guards against bypass by verifying a reflection
file exists in a prior commit on the branch.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

@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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.claude/agents/bug-scanner.md (1)

16-18: ⚠️ Potential issue | 🟡 Minor

Align RFC scope wording to the expanded “all RFC checks.”

Line 17 still says RFC-001 through RFC-009, but Line 156 now requires applying each RFC check. Update Line 17 to avoid contradictory guidance.

✅ Suggested update
-2. Read `docs/conventions/review-feedback-checks.md` for RFC checks (RFC-001 through RFC-009)
+2. Read `docs/conventions/review-feedback-checks.md` for all RFC checks

Also applies to: 156-156

🤖 Fix all issues with AI agents
In @.claude/commands/pre-merge-reflection.md:
- Around line 198-201: The document contains a duplicated heading "Pipeline
Improvement Proposals" (the detailed subsection and the later top-level
section); consolidate by removing or renaming the later instance to avoid
confusion—e.g., rename the second heading to "Summary of Improvement Proposals"
and update any cross-references or the surrounding explanatory text so it
clearly states that one is the detailed template (the original "Pipeline
Improvement Proposals" subsection) and the other is a short summary, ensuring
consistency in naming and intent wherever the header "Pipeline Improvement
Proposals" appears.

Comment thread .claude/commands/pre-merge-reflection.md Outdated
Rename reflection heading to "Post-Merge Reflection" to match the
post-merge-reflections/ directory. Remove duplicate "Pipeline Improvement
Proposals" section from the template — the subsection under Pipeline
Timeline already contains the detailed structure.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@sonarqubecloud

sonarqubecloud Bot commented Feb 6, 2026

Copy link
Copy Markdown

@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: 3

🤖 Fix all issues with AI agents
In @.claude/commands/pre-merge-reflection.md:
- Line 84: This is inconsistent: the command and file are named
/pre-merge-reflection and pre-merge-reflection.md but the template header and
output path use "Post-Merge"; update the template header "Post-Merge Reflection"
to "Pre-Merge Reflection" and change any output directory references from
post-merge-reflections/ to pre-merge-reflections/, and search for and update any
other references to "Post-Merge Reflection" so all uses (file
pre-merge-reflection.md, command /pre-merge-reflection, header text, and output
directory) consistently say "Pre-Merge Reflection".

In
`@docs/continuous-improvement/post-merge-reflections/2026-02-05-issue-239-m1-d1-8-d1-9-wire-connection-e.md`:
- Line 30: Check the pipeline timeline vs the narrative: confirm whether there
were actually 4 architecture review iterations for the CS-010 rule or only 3
(review `#3`, review `#7`, review `#10` shown). If there were only 3, update the
sentence that says "4 architecture review iterations" to "3 architecture review
iterations" and adjust the explanatory sentence about detectConnections
accordingly; if there was a fourth review outside the table, add that missing
review entry to the timeline (with its identifier and brief note) or append a
parenthetical clarifying that one review occurred off-timeline. Reference the
detectConnections mention and the sentence claiming "4 architecture review
iterations" when making the edit.
- Around line 180-186: The "Recommended Follow-Ups" list has inconsistent status
markers: items "AP-009: Inconsistent Patterns Between Related Functions" and
"RFC-016: Mock Cleanup After vi.spyOn" use ✅ but the remaining items ("RFC:
'Prefer for-of over forEach for side-effect-only iteration'", "Create task: Add
pre-implementation placement check to task workflow", "Create task: Add 'single
function call = inline in entrypoint' guidance to separation-of-concerns") lack
any indicator; update the list under the "Recommended Follow-Ups" heading to use
a consistent checkbox convention (e.g., ✅ for completed and ❌ or ⬜ for pending)
and apply it to each list item so every entry clearly shows completion status
(adjust the three pending items to start with ❌ or ⬜).

Comment thread .claude/commands/pre-merge-reflection.md
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.

[M1-D1.8/D1.9] Wire connection extraction into CLI with performance instrumentation

1 participant