Skip to content

Scoped logging configuration - #188

Merged
dahlia merged 11 commits into
mainfrom
with-config
Jul 2, 2026
Merged

Scoped logging configuration#188
dahlia merged 11 commits into
mainfrom
with-config

Conversation

@dahlia

@dahlia dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Closes #185.

Why

LogTape configuration is process-wide today, which makes short-lived logging policies awkward. Test helpers, diagnostics, and request-local capture often need a different set of sinks/filters for one execution flow without disturbing the application configuration.

This PR keeps the process-wide configuration as the source of runtime integration, especially contextLocalStorage, and layers a scoped logging policy on top of the current execution context. That keeps the existing global model intact while giving callers a smaller primitive for temporary routing.

How

The new API adds withConfig(), withConfigSync(), and ScopedConfig to @logtape/logtape. A scoped config uses the same sinks/filters/loggers shape as Config, but leaves out reset and contextLocalStorage. Callers configure Config.contextLocalStorage globally first, then use scoped configs for temporary logger routing.

The scoped implementation lives in packages/logtape/src/scoped-config.ts. It compiles scoped logger state separately from the global logger graph, then logger dispatch checks the current scoped config before falling back to process-wide routing. The scoped path mirrors normal logger semantics, including lowestLevel: null, parent sink inheritance, category prefixes, implicit context, and lazy evaluation.

Filtering also follows the global dispatch order. A scoped logger first checks whether the record's level has an eligible dispatch plan, then runs filters only for records that can actually be emitted. That preserves the usual behavior for disabled levels and avoids running expensive or side-effectful filters for rejected records.

Scoped resources are disposed when the callback settles. Because context-local storage can propagate into async work that outlives the callback, disposed scoped configs are ignored by later propagated tasks. Those logs fall back to the nearest active parent scope, or to the process-wide configuration when no parent scope remains active.

Process-wide configuration changes are blocked while any scoped config is active, even from sibling async flows. That prevents configure(), reset(), or dispose() from invalidating a still-running scope through shared global state.

withConfigSync() follows the same lifetime model, but it rejects async disposable resources and promise-returning callbacks. The runtime callback guard observes rejected promises before throwing ConfigError, so accidental async callbacks do not also produce unhandled promise rejections.

Documentation and tests

The manual in docs/manual/config.md explains scoped configuration after the synchronous configuration section, including lifetime rules, nesting, interaction with withContext() and withCategoryPrefix(), global-only getConfig() behavior, meta logger setup, and disposal errors. CHANGES.md records the new 2.3 API.

The regression coverage in packages/logtape/src/config.test.ts exercises nested and concurrent scopes, disposal, async propagation after disposal, sibling global mutations, lowestLevel: null, disabled-level filters, invalid scoped configs, and sync callback/resource rejection.

Add withConfig(), withConfigSync(), and ScopedConfig for applying a
LogTape configuration to the current execution context.  Scoped configs
use context-local storage, support nesting and concurrent scopes, dispose
scoped resources on exit, and guard process-wide state changes while any
scope is active.

Update logger dispatch so active scopes override global routing without
breaking context properties, category prefixes, lazy evaluation, filters,
parent sinks, or lowestLevel: null semantics.  The synchronous variant
rejects async resources and promise-returning callbacks.

Document the new behavior and add regression coverage for disposal,
concurrency, nested scopes, invalid configuration, and async propagation
edge cases.

Fixes #185
#188

Assisted-by: Codex:gpt-5.5
@dahlia dahlia added this to the LogTape 2.3 milestone Jul 2, 2026
@dahlia
dahlia requested a review from Copilot July 2, 2026 09:47
@dahlia dahlia self-assigned this Jul 2, 2026
@dahlia dahlia added the enhancement New feature or request label Jul 2, 2026

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@codecov

codecov Bot commented Jul 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.96552% with 80 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.92%. Comparing base (cb92bb8) to head (ab6a1d6).
⚠️ Report is 9 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
packages/logtape/src/scoped-config.ts 90.78% 24 Missing and 17 partials ⚠️
packages/logtape/src/logger.ts 56.25% 16 Missing and 5 partials ⚠️
packages/logtape/src/config.ts 92.17% 11 Missing and 7 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #188      +/-   ##
==========================================
+ Coverage   84.72%   84.92%   +0.19%     
==========================================
  Files          64       66       +2     
  Lines       11754    12578     +824     
  Branches     2667     2865     +198     
