Skip to content

feat(errors): PRO-UX.1 + PRO-UX.2 — Pro CLI error UX bridge + root-cause fix#775

Merged
rafaelscosta merged 6 commits into
mainfrom
feature/pro-ux-error-bridge
May 21, 2026
Merged

feat(errors): PRO-UX.1 + PRO-UX.2 — Pro CLI error UX bridge + root-cause fix#775
rafaelscosta merged 6 commits into
mainfrom
feature/pro-ux-error-bridge

Conversation

@rafaelscosta
Copy link
Copy Markdown
Collaborator

@rafaelscosta rafaelscosta commented May 20, 2026

Summary

Implements STORY-PRO-UX.1 + STORY-PRO-UX.2 — the client half of the cross-repo error UX overhaul. Companion of server EPIC-PRO-16 (aios-license-server PR #12). Specs in PR #774.

What changed

  • .aiox-core/core/errors/pro-error-registry.js — 5 Pro codes extending defaultErrorRegistry, mapped to EXISTING ErrorCategory (PERMISSION/NETWORK/EXTERNAL_EXECUTOR — no invented categories). Warm G3 PT-BR + recovery arrays.
  • packages/aiox-pro-cli/src/error-bridge.jsparseEnvelopeToAIOXError with 3-tier fallback (message_pt > registry.userMessage > server message), graceful on legacy/malformed envelopes.
  • packages/aiox-pro-cli/src/render-error.js — warm output + numbered steps + support_code + conditional support link + technical footer.
  • packages/aiox-pro-cli/src/recovery-actions.js — OS-aware cache cleanup (PowerShell vs bash).

🎯 ROOT CAUSE FIX (anchor incident)

packages/installer/src/wizard/pro-setup.js _request read parsed.message / parsed.code at the root, but the structured envelope nests them under error. So err.code was always undefined → the typed error branches (NOT_A_BUYER, SEAT_LIMIT_EXCEEDED, ...) in runProWizard were never reached → fell through to the generic HTTP <status> message. This is why Robert saw "HTTP 403".

Fix: read errorBody from parsed.error (nested) first, attach err.httpStatus + err.envelope. Restores the existing i18n error branches. Preserves legacy root-shape compat. pro-setup suite 39/39 green.

Quality gates

  • ✅ 75/75 relevant tests (errors + pro-cli + pro-setup)
  • eslint exit 0

Architectural constraints honored

  • Categories map to EXISTING frozen ErrorCategory — no new categories
  • Reuses AIOXError + ErrorRegistry (EPIC-AIOX-ERROR-GOVERNANCE) — no parallel system
  • Pro codes mirror license-server ErrorCodes (no AIOX_ prefix)

Known follow-up (non-blocking)

The rich renderError wire into the install flow vs the existing i18n.js (proSeatLimit etc — now functional thanks to the root-cause fix) is a design decision for @architect. Modules are ready + tested.

Refs

Stories PRO-UX.1, PRO-UX.2. Companion specs PR #774. Server PR #12.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Pro CLI: richer, localized Portuguese error messages with actionable recovery plans, platform-aware cache-clean commands, support codes and support URL, and multi-tier message fallbacks.
  • Bug Fixes
    • Improved parsing of structured server error envelopes with robust legacy fallbacks to avoid malformed error responses.
  • Tests
    • Added suites validating Pro error registry, envelope parsing, recovery planning, and CLI error rendering.

Review Change Stack

rafaelscosta and others added 4 commits May 20, 2026 14:25
…y PRO-UX.1]

5 top-5 codes mapped to EXISTING ErrorCategory (PERMISSION/NETWORK/
EXTERNAL_EXECUTOR — no invented categories). Warm G3 PT-BR userMessage +
recovery arrays. Codes mirror license-server (no AIOX_ prefix). No collision
with core registry. 7 tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ry PRO-UX.1][Story PRO-UX.2]

- error-bridge: parseEnvelopeToAIOXError, 3-tier fallback (message_pt >
  registry.userMessage > server message), graceful on legacy/malformed
- render-error: warm output + numbered steps + support_code + conditional
  support link + technical footer
- recovery-actions: planRecoveryAction + OS-aware cache cleanup (PowerShell
  vs bash — fixes the bug that made Robert run bash in PowerShell)
- 15 tests (bridge fallback, render anchor case, cross-platform)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ory PRO-UX.1]

