Skip to content

[issues/656] Migrate to @couimet/logger-contract npm packages#659

Merged
couimet merged 10 commits into
mainfrom
issues/656
Jun 16, 2026
Merged

[issues/656] Migrate to @couimet/logger-contract npm packages#659
couimet merged 10 commits into
mainfrom
issues/656

Conversation

@couimet

@couimet couimet commented Jun 16, 2026

Copy link
Copy Markdown
Owner

Summary

Replaces the in-monorepo barebone-logger and barebone-logger-testing workspace packages with their npm-published equivalents @couimet/logger-contract and @couimet/logger-contract-testing. A new CI gate blocks prerelease dependencies from reaching main, and activation logging now captures the running logger-contract version for observability.

Changes

  • TypeScript files in rangelink-core-ts and rangelink-vscode-extension now import from @couimet/logger-contract and @couimet/logger-contract-testing instead of workspace packages, with corresponding package.json and tsconfig.json updates
  • Deleted packages/barebone-logger/ and packages/barebone-logger-testing/ — the npm packages are 1:1 ports with identical public API
  • New CI composite action check-no-prerelease-deps (via scripts/check-no-prerelease-deps.sh + BATS tests) blocks any package.json with a prerelease dependency from landing on main
  • Extension activation log now includes loggerContractVersion as a structured field, resolved at runtime via require.resolve to bypass the package's exports field; failed resolution logs a warning instead of being silent
  • Test cleanup in extension.test.ts: shared DEFAULT_DELIMITERS constant and createMockConfig() factory eliminate 13 repeated inline mock config definitions; new Activation logging test suite covers success and version.json-not-found paths

Key Discoveries

  • @couimet/logger-contract declares an exports field that blocks require('pkg/package.json') — reading the version at runtime requires require.resolve() + absolute path to bypass it
  • jest.isolateModules + jest.doMock works for mocking JSON file imports, enabling the catch-path test for version.json without affecting other tests in the same file
  • Caret ranges (^1.0.0) allow minor and patch updates to the logger packages without an explicit bump

Test Plan

  • All 2069 unit tests pass (118 suites)
  • pnpm test:release:automated passes (release-notifier-001, release-notifier-002)
  • scripts/check-no-prerelease-deps.sh exits 0 on this branch
  • pnpm compile passes monorepo-wide

Related

couimet added 9 commits June 16, 2026 09:45
After migrating to external @couimet/logger-* packages we had no runtime visibility into which version was actually loaded. The activation log now includes loggerContractVersion as a structured field, resolved independently from version.json so one failing does not block the other. A failed resolution logs a warning instead of being silent.

Tests now centralize DEFAULT_DELIMITERS and createMockConfig() at file scope, eliminating 13 repeated inline mock config definitions. A new Activation logging test suite covers the success path (parsed JSON with key presence assertions on dynamic build fields) and the version.json-not-found path (isolated module mocking).

Benefits:
- Activation log carries the running logger-contract version for post-migration debugging
- Failed logger-contract resolution is observable via [WARNING] log, not swallowed
- Zero inline mock config duplication across all tests in extension.test.ts
- Activation logging contract is now verified by dedicated tests
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 191 files, which is 41 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b1e6be0b-0873-4aae-ab32-44a7e6bcac50

📥 Commits

