Skip to content

fix: use k8s postgres for paperclip, remove docker-postgres dep - #1347

Merged
shunkakinoki merged 1 commit into
mainfrom
fix/paperclip-k8s-postgres
Apr 4, 2026
Merged

fix: use k8s postgres for paperclip, remove docker-postgres dep#1347
shunkakinoki merged 1 commit into
mainfrom
fix/paperclip-k8s-postgres

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Apr 4, 2026

Copy link
Copy Markdown
Owner

Summary

  • Read DATABASE_URL from ~/dotfiles/.env at hydrate time (like openclaw reads secrets)
  • Remove docker-postgres.service dependency from systemd unit
  • Use authenticated mode on kyber (required for 0.0.0.0 binding)
  • Add allowedHostnames for paperclip.shunkakinoki.com
  • Auto-create paperclip database via psql if missing

Required

Add to ~/dotfiles/.env:

DATABASE_URL=postgres://postgres:shunkakinoki@10.43.199.36:5432/paperclip

Summary by cubic

Switch Paperclip to k8s Postgres via DATABASE_URL and remove the docker-postgres.service dependency. Hydration reads from ~/dotfiles/.env, runs Kyber in authenticated mode, and auto-creates the paperclip database if missing.

  • Refactors

    • Read DATABASE_URL from ~/dotfiles/.env at hydrate time.
    • Remove docker-postgres.service and Docker-based DB provisioning.
    • Use authenticated mode on Kyber and bind to 0.0.0.0; allow paperclip.shunkakinoki.com.
    • Create paperclip DB via psql if missing.
    • Update .env.example and tests.
  • Migration

    • Add DATABASE_URL=postgres://postgres:shunkakinoki@10.43.199.36:5432/paperclip to ~/dotfiles/.env on Kyber.

Written for commit b2b3afa. Summary will update on new commits.

Copilot AI review requested due to automatic review settings April 4, 2026 11:06
@mesa-dot-dev

mesa-dot-dev Bot commented Apr 4, 2026

Copy link
Copy Markdown

You do not have enough credits to review this pull request. Please purchase more credits to continue.

@coderabbitai

coderabbitai Bot commented Apr 4, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c8319fd0-cf93-4567-95f2-39b21a954a2b

📥 Commits

Reviewing files that changed from the base of the PR and between 31ca229 and b2b3afa.

📒 Files selected for processing (5)
  • .env.example
  • config/paperclip/default.nix
  • config/paperclip/hydrate.sh
  • home-manager/modules/paperclip/default.nix
  • spec/paperclip_hydrate_spec.sh

Disabled knowledge base sources:

  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.


📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • New Features

    • Database connection URL can now be configured via environment variables, allowing greater deployment flexibility
  • Documentation

    • Added configuration documentation for the new DATABASE_URL setting
  • Improvements

    • Streamlined database initialization for improved reliability and faster startup times
  • Tests

    • Expanded test coverage to validate environment variable configuration and database provisioning workflows

Walkthrough

The changes migrate Paperclip database configuration from a Docker-based approach to environment-variable-based configuration. The system now reads DATABASE_URL from an environment file, replaces hardcoded Nix-based connection string logic with environment fallbacks, and transitions database provisioning from Docker container inspection to direct psql commands.

Changes

Cohort / File(s) Summary
Environment Configuration
.env.example
Added DATABASE_URL environment variable for Postgres connection string configuration.
Nix Configuration
config/paperclip/default.nix, home-manager/modules/paperclip/default.nix
Replaced conditional database connection string logic with empty default; removed explicit Docker Postgres service dependency from systemd unit.
Database Provisioning
config/paperclip/hydrate.sh
Added environment file sourcing for DATABASE_URL; replaced Docker-based database inspection with direct psql client checks; updated bootstrap logic to create database via psql if missing.
Test Suite
spec/paperclip_hydrate_spec.sh
Added test coverage for environment file loading; updated database provisioning assertions to validate CREATE DATABASE commands instead of createdb usage.

Sequence Diagram