ROOT CAUSE of the anchor incident (Robert's opaque "HTTP 403"): _request read
parsed.message / parsed.code at the ROOT, but the structured envelope nests
them under `error`. So err.code was always undefined → the typed error
branches (NOT_A_BUYER, SEAT_LIMIT_EXCEEDED, ...) in runProWizard were NEVER
reached → fell through to the generic "HTTP <status>" message.

Fix: read errorBody from parsed.error (nested) first, attach err.httpStatus +
err.envelope for downstream renderError. Restores the existing i18n error
branches. Preserves legacy root-shape compat.

pro-setup suite 39/39 green (no regression).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-UX.1]

IDS hook auto-registration for .aiox-core/core/errors/pro-error-registry.js.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
aiox-core Ready Ready Preview, Comment May 20, 2026 6:03pm

Request Review

@github-actions github-actions Bot added type: test Test coverage and quality area: core Core framework (.aios-core/core/) area: installer Installer and setup (packages/installer/) area: cli CLI tools (bin/, packages/aios-pro-cli/) area: docs Documentation (docs/) labels May 20, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 20, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2f04a389-db03-44fe-9dbf-576b30f6f6e5

📥 Commits

Reviewing files that changed from the base of the PR and between 6aa9233 and 2df2f83.

📒 Files selected for processing (2)
  • packages/aiox-pro-cli/src/render-error.js
  • packages/installer/src/wizard/pro-setup.js

Walkthrough

Adds PRO error definitions and registry, parses license-server envelopes into canonical AIOXError, plans OS-aware recovery actions, renders warm CLI error messages, and updates registry/manifest metadata.

Changes

PRO Error Handling & Recovery UX

Layer / File(s) Summary
PRO error definitions contract and validation
.aiox-core/core/errors/pro-error-registry.js, tests/core/errors/pro-error-registry.test.js
PRO_ERROR_DEFINITIONS define 5 PRO codes with PT-BR userMessage, recovery, category/severity, retry/exit metadata; tests validate count, uniqueness, enum mapping, non-collision with core codes, and message/recovery shapes.
License client envelope parsing and AIOXError bridge
packages/installer/src/wizard/pro-setup.js, packages/aiox-pro-cli/src/error-bridge.js, tests/pro-cli/error-bridge.test.js
Installer parses nested error envelopes. parseEnvelopeToAIOXError resolves definitions (PRO → default → unknown), applies message fallback (message_pt → registry → server → generic), and builds AIOXError with metadata (support_code, recovery_hint, serverMessage/details, httpStatus).
Recovery action planning from hints
packages/aiox-pro-cli/src/recovery-actions.js, tests/pro-cli/recovery-actions.test.js
getCacheCleanCommands returns platform-specific cleanup commands (PowerShell for win32, bash for darwin/linux). planRecoveryAction maps hints to action descriptors (wait_and_retry, retry_install_cache_clean, contact_support_*, verification checks) with defaults.
CLI error message rendering
packages/aiox-pro-cli/src/render-error.js, tests/pro-cli/render-error.test.js
renderError formats AIOXError into a warm Portuguese message, optional numbered recovery steps, conditional support code and support URL (for contact hints), and a technical footer with (CODE — HTTP status).
Registry & install manifest metadata
.aiox-core/data/entity-registry.yaml, .aiox-core/install-manifest.yaml
Registers pro-error-registry module and its usedBy links; updates timestamps/entityCount and adds core/errors/pro-error-registry.js to the install manifest with checksums/sizes.

Sequence Diagram

