Skip to content

feat(console): bootstrap console webapp workspace and stack decisions#476

Merged
yordis merged 2 commits into
mainfrom
yordis/console-webapp-tooling
Jul 8, 2026
Merged

feat(console): bootstrap console webapp workspace and stack decisions#476
yordis merged 2 commits into
mainfrom
yordis/console-webapp-tooling

Conversation

@yordis

@yordis yordis commented Jul 8, 2026

Copy link
Copy Markdown
Member
  • The platform needs an operator console, and its first web surface forces two decisions that must outlive any implementation: where browsers meet the NATS-only mesh, and which frontend stack later product surfaces inherit. ADR 0018 and ADR 0019 record them so they are reviewed once instead of relitigated per feature.
  • A gateway owns the browser boundary because AAuth PoP signing requires key custody a page cannot provide, and browser auth stays cookie-based so no token is ever readable by page scripts.
  • The scaffold encodes the decisions as tooling (TanStack-first, Base UI with Radix banned by a lockfile check, exact version pins, oxc lint/format) so drift from the ADRs fails checks instead of relying on review vigilance.

Related

yordis added 2 commits July 8, 2026 03:31
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Mostly greenfield docs and frontend scaffolding with no runtime gateway or auth implementation yet; CI and mise changes only affect developers touching tsworkspace.

Overview
Introduces ADR 0018 (browsers reach the NATS mesh only via a ConnectRPC gateway with cookie auth and AAuth signing on the server) and ADR 0019 (console stack: Vite SPA, TanStack-first, shadcn on Base UI with Radix banned, oxc lint/format), and lists them in the ADR index.

Adds tsworkspace/ as a pnpm + Turborepo monorepo with @trogonai/console: TanStack Router/Query, Tailwind 4, initial shadcn-style UI on Base UI, a placeholder home screen, and Vitest coverage. Radix is blocked via a lockfile grep in check:primitives; workspace formatting uses oxfmt.

.mise.toml now includes build:web, check:web, and folds web into top-level build and check. .github/workflows/ci-web.yml runs fmt, lint, typecheck, build, test, and primitive checks on tsworkspace/** changes. README documents the new project area.

Reviewed by Cursor Bugbot for commit 09235ee. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

This PR introduces a new tsworkspace TypeScript monorepo housing a console web app (Vite + React + TanStack Router/Query, Base UI/shadcn-derived UI primitives, Tailwind theming), wires it into pnpm/turbo tooling, adds a CI Web GitHub Actions workflow and mise task updates, and adds two new ADRs (0018, 0019) plus index/README updates.

Changes

Console webapp workspace and CI

Layer / File(s) Summary
Workspace tooling and CI wiring
tsworkspace/package.json, tsworkspace/pnpm-workspace.yaml, tsworkspace/turbo.json, tsworkspace/.npmrc, tsworkspace/.oxfmtrc.json, tsworkspace/.gitignore, .mise.toml, .github/workflows/ci-web.yml
Adds pnpm/turbo workspace config, formatting/lint rules, ignore patterns, mise build:web/check:web tasks wired into build/check, and a new CI Web workflow running install/fmt/lint/typecheck/build/test/check:primitives.
Console app scaffolding
tsworkspace/apps/console/package.json, tsconfig.json, vite.config.ts, tsr.config.json, components.json, index.html
Defines the console app's dependencies/scripts, TypeScript config, Vite build/test config with React/Tailwind/TanStack plugins, and shadcn component config.
Shared UI primitives and styling
.../src/components/ui/{button,card,input,label}.tsx, .../src/lib/utils.ts, .../src/styles.css
Adds Button, Card-family, Input, Label components wrapping Base UI primitives with a cn class-merge helper, plus a global Tailwind stylesheet with light/dark theme tokens.
Router bootstrap and entrypoint
.../src/router.tsx, .../src/routes/__root.tsx, .../src/routes/index.tsx, .../src/main.tsx
Adds getRouter factory, root route with devtools, index route, and the app bootstrap that mounts RouterProvider/QueryClientProvider.
Home screen and tests
.../src/screens/home-screen.tsx, home-screen.test.tsx, .../src/test/setup.ts
Adds the HomeScreen placeholder component, its Vitest/RTL test, and jest-dom test setup.
ADRs and docs
docs/adr/0018-*.md, docs/adr/0019-*.md, docs/adr/index.md, README.md
Adds ADR 0018 (browser ConnectRPC gateway) and ADR 0019 (console webapp stack), updates the ADR index, and adds a README project-area entry for tsworkspace/.

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

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant main.tsx
  participant Router as getRouter/RootRoute
  participant HomeScreen

  Browser->>main.tsx: load index.html, execute script
  main.tsx->>Router: create QueryClient + getRouter(queryClient)
  main.tsx->>Router: mount RouterProvider in `#app`
  Router->>HomeScreen: render index route via Outlet
  HomeScreen-->>Browser: display console landing card
Loading

Possibly related PRs

  • TrogonStack/trogonai#180: Both PRs modify .mise.toml build/check task wiring to add new task dependencies alongside CI workflow updates.

Poem

A rabbit hops into a fresh new space,
Vite and React set the pace,
Buttons, cards, and routes align,
CI checks every build and line,
🐇✨ tsworkspace, hop-hop, all in place!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: bootstrapping the console webapp workspace and its stack decisions.
Description check ✅ Passed The description is directly related to the changeset, describing the console workspace scaffold, ADRs, and tooling decisions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/console-webapp-tooling

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.

@yordis yordis merged commit 27e2607 into main Jul 8, 2026
9 of 10 checks passed
@yordis yordis deleted the yordis/console-webapp-tooling branch July 8, 2026 07:36

@cursor cursor 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.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

Reviewed by Cursor Bugbot for commit 09235ee. Configure here.

Comment thread .mise.toml

[tasks."check:web"]
dir = "tsworkspace"
run = "pnpm fmt:check && pnpm lint && pnpm typecheck"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Mise web check incomplete

Medium Severity

The new check:web task only runs format, lint, and typecheck, while ci-web also runs build, tests, and check:primitives. Because check now depends on check:web, mise check can pass locally while the web workflow would still fail on build, test, or Radix policy violations.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 09235ee. Configure here.

@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

🧹 Nitpick comments (2)
.github/workflows/ci-web.yml (1)

21-68: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Consider adding timeout-minutes to the verify job.

No timeout is set on the verify job. A hung step (e.g., a frozen pnpm install or a turbo task that deadlocks) could consume runner minutes indefinitely. Adding timeout-minutes: 15 (or similar) is a cheap safeguard.

⏱️ Suggested addition
 jobs:
   verify:
     runs-on: ubuntu-latest
+    timeout-minutes: 15
     steps:
🤖 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 @.github/workflows/ci-web.yml around lines 21 - 68, The verify job currently
has no runtime limit, so add a job-level timeout to the verify job definition to
prevent hung steps from consuming runner minutes indefinitely. Update the
jobs.verify configuration in the workflow to include timeout-minutes with an
appropriate value, keeping the existing Checkout, Setup pnpm, Setup Node, and
pnpm-based verification steps unchanged.
.mise.toml (1)

33-35: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

check:web omits tests and primitive-layer policy.

CI (ci-web.yml) runs fmt:check, lint, typecheck, build, test, and check:primitives, but the local mise check:web task only covers the first three. Developers running mise check locally won't catch test failures or Radix-ban violations before pushing, which CI will then surface.

Consider adding pnpm test and pnpm check:primitives to the check:web run command for parity with CI.

🤖 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 @.mise.toml around lines 33 - 35, The check:web task is missing the same
validation that CI runs, so local checks can pass while tests or primitive-layer
policy still fail. Update the run command for the check:web task in mise to
include pnpm test and pnpm check:primitives alongside the existing pnpm
fmt:check, pnpm lint, and pnpm typecheck steps so it matches CI parity.
🤖 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 @.github/workflows/ci-web.yml:
- Around line 30-40: The Setup pnpm step is pinned to a ref that is not a valid
commit, so the action cannot be loaded. Update the pnpm/action-setup reference
to the actual commit for v6.0.9 in the ci-web workflow, keeping the existing
Setup Node, actions/setup-node, and node-version settings unchanged.

In `@docs/adr/0019-console-webapp-stack.md`:
- Around line 43-47: Remove the date-stamped registry status from the ADR text
in the console webapp stack document and keep only the stable ownership rule
about the `@trogonai` npm scope. Update the relevant prose around the
package-naming section so it no longer claims the organization is “unclaimed and
empty as of 2026-07-08,” and ensure the wording in this ADR remains
authoritative without transient registry state.
- Around line 121-130: Add explicit React hooks lint coverage to the linting
guidance in the ADR section for the Oxc toolchain. Update the discussion around
oxlint/oxfmt to state that hooks safety is not fully covered by default and that
either an ESLint hooks pass or direct configuration of oxlint rules like
rules-of-hooks and exhaustive-deps must be included. Reference the linting
section text so it clearly communicates that hook misuse should still be caught
by CI.

In `@tsworkspace/apps/console/package.json`:
- Around line 21-24: The TanStack Router dependencies are on mismatched patch
versions, so update the package versions in package.json to keep
`@tanstack/react-router`, `@tanstack/react-router-devtools`,
`@tanstack/router-plugin`, and `@tanstack/router-cli` on the same release line. Make
the version numbers consistent in the dependency block so the runtime, devtools,
and route generator stay in lockstep.

In `@tsworkspace/apps/console/vite.config.ts`:
- Around line 7-9: The Vite config in defineConfig is using an invalid
resolve.tsconfigPaths setting, so the app’s `@/`* imports will not be resolved.
Update the config by adding a real path-resolution solution in the plugins
array, such as vite-tsconfig-paths, or by defining resolve.alias explicitly in
the same config block. Make the change in the config that currently includes
devtools(), tailwindcss(), tanstackRouter(), and viteReact() so the import
resolution works consistently for build and tests.

---

Nitpick comments:
In @.github/workflows/ci-web.yml:
- Around line 21-68: The verify job currently has no runtime limit, so add a
job-level timeout to the verify job definition to prevent hung steps from
consuming runner minutes indefinitely. Update the jobs.verify configuration in
the workflow to include timeout-minutes with an appropriate value, keeping the
existing Checkout, Setup pnpm, Setup Node, and pnpm-based verification steps
unchanged.

In @.mise.toml:
- Around line 33-35: The check:web task is missing the same validation that CI
runs, so local checks can pass while tests or primitive-layer policy still fail.
Update the run command for the check:web task in mise to include pnpm test and
pnpm check:primitives alongside the existing pnpm fmt:check, pnpm lint, and pnpm
typecheck steps so it matches CI parity.
🪄 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: 34de6ddd-96bf-450e-aa53-25601755b4f7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ee00cd and 09235ee.

⛔ Files ignored due to path filters (2)
  • tsworkspace/apps/console/public/favicon.ico is excluded by !**/*.ico
  • tsworkspace/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (31)
  • .github/workflows/ci-web.yml
  • .mise.toml
  • README.md
  • docs/adr/0018-connectrpc-gateway-for-browser-product-surfaces.md
  • docs/adr/0019-console-webapp-stack.md
  • docs/adr/index.md
  • tsworkspace/.gitignore
  • tsworkspace/.npmrc
  • tsworkspace/.oxfmtrc.json
  • tsworkspace/apps/console/components.json
  • tsworkspace/apps/console/index.html
  • tsworkspace/apps/console/package.json
  • tsworkspace/apps/console/src/components/ui/button.tsx
  • tsworkspace/apps/console/src/components/ui/card.tsx
  • tsworkspace/apps/console/src/components/ui/input.tsx
  • tsworkspace/apps/console/src/components/ui/label.tsx
  • tsworkspace/apps/console/src/lib/utils.ts
  • tsworkspace/apps/console/src/main.tsx
  • tsworkspace/apps/console/src/router.tsx
  • tsworkspace/apps/console/src/routes/__root.tsx
  • tsworkspace/apps/console/src/routes/index.tsx
  • tsworkspace/apps/console/src/screens/home-screen.test.tsx
  • tsworkspace/apps/console/src/screens/home-screen.tsx
  • tsworkspace/apps/console/src/styles.css
  • tsworkspace/apps/console/src/test/setup.ts
  • tsworkspace/apps/console/tsconfig.json
  • tsworkspace/apps/console/tsr.config.json
  • tsworkspace/apps/console/vite.config.ts
  • tsworkspace/package.json
  • tsworkspace/pnpm-workspace.yaml
  • tsworkspace/turbo.json