sequenceDiagram
    participant Script as hydrate.sh Script
    participant EnvFile as dotfiles/.env
    participant Config as config.json
    participant DB as psql / Postgres

    Script->>EnvFile: Source environment file (if exists)
    EnvFile-->>Script: DATABASE_URL
    Script->>Script: Derive DB_CONNECTION from DATABASE_URL<br/>(or use Nix default)
    Script->>Config: Replace __DATABASE_CONNECTION_STRING__<br/>with DB_CONNECTION
    Script->>DB: Check if psql client available
    Script->>DB: Derive base connection string<br/>(replace path/user with /postgres)
    Script->>DB: Query pg_database for<br/>existing 'paperclip' database
    DB-->>Script: Database exists? (yes/no)
    alt Database does not exist
        Script->>DB: Execute CREATE DATABASE paperclip
        DB-->>Script: Success
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A rabbit hops through dotfiles with glee,
No Docker needed, just environment spree!
From psql's commands, the database springs,
Configuration flows—oh, what clarity brings!
A Postgres migration with elegant ease,
Makes Paperclip provisioning perfectly pleased! 🌱

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/paperclip-k8s-postgres

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.

@mesa-dot-dev

mesa-dot-dev Bot commented Apr 4, 2026

Copy link
Copy Markdown

Mesa Description

TL;DR

Read DATABASE_URL from ~/dotfiles/.env at hydrate time (like openclaw reads secrets), remove docker-postgres.service dependency from systemd unit, use authenticated mode on kyber (required for 0.0.0.0 binding), add allowedHostnames for paperclip.shunkakinoki.com, and auto-create paperclip database via psql if missing.

What changed?

  • Read DATABASE_URL from ~/dotfiles/.env at hydrate time (like openclaw reads secrets)
  • Remove docker-postgres.service dependency from systemd unit
  • Use authenticated mode on kyber (required for 0.0.0.0 binding)
  • Add allowedHostnames for paperclip.shunkakinoki.com
  • Auto-create paperclip database via psql if missing
  • Required: Add DATABASE_URL=postgres://postgres:shunkakinoki@10.43.199.36:5432/paperclip to ~/dotfiles/.env

Description generated by Mesa. Update settings

@shunkakinoki
shunkakinoki merged commit c6fc2bc into main Apr 4, 2026
29 of 31 checks passed
@shunkakinoki
shunkakinoki deleted the fix/paperclip-k8s-postgres branch April 4, 2026 11:07

@cubic-dev-ai cubic-dev-ai 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.

3 issues found across 5 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="spec/paperclip_hydrate_spec.sh">

<violation number="1" location="spec/paperclip_hydrate_spec.sh:60">
P2: This assertion doesn't actually test the "if missing" condition; it only checks that a CREATE DATABASE statement exists. The spec can pass even if database creation is unconditional.</violation>
</file>

<file name="config/paperclip/hydrate.sh">

<violation number="1" location="config/paperclip/hydrate.sh:24">
P2: Escape `DB_CONNECTION` before using it in the sed replacement; unescaped `&`/`|` can corrupt the rendered database URL in `config.json`.</violation>

<violation number="2" location="config/paperclip/hydrate.sh:36">
P1: Preserve URL query parameters when rewriting the DB name to `/postgres`; currently required options can be dropped from `DB_BASE`.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

echo "Created paperclip database" >&2
if [ "@is_kyber@" = "true" ] && [ -n "$DB_CONNECTION" ]; then
if command -v psql >/dev/null 2>&1; then
DB_BASE="${DB_CONNECTION%/*}/postgres"

@cubic-dev-ai cubic-dev-ai Bot Apr 4, 2026

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.

P1: Preserve URL query parameters when rewriting the DB name to /postgres; currently required options can be dropped from DB_BASE.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At config/paperclip/hydrate.sh, line 36:

<comment>Preserve URL query parameters when rewriting the DB name to `/postgres`; currently required options can be dropped from `DB_BASE`.</comment>

<file context>
@@ -4,26 +4,38 @@ set -euo pipefail
-      echo "Created paperclip database" >&2
+if [ "@is_kyber@" = "true" ] && [ -n "$DB_CONNECTION" ]; then
+  if command -v psql >/dev/null 2>&1; then
+    DB_BASE="${DB_CONNECTION%/*}/postgres"
+    if ! psql "$DB_BASE" -tAc "SELECT 1 FROM pg_database WHERE datname='paperclip'" 2>/dev/null | grep -q 1; then
+      psql "$DB_BASE" -c "CREATE DATABASE paperclip" 2>/dev/null && echo "Created paperclip database" >&2
</file context>
Suggested change
DB_BASE="${DB_CONNECTION%/*}/postgres"
DB_NO_QUERY="${DB_CONNECTION%%\?*}"
DB_QUERY="${DB_CONNECTION#"$DB_NO_QUERY"}"
DB_BASE="${DB_NO_QUERY%/*}/postgres${DB_QUERY}"
Fix with Cubic

