Signal Rules

v0.3.0

Full-page signal rule review block with a queue, detail panel, and add-rule dialog.

View as Markdown

Preview

Open full page ↗

Install & usage

npx shadcn@latest add @signalos/signal-rules-01

Pulls the page source plus its widget dependencies (@signalos/tokens, @signalos/utils, @signalos/badge, @signalos/button, @signalos/command, @signalos/form-dialog, @signalos/text-field, @signalos/popover, @signalos/select, @signalos/textarea, @signalos/tooltip, @signalos/equilibrium-01, @signalos/split-panel, @signalos/page-header, @signalos/input, @signalos/label, @signalos/dialog) into your app - you own the copy. Requires access.

usage
// after: npx shadcn@latest add @signalos/signal-rules-01
// mount the pulled page in a route, e.g. src/app/semantics-details/page.tsx
import SignalRules from "@/components/blocks/signal-rules-01/SignalRules"

export default function Page() {
  return <SignalRules />
}

Props

SignalRuleCondition

PropTypeDefaultDescription
direction*SignalRuleDirection-
metric_patterns*string[]-

SignalRule

PropTypeDefaultDescription
id*string-
name*string-
description*string-
boost*number-
confidence*number-
time_window_hours*number-
conditions*SignalRuleCondition[]-
review_originstring | null | undefined-

SignalRulesArtifact

PropTypeDefaultDescription
rules*SignalRule[]-

SignalRuleReviewItem

PropTypeDefaultDescription
index*number-
status*"accepted" | "flagged" | "deleted"-
feedback*string-
edits*Partial<Pick<SignalRule, "name" | "description" | "confidence" | "boost" | "time_window_hours"> & { conditions: SignalRuleCondition[]; }>-
connector_idstring | undefined-
item_idstring | undefined-

MetricCatalogEntry

PropTypeDefaultDescription
display_namestring | null | undefined-
descriptionstring | null | undefined-
directionMetricDirection | null | undefined-
unitstring | null | undefined-
connector_idstring | null | undefined-
source_clusterstring | null | undefined-
is_cross_sourceboolean | null | undefined-
source_entitiesstring[] | null | undefined-
sql_logicstring | null | undefined-

SubmitSignalRulesReviewPayload

PropTypeDefaultDescription
action*"confirm" | "retry"-
itemsSignalRuleReviewItem[] | undefined-

SignalRuleItemEdits

PropTypeDefaultDescription
idstring | undefined-
name*string-
description*string-
boost*number-
confidence*number-
time_window_hours*number-
conditions*SignalRuleCondition[]-

AddSignalRulePayload

PropTypeDefaultDescription
action*"add_item" | "improve_new_item"-
feedbackstring | undefined-
item_edits*SignalRuleItemEdits-
connector_idstring | undefined-

AddSignalRuleResponse

PropTypeDefaultDescription
statusstring | undefined-
itemSignalRule | undefined-
soft_warningstring | undefined-

Supporting types

export type SignalRuleDirection = "above" | "below" | "any"
export type MetricDirection = "up_is_good" | "down_is_good" | "neutral"
export type MetricCatalog = Record<string, MetricCatalogEntry>

More Semantics Stages variants

Changelog

0.3.0

  • Decompose SignalRules into EditConditionRow, RuleEditView, RuleReadView, SignalRuleAddDialog, SignalRuleDetail, and SignalRuleQueue subcomponents under components/.
  • Add EditConditionRow with multi-select popover for condition field values; wire getMetricConnectorId and MetricInfoButton from equilibrium-01.

0.2.10

  • Replace raw scale token classes with semantic tokens (text-text-error, bg-bg-success, border-border-warning, etc.) to respect client theme overrides.

0.2.9

  • Fix cross-item imports to use canonical @/components paths; add missing signalos.category to manifests.

0.2.8

  • SignalRules: remove metricPickerOpen and onMetricPickerChange props (metric picker open state is now internal to SignalRuleDetail).
  • SignalRules: remove addMetricPickerOpen and onAddDialogMetricPickerChange props (add-dialog picker state is now internal to SignalRuleAddDialog).
  • SignalRules: add SplitPanelListHeader import; expose onImproveWithAi callback (was previously commented out).
  • SignalRules: rename confirm button data-testid from signal-rules-confirm-button to signal-rules-submit-button.
  • SignalRules: update header description — remove "AI-generated" qualifier.
  • SignalRules: move confirmed banner outside PageHeader with updated border/background tokens; remove CheckCircle2 icon.
  • SignalRules.types.ts: define MetricCatalog and MetricCatalogEntry locally; remove import from metrics-01.
  • Remove @signalos/metrics-01 from registryDependencies.

0.2.7

  • Replace raw Dialog/DialogFooter with FormDialog in SignalRuleAddDialog; custom footer carries error banner + cancel/save buttons.
  • Replace Label + Input for Name and Time Window fields with TextField widget; Description textarea keeps inline label + aria-invalid pattern.
  • Swap @signalos/dialog, @signalos/input, @signalos/label@signalos/form-dialog, @signalos/text-field in registryDependencies.

0.2.5

  • Content updates.

0.2.4

  • Content updates.

0.2.1

0.2.0

  • Replace desktop lg:grid-cols-12 layout with SplitPanel widget for the queue/detail split.
  • Mobile tab-switcher layout unchanged; SplitPanel is shown only on lg: and above.
  • Add @signalos/split-panel to registryDependencies.

0.1.0