==========================================
+ Hits         9959    10682     +723     
- Misses       1304     1370      +66     
- Partials      491      526      +35     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

Test Results (macOS)

    1 files  ± 0     46 suites  ±0   36s ⏱️ ±0s
1 281 tests +28  1 269 ✅ +28  12 💤 ±0  0 ❌ ±0 
1 281 runs  +28  1 257 ✅ +28  24 💤 ±0  0 ❌ ±0 

Results for commit ab6a1d6. ± Comparison against base commit 61dcdb7.

♻️ This comment has been updated with latest results.

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@dahlia
dahlia requested a review from Copilot July 2, 2026 09:48

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

Test Results (Linux)

    1 files  ± 0     45 suites  ±0   36s ⏱️ ±0s
1 262 tests +28  1 250 ✅ +28  12 💤 ±0  0 ❌ ±0 
1 262 runs  +28  1 238 ✅ +28  24 💤 ±0  0 ❌ ±0 

Results for commit ab6a1d6. ± Comparison against base commit cb92bb8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

Test Results (Windows)

    1 files  ± 0     46 suites  ±0   42s ⏱️ ±0s
1 281 tests +28  1 279 ✅ +28  2 💤 ±0  0 ❌ ±0 
1 281 runs  +28  1 277 ✅ +28  4 💤 ±0  0 ❌ ±0 

Results for commit ab6a1d6. ± Comparison against base commit 61dcdb7.

♻️ This comment has been updated with latest results.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape, allowing configurations to be applied temporarily within a specific execution context via withConfig() and withConfigSync(). The changes include the addition of the ScopedConfig type, the implementation of scoped configuration compilation and disposal in a new scoped-config.ts file, and updates to documentation and tests. Feedback on the changes suggests grouping and sorting imports in the test file alphabetically with the module under test last, and removing a redundant explicit type annotation for snapshotFailed in logger.ts.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/config.test.ts Outdated
Comment thread packages/logtape/src/logger.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 68821ae3ce

ℹ️ 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 packages/logtape/src/config.ts
Comment thread packages/logtape/src/config.ts Outdated
Block new scoped configurations while process-wide configuration is being
reset, disposed, or replaced.  This keeps scopes from capturing a
context-local storage that a concurrent global mutation is about to clear.

Use internal disposal helpers for process exit and unload hooks so global
resources can still be finalized while scoped configurations are active.
Also keep the config test imports in the project order and remove a
redundant local type annotation.

#188 (comment)
#188 (comment)
#188 (comment)
#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape, allowing users to temporarily override process-wide logging policies within specific execution contexts using withConfig() and withConfigSync(). The implementation includes the new ScopedConfig type, context-local storage integration, automatic resource disposal, and comprehensive unit tests. The review feedback highlights critical safety improvements in scoped-config.ts, specifically recommending input validation at the start of configuration compilation and adding type guards before using the in operator on sinks and filters to prevent unhandled runtime TypeErrors when dealing with primitive values.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts Outdated
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 50e33c4de5

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

Reject malformed scoped configuration objects before compiling their
logger graph.  This turns runtime-only mistakes from JavaScript callers or
casts into ConfigError values instead of leaking TypeError from property
access or the in operator.

Also validate referenced sink and filter values before storing them in the
compiled scope, and skip primitive unreferenced resources while collecting
scoped disposables.

#188 (comment)
#188 (comment)
#188 (comment)

Assisted-by: Codex:gpt-5.5
Repository owner deleted a comment from gemini-code-assist Bot Jul 2, 2026
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review
/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape via the new withConfig() and withConfigSync() APIs, allowing temporary logging policies to be applied within specific execution contexts using context-local storage. The feedback suggests enhancing the robustness of resource disposal within these scopes by switching from ReadonlySet to mutable Sets for tracking filters and sinks, which prevents memory leaks and ensures disposal idempotency. Additionally, it is recommended to update the disposal helpers to delete items as they are processed, clear the sets in finally blocks, and wrap async disposal calls in try-catch blocks to safely handle synchronous errors.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/scoped-config.ts Outdated
Comment thread packages/logtape/src/scoped-config.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b92e30e532

ℹ️ 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 packages/logtape/src/scoped-config.ts Outdated
Skip scoped resource disposal for sinks and filters still owned by an
active parent logging scope. This keeps nested scopes that reuse a
parent-owned disposable from closing it before the parent resumes.

Add regression coverage for shared disposable sinks and filters across
nested withConfig() calls.