Comment on lines +30 to +40
- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
with:
package_json_file: tsworkspace/package.json

- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 26
cache: pnpm
cache-dependency-path: tsworkspace/pnpm-lock.yaml

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check that the pinned action versions and Node 26 are valid/available.
# Verify action versions via GitHub API
gh api repos/actions/checkout/git/refs/tags/v7.0.0 --jq '.object.sha' 2>/dev/null || echo "checkout v7.0.0 not found"
gh api repos/actions/setup-node/git/refs/tags/v6.4.0 --jq '.object.sha' 2>/dev/null || echo "setup-node v6.4.0 not found"
gh api repos/pnpm/action-setup/git/refs/tags/v6.0.9 --jq '.object.sha' 2>/dev/null || echo "pnpm/action-setup v6.0.9 not found"

Repository: TrogonStack/trogonai

Length of output: 281


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show the workflow context around the referenced lines.
file=".github/workflows/ci-web.yml"
wc -l "$file"
sed -n '1,120p' "$file" | cat -n

# Resolve the three action tags to their underlying commit/type.
for repo_tag in \
  "actions/checkout:v7.0.0" \
  "actions/setup-node:v6.4.0" \
  "pnpm/action-setup:v6.0.9"
do
  repo="${repo_tag%%:*}"
  tag="${repo_tag##*:}"
  echo "== $repo $tag =="
  gh api "repos/$repo/git/refs/tags/$tag" --jq '{type: .object.type, sha: .object.sha}'
done

Repository: TrogonStack/trogonai

Length of output: 2570


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether the pinned SHAs themselves correspond to real commits.
for sha in \
  9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 \
  48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e \
  008330803749db0355799c700092d9a85fd074e9 \
  0ebf47130e4866e96fce0953f49152a61190b271
do
  echo "== $sha =="
  gh api "repos/actions/checkout/commits/$sha" --jq '.sha' 2>/dev/null || \
  gh api "repos/actions/setup-node/commits/$sha" --jq '.sha' 2>/dev/null || \
  gh api "repos/pnpm/action-setup/commits/$sha" --jq '.sha' 2>/dev/null || \
  echo "not found"
done

Repository: TrogonStack/trogonai

Length of output: 1523


🌐 Web query:

GitHub Actions setup-node Node 26 ubuntu-latest availability 2026

💡 Result:

As of July 8, 2026, you can use Node.js 26 in GitHub Actions workflows via the setup-node action [1][2]. The setup-node action does not require a hardcoded list of supported versions to function; it supports any version of Node.js that is available from the official Node.js distribution (nodejs.org/dist) or the actions/node-versions repository [1][2][3]. Because Node.js 26 is a valid, officially released version (with version 26.5.0 being released today) [4][5], you can specify it in your workflow configuration [1][2]. To use it, you can define the version in your workflow YAML file: - uses: actions/setup-node@v6 with: node-version: '26' Alternatively, you can specify a precise version (e.g., '26.5.0') or use semantic versioning ranges (e.g., '26.x') [1][2][3]. If you do not specify a version, the action will use the default Node.js version installed on the runner, which may vary depending on the runner image updates [1][6][3]. For consistent results, it is recommended to explicitly specify '26' or a more specific version string in the node-version input [1][6][3].

Citations:


Pin pnpm/action-setup to the commit behind v6.0.9. 0ebf47130e4866e96fce0953f49152a61190b271 isn’t a commit ref, so this step will fail to load. The actions/checkout, actions/setup-node, and node-version: 26 entries are fine.

🤖 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 @.github/workflows/ci-web.yml around lines 30 - 40, The Setup pnpm step is
pinned to a ref that is not a valid commit, so the action cannot be loaded.
Update the pnpm/action-setup reference to the actual commit for v6.0.9 in the
ci-web workflow, keeping the existing Setup Node, actions/setup-node, and
node-version settings unchanged.

Comment on lines +43 to +47
Package names use the `@trogonai/<name>` scope per ADR 0005, and the scope is
protected against public-registry collision deliberately. An npm scope is an
owned namespace, so the `@trogonai` organization must be registered on the
public npm registry (unclaimed and empty as of 2026-07-08) before these names
are treated as authoritative; once claimed, no third party can publish under

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the date-stamped registry claim.

The (unclaimed and empty as of 2026-07-08) parenthetical will go stale immediately and makes the ADR harder to keep authoritative. Keep the ownership rule, but drop the transient registry status unless a maintained check backs it.

Suggested edit
- so the `@trogonai` organization must be registered on the public npm registry (unclaimed and empty as of 2026-07-08) before these names are treated as authoritative;
+ so the `@trogonai` organization must be registered on the public npm registry before these names are treated as authoritative;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Package names use the `@trogonai/<name>` scope per ADR 0005, and the scope is
protected against public-registry collision deliberately. An npm scope is an
owned namespace, so the `@trogonai` organization must be registered on the
public npm registry (unclaimed and empty as of 2026-07-08) before these names
are treated as authoritative; once claimed, no third party can publish under
Package names use the `@trogonai/<name>` scope per ADR 0005, and the scope is
protected against public-registry collision deliberately. An npm scope is an
owned namespace, so the `@trogonai` organization must be registered on the
public npm registry before these names are treated as authoritative; once claimed, no third party can publish under
🤖 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 `@docs/adr/0019-console-webapp-stack.md` around lines 43 - 47, Remove the
date-stamped registry status from the ADR text in the console webapp stack
document and keep only the stable ownership rule about the `@trogonai` npm scope.
Update the relevant prose around the package-naming section so it no longer
claims the organization is “unclaimed and empty as of 2026-07-08,” and ensure
the wording in this ADR remains authoritative without transient registry state.

Comment on lines +121 to +130
### 8. Lint and format run on the Oxc toolchain

Linting is oxlint and formatting is oxfmt, run workspace-wide, replacing the
ESLint + Prettier combination. One Rust toolchain covers both jobs with near
instant runs, which matches the repository's tooling posture, and oxlint's
default rule set applies without a config sprawl. Generated files
(`routeTree.gen.ts`) are excluded from formatting. Adopting ESLint later is
warranted only if a needed rule class (for example exhaustive React hooks
checks) is missing from oxlint, and that adoption is additive rather than a
replacement.

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 | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  'oxlint|eslint-plugin-react-hooks|react-hooks|eslint' .

Repository: TrogonStack/trogonai

Length of output: 5417


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== files =="
git ls-files | rg '(^|/)(package.json|oxlint|eslint|tsconfig|vite|biome|oxlint.*|eslint.*|.*\.config\.(js|ts|mjs|cjs)|.*rc(\..*)?)$'

echo
echo "== search for hooks-related lint rules/config =="
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  'react-hooks|hooks.*rule|rule.*hooks|exhaustive-deps|rules-of-hooks|oxlint.*react|eslint-plugin-react-hooks|eslint-plugin-react' tsworkspace docs

echo
echo "== package manifests mentioning lint toolchain =="
sed -n '1,120p' tsworkspace/package.json
echo
sed -n '1,120p' tsworkspace/apps/console/package.json

echo
echo "== relevant ADR excerpt =="
sed -n '116,136p' docs/adr/0019-console-webapp-stack.md

Repository: TrogonStack/trogonai

Length of output: 3759


🌐 Web query:

oxlint React hooks rules exhaustive-deps rules-of-hooks documentation

💡 Result:

Oxlint provides native support for React hooks rules, including implementations that correspond to the popular eslint-plugin-react-hooks [1][2]. Key React hooks rules available in Oxlint: 1. react/rules-of-hooks: This native rule enforces that React hooks are called only at the top level and from within React components or custom hooks [3][4][5]. It was introduced in v0.3.3 [3][4]. 2. react-hooks/exhaustive-deps: This rule verifies that dependency arrays for hooks like useEffect and useMemo contain all necessary dependencies [6][7]. While Oxlint provides native support for hooks-related diagnostics, some users may configure it using the react-hooks plugin prefix in their configuration files to align with established ESLint patterns [8]. In addition to these specific rules, Oxlint also offers an experimental react/react-compiler rule [9]. This rule integrates the React Compiler's analysis to lint for violations of the Rules of React, such as conditional hook calls or state mutations during render, offering a deeper level of analysis that encompasses broader best practices [9]. Oxlint is designed to be highly compatible with existing ESLint configurations, and as of March 2026, it supports running JavaScript-based ESLint plugins natively in an alpha state [10]. This allows users to leverage existing plugin suites while benefiting from the performance of the Oxlint engine [11][10]. To enable these rules, you can add the react plugin to your configuration and specify the rules under the rules object [3][9].

