Skip to main content

Findings & suggestions

An observation is something Hyrax surfaced for your attention — a SQL injection in a request handler, a missing index, a flaky test, or an architectural idea worth weighing. Observations are the primary unit of work in Hyrax: audits produce them, fixes resolve them, and tickets track them. They come in three kinds, and all share one model.

Three kinds, one model

A finding says "this is wrong, here's where." A suggestion says "this could be better, here's the shape of the change." An advisory says "this is worth doing, but it's bigger than one pull request."

KindWhat it representsThe action
FindingA concrete problem worth fixingFix it
SuggestionAn architectural idea worth consideringConsider it
AdvisoryProcess, CI, or architectural guidance with no single code changeAcknowledge or mark addressed

Findings and suggestions point at code you can change, so each one offers a one-click Fix. An advisory is guidance that doesn't map to a single pull request — a CI gate to add, a dependency policy to adopt, an architectural direction to set — so it has no Fix button; you acknowledge it, mark it addressed once your team has acted, or publish it to a ticket to track the work elsewhere.

All three share the same fields, lifecycle, and HYRAX-N reference space — the kind shows up as a badge and changes the recommended action. You filter, triage, dismiss, and reopen all of them the same way, so a repository's backlog is one ordered list, not three.

Stable references

Every observation gets a sequential, per-workspace reference rendered as HYRAX-NHYRAX-1, HYRAX-2, and so on. This is the identifier you use everywhere: it never changes across re-audits, fix PRs, or status transitions. Quote a ref in a commit message, a Linear ticket, or a chat with your AI coding tool, and anyone on the team can paste it back into Hyrax to pull up the exact observation.

What's in an observation

  • Title — one sentence stating what was found.
  • Description — what's there, why it matters, and the product impact.
  • Locations — one or more references to where it lives: a file path (relative to the repo root), an optional symbol (function, class, or method), and a line range. Paths live in the locations, not the prose, so tooling can jump straight to the right lines.
  • PriorityP0 through P3 (see below).
  • Category — one of six (see below).
  • Kindfinding, suggestion, or advisory.
Hyrax stores metadata, not your code

An observation records its title, description, priority, category, and location references (path + symbol + line range) — not the source code at those lines. Hyrax does not keep your source files long-term. See Security.

Priority

A single axis with four values, P0 being the most urgent:

PriorityMeaningWhen to act
P0Active risk or top-leverage opportunityNow
P1Significant defect or worthwhile changeThis sprint or cycle
P2Real, not urgentWhen convenient
P3Minor — nits, cosmetic, deferredAs cleanup

The interface may show familiar severity labels — "Critical", "High", and so on — but the value is always the P-number.

Categories

Every observation falls into exactly one of six categories, so you can triage one domain at a time.

CategoryCovers
SecurityAuthentication and authorization, injection, secrets, data exposure, supply chain, privacy, compliance gaps
CorrectnessConcurrency, edge cases, resilience, accessibility, internationalization, tests, AI-integration hygiene, resource and credit waste
MaintainabilityStructure and naming, repeated patterns, dead code, deprecated APIs, error-handling experience, stalled migrations
PerformanceHot paths, memory and CPU, slow queries, frontend rendering, bundle size
ArchitectureAPI contracts and layering, versioning, input-validation boundaries, database and schema design, tenant isolation
OperationsObservability, logging, configuration, deployment, dependencies, feature flags, monorepo health, docs drift

Each category maps to a set of focused audit tools — see Audit tools & languages.

Lifecycle

An observation is either new (actionable — freshly detected, or being worked while a fix job runs) or closed (terminal, with a reason of Fixed, Completed, Dismissed, or Expired).

Fixing

Starting a fix does not close the observation. It closes as fixed only when the resulting pull request is merged. Until then it stays open, so your backlog reflects reality — if the fix PR is abandoned or rejected, the observation is still there waiting.

Once Hyrax opens the fix PR, the finding is handed off: the PR is now the deliverable, and merging is your call. It moves out of your active Findings list and shows up on the Completed page under Open pull requests, so the active list stays a clean picture of what still needs a fix started. The finding hasn't closed — if you close the PR without merging, it returns to the active Findings list automatically; if you merge, it closes as fixed.

Advisories have no Fix — they describe work that doesn't live in a single pull request. Once your team has acted on one, mark it addressed instead (see below).

Acknowledging

Acknowledge signals "we've seen this and registered it" without closing it. The observation stays new and keeps showing in your backlog — it just carries an acknowledged marker so the team knows it isn't unseen. Acknowledging is available on every kind and is most useful for advisories you intend to act on later.

Marking addressed

When you resolve something outside a Hyrax pull request — you fixed it by hand, adopted the recommended CI gate, or decided the guidance is now satisfied — mark it addressed. It closes with the reason completed, and you can optionally attach a link (to the commit or PR that did it) and a short note. This is available on every kind, and it's distinct from dismissing: marking addressed means "done", dismissing means "not doing this".

Publishing to a ticket

Publish to ticket creates a tracking ticket in your connected integration (Linear) for any kind of observation. This needs a ticket integration configured for the repository; without one, the action is unavailable.

Dismissing

You can dismiss an observation you don't intend to act on, with a category that tells Hyrax how to treat it on the next audit:

Dismiss categoryBehavior on re-discovery
False positive, Won't fix, Out of scopeStays closed — your decision sticks even if the audit re-detects the same thing
Stale, No longer found, OtherCan reappear — if the underlying issue is genuinely found again, a fresh incarnation surfaces

Reopening

A closed observation can be reopened at any time — for example, if a fix turns out incomplete, an addressed issue regresses, or a dismissed one becomes relevant again. It returns to new, and any acknowledged or addressed markers are cleared. An observation you marked addressed will also resurface as a fresh incarnation if a later audit detects the same thing again.

Deduplication and re-discovery

Re-running an audit does not start your backlog over. Hyrax merges new results into your existing observations rather than replacing them — so the triage work you've already done (dismissals, priorities, ticket links) is respected, and you never see the same issue twice.

Triaging effectively

The axes that describe an observation make a backlog quick to work through:

  • Filter Kind to Findings to see concrete problems before architectural suggestions.
  • Filter Priority to P1 and above to answer "what should I work on now," then drop to P2/P3.
  • Filter by Category to triage one domain at a time.