It 'checks if database already exists before creating'
When run bash -c "grep 'grep -qw paperclip' '$SCRIPT'"
It 'creates paperclip database if missing'
When run bash -c "grep 'CREATE DATABASE' '$SCRIPT'"

@cubic-dev-ai cubic-dev-ai Bot Apr 4, 2026

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.

P2: This assertion doesn't actually test the "if missing" condition; it only checks that a CREATE DATABASE statement exists. The spec can pass even if database creation is unconditional.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At spec/paperclip_hydrate_spec.sh, line 60:

<comment>This assertion doesn't actually test the "if missing" condition; it only checks that a CREATE DATABASE statement exists. The spec can pass even if database creation is unconditional.</comment>

<file context>
@@ -44,13 +56,8 @@ End
-It 'checks if database already exists before creating'
-When run bash -c "grep 'grep -qw paperclip' '$SCRIPT'"
+It 'creates paperclip database if missing'
+When run bash -c "grep 'CREATE DATABASE' '$SCRIPT'"
 The output should include 'paperclip'
 End
</file context>
Fix with Cubic

@sed@ \
-e "s|__DATABASE_MODE__|@database_mode@|g" \
-e "s|__DATABASE_CONNECTION_STRING__|@database_connection_string@|g" \
-e "s|__DATABASE_CONNECTION_STRING__|${DB_CONNECTION}|g" \

@cubic-dev-ai cubic-dev-ai Bot Apr 4, 2026

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.

P2: Escape DB_CONNECTION before using it in the sed replacement; unescaped &/| can corrupt the rendered database URL in config.json.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At config/paperclip/hydrate.sh, line 24:

<comment>Escape `DB_CONNECTION` before using it in the sed replacement; unescaped `&`/`|` can corrupt the rendered database URL in `config.json`.</comment>

<file context>
@@ -4,26 +4,38 @@ set -euo pipefail
 @sed@ \
   -e "s|__DATABASE_MODE__|@database_mode@|g" \
-  -e "s|__DATABASE_CONNECTION_STRING__|@database_connection_string@|g" \
+  -e "s|__DATABASE_CONNECTION_STRING__|${DB_CONNECTION}|g" \
   -e "s|__DEPLOYMENT_MODE__|@deployment_mode@|g" \
   -e "s|__HOST__|@host@|g" \
</file context>
Suggested change
-e "s|__DATABASE_CONNECTION_STRING__|${DB_CONNECTION}|g" \
-e "s|__DATABASE_CONNECTION_STRING__|$(printf '%s' "$DB_CONNECTION" | sed 's/[&|]/\\&/g')|g" \
Fix with Cubic

@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 refactors the Paperclip database configuration to support external PostgreSQL instances via a DATABASE_URL environment variable, moving away from a hardcoded dependency on a local Docker-based PostgreSQL service. Key changes include updating the hydration script to source environment variables from a .env file, removing the docker-postgres.service dependency from the systemd unit, and updating the test suite to reflect the new database provisioning logic. A review comment pointed out that the manual construction of the base database URL is fragile and suggested using the psql -d flag to more robustly override the database name while preserving connection parameters.

Comment on lines +36 to +38
DB_BASE="${DB_CONNECTION%/*}/postgres"
if ! psql "$DB_BASE" -tAc "SELECT 1 FROM pg_database WHERE datname='paperclip'" 2>/dev/null | grep -q 1; then
psql "$DB_BASE" -c "CREATE DATABASE paperclip" 2>/dev/null && echo "Created paperclip database" >&2

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.

medium

The logic for constructing DB_BASE by stripping the last component of the URL is fragile. If the DATABASE_URL contains query parameters (e.g., ?sslmode=require), they will be lost when appending /postgres, which might cause connection failures if the server requires those parameters to connect.

A more robust approach is to use the full connection string and override the database name using the -d flag in psql. According to the psql documentation, the -d flag overrides the database name specified in a connection URI, preserving all other parameters like host, port, and options.

Suggested change
DB_BASE="${DB_CONNECTION%/*}/postgres"
if ! psql "$DB_BASE" -tAc "SELECT 1 FROM pg_database WHERE datname='paperclip'" 2>/dev/null | grep -q 1; then
psql "$DB_BASE" -c "CREATE DATABASE paperclip" 2>/dev/null && echo "Created paperclip database" >&2
if ! psql "$DB_CONNECTION" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='paperclip'" 2>/dev/null | grep -q 1; then
psql "$DB_CONNECTION" -d postgres -c "CREATE DATABASE paperclip" 2>/dev/null && echo "Created paperclip database" >&2
fi

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