#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape via the new withConfig() and withConfigSync() APIs, allowing temporary logging policies within specific execution contexts. The changes include the core implementation in scoped-config.ts, integration with the global configuration and logger, comprehensive test coverage, and updated documentation. The review feedback consistently recommends adding explicit type annotations for local variables, constants, and imports across the newly added code to clearly define intended types rather than relying solely on type inference.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/config.ts
Comment thread packages/logtape/src/config.ts
Comment thread packages/logtape/src/config.ts
Comment thread packages/logtape/src/logger.ts
Comment thread packages/logtape/src/logger.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape, allowing users to temporarily override the process-wide logging policy within a specific execution context using withConfig() and withConfigSync(). The changes include the core implementation, extensive test coverage, and updated documentation. The review feedback highlights two important issues in scoped-config.ts where custom sinks or filters implementing both Symbol.asyncDispose and Symbol.dispose could be registered for both synchronous and asynchronous disposal, potentially leading to double-disposal errors. The reviewer suggests using else if blocks to ensure only one disposal method is registered.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/scoped-config.ts Outdated
Comment thread packages/logtape/src/scoped-config.ts

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2fc375ff46

ℹ️ 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 packages/logtape/src/scoped-config.ts
Track active scoped configurations so scope disposal can retain disposable
sinks and filters still owned by another live scope.  This prevents
concurrent or overlapping scopes that share a resource from closing it while
another scope can still route logs to it.

Prefer Symbol.asyncDispose over Symbol.dispose when a scoped sink or filter
implements both disposal protocols, matching async resource ownership with a
single cleanup path.

#188 (comment)
#188 (comment)
#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configurations to LogTape, allowing temporary logging policies to be applied within specific execution contexts via withConfig() and withConfigSync(). The changes include compiling, running, and disposing of these scoped configurations, along with comprehensive tests and documentation updates. Feedback on the implementation highlights a potential race condition in getRetainedDisposables that could leak shared disposables, a recommendation to add robust input validation for logger configurations, and a suggestion to avoid mutating a Set during iteration in disposeSyncDisposables by copying it to an array first.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 8021cecfaf

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

Skip scoped configurations that are already disposing when collecting retained
resources for another scope.  This lets the still-running disposer finish the
shared resource cleanup instead of leaking it through mutual retention.

Validate scoped logger shapes before compiling them, so malformed runtime
inputs raise ConfigError rather than incidental TypeError exceptions.  Also
copy sync disposable sets before iterating so cleanup does not mutate the set
being traversed.

#188 (comment)
#188 (comment)
#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape, allowing temporary logging policies to be applied within specific execution contexts via withConfig() and withConfigSync(). It updates the documentation, exports the new APIs, and integrates them into the logger implementation and global configuration lifecycle. Feedback on the changes suggests adding validation for config.filters in compileScopedConfig to prevent potential runtime errors when non-object values are provided.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/scoped-config.ts
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 77fa6f1a5e

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

Reject scoped configurations whose filters registry is present but not an
object, so invalid user input fails with ConfigError instead of reaching
Object.values() with a primitive value.

#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped logging configurations to LogTape via the new withConfig() and withConfigSync() functions, allowing temporary logging policies to be applied within specific execution contexts using context-local storage. The feedback focuses on optimizing the performance of scoped record filtering in high-volume logging scenarios. Specifically, the reviewer suggests caching resolved filters for each category in a new filterCache map on CompiledScopedConfig and replacing JSON.stringify with manual string concatenation for category keys to minimize overhead in this critical hot path.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
Comment thread packages/logtape/src/scoped-config.ts
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: bde3be7317

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

Cache the resolved scoped filter list per category so repeated log records
avoid walking category prefixes on every emit. Keep the existing JSON-based
category key so single segment categories containing separators do not collide
with multi-segment categories.

#188 (comment)
#188 (comment)
#188 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@dahlia

dahlia commented Jul 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces scoped configuration support to LogTape (version 2.3.0). It adds withConfig() and withConfigSync() functions, allowing users to apply temporary logging configurations within specific execution contexts using context-local storage. It also includes the ScopedConfig type, comprehensive tests, documentation, and updates to the developer guidelines. There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: ab6a1d67d9

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

@dahlia
dahlia merged commit 6c91328 into main Jul 2, 2026
28 of 29 checks passed
@dahlia
dahlia deleted the with-config branch July 2, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add scoped LogTape configuration with withConfig()

2 participants