Skip to content

Default Warning logging, bounded container logs, remove Node.js implementation#49

Merged
feruzm merged 2 commits into
mainfrom
chore/node-cleanup
Jul 11, 2026
Merged

Default Warning logging, bounded container logs, remove Node.js implementation#49
feruzm merged 2 commits into
mainfrom
chore/node-cleanup

Conversation

@feruzm

@feruzm feruzm commented Jul 11, 2026

Copy link
Copy Markdown
Member

Post-cutover housekeeping, verified before push (42 tests green; Warning default confirmed to produce zero per-request log lines while startup lines and warnings/errors remain).

Logging

  • Default log level is now Warning unless Logging__LogLevel__Default is set. The per-request Information logging wrote ~4 lines per request into unbounded docker json-file logs on the origin hosts.
  • dotnet/docker-compose.yml bounds container logs (max-size: 20m, max-file: 3) as belt-and-suspenders; the same bounds have been applied to the running services.

Node.js removal

The C# service is live in all regions, so the legacy implementation is removed: src/, build config (razzle/tsconfig/tslint/package.json/yarn.lock), root Dockerfile, docker-compose.yml, healthCheck.js, and the crowdin config. Rollback to the last Node build remains available via the ecency/api:node-legacy image tag — no source needed.

The parity harness now generates its request catalog from EcencyApi/Handlers/Routes.cs; a legacy Express route table is still supported via VAPI_INDEX_TSX for testing old images.

Docs

  • Root README.md rewritten for the .NET service: quickstart (SDK or Docker), full env-var table, swarm deploy, deployment/rollback with the tag scheme.
  • dotnet/README.md updated: regenerating crypto vectors without repo-local node_modules, using node-legacy as the parity reference (with the restart-policy caveat, since the legacy build crashes on the malformed hs-token-refresh probe), and the new logging default.

Summary by CodeRabbit

  • New Features

    • API deployment and local development now use the .NET 10 platform.
    • Added configurable logging levels and improved container log rotation.
    • API documentation now includes updated routes, environment settings, deployment, rollback, and testing guidance.
  • Bug Fixes

    • Reduced routine container log noise by default while preserving warnings and errors.
  • Chores

    • Removed the previous web application and legacy container tooling.

…s implementation

- Program.cs: default log level Warning unless Logging__LogLevel__Default is
  set — per-request Information logging was ~290 MiB/day into unbounded
  docker json-file logs
- docker-compose.yml: json-file max-size/max-file bounds as belt-and-suspenders
- Remove the Node/Express implementation (src/, build config, root Dockerfile,
  compose, healthCheck.js, crowdin config): the C# service is live in all
  regions; the last Node build stays available as ecency/api:node-legacy
- parity/driver.py: generate the request catalog from Routes.cs (legacy
  index.tsx still supported via VAPI_INDEX_TSX for testing old builds)
- Rewrite root README for the .NET service (quickstart, env vars, swarm,
  deploy/rollback); update dotnet/README (vector regen without repo
  node_modules, node-legacy parity reference, log level)
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@feruzm, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 25 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a2c13d8c-2dd1-40de-833c-dab608f8ebb6

📥 Commits

Reviewing files that changed from the base of the PR and between b09f7ca and 4dad539.

📒 Files selected for processing (4)
  • .gitignore
  • README.md
  • dotnet/README.md
  • dotnet/docker-compose.yml
📝 Walkthrough

Walkthrough

The pull request removes the legacy Node/React API implementation and related tooling, updates documentation for the .NET API, adds container logging controls, and changes parity catalog generation to use the C# route table by default.

Changes

.NET migration and operational documentation