Pull request overview

Updates Paperclip’s Kyber deployment to use an external (k8s) Postgres connection configured via ~/dotfiles/.env, removing the previous dependency on a locally managed Docker Postgres service.

Changes:

  • Load DATABASE_URL from ~/dotfiles/.env during Paperclip config hydration and inject it into the generated config.
  • Remove docker-postgres.service ordering/requirements from the Paperclip systemd user service.
  • Provision the paperclip database via psql (CREATE DATABASE) when missing, and document DATABASE_URL in .env.example.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
config/paperclip/hydrate.sh Sources ~/dotfiles/.env, substitutes DB connection into config template, and attempts DB auto-provisioning via psql.
config/paperclip/default.nix Removes the Kyber default DB connection string (now relies on DATABASE_URL).
home-manager/modules/paperclip/default.nix Drops systemd dependency on docker-postgres.service.
spec/paperclip_hydrate_spec.sh Updates ShellSpec checks to match the new env-loading and CREATE DATABASE provisioning behavior.
.env.example Documents DATABASE_URL for Paperclip.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 22 to 25
@sed@ \
-e "s|__DATABASE_MODE__|@database_mode@|g" \
-e "s|__DATABASE_CONNECTION_STRING__|@database_connection_string@|g" \
-e "s|__DATABASE_CONNECTION_STRING__|${DB_CONNECTION}|g" \
-e "s|__DEPLOYMENT_MODE__|@deployment_mode@|g" \

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

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

DB_CONNECTION is interpolated directly into the sed replacement. If DATABASE_URL contains &, backslashes, or the delimiter, sed will treat those specially and can corrupt the generated JSON (e.g., query params like ...&sslmode=...). Escape the replacement value (or switch to a templating approach that safely JSON-encodes the value) before substituting into the template.

Copilot uses AI. Check for mistakes.
echo "Created paperclip database" >&2
if [ "@is_kyber@" = "true" ] && [ -n "$DB_CONNECTION" ]; then
if command -v psql >/dev/null 2>&1; then
DB_BASE="${DB_CONNECTION%/*}/postgres"

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

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

DB_BASE="${DB_CONNECTION%/*}/postgres" drops any query string/options from DATABASE_URL (e.g., ?sslmode=require), which can make the subsequent psql connection fail even though the main connection string works. Consider preserving connection options when deriving the base DB connection (or parse the URL more robustly).

Suggested change
DB_BASE="${DB_CONNECTION%/*}/postgres"
DB_QUERY=""
DB_WITHOUT_QUERY="$DB_CONNECTION"
if [ "${DB_CONNECTION#*\?}" != "$DB_CONNECTION" ]; then
DB_QUERY="?${DB_CONNECTION#*\?}"
DB_WITHOUT_QUERY="${DB_CONNECTION%%\?*}"
fi
DB_BASE="${DB_WITHOUT_QUERY%/*}/postgres${DB_QUERY}"

Copilot uses AI. Check for mistakes.

# Use DATABASE_URL from env if set, otherwise use the Nix default
DB_CONNECTION="${DATABASE_URL:-@database_connection_string@}"

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

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

On Kyber, database_mode is set to postgres but if DATABASE_URL is missing (and the Nix default is empty), the script will still render a config with an empty connectionString, likely causing Paperclip to fail later with a hard-to-debug error. Recommend explicitly checking for a non-empty DATABASE_URL on Kyber and exiting early with a clear warning (similar to other hydrate scripts) instead of producing an invalid config.

Suggested change
# On Kyber, postgres mode requires a non-empty connection string.
# Fail early with a clear error instead of rendering an invalid config.
# shellcheck disable=SC2050
if [ "@is_kyber@" = "true" ] && [ -z "$DB_CONNECTION" ]; then
echo "error: DATABASE_URL is required on Kyber when using postgres, but no non-empty value was provided." >&2
echo "Set DATABASE_URL in ${ENV_FILE} or provide a non-empty Nix database connection string." >&2
exit 1
fi

Copilot uses AI. Check for mistakes.
DB_BASE="${DB_CONNECTION%/*}/postgres"
if ! psql "$DB_BASE" -tAc "SELECT 1 FROM pg_database WHERE datname='paperclip'" 2>/dev/null | grep -q 1; then
psql "$DB_BASE" -c "CREATE DATABASE paperclip" 2>/dev/null && echo "Created paperclip database" >&2
fi

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

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

If psql is not installed, database auto-provisioning is silently skipped. Since this PR relies on provisioning against the k8s Postgres, consider emitting a warning when @is_kyber@ is true but psql is missing (or ensure psql is available via the Nix environment) so failures are discoverable.

Suggested change
fi
fi
else
echo "Warning: psql is not installed; skipping automatic paperclip database provisioning for kyber deployment" >&2

Copilot uses AI. Check for mistakes.
Comment on lines 16 to 18
database_mode = if host.isKyber then "postgres" else "embedded-postgres";
database_connection_string =
if host.isKyber then "postgres://postgres:postgres@localhost:5432/paperclip" else "";
database_connection_string = "";
deployment_mode = if host.isKyber then "authenticated" else "local_trusted";

Copilot AI Apr 4, 2026

Copy link

Choose a reason for hiding this comment

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

database_mode is postgres on Kyber but database_connection_string is now always an empty string. Unless DATABASE_URL is guaranteed to be present at hydrate time, this produces an invalid config. Either provide a sane Kyber default here or enforce/validate that DATABASE_URL is set (and fail/warn clearly) during hydration.

Copilot uses AI. Check for mistakes.
shunkakinoki added a commit that referenced this pull request Apr 5, 2026
* feat: add paperclip service (#1342)

* feat: add paperclip service

- Systemd service on kyber: runs `paperclipai run` via bun, depends on docker-postgres
- Config via builtins.toJSON: external postgres on kyber, embedded on macOS
- Setup script creates paperclip database on docker-postgres
- Makefile target: `make systemctl-paperclip`

* fix: add shellcheck disable and shell test coverage for paperclip

* fix: correct shellcheck disable directive syntax

* refactor: use config.template.json pattern for paperclip

* refactor: rename setup.sh to hydrate.sh for paperclip

* test: add auto-switch hook tests and update coverage spec

* fix: remove EnvironmentFile from paperclip service (#1344)

* fix: paperclip authenticated mode and required config fields (#1345)

* fix: remove EnvironmentFile from paperclip service

* fix: use authenticated mode on kyber, add required meta/logging fields

* fix: add allowedHostnames for paperclip.shunkakinoki.com

* fix: format config template json

* fix: use trust auth for docker-postgres (#1346)

POSTGRES_HOST_AUTH_METHOD=trust removes password auth for all
connections. The password kept going out of sync after crash recovery,
causing paperclip and other services to fail with 'password
authentication failed'. Safe since postgres is only reachable from
the host.

* fix: use k8s postgres via DATABASE_URL, remove docker-postgres dep, add authenticated mode (#1347)

* fix: use bun runtime for paperclip (pino-http node crash), k8s postgres via DATABASE_URL (#1348)

* fix: use nix-profile bun path for paperclip service (#1350)

* fix: add caret prefix to paperclipai dependency (#1349)

* fix: use extra-substituters to avoid untrusted user warnings (#1351)

* fix: run paperclip from cloned repo via pnpm dev:once (#1352)

* fix: run paperclip from cloned repo via pnpm dev:once

The global bun install flattens pino@10 + pino-http@10.5 together,
but pino-http needs pino@9. The repo lockfile resolves this correctly
with nested dependencies. Running from the repo avoids the crash.

* fix: use bun run server/src/index.ts instead of pnpm dev:once

* fix: pin pino@9.14.0 override, run paperclipai from dotfiles node_modules

The bun flat hoisting was resolving pino@10 which is incompatible
with pino-http@10.5. Pinning pino to 9.14.0 via overrides matches
the paperclip repo's lockfile resolution and fixes the crash.

* fix: use global bun paperclipai with pino override (#1353)

* fix: use global ~/.bun/bin/paperclipai with pino override

Propagate overrides from dotfiles package.json to ~/.bun/install/global/
so the global binary resolves pino@9.14.0 correctly.

* test: add tests for npm-globals dependency overrides

* fix: resolve GitHub Actions failures and code review issues

- Fix non-portable \s regex to [[:space:]] in auto-switch.sh (shfmt compat)
- Add jq dependency check alongside cswap
- Use printf instead of echo for safer output
- Fix claude-swap version from >=1.1.5 (non-existent) to >=0.7.1
- Add auto-switch.sh to Nix deployment config (default.nix)
- Sort covered_scripts list alphabetically in coverage_spec.sh

https://claude.ai/code/session_012GyQBesQGF1asTfKebWyLM

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants