Skip to content

feat: redesign the logs using sh-style library#149

Open
levibostian wants to merge 18 commits intomainfrom
output-design
Open

feat: redesign the logs using sh-style library#149
levibostian wants to merge 18 commits intomainfrom
output-design

Conversation

@levibostian
Copy link
Copy Markdown
Owner

Related GitHub Issues

Problem

I dont think the logs generated on the CI look good. the formatting can be hard to read and especially quickly glance over.

Solution

I am not a designer and I dont necessarily enjoy designing things. So, I made a cli design system to make this easier and then this PR uses this library.

Testing

  • Added automated tests.
  • Manually tested. If you check this box, provide instructions for others to test, too.

Snapshot testing + viewing the logs from this PR.

Notes for reviewers

now that Logger has new functions, has an init function, refactor codebase and tests to create the instances and provide them to test classes easily.
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 15, 2026

decaf

Running deployments in test mode. Results will appear below.
If this pull request and all of it's parent pull requests are merged using the...

...🟩 squash 🟩 merge method... 🚢 The next version of the project will be: 0.13.0

Learn more
Latest release: 0.12.1
Commit of latest release: 3100912

Commits since last release:
- feat: redesign the logs using sh-style library

Related GitHub Issues

Problem

I dont think the logs generated on the CI look good. the formatting can be hard to read and especially quickly glance over.

Solution

I am not a designer and I dont necessarily enjoy designing things. So, I made a cli design system to make this easier and then this PR uses this library.

Testing

  • Added automated tests.
  • Manually tested. If you check this box, provide instructions for others to test, too.

Snapshot testing + viewing the logs from this PR.

Notes for reviewers