Reviewing files that changed from the base of the PR and between 1f89d4f and 5439483.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (191)
  • .github/actions/check-no-prerelease-deps/action.yml
  • .github/workflows/ci.yml
  • packages/README.md
  • packages/barebone-logger-testing/README.md
  • packages/barebone-logger-testing/package.json
  • packages/barebone-logger-testing/src/index.ts
  • packages/barebone-logger-testing/src/mocks/createMockLogger.ts
  • packages/barebone-logger-testing/tsconfig.json
  • packages/barebone-logger/README.md
  • packages/barebone-logger/jest.config.js
  • packages/barebone-logger/package.json
  • packages/barebone-logger/src/LogManager.ts
  • packages/barebone-logger/src/Logger.ts
  • packages/barebone-logger/src/LoggingContext.ts
  • packages/barebone-logger/src/NoOpLogger.ts
  • packages/barebone-logger/src/__tests__/LogManager.test.ts
  • packages/barebone-logger/src/__tests__/NoOpLogger.test.ts
  • packages/barebone-logger/src/__tests__/pingLog.test.ts
  • packages/barebone-logger/src/index.ts
  • packages/barebone-logger/src/pingLog.ts
  • packages/barebone-logger/tsconfig.json
  • packages/rangelink-core-ts/package.json
  • packages/rangelink-core-ts/src/__tests__/detection/findLinksInText.test.ts
  • packages/rangelink-core-ts/src/__tests__/formatting/finalizeLinkGeneration.test.ts
  • packages/rangelink-core-ts/src/__tests__/formatting/formatLink.test.ts
  • packages/rangelink-core-ts/src/detection/detectQuotedLinks.ts
  • packages/rangelink-core-ts/src/detection/detectUnquotedLinks.ts
  • packages/rangelink-core-ts/src/detection/findLinksInText.ts
  • packages/rangelink-core-ts/src/formatting/finalizeLinkGeneration.ts
  • packages/rangelink-core-ts/tsconfig.json
  • packages/rangelink-vscode-extension/package.json
  • packages/rangelink-vscode-extension/src/VSCodeLogger.ts
  • packages/rangelink-vscode-extension/src/__integration-tests__/helpers/logBasedUiAssertions.ts
  • packages/rangelink-vscode-extension/src/__integration-tests__/suite/linkGeneration.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/clipboard/ClipboardService.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/AddBookmarkCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/BindToDestinationCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/BindToTerminalCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/BindToTextEditorCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/GoToRangeLinkCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/JumpToDestinationCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/ListBookmarksCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/ManageBookmarksCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/ShowVersionCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/createBindAIAssistantCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/commands/createBindToCustomAiByIdCommand.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/contextKeys/ContextKeyService.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/ComposablePasteDestination.integration.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/ComposablePasteDestination.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/DestinationAvailabilityService.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/DestinationPicker.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/DestinationRegistry.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/PasteDestinationManager.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/AIAssistantFocusCapability.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/ContentEligibilityChecker.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/EditorFocusCapability.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/EligibilityCheckerFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/FocusCapabilityFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/LazyResolvedFocusCapability.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/ResolvedFocusCapability.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/TerminalFocusCapability.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/insertFactories/aiAssistantInsertFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/insertFactories/directInsertFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/insertFactories/editorInsertFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/insertFactories/manualPasteInsertFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/insertFactories/terminalInsertFactory.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/capabilities/resolveFocusTier.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/destinationBuilders.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/utils/showFilePicker.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/destinations/utils/showTerminalPicker.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/extension.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/createMockComposablePasteDestination.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/createMockVscodeAdapter.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/createMockWiringServices.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/destinationTestHelpers.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/spyOnIsGeminiCodeAssistAvailable.ts
  • packages/rangelink-vscode-extension/src/__tests__/helpers/spyOnIsGitHubCopilotChatAvailable.ts
  • packages/rangelink-vscode-extension/src/__tests__/ide/vscode/VscodeAdapter.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/FilePathDocumentProvider.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/FilePathNavigationHandler.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/FilePathTerminalProvider.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/RangeLinkDocumentProvider.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/RangeLinkNavigationHandler.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/navigation/RangeLinkTerminalProvider.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/notification/ReleaseNotifier.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/FilePathPaster.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/LinkGenerator.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/SendRouter.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/TerminalPasteService.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/TerminalSelectionService.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/TextSelectionPaster.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/services/handleDirtyBufferWarning.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/statusBar/RangeLinkStatusBar.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/toInputSelection.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/utils/generateLinkFromSelections.integration.test.ts
  • packages/rangelink-vscode-extension/src/__tests__/utils/generateLinkFromSelections.test.ts
  • packages/rangelink-vscode-extension/src/bookmarks/BookmarkService.ts
  • packages/rangelink-vscode-extension/src/bookmarks/BookmarksStore.ts
  • packages/rangelink-vscode-extension/src/bookmarks/__tests__/BookmarkService.test.ts
  • packages/rangelink-vscode-extension/src/bookmarks/__tests__/BookmarksStore.test.ts
  • packages/rangelink-vscode-extension/src/clipboard/ClipboardService.ts
  • packages/rangelink-vscode-extension/src/commands/AddBookmarkCommand.ts
  • packages/rangelink-vscode-extension/src/commands/BindToDestinationCommand.ts
  • packages/rangelink-vscode-extension/src/commands/BindToTerminalCommand.ts
  • packages/rangelink-vscode-extension/src/commands/BindToTextEditorCommand.ts
  • packages/rangelink-vscode-extension/src/commands/GoToRangeLinkCommand.ts
  • packages/rangelink-vscode-extension/src/commands/JumpToDestinationCommand.ts
  • packages/rangelink-vscode-extension/src/commands/ListBookmarksCommand.ts
  • packages/rangelink-vscode-extension/src/commands/ManageBookmarksCommand.ts
  • packages/rangelink-vscode-extension/src/commands/ShowVersionCommand.ts
  • packages/rangelink-vscode-extension/src/commands/createBindAIAssistantCommand.ts
  • packages/rangelink-vscode-extension/src/commands/createBindToCustomAiByIdCommand.ts
  • packages/rangelink-vscode-extension/src/config/ConfigReader.ts
  • packages/rangelink-vscode-extension/src/config/DelimiterCache.ts
  • packages/rangelink-vscode-extension/src/config/__tests__/ConfigReader.test.ts
  • packages/rangelink-vscode-extension/src/config/__tests__/DelimiterCache.test.ts
  • packages/rangelink-vscode-extension/src/config/__tests__/getDelimitersForExtension.test.ts
  • packages/rangelink-vscode-extension/src/config/__tests__/loadDelimiterConfig.test.ts
  • packages/rangelink-vscode-extension/src/config/__tests__/parseCustomAiAssistants.test.ts
  • packages/rangelink-vscode-extension/src/config/getDelimitersForExtension.ts
  • packages/rangelink-vscode-extension/src/config/loadDelimiterConfig.ts
  • packages/rangelink-vscode-extension/src/config/logging.ts
  • packages/rangelink-vscode-extension/src/config/parseCustomAiAssistants.ts
  • packages/rangelink-vscode-extension/src/contextKeys/ContextKeyService.ts
  • packages/rangelink-vscode-extension/src/createWiringServices.ts
  • packages/rangelink-vscode-extension/src/destinations/BoundSession.ts
  • packages/rangelink-vscode-extension/src/destinations/ComposablePasteDestination.ts
  • packages/rangelink-vscode-extension/src/destinations/DestinationAvailabilityService.ts
  • packages/rangelink-vscode-extension/src/destinations/DestinationPicker.ts
  • packages/rangelink-vscode-extension/src/destinations/DestinationRegistry.ts
  • packages/rangelink-vscode-extension/src/destinations/PasteDestinationManager.ts
  • packages/rangelink-vscode-extension/src/destinations/__tests__/BoundSession.test.ts
  • packages/rangelink-vscode-extension/src/destinations/__tests__/createMultiColumnGuard.test.ts
  • packages/rangelink-vscode-extension/src/destinations/__tests__/createTabCloseGuard.test.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/AIAssistantFocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/ContentEligibilityChecker.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/EditorFocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/EligibilityChecker.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/EligibilityCheckerFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/FocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/FocusCapabilityFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/LazyResolvedFocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/ResolvedFocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/TerminalFocusCapability.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/insertFactories/aiAssistantInsertFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/insertFactories/directInsertFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/insertFactories/editorInsertFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/insertFactories/manualPasteInsertFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/insertFactories/terminalInsertFactory.ts
  • packages/rangelink-vscode-extension/src/destinations/capabilities/resolveFocusTier.ts
  • packages/rangelink-vscode-extension/src/destinations/createMultiColumnGuard.ts
  • packages/rangelink-vscode-extension/src/destinations/createTabCloseGuard.ts
  • packages/rangelink-vscode-extension/src/destinations/utils/showFilePicker.ts
  • packages/rangelink-vscode-extension/src/destinations/utils/showTerminalPicker.ts
  • packages/rangelink-vscode-extension/src/extension.ts
  • packages/rangelink-vscode-extension/src/i18n/LocaleManager.ts
  • packages/rangelink-vscode-extension/src/ide/vscode/VscodeAdapter.ts
  • packages/rangelink-vscode-extension/src/navigation/FilePathDocumentProvider.ts
  • packages/rangelink-vscode-extension/src/navigation/FilePathNavigationHandler.ts
  • packages/rangelink-vscode-extension/src/navigation/FilePathTerminalProvider.ts
  • packages/rangelink-vscode-extension/src/navigation/RangeLinkDocumentProvider.ts
  • packages/rangelink-vscode-extension/src/navigation/RangeLinkNavigationHandler.ts
  • packages/rangelink-vscode-extension/src/navigation/RangeLinkTerminalProvider.ts
  • packages/rangelink-vscode-extension/src/notification/ReleaseNotifier.ts
  • packages/rangelink-vscode-extension/src/services/FilePathPaster.ts
  • packages/rangelink-vscode-extension/src/services/LinkGenerator.ts
  • packages/rangelink-vscode-extension/src/services/SelectionValidator.ts
  • packages/rangelink-vscode-extension/src/services/SendRouter.ts
  • packages/rangelink-vscode-extension/src/services/TerminalPasteService.ts
  • packages/rangelink-vscode-extension/src/services/TerminalSelectionService.ts
  • packages/rangelink-vscode-extension/src/services/TextSelectionPaster.ts
  • packages/rangelink-vscode-extension/src/services/__tests__/SelectionValidator.test.ts
  • packages/rangelink-vscode-extension/src/services/handleDirtyBufferWarning.ts
  • packages/rangelink-vscode-extension/src/statusBar/RangeLinkStatusBar.ts
  • packages/rangelink-vscode-extension/src/utils/__tests__/aiAssistants/isClaudeCodeAvailable.test.ts
  • packages/rangelink-vscode-extension/src/utils/__tests__/aiAssistants/isCursorIDEDetected.test.ts
  • packages/rangelink-vscode-extension/src/utils/__tests__/aiAssistants/isGeminiCodeAssistAvailable.test.ts
  • packages/rangelink-vscode-extension/src/utils/__tests__/aiAssistants/isGitHubCopilotChatAvailable.test.ts
  • packages/rangelink-vscode-extension/src/utils/__tests__/formatMessage.test.ts
  • packages/rangelink-vscode-extension/src/utils/aiAssistants/isClaudeCodeAvailable.ts
  • packages/rangelink-vscode-extension/src/utils/aiAssistants/isCursorIDEDetected.ts
  • packages/rangelink-vscode-extension/src/utils/aiAssistants/isGeminiCodeAssistAvailable.ts
  • packages/rangelink-vscode-extension/src/utils/aiAssistants/isGitHubCopilotChatAvailable.ts
  • packages/rangelink-vscode-extension/src/utils/formatMessage.ts
  • packages/rangelink-vscode-extension/src/utils/generateLinkFromSelections.ts
  • packages/rangelink-vscode-extension/src/utils/registerWithLogging.ts
  • packages/rangelink-vscode-extension/src/utils/toInputSelection.ts
  • packages/rangelink-vscode-extension/tsconfig.json
  • scripts/check-no-prerelease-deps.sh
  • tests/shell/check-no-prerelease-deps.bats
  • tests/shell/fixtures/jest-multi-package.txt

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issues/656

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.

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown

QA Coverage OK

No user-visible changes were found in this pull request.


Generated by QA Gap Check (GPT-4o-mini via GitHub Models)

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@couimet couimet merged commit 2693b66 into main Jun 16, 2026
6 of 7 checks passed
@couimet couimet deleted the issues/656 branch June 16, 2026 19:30
@github-actions

Copy link
Copy Markdown

✅ CI / Integration Tests (with overrides) — run summary

Duration: 1m 3s

QA TC IDs: 2 exercised across 0 features

Report: View run & artifacts

Reproduce locally: ./scripts/run-integration-tests.sh --label needs-override --exclude-label cursor --exclude-assisted

Feature breakdown
Feature TCs IDs

@github-actions

Copy link
Copy Markdown

✅ CI / Integration Tests (automated) — run summary

Duration: 11m 11s

QA TC IDs: 163 exercised across 0 features

Report: View run & artifacts

Reproduce locally: ./scripts/run-integration-tests.sh --exclude-label requires-extensions --exclude-label cursor --automated

Feature breakdown
Feature TCs IDs

@github-actions

Copy link
Copy Markdown

✅ CI / Integration Tests (with extensions) — run summary

Duration: 12m 52s

Unit tests: Ran in separate Test & Validate job

QA TC IDs: 195 exercised across 0 features

Report: View run & artifacts

Reproduce locally: ./scripts/run-integration-tests.sh --exclude-label cursor --exclude-label needs-override --exclude-assisted

Feature breakdown
Feature TCs IDs

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.

Integrate @couimet/logger-contract in RangeLink

1 participant