Citations:


🌐 Web query:

oxlint default rules React hooks enabled by default recommended preset

💡 Result:

In Oxlint, React hooks rules (such as react/rules-of-hooks) are not enabled by default [1]. By default, Oxlint primarily enables rules categorized under correctness [1][2]. While Oxlint includes built-in support for the react plugin (which covers React hooks) [3][4], these rules must be explicitly enabled in your configuration if you wish to use them [1]. To enable React hooks rules, you can add them to your.oxlintrc.json configuration file. For example: { "rules": { "react/rules-of-hooks": "error", "react/exhaustive-deps": "warn" } } There is no single built-in recommended preset that automatically activates these rules for you [5][6]. Users looking for predefined collections of rules often rely on community-maintained presets or manually configure the specific rules required for their project [2][7].

Citations:


Add explicit React hooks linting. Oxlint supports rules-of-hooks and exhaustive-deps, but they aren’t enabled by default; keep an ESLint hooks pass or configure those rules directly, otherwise hook misuse can slip past CI.

🧰 Tools
🪛 LanguageTool

[grammar] ~129-~129: Ensure spelling is correct
Context: ...ive React hooks checks) is missing from oxlint, and that adoption is additive rather t...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 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 `@docs/adr/0019-console-webapp-stack.md` around lines 121 - 130, Add explicit
React hooks lint coverage to the linting guidance in the ADR section for the Oxc
toolchain. Update the discussion around oxlint/oxfmt to state that hooks safety
is not fully covered by default and that either an ESLint hooks pass or direct
configuration of oxlint rules like rules-of-hooks and exhaustive-deps must be
included. Reference the linting section text so it clearly communicates that
hook misuse should still be caught by CI.

Comment on lines +21 to +24
"@tanstack/react-router": "1.170.17",
"@tanstack/react-router-devtools": "1.167.0",
"@tanstack/react-table": "8.21.3",
"@tanstack/router-plugin": "1.168.19",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the latest compatible versions for all TanStack router packages
npm view `@tanstack/react-router` version
npm view `@tanstack/react-router-devtools` version
npm view `@tanstack/router-plugin` version
npm view `@tanstack/router-cli` version

# Check if there's a shared version recommendation
npm view `@tanstack/react-router` peerDependencies

Repository: TrogonStack/trogonai

Length of output: 1009


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## package.json excerpt\n'
sed -n '1,80p' tsworkspace/apps/console/package.json

printf '\n## TanStack router references\n'
rg -n '"`@tanstack/`(react-router|react-router-devtools|router-plugin|router-cli)"|tanstack/router' tsworkspace -S

printf '\n## package manager lock files mentioning router packages\n'
rg -n '"`@tanstack/`(react-router|react-router-devtools|router-plugin|router-cli)"' tsworkspace -g 'package-lock.json' -g 'pnpm-lock.yaml' -g 'yarn.lock' -S

Repository: TrogonStack/trogonai

Length of output: 4948


🌐 Web query:

TanStack Router installation version alignment router-plugin router-cli react-router devtools same version recommend

💡 Result:

It is highly recommended to keep all TanStack Router packages at the same version [1][2]. Because TanStack Router operates as a monorepo with tightly coupled packages, internal dependencies often rely on specific versions of the core engine, router-plugin, router-cli, and devtools to maintain compatibility [1][2]. Mismatched versions frequently lead to peer dependency warnings, build errors, or unexpected runtime behavior [3][4][5]. Specifically: - Version Alignment: Packages like @tanstack/react-router, @tanstack/router-plugin, @tanstack/router-cli, and @tanstack/react-router-devtools are developed and released in tandem [1][2]. Ensuring these match prevents issues where build-time code generation (handled by the CLI or plugin) becomes incompatible with the router runtime [3][5]. - Dependency Management: If your package manager reports dependency conflicts, use your package manager's override or resolution features (e.g., pnpm overrides, yarn resolutions) to force all TanStack Router packages to the exact same version [2][6]. - Best Practice: When updating, update all related TanStack Router dependencies simultaneously to avoid the "version skew" that causes most common configuration issues [1][2]. If you are setting up a project, using the recommended scaffolding tools or ensuring your package.json dependencies are synchronized will prevent the most common installation pitfalls [7][1].

Citations:


Align the TanStack Router package versions. @tanstack/react-router, @tanstack/react-router-devtools, @tanstack/router-plugin, and @tanstack/router-cli should stay in lockstep; mixing patch versions can put the route generator and runtime on different internal versions.

🤖 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 `@tsworkspace/apps/console/package.json` around lines 21 - 24, The TanStack
Router dependencies are on mismatched patch versions, so update the package
versions in package.json to keep `@tanstack/react-router`,
`@tanstack/react-router-devtools`, `@tanstack/router-plugin`, and
`@tanstack/router-cli` on the same release line. Make the version numbers
consistent in the dependency block so the runtime, devtools, and route generator
stay in lockstep.