sequenceDiagram
  participant LicenseServer
  participant ProSetup as Installer.ProSetup
  participant ErrorBridge as parseEnvelopeToAIOXError
  participant ProRegistry as PRO_ERROR_DEFINITIONS
  participant RecoveryPlanner as planRecoveryAction
  participant CliRenderer as renderError

  LicenseServer->>ProSetup: HTTP response (JSON envelope)
  ProSetup->>ProSetup: parse envelope (error.code, error.message, message_pt)
  ProSetup->>ErrorBridge: call with parsed envelope + httpStatus
  ErrorBridge->>ProRegistry: lookup code (Pro → default → unknown)
  alt Known PRO code
    ProRegistry-->>ErrorBridge: definition (category,severity,userMessage,recovery,exitCode,retryable)
  else Unknown code
    ErrorBridge->>ProRegistry: fallback to default/unknown definition
  end
  ErrorBridge-->>ProSetup: AIOXError (code, category, severity, recovery, metadata)
  ProSetup->>CliRenderer: renderError(AIOXError)
  CliRenderer->>RecoveryPlanner: planRecoveryAction(recovery_hint, { platform })
  RecoveryPlanner-->>CliRenderer: action plan (wait/clean/contact/none)
  CliRenderer-->>CliRenderer: format warm message + steps + support link + technical footer
  CliRenderer-->>CLI: write to stderr
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • SynkraAI/aiox-core#702: The main PR's new pro-error-registry/parseEnvelopeToAIOXError code directly plugs into the core error-governance contract by using the ErrorRegistry, ErrorCategory, and ErrorSeverity/AIOXError surface introduced in that PR.

Suggested labels

area: pro

Suggested reviewers

  • Pedrovaleriolopez
  • oalanicolas
🚥 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 clearly identifies the main changes: implementing PRO-UX.1 and PRO-UX.2 error UX features for the Pro CLI with a root-cause fix, which aligns with the substantial changes across error registry, error bridging, rendering, and recovery actions.
Docstring Coverage ✅ Passed Docstring coverage is 80.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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 feature/pro-ux-error-bridge

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
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 20, 2026

📊 Coverage Report

Coverage report not available

📈 Full coverage report available in Codecov


Generated by PR Automation (Story 6.1)

coderabbitai[bot]
coderabbitai Bot previously requested changes May 20, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🧹 Nitpick comments (1)
tests/pro-cli/render-error.test.js (1)

1-2: ⚡ Quick win

Use repository absolute imports instead of relative paths.

These imports violate the project import convention and should be switched to the repository’s absolute import style used in JS/TS files.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 `@tests/pro-cli/render-error.test.js` around lines 1 - 2, The test imports use
relative paths; update them to the repository's absolute import style by
replacing the relative requires for parseEnvelopeToAIOXError and for renderError
and SUPPORT_URL with the project’s absolute module paths used elsewhere (e.g.,
the package/module root import form) so parseEnvelopeToAIOXError, renderError
and SUPPORT_URL are imported via the repo absolute import convention rather than
'../../packages/...'.
🤖 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 @.aiox-core/core/errors/pro-error-registry.js:
- Around line 11-12: Replace the local relative requires for ErrorRegistry and
constants with the project's absolute import style: change the
require('./error-registry') and require('./constants') calls to the repository's
absolute module imports that export ErrorRegistry, ErrorCategory, and
ErrorSeverity, and ensure the top of pro-error-registry.js imports those same
symbols via the absolute paths used elsewhere in the core errors modules; also
update any other relative imports in this file to match the absolute-import
convention.

In `@packages/aiox-pro-cli/src/error-bridge.js`:
- Around line 8-9: Replace the two relative require calls in error-bridge.js
with the repository's absolute import paths: change the
require('../../../.aiox-core/core/errors') that provides AIOXError and
defaultErrorRegistry and the
require('../../../.aiox-core/core/errors/pro-error-registry') that provides
proErrorRegistry to use the project's configured absolute module paths (e.g.,
the root-level package/module identifiers used across the repo) so AIOXError,
defaultErrorRegistry, and proErrorRegistry are imported via absolute imports per
coding standards.

In `@packages/aiox-pro-cli/src/render-error.js`:
- Around line 20-39: renderError currently assumes err is an object and accesses
err.userMessage, err.message and err.code which throws for null/non-object
errors; modify renderError to first normalize the incoming err (e.g. if err is
falsy or not an object create a safe wrapper) and derive safe fallbacks for
err.userMessage, err.message and err.code (or use String(err) and a default code
like "UNKNOWN_ERROR") before using recovery, supportCode, recoveryHint,
httpStatus, and printing; ensure any uses of err.* are replaced with the
normalized values so the function never throws when passed a raw Error, string,
or null.

In `@packages/installer/src/wizard/pro-setup.js`:
- Around line 176-178: The error construction dereferences parsed.message and
parsed.code which will throw if parsed is null; update the logic in the error
creation block (the code that sets err.message and err.code using errorBody,
parsed, and res.statusCode) to guard parsed (e.g., use parsed && parsed.message
or optional chaining parsed?.message and parsed?.code) so you fall back to
errorBody.message or `HTTP ${res.statusCode}` without throwing when the server
returns JSON null; ensure you update both the message and code assignments that
reference parsed.

