generated from coulomb/repo-seed
feat(P7): IHF Phase 7 complete — advanced observability and operational integration
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
T01 schema: friction_scores, bottleneck_records, hub_health_snapshots, cross_hub_propagations + migration 1743552000. T02 Widget Pain Heatmap: computeFrictionScore (formula documented), RecomputeFriction action, colour-coded grid view (green/yellow/amber/red). T03 Workflow Bottleneck Analysis: detectBottlenecks across 4 pipeline stages (candidate 30d, requirement 60d, decision 30d, observation 14d), idempotent, severity from age ratio, resolve action. T04 Hub Health Correlation: computeHubHealth (deduction table documented), append-only HubHealthSnapshot, health history view, badge on hub Show page. T05 Cross-Hub Propagation: annotation_cluster + widget_type_friction heuristics, idempotent detection, acknowledge/resolve lifecycle. T06 Operational Review Board: 4-panel AutoRefresh global dashboard — health matrix, top-10 friction, bottleneck stage counts, open propagations. T07 gate: 5 describe blocks in Test/Integration.hs; SCOPE.md updated Phase 7 complete; docs/phase7-summary.md written. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -379,3 +379,71 @@ CREATE INDEX widgets_adapter_spec_id_idx ON widgets (adapter_spec_id);
|
||||
-- Per-hub API key for bearer-token auth on the interaction reporting endpoint.
|
||||
ALTER TABLE hubs
|
||||
ADD COLUMN api_key TEXT;
|
||||
|
||||
-- Phase 7: Advanced Observability and Operational Integration
|
||||
|
||||
-- Aggregated pain score per widget, recomputed on demand or scheduled.
|
||||
CREATE TABLE friction_scores (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||||
widget_id UUID NOT NULL REFERENCES widgets(id),
|
||||
score INTEGER NOT NULL DEFAULT 0,
|
||||
annotation_count INTEGER NOT NULL DEFAULT 0,
|
||||
error_event_count INTEGER NOT NULL DEFAULT 0,
|
||||
regression_flag BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
stale_candidate_count INTEGER NOT NULL DEFAULT 0,
|
||||
last_computed_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
|
||||
UNIQUE (widget_id)
|
||||
);
|
||||
|
||||
CREATE INDEX friction_scores_widget_id_idx ON friction_scores (widget_id);
|
||||
CREATE INDEX friction_scores_score_idx ON friction_scores (score DESC);
|
||||
|
||||
-- Detected stalls at specific pipeline stages.
|
||||
CREATE TABLE bottleneck_records (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||||
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||||
stage TEXT NOT NULL,
|
||||
subject_type TEXT NOT NULL,
|
||||
subject_id UUID NOT NULL,
|
||||
stalled_since TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
severity TEXT NOT NULL DEFAULT 'medium',
|
||||
resolved_at TIMESTAMP WITH TIME ZONE,
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX bottleneck_records_hub_id_idx ON bottleneck_records (hub_id);
|
||||
CREATE INDEX bottleneck_records_stage_idx ON bottleneck_records (stage);
|
||||
CREATE INDEX bottleneck_records_resolved_idx ON bottleneck_records (resolved_at)
|
||||
WHERE resolved_at IS NULL;
|
||||
|
||||
-- Periodic health snapshots for trend tracking.
|
||||
CREATE TABLE hub_health_snapshots (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||||
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||||
health_score INTEGER NOT NULL,
|
||||
open_candidates INTEGER NOT NULL DEFAULT 0,
|
||||
regressed_widgets INTEGER NOT NULL DEFAULT 0,
|
||||
stale_decisions INTEGER NOT NULL DEFAULT 0,
|
||||
active_bottlenecks INTEGER NOT NULL DEFAULT 0,
|
||||
computed_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX hub_health_snapshots_hub_id_idx ON hub_health_snapshots (hub_id);
|
||||
CREATE INDEX hub_health_snapshots_computed_at_idx
|
||||
ON hub_health_snapshots (hub_id, computed_at DESC);
|
||||
|
||||
-- Patterns detected across multiple hubs.
|
||||
CREATE TABLE cross_hub_propagations (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||||
pattern_type TEXT NOT NULL,
|
||||
source_hub_id UUID REFERENCES hubs(id),
|
||||
affected_hub_ids JSONB NOT NULL DEFAULT '[]',
|
||||
summary TEXT NOT NULL,
|
||||
detected_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'open',
|
||||
notes TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX cross_hub_propagations_status_idx ON cross_hub_propagations (status);
|
||||
CREATE INDEX cross_hub_propagations_pattern_idx ON cross_hub_propagations (pattern_type);
|
||||
|
||||
Reference in New Issue
Block a user