Comment on lines +7 to +9
const config = defineConfig({
resolve: { tsconfigPaths: true },
plugins: [devtools(), tailwindcss(), tanstackRouter({ target: 'react', autoCodeSplitting: true }), viteReact()],

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if vite-tsconfig-paths is listed as a dependency
rg "vite-tsconfig-paths" tsworkspace/apps/console/package.json tsworkspace/package.json

# Check tsconfig for path aliases
cat tsworkspace/apps/console/tsconfig.json

# Search for any other plugin that might provide tsconfigPaths resolution
rg "tsconfigPaths" tsworkspace/ --type ts -l

Repository: TrogonStack/trogonai

Length of output: 821


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the Vite config in full context
cat -n tsworkspace/apps/console/vite.config.ts

# Check whether the tsconfig-paths plugin is declared anywhere relevant
rg -n "vite-tsconfig-paths|tsconfigPaths|`@/`\\*" tsworkspace/apps/console/package.json tsworkspace/package.json tsworkspace/pnpm-workspace.yaml tsworkspace/**/package.json

# Inspect the app package dependencies/devDependencies
cat -n tsworkspace/apps/console/package.json

Repository: TrogonStack/trogonai

Length of output: 882


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect app/package metadata and any alias-related config
cat -n tsworkspace/apps/console/package.json
printf '\n---\n'
find tsworkspace -name 'components.json' -o -name 'tsconfig.json' -o -name 'vite.config.ts' | sort | sed -n '1,120p'

printf '\n--- alias/search ---\n'
rg -n "`@/`" tsworkspace/apps/console tsworkspace -g '!**/node_modules/**' -g '!**/dist/**' -g '!**/build/**'

printf '\n--- tsconfigPaths/search ---\n'
rg -n "tsconfigPaths|vite-tsconfig-paths" tsworkspace/apps/console tsworkspace -g '!**/node_modules/**' -g '!**/dist/**' -g '!**/build/**'

Repository: TrogonStack/trogonai

Length of output: 4766


Add a real path-resolution plugin or alias here
resolve.tsconfigPaths isn’t a Vite option, and this app’s @/* imports depend on it. Add vite-tsconfig-paths to the plugins array or define resolve.alias explicitly, otherwise build/test imports will fail.

🤖 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 `@tsworkspace/apps/console/vite.config.ts` around lines 7 - 9, The Vite config
in defineConfig is using an invalid resolve.tsconfigPaths setting, so the app’s
`@/`* imports will not be resolved. Update the config by adding a real
path-resolution solution in the plugins array, such as vite-tsconfig-paths, or
by defining resolve.alias explicitly in the same config block. Make the change
in the config that currently includes devtools(), tailwindcss(),
tanstackRouter(), and viteReact() so the import resolution works consistently
for build and tests.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                  Stmts    Miss  Cover    Missing
--------------------------------------------------------------------------------------  -------  ------  -------  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/a2a-auth-callout/src/credentials/mtls.rs                                             153      13  91.50%   71-72, 168-169, 209-213, 216-219
crates/a2a-auth-callout/src/credentials/api_key.rs                                           46       1  97.83%   33
crates/a2a-auth-callout/src/credentials/oidc.rs                                             188       4  97.87%   212-215
crates/acp-nats/src/nats/subjects/commands/close.rs                                          15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/load.rs                                           15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_mode.rs                                       15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/cancel.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/prompt.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_model.rs                                      15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/resume.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/fork.rs                                           15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_config_option.rs                              15       0  100.00%
crates/trogon-scheduler/src/queries/decode.rs                                                95       0  100.00%
crates/trogon-scheduler/src/queries/get_schedule.rs                                           3       0  100.00%
crates/trogon-scheduler/src/queries/schedule_id.rs                                           28       0  100.00%
crates/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/trogon-decider-wasm-runtime/src/execution.rs                                         363       0  100.00%
crates/trogon-decider-wasm-runtime/src/test_fixture.rs                                        7       0  100.00%
crates/trogon-decider-wasm-runtime/src/command_type.rs                                       31       0  100.00%
crates/trogon-decider-wasm-runtime/src/module.rs                                             64       0  100.00%
crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                    18       0  100.00%
crates/trogon-decider-wasm-runtime/src/snapshot_id.rs                                        15       0  100.00%
crates/trogon-decider-wasm-runtime/src/command_spec.rs                                       12       0  100.00%
crates/trogon-decider-wasm-runtime/src/engine.rs                                             43       0  100.00%
crates/trogon-decider-wasm-runtime/src/module_version.rs                                     34       0  100.00%
crates/trogon-decider-wasm-runtime/src/domain_error_detail.rs                                 6       0  100.00%
crates/trogon-decider-wasm-runtime/src/registry.rs                                           28       0  100.00%
crates/trogon-decider-wasm-runtime/src/module_name.rs                                        34       0  100.00%
crates/a2a-auth-callout/src/wire/xkey_public.rs                                              23       0  100.00%
crates/a2a-auth-callout/src/wire/nkey_seed.rs                                                20       0  100.00%
crates/a2a-auth-callout/src/wire/server_auth_request_envelope.rs                             68       1  98.53%   64
crates/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                             54       3  94.44%   70-72
crates/a2a-auth-callout/src/wire/bridge_adapter.rs                                           73       0  100.00%
crates/a2a-auth-callout/src/wire/nkey_public.rs                                              83       3  96.39%   102, 118-119
crates/a2a-auth-callout/src/wire/server_auth_request_claims.rs                              100       4  96.00%   24-26, 127
crates/a2a-auth-callout/src/wire/test_encode.rs                                              59       0  100.00%
crates/a2a-auth-callout/src/wire/wire_codec.rs                                               58       0  100.00%
crates/trogon-gateway/src/source/discord/config.rs                                           45       0  100.00%
crates/trogon-gateway/src/source/discord/gateway.rs                                         116       1  99.14%   137
crates/trogon-gateway/src/source/notion/verification_token.rs                                46       0  100.00%
crates/trogon-gateway/src/source/notion/notion_verification_token.rs                          9       0  100.00%
crates/trogon-gateway/src/source/notion/server.rs                                           120       4  96.67%   116-117, 136-137
crates/trogon-gateway/src/source/notion/notion_event_type.rs                                 20       0  100.00%
crates/trogon-gateway/src/source/notion/signature.rs                                          9       0  100.00%
crates/trogon-decider-runtime/src/headers/header_name.rs                                     28       0  100.00%
crates/trogon-decider-runtime/src/headers/header_map.rs                                      54       0  100.00%
crates/trogon-decider-runtime/src/headers/header_value.rs                                    34       0  100.00%
crates/trogonai-proto/src/scheduler/schedules/codec.rs                                       57       0  100.00%
crates/a2a-nats/src/catalog/import_gate/allow_all.rs                                          2       0  100.00%
crates/a2a-nats/src/catalog/import_gate/principal.rs                                          9       0  100.00%
crates/a2a-nats-stdio/src/main.rs                                                             1       0  100.00%
crates/a2a-nats-stdio/src/io_loop.rs                                                         49       0  100.00%
crates/a2a-nats-stdio/src/runtime.rs                                                         21       0  100.00%
crates/a2a-nats-stdio/src/wire.rs                                                            22       0  100.00%
crates/a2a-nats-stdio/src/dispatch.rs                                                       207       8  96.14%   116, 119-121, 229, 232-234
crates/a2a-nats/src/catalog/import_gate/spicedb/mod.rs                                      108       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/config.rs                                    70       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/client.rs                                    29      15  48.28%   43-69, 97-99, 108-117
crates/a2a-nats/src/catalog/import_gate/spicedb/cache.rs                                     36       0  100.00%
crates/trogon-decider-nats/src/stream_store.rs                                              267      18  93.26%   70-72, 245, 273-274, 277, 293-297, 464-465, 506, 519-523
crates/trogon-decider-nats/src/store.rs                                                      73      45  38.36%   50-54, 101-167
crates/trogon-decider-nats/src/snapshot_store.rs                                            446      27  93.95%   208-210, 248-250, 361-367, 449, 585, 590, 686-688, 694-696, 730-731, 741-742, 761, 789-790
crates/trogon-nats/src/messaging.rs                                                         168       2  98.81%   146, 156
crates/trogon-nats/src/mocks.rs                                                             224       0  100.00%
crates/trogon-nats/src/connect.rs                                                            26       6  76.92%   42-47
crates/trogon-nats/src/token.rs                                                               6       0  100.00%
crates/trogon-nats/src/auth.rs                                                               45       0  100.00%
crates/trogon-nats/src/nats_token.rs                                                         56       0  100.00%
crates/trogon-nats/src/server_info.rs                                                        21       3  85.71%   19-21
crates/trogon-nats/src/client.rs                                                             22      22  0.00%    50-86
crates/acp-nats-stdio/src/main.rs                                                            58      11  81.03%   67, 110-117, 123-125, 142
crates/acp-nats-stdio/src/config.rs                                                          15       0  100.00%
crates/mcp-nats/src/nats/mod.rs                                                              23       0  100.00%
crates/mcp-nats/src/nats/parsing.rs                                                          98       0  100.00%
crates/a2a-nats/src/nats/subjects/stream.rs                                                  50       0  100.00%
crates/mcp-nats/src/jsonrpc.rs                                                                5       0  100.00%
crates/mcp-nats/src/config.rs                                                                59       0  100.00%
crates/mcp-nats/src/server.rs                                                                12       0  100.00%
crates/mcp-nats/src/transport.rs                                                            263      10  96.20%   244, 256-258, 376-379, 388-389
crates/mcp-nats/src/mcp_peer_id.rs                                                           15       0  100.00%
crates/mcp-nats/src/mcp_prefix.rs                                                            15       0  100.00%
crates/mcp-nats/src/wire.rs                                                                  18       0  100.00%
crates/mcp-nats/src/client.rs                                                                12       0  100.00%
crates/trogon-scheduler-domain/src/commands/state.rs                                         82       0  100.00%
crates/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/trogon-scheduler-domain/src/commands/create_schedule.rs                               32       0  100.00%
crates/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/trogon-scheduler-domain/src/commands/resume_schedule.rs                               34       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext.rs                                               9       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_new.rs                                       6       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext_notify.rs                                        9       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_list.rs                                      6       0  100.00%
crates/acp-nats/src/nats/subjects/global/authenticate.rs                                      6       0  100.00%
crates/acp-nats/src/nats/subjects/global/initialize.rs                                        6       0  100.00%
crates/acp-nats/src/nats/subjects/global/logout.rs                                            6       0  100.00%
crates/trogon-gateway/src/source/sentry/server.rs                                            69       0  100.00%
crates/trogon-gateway/src/source/sentry/signature.rs                                          6       0  100.00%
crates/trogon-gateway/src/source/sentry/sentry_client_secret.rs                               9       0  100.00%
crates/trogon-identity-types/src/aauth/person_server.rs                                      23       0  100.00%
crates/trogon-identity-types/src/aauth/headers.rs                                            47       0  100.00%
crates/trogon-identity-types/src/aauth/mission.rs                                            33       0  100.00%
crates/trogon-identity-types/src/aauth/error.rs                                              14       0  100.00%
crates/trogon-identity-types/src/aauth/mod.rs                                                69       0  100.00%
crates/trogon-identity-types/src/aauth/login.rs                                              78       0  100.00%
crates/acp-nats/src/nats/parsing.rs                                                         113      15  86.73%   138-152, 192
crates/acp-nats/src/nats/extensions.rs                                                        3       0  100.00%
crates/acp-nats/src/nats/mod.rs                                                              61      13  78.69%   22-33, 75
crates/acp-nats/src/nats/jsonrpc.rs                                                          51      11  78.43%   46, 54-55, 57-63, 81-83
crates/trogon-gateway/src/source/microsoft_graph/client_state.rs                             14       0  100.00%
crates/trogon-gateway/src/source/microsoft_graph/server.rs                                   73       0  100.00%
crates/trogon-gateway/src/source_plugin.rs                                                  288       3  98.96%   83, 140-141
crates/trogon-gateway/src/http.rs                                                            13       0  100.00%
crates/trogon-gateway/src/source_status.rs                                                   12       0  100.00%
crates/trogon-gateway/src/streams.rs                                                          7       0  100.00%
crates/trogon-gateway/src/config.rs                                                        1172      32  97.27%   82, 689, 856, 1003, 1006, 1015, 1101-1108, 1186, 1189, 1198, 1257, 1260, 1344, 1347, 1356, 1421, 1424, 1501, 1504, 1513, 1589, 1592, 1606, 1665, 1668, 1978-1980
crates/trogon-gateway/src/main.rs                                                            26       0  100.00%
crates/trogon-gateway/src/source_integration_id.rs                                           28       2  92.86%   58, 60
crates/acp-nats/src/telemetry/metrics.rs                                                     22       0  100.00%
crates/trogon-gateway/src/source/github/server.rs                                            50       0  100.00%
crates/trogon-gateway/src/source/github/config.rs                                             9       0  100.00%
crates/trogon-gateway/src/source/github/signature.rs                                          9       0  100.00%
crates/trogon-gateway/src/source/incidentio/server.rs                                        72       0  100.00%
crates/trogon-gateway/src/source/incidentio/incidentio_event_type.rs                         20       0  100.00%
crates/trogon-gateway/src/source/incidentio/signature.rs                                      8       0  100.00%
crates/trogon-gateway/src/source/incidentio/incidentio_signing_secret.rs                     22       0  100.00%
crates/trogon-gateway/src/source/twitter/server.rs                                          144       0  100.00%
crates/trogon-gateway/src/source/twitter/signature.rs                                        16       0  100.00%
crates/trogon-gateway/src/source/twitter/config.rs                                            9       0  100.00%
crates/trogon-decider/src/decision.rs                                                        27       0  100.00%
crates/trogon-decider/src/lib.rs                                                              4       0  100.00%
crates/trogon-decider/src/events.rs                                                          49       0  100.00%
crates/trogon-decider/src/act.rs                                                             62       0  100.00%
crates/trogon-decider/src/testing.rs                                                        274       0  100.00%
crates/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   127
crates/a2a-nats-server/src/runtime.rs                                                        17       0  100.00%
crates/a2a-nats-server/src/main.rs                                                            1       0  100.00%
crates/a2a-nats-server/src/noop_handler.rs                                                   22       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_encode_error.rs                    16       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.rs            3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_decode_error.rs            6       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_decode_error.rs                    19       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_payload_decode.rs                   3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/encoded_snapshot.rs                         44       0  100.00%
crates/acp-nats/src/client/mod.rs                                                           101       1  99.01%   56
crates/acp-nats/src/client/ext_session_prompt_response.rs                                    22       0  100.00%
crates/acp-nats/src/client/session_update.rs                                                  2       0  100.00%
crates/acp-nats/src/client/terminal_create.rs                                                41       0  100.00%
crates/acp-nats/src/client/fs_read_text_file.rs                                              27       0  100.00%
crates/acp-nats/src/client/terminal_kill.rs                                                  41       0  100.00%
crates/acp-nats/src/client/ext.rs                                                            57       0  100.00%
crates/acp-nats/src/client/terminal_output.rs                                                29       0  100.00%
crates/acp-nats/src/client/terminal_release.rs                                               35       0  100.00%
crates/acp-nats/src/client/terminal_wait_for_exit.rs                                         55       0  100.00%
crates/acp-nats/src/client/test_support.rs                                                   17       0  100.00%
crates/acp-nats/src/client/rpc_reply.rs                                                     107      43  59.81%   45-47, 61-63, 80-120
crates/acp-nats/src/client/fs_write_text_file.rs                                             43       0  100.00%
crates/acp-nats/src/client/request_permission.rs                                             40       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule.rs                              383       5  98.69%   326, 334, 349-351
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_delivery.rs                14       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_sampling_source.rs         11       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_schedule.rs                35       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/message.rs                               139       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_status.rs                   6       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            37       0  100.00%
crates/trogon-telemetry/src/log.rs                                                           36       0  100.00%
crates/trogon-telemetry/src/service_name.rs                                                  17       0  100.00%
crates/trogon-telemetry/src/trace.rs                                                         15       1  93.33%   24
crates/trogon-telemetry/src/metric.rs                                                        18       1  94.44%   30
crates/trogon-telemetry/src/lib.rs                                                          135      23  82.96%   119, 124, 129, 139-140, 146-164, 200, 203, 206, 212
crates/trogon-telemetry/src/resource_attribute.rs                                            13       0  100.00%
crates/trogon-nats/src/jetstream/create_conflicts.rs                                         14       0  100.00%
crates/trogon-nats/src/jetstream/publish.rs                                                  30       0  100.00%
crates/trogon-nats/src/jetstream/stream_max_age.rs                                            8       0  100.00%
crates/trogon-nats/src/jetstream/mocks.rs                                                   941       1  99.89%   507
crates/trogon-nats/src/jetstream/traits.rs                                                   46      40  13.04%   181-251
crates/trogon-nats/src/jetstream/claim_check.rs                                             104       3  97.12%   46-48
crates/ard-registry/src/lexical_rank.rs                                                      55       2  96.36%   15, 64
crates/ard-registry/src/registry_config.rs                                                   16       0  100.00%
crates/ard-registry/src/search_filters.rs                                                    28       0  100.00%
crates/ard-registry/src/facet_field.rs                                                       13       0  100.00%
crates/ard-registry/src/source_url.rs                                                        26       1  96.15%   30
crates/ard-registry/src/router.rs                                                            33       0  100.00%
crates/ard-registry/src/filters.rs                                                           31       0  100.00%
crates/ard-registry/src/registry.rs                                                         134       3  97.76%   78, 174, 183
crates/ard-registry/src/extract.rs                                                           12       0  100.00%
crates/ard-registry/src/list_agents_request.rs                                               21       0  100.00%
crates/ard-registry/src/page_token.rs                                                        14       0  100.00%
crates/ard-registry/src/search_request.rs                                                    32       1  96.88%   43
crates/ard-registry/src/explore_request.rs                                                   30       0  100.00%
crates/ard-registry/src/http_error.rs                                                        17       0  100.00%
crates/a2a-nats/src/push/dispatcher/jetstream.rs                                             45       0  100.00%
crates/a2a-nats/src/push/dispatcher/composite.rs                                             15       0  100.00%
crates/a2a-nats/src/push/dispatcher/nats.rs                                                  37       0  100.00%
crates/a2a-nats/src/push/dispatcher/http.rs                                                  19       0  100.00%
crates/a2a-nats/src/push/dispatcher/mod.rs                                                   16       0  100.00%
crates/acp-nats-agent/src/connection.rs                                                     468       1  99.79%   704
crates/acp-nats/src/nats/subjects/responses/cancelled.rs                                     15       0  100.00%
crates/acp-nats/src/nats/subjects/responses/ext_ready.rs                                     12       0  100.00%
crates/acp-nats/src/nats/subjects/responses/response.rs                                      20       0  100.00%
crates/acp-nats/src/nats/subjects/responses/prompt_response.rs                               20       0  100.00%
crates/acp-nats/src/nats/subjects/responses/update.rs                                        20       0  100.00%
crates/trogon-scheduler/src/telemetry/metrics.rs                                             27       0  100.00%
crates/trogon-scheduler/src/telemetry/trace.rs                                               20       0  100.00%
crates/trogon-decider-runtime/src/snapshot/mod.rs                                             3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/read_snapshot.rs                                   3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                  42       0  100.00%
crates/ard-registry/src/bin/ard-registry-demo/main.rs                                        64      20  68.75%   13-35
crates/trogon-aauth-sdk/src/exchange/client.rs                                              283       0  100.00%
crates/trogon-aauth-sdk/src/exchange/challenge.rs                                            50       0  100.00%
crates/trogon-aauth-sdk/src/exchange/core.rs                                                138       0  100.00%
crates/trogon-aauth-sdk/src/exchange/mod.rs                                                  17       0  100.00%
crates/trogon-std/src/dirs/system.rs                                                         39       0  100.00%
crates/trogon-std/src/dirs/fixed.rs                                                          32       0  100.00%
crates/a2a-nats/src/nats/subjects/tasks/events.rs                                            17       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/failure.rs                       27       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/codec.rs                        318      17  94.65%   340-341, 361-362, 373-377, 405-406, 412-413, 442-443, 480, 485-487
crates/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        145      16  88.97%   103, 121, 125, 132, 224-230, 279-283
crates/acp-nats-server/src/acp_connection_id.rs                                              14       0  100.00%
crates/acp-nats-server/src/config.rs                                                         39       0  100.00%
crates/acp-nats-server/src/main.rs                                                           68       1  98.53%   109
crates/acp-nats-server/src/transport.rs                                                    1020     107  89.51%   242, 290-292, 527, 545, 572, 626, 631, 651, 670, 713-726, 815, 838-840, 892, 909-912, 1008-1011, 1086, 1089, 1092, 1101, 1105, 1108, 1111-1114, 1132, 1165-1168, 1176-1181, 1193-1197, 1201-1210, 1222-1223, 1241-1242, 1252, 1268-1272, 1300-1306, 1326-1328, 1333-1337, 1340-1345, 1362, 1364-1365, 1447-1448, 1460-1461, 1481-1482
crates/acp-nats-server/src/connection.rs                                                    114      35  69.30%   90-97, 102-117, 133, 135-136, 141, 150-151, 156, 160, 164, 167, 175, 179, 182, 185-189
crates/trogon-decider-runtime/src/event/event_identity.rs                                     3       0  100.00%
crates/trogon-decider-runtime/src/event/stream_event.rs                                       8       0  100.00%
crates/trogon-decider-runtime/src/event/event_id.rs                                          32       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   230       2  99.13%   285, 290
crates/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs       35       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           31       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs               27       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/reconcile.rs                 303      13  95.71%   251-260, 325-327
crates/trogon-scheduler/src/processor/execution/reconciliation/go_duration.rs                40       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs           241      12  95.02%   200-205, 242, 250, 271, 291, 297, 303, 336, 346, 364, 448
crates/a2a-nats/src/server/push_list.rs                                                      12       0  100.00%
crates/a2a-nats/src/server/push_set.rs                                                       12       0  100.00%
crates/a2a-nats/src/server/agent_card.rs                                                     16       0  100.00%
crates/a2a-nats/src/server/wire.rs                                                           34       4  88.24%   21-23, 30
crates/a2a-nats/src/server/push_delete.rs                                                    12       0  100.00%
crates/a2a-nats/src/server/test_support.rs                                                   81      25  69.14%   134-159
crates/a2a-nats/src/server/dispatch.rs                                                       33       0  100.00%
crates/a2a-nats/src/server/push_get.rs                                                       12       0  100.00%
crates/a2a-nats/src/server/tasks_get.rs                                                      12       0  100.00%
crates/a2a-nats/src/server/tasks_list.rs                                                     12       0  100.00%
crates/a2a-nats/src/server/tasks_resubscribe.rs                                              12       0  100.00%
crates/a2a-nats/src/server/message_send.rs                                                   15       0  100.00%
crates/a2a-nats/src/server/tasks_cancel.rs                                                   12       0  100.00%
crates/a2a-nats/src/server/message_stream.rs                                                 56       6  89.29%   155-157, 165-167
crates/a2a-nats/src/server/handler.rs                                                        39       0  100.00%
crates/a2a-nats/src/server/bridge.rs                                                         65       0  100.00%
crates/trogon-service-config/src/lib.rs                                                      38       0  100.00%
crates/a2a-nats-http/src/headers.rs                                                         129       1  99.22%   159
crates/a2a-nats-http/src/rest.rs                                                            316       8  97.47%   123-126, 282-285
crates/a2a-nats-http/src/main.rs                                                              1       0  100.00%
crates/a2a-nats-http/src/router.rs                                                           55      13  76.36%   60-63, 69-79
crates/a2a-nats-http/src/runtime.rs                                                           8       8  0.00%    60-130
crates/a2a-nats-http/src/sse.rs                                                              44      27  38.64%   15-51, 61-62, 65-68
crates/mcp-nats/src/telemetry/transport.rs                                                    6       0  100.00%
crates/trogon-nats/src/telemetry/messaging.rs                                                37       0  100.00%
crates/trogon-nats/src/lease/ttl.rs                                                          27       0  100.00%
crates/trogon-nats/src/lease/renew_interval.rs                                               25       0  100.00%
crates/trogon-nats/src/lease/mod.rs                                                         107      13  87.85%   113-126
crates/trogon-nats/src/lease/lease_bucket.rs                                                 19       0  100.00%
crates/trogon-nats/src/lease/renew.rs                                                        82      19  76.83%   23-29, 48-59
crates/trogon-nats/src/lease/lease_timing.rs                                                 15       0  100.00%
crates/trogon-nats/src/lease/nats_kv_lease_config.rs                                         26       0  100.00%
crates/trogon-nats/src/lease/lease_key.rs                                                    19       0  100.00%
crates/trogon-nats/src/lease/provision.rs                                                    83      10  87.95%   82-92
crates/trogon-nats/src/lease/acquire.rs                                                       5       5  0.00%    9-14
crates/trogon-nats/src/lease/release.rs                                                       5       5  0.00%    8-12
crates/acp-nats/src/jetstream/streams.rs                                                     18       0  100.00%
crates/acp-nats/src/jetstream/consumers.rs                                                   41       0  100.00%
crates/acp-nats/src/jetstream/ext_policy.rs                                                   3       0  100.00%
crates/acp-nats/src/jetstream/provision.rs                                                   13       0  100.00%
crates/a2a-nats/src/client/streaming.rs                                                      73       0  100.00%
crates/a2a-nats/src/client/resubscribe.rs                                                    28       0  100.00%
crates/a2a-nats/src/client/handle.rs                                                        218       0  100.00%
crates/a2a-nats/src/client/wire.rs                                                           13       0  100.00%
crates/a2a-nats/src/client/event_stream.rs                                                   76       0  100.00%
crates/a2a-nats/src/client/error.rs                                                          14       0  100.00%
crates/a2a-nats/src/client/unary.rs                                                          39       1  97.44%   57
crates/a2a-nats/src/client/gateway_headers.rs                                                19       0  100.00%
crates/trogon-gateway/src/source/datadog/server.rs                                          108       0  100.00%
crates/trogon-gateway/src/source/datadog/signature.rs                                         7       0  100.00%
crates/trogon-gateway/src/source/datadog/datadog_event_type.rs                               20       0  100.00%
crates/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                             9       0  100.00%
crates/ard-catalog/src/ard_identifier.rs                                                     54       0  100.00%
crates/ard-catalog/src/federation_mode.rs                                                     3       0  100.00%
crates/ard-catalog/src/catalog_entry.rs                                                     107       0  100.00%
crates/ard-catalog/src/representative_queries.rs                                             18       0  100.00%
crates/ard-catalog/src/ard_storage_key.rs                                                    10       0  100.00%
crates/ard-catalog/src/display_name.rs                                                       13       0  100.00%
crates/ard-catalog/src/catalog_entry_wire.rs                                                  3       0  100.00%
crates/ard-catalog/src/catalog_host.rs                                                       26       0  100.00%
crates/ard-catalog/src/metadata.rs                                                           14       0  100.00%
crates/ard-catalog/src/catalog_host_wire.rs                                                   6       0  100.00%
crates/ard-catalog/src/trust_manifest.rs                                                     45       1  97.78%   35
crates/ard-catalog/src/catalog_manifest_wire.rs                                               3       0  100.00%
crates/ard-catalog/src/url_or_data.rs                                                        20       0  100.00%
crates/ard-catalog/src/catalog_manifest_schema.rs                                            65       4  93.85%   109-110, 112-113
crates/ard-catalog/src/registry_error_wire.rs                                                 8       0  100.00%
crates/ard-catalog/src/media_type.rs                                                         20       0  100.00%
crates/ard-catalog/src/catalog_manifest.rs                                                   44       0  100.00%
crates/trogon-decider-wit/src/lib.rs                                                         53       1  98.11%   4
crates/a2a-nats/src/audit/task_lifecycle.rs                                                  17       0  100.00%
crates/a2a-nats/src/audit/emitter.rs                                                         58       0  100.00%
crates/a2a-nats/src/audit/envelope.rs                                                        57       0  100.00%
crates/a2a-nats/src/push/idempotency_key_header.rs                                           16       0  100.00%
crates/a2a-nats/src/push/terminal_push_task_state.rs                                         17       0  100.00%
crates/a2a-nats/src/push/delivery_semantics.rs                                               98       0  100.00%
crates/a2a-nats/src/push/status_transition_id.rs                                             15       0  100.00%
crates/a2a-nats/src/push/authentication_header.rs                                            31       0  100.00%
crates/a2a-nats/src/push/dlq_dedup.rs                                                        51       1  98.04%   79
crates/a2a-nats/src/push/push_payload.rs                                                     18       0  100.00%
crates/a2a-nats/src/push/push_notification_target.rs                                         32       0  100.00%
crates/a2a-nats/src/push/caller_id.rs                                                        41       0  100.00%
crates/a2a-nats/src/push/dlq.rs                                                              56       0  100.00%
crates/a2a-nats/src/push/push_delivery_semantics_registry.rs                                 17       0  100.00%
crates/a2a-nats/src/push/push_notification_config_id.rs                                      17       0  100.00%
crates/a2a-nats/src/push/push_idempotency_key.rs                                             43       0  100.00%
crates/a2a-nats/src/push/nats_push_subject.rs                                                12       0  100.00%
crates/a2a-nats/src/push/target.rs                                                           19       0  100.00%
crates/a2a-nats/src/push/push_notification_config.rs                                          6       0  100.00%
crates/a2a-nats/src/push/dispatch_error.rs                                                   24       0  100.00%
crates/trogon-gateway/src/source/linear/signature.rs                                          8       1  87.50%   16
crates/trogon-gateway/src/source/linear/config.rs                                             9       0  100.00%
crates/trogon-gateway/src/source/linear/server.rs                                            83       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/delete.rs                                      15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/get.rs                                         12       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/list.rs                                        15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/set.rs                                         12       0  100.00%
crates/a2a-redaction/src/wasm/engine.rs                                                      62      11  82.26%   46-48, 80-81, 93-95, 99-101
crates/a2a-redaction/src/wasm/mod.rs                                                        110       9  91.82%   132-134, 147-149, 162-164
crates/a2a-nats/src/nats/subjects/subscriptions/task_all_events.rs                            9       0  100.00%
crates/a2a-nats/src/nats/subjects/subscriptions/agent_all.rs                                 12       0  100.00%
crates/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                           12       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_client.rs                                 9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_session.rs                                9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent.rs                                  9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                                 15       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/global_all.rs                                 9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_session.rs                               12       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/prompt_wildcard.rs                            9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                15       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent_ext.rs                              9       0  100.00%
crates/trogon-decider-sim/src/host.rs                                                        35       0  100.00%
crates/trogon-decider-sim/src/import_check.rs                                                52       4  92.31%   68-70, 90
crates/trogon-decider-sim/src/fixture.rs                                                     18       2  88.89%   30-32
crates/trogon-decider-sim/src/scenario.rs                                                   142       4  97.18%   152-154, 258
crates/trogon-decider-sim/src/session.rs                                                     15       0  100.00%
crates/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/trogon-scheduler/src/queries/read_model/schedule.rs                                   15       0  100.00%
crates/trogon-scheduler/src/queries/read_model/message.rs                                    77       0  100.00%
crates/trogon-gateway/src/source/telegram/registration.rs                                    82       0  100.00%
crates/trogon-gateway/src/source/telegram/config.rs                                          42       0  100.00%
crates/trogon-gateway/src/source/telegram/signature.rs                                        7       0  100.00%
crates/trogon-gateway/src/source/telegram/server.rs                                          53       0  100.00%
crates/a2a-gateway/src/policy/tier2_cel/evaluator.rs                                        138       0  100.00%
crates/a2a-gateway/src/policy/tier2_cel/bundle.rs                                           120      26  78.33%   70-72, 74-76, 86, 92, 111-113, 123-127, 158, 162-164, 166-168, 171, 178, 181
crates/a2a-gateway/src/policy/tier2_cel/compiler.rs                                          25       3  88.00%   61-63
crates/a2a-nats/src/jetstream/stream_options.rs                                              50       0  100.00%
crates/a2a-nats/src/jetstream/consumers.rs                                                   50       0  100.00%
crates/a2a-nats/src/jetstream/provision.rs                                                   16       0  100.00%
crates/a2a-nats/src/jetstream/streams.rs                                                      9       0  100.00%
crates/a2a-auth-callout/src/jwt/nats_user_jwt.rs                                            187       1  99.47%   131
crates/a2a-auth-callout/src/jwt/nats_permission_claims.rs                                    10       0  100.00%
crates/a2a-auth-callout/src/jwt/user_jwt_subject.rs                                          12       0  100.00%
crates/a2a-auth-callout/src/jwt/mod.rs                                                      232       0  100.00%
crates/a2a-gateway/src/policy/tier2/rule_name.rs                                             19       0  100.00%
crates/a2a-gateway/src/policy/tier2/mod.rs                                                   46       0  100.00%
crates/trogon-aauth-as/src/pending.rs                                                        26       0  100.00%
crates/trogon-aauth-as/src/server.rs                                                        139       0  100.00%
crates/trogon-aauth-as/src/http.rs                                                           82       0  100.00%
crates/trogon-aauth-as/src/subagent.rs                                                       10       0  100.00%
crates/trogon-aauth-as/src/trust.rs                                                          60       0  100.00%
crates/trogon-aauth-as/src/policy.rs                                                         38       0  100.00%
crates/trogon-aauth-as/src/test_support.rs                                                  122       0  100.00%
crates/trogon-aauth-as/src/mint.rs                                                           56       0  100.00%
crates/trogon-aauth-as/src/verify.rs                                                         96       0  100.00%
crates/a2a-nats-http/src/handlers/mod.rs                                                    185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/trogon-std/src/telemetry/http.rs                                                      58       0  100.00%
crates/a2a-auth-callout/src/denial_reason.rs                                                 15       0  100.00%
crates/a2a-auth-callout/src/dispatcher.rs                                                    34      13  61.76%   83-112
crates/a2a-auth-callout/src/denial_category.rs                                               29       0  100.00%
crates/a2a-auth-callout/src/account_resolver.rs                                              31       0  100.00%
crates/a2a-auth-callout/src/denial_claims.rs                                                 68       0  100.00%
crates/a2a-auth-callout/src/error.rs                                                          3       0  100.00%
crates/a2a-auth-callout/src/main.rs                                                           1       1  0.00%    226
crates/a2a-auth-callout/src/subscriber.rs                                                    96      96  0.00%    27-178
crates/a2a-auth-callout/src/test_support.rs                                                  20      20  0.00%    16-36
crates/a2a-auth-callout/src/caller_jwt_header.rs                                             20       0  100.00%
crates/a2a-auth-callout/src/permissions.rs                                                   85       0  100.00%
crates/trogon-gateway/src/source/standard_webhooks.rs                                       138       0  100.00%
crates/mcp-nats/src/nats/subjects/server/subscribe_resource.rs                               12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/initialize.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/progress.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/get_prompt.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_tools.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/set_logging_level.rs                                12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/elicitation_completed.rs                            12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_resource_templates.rs                          12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/get_task.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/cancel_task.rs                                      12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_tasks.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/logging_message.rs                                  12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/resource_list_changed.rs                            12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_prompts.rs                                     12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/unsubscribe_resource.rs                             12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/prompt_list_changed.rs                              12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/tool_list_changed.rs                                12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/get_task_result.rs                                  12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/ping.rs                                              9       0  100.00%
crates/mcp-nats/src/nats/subjects/server/resource_updated.rs                                 12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/read_resource.rs                                    12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/cancelled.rs                                        12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_resources.rs                                   12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/call_tool.rs                                        12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/complete.rs                                         12       0  100.00%
crates/a2a-nats/src/catalog/nats_kv.rs                                                        8       0  100.00%
crates/a2a-nats/src/catalog/agent_view.rs                                                    47       0  100.00%
crates/a2a-nats/src/catalog/spicedb_permission.rs                                           178      17  90.45%   151-156, 175, 340-344, 373-374, 385-387, 394-396
crates/a2a-nats/src/catalog/registrar.rs                                                     56       0  100.00%
crates/a2a-nats/src/catalog/store.rs                                                        117       0  100.00%
crates/a2a-nats/src/catalog/watch.rs                                                         18       0  100.00%
crates/trogon-aauth-person/src/store.rs                                                      21       0  100.00%
crates/trogon-aauth-person/src/interaction.rs                                                 2       0  100.00%
crates/trogon-aauth-person/src/mint.rs                                                       59       0  100.00%
crates/trogon-aauth-person/src/error.rs                                                      48       0  100.00%
crates/trogon-aauth-person/src/mission.rs                                                    65       0  100.00%
crates/trogon-aauth-person/src/subagent.rs                                                   10       0  100.00%
crates/trogon-aauth-person/src/pending.rs                                                    73       0  100.00%
crates/trogon-aauth-person/src/server.rs                                                    353       0  100.00%
crates/trogon-aauth-person/src/agent.rs                                                      84       0  100.00%
crates/trogon-aauth-person/src/login.rs                                                       3       0  100.00%
crates/trogon-std/src/uuid.rs                                                                 3       0  100.00%
crates/trogon-std/src/http.rs                                                                 8       0  100.00%
crates/trogon-std/src/signal.rs                                                              22      12  45.45%   6-11, 18-25, 34
crates/trogon-std/src/args.rs                                                                12       9  25.00%   11-28
crates/trogon-std/src/secret_string.rs                                                       13       0  100.00%
crates/trogon-std/src/duration.rs                                                            15       0  100.00%
crates/trogon-std/src/json.rs                                                                23       0  100.00%
crates/a2a-gateway/src/gw_pull_backpressure.rs                                              209       3  98.56%   504, 704, 717
crates/a2a-gateway/src/agent_card_surface.rs                                                  3       0  100.00%
crates/a2a-gateway/src/aauth.rs                                                             285       0  100.00%
crates/a2a-gateway/src/config.rs                                                             57       0  100.00%
crates/a2a-gateway/src/audit_ingress.rs                                                     110       0  100.00%
crates/a2a-gateway/src/jwt_caller_identity.rs                                               151       4  97.35%   165-169, 182-186
crates/a2a-gateway/src/lib.rs                                                                 3       0  100.00%
crates/a2a-gateway/src/main.rs                                                                1       0  100.00%
crates/a2a-gateway/src/push_dlq_mirror.rs                                                   133      16  87.97%   162-166, 218, 223-226, 236, 261, 382-389
crates/a2a-gateway/src/runtime.rs                                                            11       0  100.00%
crates/a2a-gateway/src/gw_ingress_stream.rs                                                 144       4  97.22%   319-321, 536
crates/trogon-decider-guest-macros/src/lib.rs                                               121      16  86.78%   14-19, 95-98, 413-422, 426
crates/a2a-identity-types/src/jwt.rs                                                         71       0  100.00%
crates/a2a-identity-types/src/principal.rs                                                   16       0  100.00%
crates/a2a-identity-types/src/caller.rs                                                      24       0  100.00%
crates/trogon-gateway/src/source/gitlab/server.rs                                            78       0  100.00%
crates/trogon-gateway/src/source/gitlab/signature.rs                                         13       0  100.00%
crates/trogon-gateway/src/source/gitlab/gitlab_signing_token.rs                              30       0  100.00%
crates/trogon-aauth-person/src/http/mod.rs                                                  213       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/cancel.rs                                     15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/get.rs                                        15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/resubscribe.rs                                15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/list.rs                                       15       0  100.00%
crates/mcp-nats-stdio/src/config.rs                                                          26       0  100.00%
crates/mcp-nats-stdio/src/main.rs                                                            36       0  100.00%
crates/a2a-gateway/src/runtime/streaming.rs                                                  35       0  100.00%
crates/a2a-gateway/src/runtime/reply.rs                                                       5       0  100.00%
crates/a2a-gateway/src/runtime/env.rs                                                        55       0  100.00%
crates/a2a-gateway/src/runtime/tier1_denial.rs                                               34       1  97.06%   60
crates/a2a-gateway/src/runtime/aauth_env.rs                                                 162       0  100.00%
crates/a2a-gateway/src/runtime/audit_publish.rs                                              16       0  100.00%
crates/a2a-gateway/src/runtime/policy_stack.rs                                               78      31  60.26%   84, 91, 103-112, 119-120, 135-145, 154-170, 175
crates/a2a-gateway/src/runtime/tier1.rs                                                      30       0  100.00%
crates/a2a-bridge/src/auth/callout_mint.rs                                                   49       1  97.96%   94
crates/mcp-nats-server/src/runtime.rs                                                       268      86  67.91%   146-164, 200-202, 220-221, 232, 265-269, 273-282, 311-319, 324-359, 385-396
crates/mcp-nats-server/src/allowed_host.rs                                                   52       0  100.00%
crates/mcp-nats-server/src/config.rs                                                         58       0  100.00%
crates/mcp-nats-server/src/main.rs                                                            1       1  0.00%    67
crates/trogon-decider/src/event/codec/event_decode.rs                                        13       0  100.00%
crates/trogon-decider/src/event/codec/event_payload_error.rs                                  5       0  100.00%
crates/a2a-redaction/src/signed_bundle/signature.rs                                          30       3  90.00%   37-39
crates/a2a-redaction/src/signed_bundle/public_key.rs                                         36       2  94.44%   44-45
crates/a2a-redaction/src/signed_bundle/digest.rs                                             26       0  100.00%
crates/a2a-redaction/src/signed_bundle/manifest.rs                                           56       1  98.21%   83
crates/a2a-redaction/src/signed_bundle/verify.rs                                             64       2  96.88%   90-91
crates/trogon-scheduler/src/processor/execution/worker/testkit.rs                           311       4  98.71%   458, 489-490, 495
crates/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                        280       1  99.64%   200
crates/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/trogon-scheduler/src/processor/execution/worker/processor.rs                         303      12  96.04%   279, 339, 437-438, 444, 499-501, 533-536
crates/a2a-redaction/src/wasm_bundle_path.rs                                                 18       0  100.00%
crates/a2a-redaction/src/a2a_method.rs                                                       41       0  100.00%
crates/a2a-redaction/src/tier3_sentinel.rs                                                   12       0  100.00%
crates/a2a-redaction/src/skill_id.rs                                                         26       0  100.00%
crates/a2a-redaction/src/skill_manifest.rs                                                  310      14  95.48%   139, 169-171, 177, 184-188, 358-360, 452
crates/a2a-redaction/src/redactor.rs                                                         32       0  100.00%
crates/trogon-std/src/env/enumerate_env.rs                                                    6       0  100.00%
crates/trogon-std/src/env/read_env.rs                                                         3       0  100.00%
crates/trogon-std/src/env/system.rs                                                          12       0  100.00%
crates/trogon-std/src/env/in_memory.rs                                                       30       0  100.00%
crates/a2a-gateway/src/policy/per_skill.rs                                                   87       0  100.00%
crates/a2a-gateway/src/policy/error.rs                                                       16       0  100.00%
crates/a2a-gateway/src/policy/wasmtime_substrate.rs                                          31       0  100.00%
crates/a2a-gateway/src/policy/spicedb_tier1.rs                                              157      13  91.72%   226-228, 381, 451, 453-461
crates/a2a-bridge/src/outbound.rs                                                            70       7  90.00%   126, 197-209
crates/a2a-bridge/src/nats_transport_harness.rs                                              42       0  100.00%
crates/a2a-bridge/src/identity.rs                                                            63       0  100.00%
crates/a2a-bridge/src/auth.rs                                                                47      15  68.09%   78-99, 148
crates/a2a-bridge/src/main.rs                                                                 1       1  0.00%    199
crates/a2a-bridge/src/inbound.rs                                                            326      91  72.09%   115-119, 142-144, 191-231, 292-417, 469-471, 482, 580, 631-646, 687-692
crates/jsonrpc-nats/src/message.rs                                                           11       3  72.73%   37-39
crates/jsonrpc-nats/src/id.rs                                                                62      20  67.74%   44-61, 81-82, 84-85, 91-92, 98-99, 112
crates/jsonrpc-nats/src/transport.rs                                                         92       1  98.91%   106
crates/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       0  100.00%
crates/acp-nats/src/acp_prefix.rs                                                            13       0  100.00%
crates/acp-nats/src/error.rs                                                                 31       0  100.00%
crates/acp-nats/src/lib.rs                                                                   11       0  100.00%
crates/acp-nats/src/wire.rs                                                                  80      14  82.50%   38, 46-60, 103
crates/acp-nats/src/ext_method_name.rs                                                       18       0  100.00%
crates/acp-nats/src/pending_prompt_waiters.rs                                                68       0  100.00%
crates/acp-nats/src/in_flight_slot_guard.rs                                                   7       0  100.00%
crates/acp-nats/src/req_id.rs                                                                21       0  100.00%
crates/acp-nats/src/session_id.rs                                                            21       0  100.00%
crates/acp-nats/src/client_proxy.rs                                                          63       1  98.41%   55
crates/acp-nats/src/config.rs                                                                84       0  100.00%
crates/a2a-pack/src/agent_card_schema.rs                                                     40       0  100.00%
crates/a2a-pack/src/resource_tuples.rs                                                      152       0  100.00%
crates/a2a-pack/src/agent_card_read.rs                                                       23       0  100.00%
crates/trogon-aauth-verify/src/jwks_cache.rs                                                 39       0  100.00%
crates/trogon-aauth-verify/src/mission.rs                                                    33       0  100.00%
crates/trogon-aauth-verify/src/replay.rs                                                     26       0  100.00%
crates/trogon-aauth-verify/src/nats_pop.rs                                                  125       1  99.20%   337
crates/trogon-aauth-verify/src/jwks_http.rs                                                 144       0  100.00%
crates/trogon-aauth-verify/src/jkt.rs                                                        33       0  100.00%
crates/trogon-aauth-verify/src/http_pop.rs                                                  268       0  100.00%
crates/trogon-aauth-verify/src/jwks.rs                                                       15       0  100.00%
crates/trogon-aauth-verify/src/challenge.rs                                                  77       0  100.00%
crates/trogon-aauth-verify/src/delegation.rs                                                 53       0  100.00%
crates/trogon-aauth-verify/src/test_support.rs                                               86       0  100.00%
crates/trogon-aauth-verify/src/time_source.rs                                                10       0  100.00%
crates/trogon-aauth-verify/src/upstream.rs                                                   20       0  100.00%
crates/trogon-aauth-verify/src/token.rs                                                     184       1  99.46%   181
crates/trogon-gateway/src/source/slack/socket_mode.rs                                       139       0  100.00%
crates/trogon-gateway/src/source/slack/config.rs                                             32       0  100.00%
crates/trogon-gateway/src/source/slack/server.rs                                            272       0  100.00%
crates/trogon-gateway/src/source/slack/signature.rs                                          17       0  100.00%
crates/trogonai-proto/src/codec.rs                                                           16       0  100.00%
crates/trogonai-proto/src/lib.rs                                                             18       0  100.00%
crates/trogonai-proto/src/convert.rs                                                         53       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/all_server.rs                                 6       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/one_server.rs                                 9       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/all_client.rs                                 6       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/one_client.rs                                 9       0  100.00%
crates/acp-nats/src/agent/set_session_model.rs                                               16       0  100.00%
crates/acp-nats/src/agent/initialize.rs                                                       6       0  100.00%
crates/acp-nats/src/agent/new_session.rs                                                      5       0  100.00%
crates/acp-nats/src/agent/load_session.rs                                                    16       0  100.00%
crates/acp-nats/src/agent/cancel.rs                                                          12       0  100.00%
crates/acp-nats/src/agent/rpc_call.rs                                                        23       0  100.00%
crates/acp-nats/src/agent/ext_method.rs                                                      12       0  100.00%
crates/acp-nats/src/agent/logout.rs                                                           5       0  100.00%
crates/acp-nats/src/agent/prompt.rs                                                         156       7  95.51%   201-207
crates/acp-nats/src/agent/fork_session.rs                                                    16       0  100.00%
crates/acp-nats/src/agent/close_session.rs                                                   16       0  100.00%
crates/acp-nats/src/agent/bridge.rs                                                         124       4  96.77%   108-111
crates/acp-nats/src/agent/ext_notification.rs                                                12       0  100.00%
crates/acp-nats/src/agent/js_request.rs                                                      73       6  91.78%   84-89
crates/acp-nats/src/agent/authenticate.rs                                                     5       0  100.00%
crates/acp-nats/src/agent/list_sessions.rs                                                    5       0  100.00%
crates/acp-nats/src/agent/resume_session.rs                                                  16       0  100.00%
crates/acp-nats/src/agent/set_session_mode.rs                                                16       0  100.00%
crates/acp-nats/src/agent/set_session_config_option.rs                                       16       0  100.00%
crates/acp-nats/src/agent/test_support.rs                                                   194       0  100.00%
crates/ard-nats/src/catalog_event.rs                                                         71       0  100.00%
crates/ard-nats/src/memory_catalog_store.rs                                                  32       0  100.00%
crates/ard-nats/src/store.rs                                                                  3       0  100.00%
crates/ard-nats/src/catalog_subject.rs                                                       14       3  78.57%   19-21
crates/ard-nats/src/catalog_index.rs                                                         82       2  97.56%   37, 104
crates/trogon-decider-runtime/src/execution.rs                                              379       0  100.00%
crates/trogon-scheduler/src/commands/schedule_next_occurrence.rs                             74       0  100.00%
crates/trogon-scheduler/src/commands/record_schedule_occurrence.rs                          113       1  99.12%   182
crates/trogon-std/src/time/system.rs                                                          9       0  100.00%
crates/trogon-std/src/time/mock.rs                                                           32       0  100.00%
crates/jsonrpc-nats/src/codec/decode.rs                                                      57       0  100.00%
crates/jsonrpc-nats/src/codec/encode.rs                                                      31       0  100.00%
crates/jsonrpc-nats/src/codec/reconstruct.rs                                                 90       5  94.44%   56-59, 91
crates/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs                           12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/session_update.rs                               12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                            12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_create.rs                              12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_kill.rs                                12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                             12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_output.rs                              12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs                   12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs                       12       0  100.00%
crates/trogon-identity-types/src/act_chain.rs                                                13       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/gate.rs                                         3       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/mod.rs                                         33       2  93.94%   54, 58
crates/a2a-gateway/src/policy/tier3_redaction/decision.rs                                    22       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/context.rs                                     40       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                    69       3  95.65%   112, 121, 132
crates/a2a-gateway/src/policy/tier3_redaction/real_gate.rs                                  138      33  76.09%   18-26, 42-44, 67, 76-80, 119, 148-152, 155-159, 170-174, 192, 265
crates/a2a-gateway/src/policy/tier3_redaction/json_path.rs                                   84       5  94.05%   37, 49, 85, 104, 115
crates/a2a-gateway/src/policy/tier3_redaction/rewrite.rs                                     49       0  100.00%
crates/trogon-scheduler/src/projections/schedules/storage.rs                                  3       0  100.00%
crates/trogon-scheduler/src/projections/schedules/twin.rs                                    53       0  100.00%
crates/trogon-scheduler/src/projections/schedules/mod.rs                                    175       3  98.29%   708-710
crates/trogon-std/src/fs/mem.rs                                                              85       0  100.00%
crates/trogon-std/src/fs/system.rs                                                           15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/card.rs                                             12       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/message_stream.rs                                   15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/message_send.rs                                     15       0  100.00%
crates/trogon-scheduler/src/config.rs                                                        27       0  100.00%
crates/trogon-scheduler/src/error.rs                                                         83      12  85.54%   131-133, 152-154, 159-161, 176-180
crates/trogon-scheduler/src/mocks.rs                                                        401      51  87.28%   79, 119-122, 271, 288-291, 333-335, 349-353, 362, 406-410, 462-463, 467, 485-489, 506-509, 552-572
crates/trogon-scheduler/src/nats.rs                                                          11       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/loader.rs                                     23       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/file.rs                                       38       6  84.21%   40-42, 61-63
crates/a2a-auth-callout/src/signing_key_source/static_source.rs                              25       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/key_version.rs                                16       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/env.rs                                        40       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/minting_material.rs                           18       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/signing_key_handle.rs                         15       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/vault.rs                                       3       0  100.00%
crates/acp-nats/src/nats/subjects/stream.rs                                                  56       0  100.00%
crates/trogon-aauth-sdk/src/delegation.rs                                                    15       0  100.00%
crates/trogon-aauth-sdk/src/capabilities.rs                                                   7       0  100.00%
crates/trogon-aauth-sdk/src/lib.rs                                                            3       0  100.00%
crates/trogon-aauth-sdk/src/signer.rs                                                        91       0  100.00%
crates/trogon-aauth-sdk/src/subagent.rs                                                      34       0  100.00%
crates/trogon-aauth-sdk/src/verify_response.rs                                               70       0  100.00%
crates/a2a-gateway/src/policy/tier1_declarative/evaluator.rs                                158      13  91.77%   24-26, 147, 196-198, 268-272, 295
crates/a2a-gateway/src/policy/tier1_declarative/bundle.rs                                    57       0  100.00%
crates/a2a-gateway/src/policy/tier1_declarative/loader.rs                                    85       9  89.41%   95-97, 99-101, 126-128
crates/a2a-gateway/src/policy/tier1_declarative/time_predicate.rs                           118       2  98.31%   103, 125
crates/a2a-nats/src/agent_id.rs                                                              21       0  100.00%
crates/a2a-nats/src/wire.rs                                                                  59       2  96.61%   85, 98
crates/a2a-nats/src/context_id.rs                                                            22       0  100.00%
crates/a2a-nats/src/req_id.rs                                                                21       0  100.00%
crates/a2a-nats/src/jsonrpc.rs                                                               27       0  100.00%
crates/a2a-nats/src/task_id.rs                                                               22       0  100.00%
crates/a2a-nats/src/gateway_ingress.rs                                                      153      21  86.27%   165-168, 172, 186, 194-200, 233, 248-254
crates/a2a-nats/src/a2a_prefix.rs                                                            16       0  100.00%
crates/a2a-nats/src/config.rs                                                               114       0  100.00%
crates/a2a-redaction/src/bin/sign-bundle.rs                                                   1       1  0.00%    163
crates/trogon-jwks-publisher/src/provider.rs                                                118       0  100.00%
crates/trogon-jwks-publisher/src/publisher.rs                                                92       0  100.00%
crates/trogon-decider-runtime/src/stream/stream_position.rs                                  26       0  100.00%
crates/trogon-decider-runtime/src/stream/read_stream.rs                                       7       0  100.00%
crates/trogon-decider-runtime/src/stream/append_stream.rs                                     5       0  100.00%
crates/mcp-nats/src/nats/subjects/client/create_message.rs                                   12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/ping.rs                                              9       0  100.00%
crates/mcp-nats/src/nats/subjects/client/list_roots.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/initialized.rs                                      12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/progress.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/roots_list_changed.rs                               12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/cancelled.rs                                        12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/create_elicitation.rs                               12       0  100.00%
crates/trogon-scheduler/src/commands/domain/schedule_occurrence_sequence.rs                  16       0  100.00%
crates/trogon-scheduler/src/commands/domain/recurrence.rs                                    78       1  98.72%   99
TOTAL                                                                                     36757    1583  95.69%

Diff against main

Filename      Stmts    Miss  Cover
----------  -------  ------  --------
TOTAL             0       0  +100.00%

Results for commit: 09235ee

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

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