- chore(deps): update jdx/mise-action digest to 1648a78 (#158)

This PR contains the following updates:

Package Type Update Change
jdx/mise-action
(changelog)
action digest c1ecc8f1648a78

Configuration

📅 Schedule: Branch creation - "every weekend" in timezone
America/Chicago, Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update
again.


  • If you want to rebase/retry this PR, check
    this box

This PR was generated by Mend Renovate.
View the repository job
log
.

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- chore(deps): update dependency deno to v2.7.7 (#157)

This PR contains the following updates:

Package Update Change
deno patch 2.7.5
2.7.7

Release Notes

denoland/deno (deno)

v2.7.7

Compare
Source

  • fix(core): implement select fallback on macOS
    (#​32812)
  • fix(ext/node): add disabled process function stubs in worker threads
    (#​32809)
  • fix(ext/node): add key/IV length validation for aes-128-cbc and ecb
    cipher
    modes
    (#​32824)
  • fix(ext/node): improve node:dns module compatibility
    (#​32704)
  • fix(ext/node): improve process.title and support --title flag
    (#​32201)
  • fix(ext/node): set kLastWriteWasAsync in JS write path to prevent
    double
    callback
    (#​32814)
  • fix(ext/node): skip normalization in path.win32.join for reserved
    device names

(#​32808)

  • fix(ext/node): support interface option for IPv6 multicast membership
    (#​32754)
  • fix(ext/node): use constant-time comparison for GCM auth tag
    verification

(#​32817)

  • fix(ext/node): validate process.exitCode and fix process constructor
    name

(#​32806)

  • fix(watch): support graceful shutdown via SIGTERM dispatch
    (#​32564)
  • perf(ext/webidl): optimize dictionary converters
    (#​32729)

v2.7.6

Compare
Source

  • feat(core): add cloneable resource registry for structured clone
    (#​32672)
  • feat(core): update v8 to 146.8.0 with foreground task ownership
    (#​32771)
  • feat(eval): auto-detect CJS vs ESM in deno eval
    (#​32472)
  • feat(ext/node): add MIMEType, convertProcessSignalToExitCode,
    Symbol.dispose
    for ChildProcess
    (#​32793)
  • feat(ext/signals): support additional signals on Windows
    (#​32689)
  • feat(ext/telemetry): support array values in OTEL attributes
    (#​32748)
  • feat: add --cpu-prof-flamegraph to generate interactive SVG
    flamegraphs

(#​32572)

  • fix(cli): update typescript-go to 2026-03-09
    (#​32656)
  • fix(core): don't panic in to_v8_error when JS error builder callback
    fails

(#​32749)

  • fix(core): prevent panic when multiple lazy-loaded ESM modules are
    loaded
    during TLA
    (#​32769)
  • fix(coverage): don't mark lines uncovered when zero-count range only
    partially
    overlaps
    (#​32601)
  • fix(ext/console): make timer and counter state per-instance to fix
    OTEL
    console wrapping
    (#​32719)
  • fix(ext/crypto): support structuredClone for CryptoKey
    (#​32674)
  • fix(ext/fetch): retry on stale pooled HTTP/1.1 connections
    (#​32566)
  • fix(ext/ffi): retain backing store references in nonblocking calls
    (#​32775)
  • fix(ext/napi): call wrap/ref finalizers at shutdown
    (#​32592)
  • fix(ext/napi): keep event loop alive while uv_async_t handle is
    active

(#​32702)

  • fix(ext/napi): prevent spurious TypeError from
    napi_coerce_to_object on
    null/undefined
    (#​32695)
  • fix(ext/node): accept all TypedArrays in spawnSync input option
    (#​32712)
  • fix(ext/node): allow IPv6 multicast addresses in UDP
    addMembership/dropMembership
    (#​32739)
  • fix(ext/node): allow passing FileHandle as fd argument for
    WriteStream
    and ReadStream
    (#​32770)
  • fix(ext/node): emit "connect" event on http.Server for CONNECT
    requests

(#​32599)

  • fix(ext/node): enable 8 already-passing child_process compat tests
    (#​32710)
  • fix(ext/node): fix 8 Node.js compat test failures
    (#​32755)
  • fix(ext/node): fix AbortController signal handling in child_process
    s…

(#​32713)

  • fix(ext/node): fix Buffer.concat, expose internal/buffer, implement
    markAsUntransferable
    (#​32760)
  • fix(ext/node): fix IPC message prototype for child_process JSON
    (#​32731)
  • fix(ext/node): fix TLA stall with native TTY handles and make stdio
    indestructible
    (#​32792)
  • fix(ext/node): fix TLS JSStreamSocket resource leak causing process
    hang

(#​32325)

  • fix(ext/node): fix multiple deepEqual comparison issues
    (#​32763)
  • fix(ext/node): fix perm checks in TCPWrap
    (#​32721)
  • fix(ext/node): fix send() validation in child_process IPC
    (#​32779)
  • fix(ext/node): handle cargo features during publish
    (#​32636)
  • fix(ext/node): handle signal 0 in child_process.kill()
    (#​32294)
  • fix(ext/node): implement safe, add, rem options for
    crypto.generatePrime

(#​32618)

  • fix(ext/node): improve Node.js crypto compatibility
    (#​32690)
  • fix(ext/node): improve X509Certificate Node.js compatibility
    (#​32671)
  • fix(ext/node): improve crypto.generateKeyPair validation
    (#​32620)
  • fix(ext/node): improve worker_threads path validation and error
    handling

(#​32791)

  • fix(ext/node): include prototype env vars in child_process spawn
    (#​32699)
  • fix(ext/node): remove extra properties from node:fs exports
    (#​32670)
  • fix(ext/node): require --allow-net for udp.send
    (#​32774)
  • fix(ext/node): rewrite node:tty on top of uv compat
    (#​32777)
  • fix(ext/node): set up stdio streams on failed child_process spawn
    (#​32698)
  • fix(ext/node): signal listeners added via process.once can now be
    removed

(#​32606)

  • fix(ext/node): support encrypted PEM export and deprecated hash option
    in
    crypto keygen
    (#​32703)
  • fix(ext/node): use non-blocking write in fs.writev
    (#​32673)
  • fix(ext/node): validate handle type in child_process send()
    (#​32711)
  • fix(ext/node): wrap non-Error unhandled rejections in
    ERR_UNHANDLED_REJECTION

(#​32535)

  • fix(ext/otel): don't mark server spans as error for 4xx responses
    (#​32722)
  • fix(ext/signals): prevent panic on FreeBSD
    (#​32518)
  • fix(ext/telemetry): add log.iostream attribute to console logs
    (#​32723)
  • fix(ext/telemetry): add exception.* attributes to OTEL log records
    (#​32726)
  • fix(ext/web): support %j JSON format specifier in console.log
    (#​32684)
  • fix(ext/web): upgrade QuotaExceededError to DOMException derived
    interface

(#​32244)

  • fix(lsp): align organize imports output with tsgo
    (#​32677)
  • fix(npm): handle read-only bin files when setting up
    node_modules/.bin

(#​32632)

  • fix(npm): resolve bundled npm deps in packages properly when not using
    a
    node_modules directory
    (#​32679)
  • fix(npm): retain authorization header on http->https redirect
    (#​29878)
  • fix(npm): support npmrc certfile + keyfile
    (#​32655)
  • fix(process): allow unref'd child processes to outlive parent
    (#​32563)
  • fix(repl): fix panic when pressing Tab at beginning of line
    (#​32750)
  • fix(runtime): apply source maps to CPU profiler output
    (#​32634)
  • fix(runtime): display proper error when throwing in event handlers
    (#​32663)
  • fix(runtime): reduce memory retention after web worker termination
    (#​32617)
  • fix(runtime): use XML-valid entity in flamegraph SVG
    (#​32716)
  • fix(test): allow test functions to override reported location
    (#​32732)
  • fix(tsc): move more node resolution errors to typescript diagnostics
    (#​32697)
  • fix(watch): dispatch unload and process exit events on restart
    (#​32664)
  • fix(web): support structuredClone for DOMException
    (#​32675)
  • fix: restore --env-file parent directory traversal and do not error in
    deno compile for not found env file
    (#​32686)
  • fix: wake event loop when V8 posts foreground tasks from background
    threads

(#​32450)

  • perf(core): optimize V8-to-Rust string conversion with ValueView
    (#​32688)
  • perf(ext/napi): use threadpool for async work instead of spawning
    threads

(#​32776)

  • perf(ext/node): move fs.cpSync implementation to rust
    (#​32687)
  • perf(ext/web): add write buffering for FsFile.writable streams
    (#​32676)
  • perf(ext/web): optimize TextEncoder/TextDecoder hot paths
    (#​32735)
  • perf(ext/web): optimize URLPattern ops to reduce serde overhead and GC
    pressure
    (#​32766)
  • perf(ext/web): optimize node:buffer base64 encode/decode
    (#​32647)
  • perf(ext/web): reduce promise allocations in streams
    (#​32652)
  • perf(fmt): speed up file diffing
    (#​30644)
  • perf(install): avoid unnecessary package info fetches when running
    lifecycle
    scripts
    (#​32653)
  • perf(linux): trim glibc malloc arena after module loading
    (#​32662)
  • perf(lsp): replace dissimilar with imara-diff
    (#​32700)
  • perf(npm): run lifecycle scripts in parallel
    (#​32666)

Configuration

📅 Schedule: Branch creation - "every weekend" in timezone
America/Chicago, Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update
again.


  • If you want to rebase/retry this PR, check
    this box

This PR was generated by Mend Renovate.
View the repository job
log
.

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

...🟩 rebase 🟩 merge method... ⚠️ There was an error during deployment run. See logs to learn more and fix the issue.

In a pull request of mine, I encountered a scenario where the squash simulated merge was failing with decaf. However, the GitHub UI for the pull request did not indicate there were merge conflicts for the squash method, though it did for the rebase. This, to me, proves that the current implementation of squash does not actually match what GitHub does. Therefore, I suggest changing the behavior to a new implementation.
levibostian added a commit that referenced this pull request Mar 16, 2026
## Related GitHub Issues
<!-- Link to any related GitHub issues that this pull request addresses
or closes. -->

## Problem
<!-- A clear description of the problem that this pull request is
solving. -->

[In a pull request of
mine](#149), I encountered a
scenario where the squash simulated merge was failing with decaf.
However, the GitHub UI for the pull request did not indicate there were
merge conflicts for the squash method, though it did for the rebase.
This, to me, proves that the current implementation of squash does not
actually match what GitHub does. Therefore, I suggest changing the
behavior to a new implementation.

## Solution
<!-- Describe the approach you took to solve the problem and the changes
made in this pull request. -->

Implement `git merge --squash` as the new solution. 

## Testing
<!-- Choose one of the below options for how you tested the code change.
Include any specific setup or instructions for testing. -->
- [ ] Added automated tests. 
- [X] Manually tested. If you check this box, provide instructions for
others to test, too.

Sure, there are automated tests, but this change must be tested in a
real PR to validate that it's the correct command.

I can verify that it did [fix the problem I saw in the
PR](#149). It's a simple
solution, so I feel good about it.

## Notes for reviewers 
<!-- If there is any additional information you would like to share with
the person reviewing this pull request, please provide it here. -->
@levibostian levibostian force-pushed the output-design branch 4 times, most recently from 5b2be51 to ba7c583 Compare March 17, 2026 12:21
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