In `@tests/core/errors/pro-error-registry.test.js`:
- Around line 1-2: Replace the relative require(...) calls in this test with the
project’s absolute import paths: import proErrorRegistry and
PRO_ERROR_DEFINITIONS using the package/module absolute path that exposes
.aiox-core/core/errors/pro-error-registry, and import defaultErrorRegistry and
ErrorCategory from the absolute module that exposes .aiox-core/core/errors;
update the test file to use those absolute module specifiers while keeping the
same identifiers (proErrorRegistry, PRO_ERROR_DEFINITIONS, defaultErrorRegistry,
ErrorCategory).

In `@tests/pro-cli/error-bridge.test.js`:
- Line 1: The test imports parseEnvelopeToAIOXError using a relative path;
replace that relative require with the repository's absolute import style
(importing the same module that exports parseEnvelopeToAIOXError) so the test
uses the canonical package/module absolute path instead of ../../packages/...;
keep the symbol name parseEnvelopeToAIOXError unchanged and update only the
module specifier to the project's absolute import form.

In `@tests/pro-cli/recovery-actions.test.js`:
- Line 1: The test currently uses a relative require for recovery-actions;
change the import to use an absolute module path instead (replace
require('../../packages/aiox-pro-cli/src/recovery-actions') with the project’s
absolute module import for the recovery-actions module) so the same exported
symbols get imported (getCacheCleanCommands, planRecoveryAction) but via an
absolute path per the repo import conventions.

---

Nitpick comments:
In `@tests/pro-cli/render-error.test.js`:
- Around line 1-2: The test imports use relative paths; update them to the
repository's absolute import style by replacing the relative requires for
parseEnvelopeToAIOXError and for renderError and SUPPORT_URL with the project’s
absolute module paths used elsewhere (e.g., the package/module root import form)
so parseEnvelopeToAIOXError, renderError and SUPPORT_URL are imported via the
repo absolute import convention rather than '../../packages/...'.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8a7470e8-981a-434a-b39f-d444d19f935e

📥 Commits

Reviewing files that changed from the base of the PR and between e9d088c and 6b1fdb3.

📒 Files selected for processing (11)
  • .aiox-core/core/errors/pro-error-registry.js
  • .aiox-core/data/entity-registry.yaml
  • .aiox-core/install-manifest.yaml
  • packages/aiox-pro-cli/src/error-bridge.js
  • packages/aiox-pro-cli/src/recovery-actions.js
  • packages/aiox-pro-cli/src/render-error.js
  • packages/installer/src/wizard/pro-setup.js
  • tests/core/errors/pro-error-registry.test.js
  • tests/pro-cli/error-bridge.test.js
  • tests/pro-cli/recovery-actions.test.js
  • tests/pro-cli/render-error.test.js

Comment on lines +11 to +12
const { ErrorRegistry } = require('./error-registry');
const { ErrorCategory, ErrorSeverity } = require('./constants');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Use absolute imports for core error modules.

Please switch these require('./...') statements to the project’s absolute import form to align with repository standards.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 @.aiox-core/core/errors/pro-error-registry.js around lines 11 - 12, Replace
the local relative requires for ErrorRegistry and constants with the project's
absolute import style: change the require('./error-registry') and
require('./constants') calls to the repository's absolute module imports that
export ErrorRegistry, ErrorCategory, and ErrorSeverity, and ensure the top of
pro-error-registry.js imports those same symbols via the absolute paths used
elsewhere in the core errors modules; also update any other relative imports in
this file to match the absolute-import convention.

Comment on lines +8 to +9
const { AIOXError, defaultErrorRegistry } = require('../../../.aiox-core/core/errors');
const { proErrorRegistry } = require('../../../.aiox-core/core/errors/pro-error-registry');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Switch to absolute imports in the bridge module.

Please replace these relative imports with absolute paths per repository standards.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 `@packages/aiox-pro-cli/src/error-bridge.js` around lines 8 - 9, Replace the
two relative require calls in error-bridge.js with the repository's absolute
import paths: change the require('../../../.aiox-core/core/errors') that
provides AIOXError and defaultErrorRegistry and the
require('../../../.aiox-core/core/errors/pro-error-registry') that provides
proErrorRegistry to use the project's configured absolute module paths (e.g.,
the root-level package/module identifiers used across the repo) so AIOXError,
defaultErrorRegistry, and proErrorRegistry are imported via absolute imports per
coding standards.