Layer / File(s) Summary
Legacy API removal and .NET migration guidance
README.md, package.json, Dockerfile, src/**, tsconfig.json, tslint.json
The Node/React server, handlers, models, configuration, build files, and runtime assets are removed; the root guide now documents .NET build, test, run, deployment, rollback, and environment configuration.
Runtime logging and Compose limits
dotnet/EcencyApi/Program.cs, dotnet/docker-compose.yml
ASP.NET defaults to warning-level logging when no override is supplied, and Compose configures rotating JSON container logs.
Parity route-source migration
dotnet/parity/driver.py, dotnet/README.md
Parity catalog generation reads C# route mappings by default while retaining explicit legacy TypeScript input support and documenting the updated capture workflow.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Poem

I’m a rabbit hopping through the new API lane,
.NET builds replace the old Node train.
Routes now bloom from C# with care,
Logs stay tidy in Docker air.
Thump, thump—migration’s complete!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main themes: warning-level logging, bounded container logs, and removal of the Node.js implementation.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/node-cleanup

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.

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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@dotnet/docker-compose.yml`:
- Around line 30-36: Update the service’s explicit environment list in
docker-compose.yml to forward the documented Logging__LogLevel__Default variable
into the container, allowing Swarm deployments to override the default logging
level honored by Program.cs while preserving the existing Warning fallback.

In `@dotnet/README.md`:
- Around line 290-292: Update the documented vector-generation command around
tools/gen-vectors.js so dependency installation occurs in a subshell without
changing the caller’s working directory, then execute the generator from dotnet/
with repository-relative script and fixture paths resolving correctly.

In `@README.md`:
- Around line 34-36: Update the Docker quick-start example’s PRIVATE_API_AUTH
value to a valid base64-encoded JSON example consistent with the environment
table, while leaving the surrounding Docker command and other environment values
unchanged.
- Around line 74-75: Update both rollback commands in the README to target the
deployed Docker Swarm service vision-api_app instead of vision_vapi, while
preserving the existing image tags and rollback descriptions.
- Around line 7-10: Update the parity suite case count in README.md from 300 to
305, matching dotnet/README.md and the latest recorded verification result while
preserving the surrounding migration and drop-in compatibility claims.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5eb04a70-3b45-4e2b-9bc8-06f5a57cca16

📥 Commits

Reviewing files that changed from the base of the PR and between 28a7b3e and b09f7ca.

⛔ Files ignored due to path filters (5)
  • dotnet/parity/__pycache__/driver.cpython-312.pyc is excluded by !**/*.pyc
  • public/favicon.ico is excluded by !**/*.ico
  • public/favicon.png is excluded by !**/*.png
  • public/logo512.png is excluded by !**/*.png
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (40)
  • .dockerignore
  • .gitignore
  • Dockerfile
  • README.md
  • crowdin.yml
  • docker-compose.yml
  • dotnet/EcencyApi/Program.cs
  • dotnet/README.md
  • dotnet/docker-compose.yml
  • dotnet/parity/driver.py
  • healthCheck.js
  • package.json
  • public/robots.txt
  • razzle.config.js
  • src/client/index.tsx
  • src/common/app.tsx
  • src/common/helper/hive-signer.ts
  • src/common/util/b64.ts
  • src/config.ts
  • src/index.ts
  • src/models/converters.ts
  • src/models/hiveEngine.types.ts
  • src/server/cache.ts
  • src/server/chain-providers.ts
  • src/server/handlers/announcements.ts
  • src/server/handlers/auth-api.ts
  • src/server/handlers/constants.ts
  • src/server/handlers/fallback.tsx
  • src/server/handlers/hive-explorer.ts
  • src/server/handlers/private-api.test.ts
  • src/server/handlers/private-api.ts
  • src/server/handlers/search-api.ts
  • src/server/handlers/spotlights.ts
  • src/server/handlers/wallet-api.ts
  • src/server/helper.ts
  • src/server/index.tsx
  • src/server/template.tsx
  • src/server/util.ts
  • tsconfig.json
  • tslint.json
💤 Files with no reviewable changes (34)
  • public/robots.txt
  • tslint.json
  • healthCheck.js
  • package.json
  • crowdin.yml
  • src/server/handlers/private-api.test.ts
  • src/server/handlers/spotlights.ts
  • src/common/app.tsx
  • src/index.ts
  • docker-compose.yml
  • src/server/handlers/hive-explorer.ts
  • razzle.config.js
  • tsconfig.json
  • src/models/converters.ts
  • src/common/util/b64.ts
  • src/server/handlers/announcements.ts
  • src/client/index.tsx
  • src/server/handlers/constants.ts
  • src/common/helper/hive-signer.ts
  • src/server/index.tsx
  • Dockerfile
  • src/server/cache.ts
  • src/config.ts
  • src/server/template.tsx
  • src/server/handlers/auth-api.ts
  • src/server/handlers/fallback.tsx
  • src/server/handlers/search-api.ts
  • src/server/helper.ts
  • src/server/handlers/wallet-api.ts
  • src/models/hiveEngine.types.ts
  • .dockerignore
  • src/server/util.ts
  • src/server/chain-providers.ts
  • src/server/handlers/private-api.ts

Comment thread dotnet/docker-compose.yml
Comment thread dotnet/README.md
Comment thread README.md
Comment on lines +7 to +10
Implemented in **C# / ASP.NET Core (.NET 10)** under [`dotnet/`](dotnet/). It
replaced the original Node/Express implementation as a verified drop-in
(byte-identical responses across a 300-case differential parity suite; the
history of that migration is in the git log and `dotnet/README.md`). The last

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the documented parity case count.

This says the suite has 300 cases, while dotnet/README.md and the latest recorded result state 305 cases. Keep the verification claims consistent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 7 - 10, Update the parity suite case count in
README.md from 300 to 305, matching dotnet/README.md and the latest recorded
verification result while preserving the surrounding migration and drop-in
compatibility claims.

Comment thread README.md Outdated
Comment thread README.md
Comment on lines +74 to +75
docker service update --image ecency/api:sha-<previous-commit> vision_vapi
docker service update --image ecency/api:node-legacy vision_vapi # pre-rewrite Node build

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Fix the rollback service target.

The stack is deployed as vision-api with an app service, so Docker Swarm will create vision-api_app; neither rollback command targets the service declared by dotnet/docker-compose.yml (vision_vapi). These commands will fail unless another stack defines that service.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 74 - 75, Update both rollback commands in the README
to target the deployed Docker Swarm service vision-api_app instead of
vision_vapi, while preserving the existing image tags and rollback descriptions.

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

ℹ️ 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 README.md Outdated
Comment on lines +63 to +64
cd dotnet
docker stack deploy -c docker-compose.yml vision-api

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Point the Swarm stack at the published image

In the Swarm path documented here, docker stack deploy does not build the local dotnet/Dockerfile; Docker's stack-deploy docs show it reports Ignoring unsupported options: build and then deploys the service image from the compose file. The referenced dotnet/docker-compose.yml still names ecency/api-csharp:latest, while CI in .github/workflows/main.yml publishes ecency/api:latest and ecency/api:sha-*, so operators following these new instructions can deploy a stale/wrong image or fail to pull instead of deploying the current build.

Useful? React with 👍 / 👎.

@greptile-apps

greptile-apps Bot commented Jul 11, 2026

Copy link
Copy Markdown

Greptile Summary

This PR finishes the move from the legacy Node service to the .NET API. The main changes are:

  • Default ASP.NET logging now stays at Warning unless overridden.
  • The .NET Docker stack now bounds json-file container logs.
  • The legacy Node source, build files, and root container files are removed.
  • The parity harness now reads the C# route table by default.
  • The README files now document the .NET service, deploy flow, rollback tags, and environment variables.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
.gitignore Restores ignore coverage for local env files and generated dependency or build output.
dotnet/EcencyApi/Program.cs Adds a Warning-level default while keeping the standard logging override path.
dotnet/docker-compose.yml Updates the stack to the .NET service image and adds bounded container logging.
dotnet/parity/driver.py Generates parity requests from the C# route table while keeping the legacy Express override.

Reviews (2): Last reviewed commit: "docs/config: review fixes — service nami..." | Re-trigger Greptile

Comment thread .gitignore
…ules

- compose: service renamed app->vapi (stack deploy as 'vision' yields the
  vision_vapi service the docs reference), image ecency/api:latest (what CI
  publishes), forward Logging__LogLevel__Default
- README: vision-next link, valid base64 PRIVATE_API_AUTH example, consistent
  301-case parity count, stack-deploy naming aligned with rollback commands
- dotnet/README: vector-regen instructions no longer cd away from the paths
  they use
- .gitignore: restore .env*/node_modules/coverage/build guards
@feruzm

feruzm commented Jul 11, 2026

Copy link
Copy Markdown
Member Author

All review findings addressed in 4dad539 — this round every one was valid:

  • compose service naming (coderabbit): service renamed appvapi; the README's stack-deploy example now deploys as vision, producing the vision_vapi service the deployment/rollback commands target.
  • compose image (codex): now ecency/api:latest — what CI actually publishes (the build: section stays for local docker compose build; stack deploy ignores it and pulls).
  • Logging__LogLevel__Default passthrough (coderabbit): added to the compose environment list so swarm operators can override the Warning default.
  • vector-regen instructions (coderabbit): dependencies now install in a subshell; the generator runs from dotnet/ so its relative paths resolve.
  • parity case count (coderabbit): unified to the current 301 (the catalog shrank when the dead reblog endpoints were removed).
  • PRIVATE_API_AUTH example (coderabbit): now shows a valid base64-encoded JSON value.
  • .gitignore guards (greptile): restored .env*, node_modules/, coverage/, build/.

Also fixed the footer link to point at ecency/vision-next. 42 tests green; catalog verified to still parse at 301 cases.

@feruzm feruzm merged commit ba8a948 into main Jul 11, 2026
5 checks passed
@feruzm feruzm deleted the chore/node-cleanup branch July 11, 2026 10:11
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