Comment thread packages/aiox-pro-cli/src/render-error.js
Comment thread packages/installer/src/wizard/pro-setup.js Outdated
Comment on lines +1 to +2
const { proErrorRegistry, PRO_ERROR_DEFINITIONS } = require('../../../.aiox-core/core/errors/pro-error-registry');
const { defaultErrorRegistry, ErrorCategory } = require('../../../.aiox-core/core/errors');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Use absolute imports in tests as well.

Convert these relative require(...) paths to absolute imports for consistency with the repository rule.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 `@tests/core/errors/pro-error-registry.test.js` around lines 1 - 2, Replace the
relative require(...) calls in this test with the project’s absolute import
paths: import proErrorRegistry and PRO_ERROR_DEFINITIONS using the
package/module absolute path that exposes
.aiox-core/core/errors/pro-error-registry, and import defaultErrorRegistry and
ErrorCategory from the absolute module that exposes .aiox-core/core/errors;
update the test file to use those absolute module specifiers while keeping the
same identifiers (proErrorRegistry, PRO_ERROR_DEFINITIONS, defaultErrorRegistry,
ErrorCategory).

@@ -0,0 +1,57 @@
const { parseEnvelopeToAIOXError } = require('../../packages/aiox-pro-cli/src/error-bridge');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Use an absolute import path for the test subject.

Update this relative require to the repository’s absolute import style.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 `@tests/pro-cli/error-bridge.test.js` at line 1, The test imports
parseEnvelopeToAIOXError using a relative path; replace that relative require
with the repository's absolute import style (importing the same module that
exports parseEnvelopeToAIOXError) so the test uses the canonical package/module
absolute path instead of ../../packages/...; keep the symbol name
parseEnvelopeToAIOXError unchanged and update only the module specifier to the
project's absolute import form.

@@ -0,0 +1,45 @@
const { getCacheCleanCommands, planRecoveryAction } = require('../../packages/aiox-pro-cli/src/recovery-actions');
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Adopt absolute import style in this test file.

Please replace the relative module path with an absolute import path.

As per coding guidelines, **/*.{js,jsx,ts,tsx}: Use absolute imports instead of relative imports in all code.

🤖 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 `@tests/pro-cli/recovery-actions.test.js` at line 1, The test currently uses a
relative require for recovery-actions; change the import to use an absolute
module path instead (replace
require('../../packages/aiox-pro-cli/src/recovery-actions') with the project’s
absolute module import for the recovery-actions module) so the same exported
symbols get imported (getCacheCleanCommands, planRecoveryAction) but via an
absolute path per the repo import conventions.

The IDS hook's incremental update diverged from clean regen output (structural
delta). Regenerated via populate-entity-registry.js. validate:registry-determinism
now PASSES (821 entities).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ack [Story PRO-UX.2]

Addresses 2 CodeRabbit Major findings on PR #775:
- renderError: guard against null/non-object err (prints generic message)
- pro-setup _request: guard parsed.message/parsed.code against parsed === null

The 5 "absolute import" suggestions are NOT applied: CLI runtime modules
(error-bridge, pro-error-registry) require relative paths — there is no runtime
module alias for `aiox-core/*` outside Jest's moduleNameMapper. Same-dir `./`
imports do not violate the no-`../../../` rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rafaelscosta rafaelscosta dismissed coderabbitai[bot]’s stale review May 21, 2026 00:12

Dismissed for release: actionable null/non-object guards and nested envelope parsing were fixed in commit 2df2f83; remaining absolute-import suggestions are not applicable because these CLI/runtime CommonJS modules do not have a production module alias outside Jest. CI, Pro Integration, installer smoke matrix, and focused local tests are green.

@rafaelscosta rafaelscosta merged commit 0475f1d into main May 21, 2026
50 checks passed
@rafaelscosta rafaelscosta deleted the feature/pro-ux-error-bridge branch May 21, 2026 00:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli CLI tools (bin/, packages/aios-pro-cli/) area: core Core framework (.aios-core/core/) area: docs Documentation (docs/) area: installer Installer and setup (packages/installer/) type: test Test coverage and quality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant