Skip to content

fix: resolve pre-release browser-QA issues#14

Merged
vladenisov merged 18 commits into
mainfrom
fix/prerelease-review-2026-06-26
Jun 27, 2026
Merged

fix: resolve pre-release browser-QA issues#14
vladenisov merged 18 commits into
mainfrom
fix/prerelease-review-2026-06-26

Conversation

@vladenisov

Copy link
Copy Markdown
Owner

Addresses the review bundle in ~/tripl-prerelease-review (29 issues).

BLOCKER

  • B1: event-detail crash. Backend emitters (activity feed, search index, alert payloads) now produce the canonical /p//monitoring/event/ instead of the crashing /events/detail/; App.tsx redirects the legacy URL and MonitoringDetailPage defaults the scope to "event" defensively; the error boundary no longer renders raw internal error strings.

HIGH

  • H1: counters reconciled. Sidebar "Monitors" badge no longer shows the signal count; Overview headline and notifications "N active" bind to the same active-signals selector as their panels; failed deliveries get their own badge.
  • H2: single plan-coverage formatter (lib/coverage.ts) — dashboard and Live activity now render 320/323 identically as "99.1%" (no round-up to 100%).
  • H3: scan failures sanitised. Backend stores a friendly message + logs the raw exception; frontend lib/scanError.ts maps any raw text to a safe message and keeps internals behind an owner-only expander. No host/port/ORM leaks.
  • H4: dead "Implementation"/"Watch" CTAs disabled with "Coming soon".
  • H5: "(preview only)" accent + Defaults controls now visibly disabled.
  • H6: scan run status shows a text+icon pill (Failed/Succeeded/Running) + retry.
  • H7: events / event-detail / event-types tables expose grid semantics.
  • H8: non-functional monitor row made visibly non-interactive.

MEDIUM/LOW

  • M1 stale source-health labelling, M2 immutable event-type select, M3 subject template placeholder, M4 breadcrumbs + type-scoped heading, M5 palette vocabulary, M6 Variables/Relations in sidebar, M7 "open merge"->"ungated", M8 chart text alternatives, M9 stat label/value association, M10 stat units, L1 pluralization, L2 zero-vs-not-wired, L3 empty-metric hints, L4 colon names, L5 columns badge, L6 settings nav a11y label, L7 "Dev" sublabel, L8 placeholder.
  • L10 (moment.js warning): not our code — moment is absent from the bundle.

Quality gates: tsc, eslint (zero-warnings), vitest 273/273, pytest 552/552.

…s/lows)

Addresses the review bundle in ~/tripl-prerelease-review (29 issues).

BLOCKER
- B1: event-detail crash. Backend emitters (activity feed, search index,
  alert payloads) now produce the canonical /p/<slug>/monitoring/event/<id>
  instead of the crashing /events/detail/<id>; App.tsx redirects the legacy
  URL and MonitoringDetailPage defaults the scope to "event" defensively; the
  error boundary no longer renders raw internal error strings.

HIGH
- H1: counters reconciled. Sidebar "Monitors" badge no longer shows the signal
  count; Overview headline and notifications "N active" bind to the same
  active-signals selector as their panels; failed deliveries get their own badge.
- H2: single plan-coverage formatter (lib/coverage.ts) — dashboard and Live
  activity now render 320/323 identically as "99.1%" (no round-up to 100%).
- H3: scan failures sanitised. Backend stores a friendly message + logs the raw
  exception; frontend lib/scanError.ts maps any raw text to a safe message and
  keeps internals behind an owner-only expander. No host/port/ORM leaks.
- H4: dead "Implementation"/"Watch" CTAs disabled with "Coming soon".
- H5: "(preview only)" accent + Defaults controls now visibly disabled.
- H6: scan run status shows a text+icon pill (Failed/Succeeded/Running) + retry.
- H7: events / event-detail / event-types tables expose grid semantics.
- H8: non-functional monitor row made visibly non-interactive.

MEDIUM/LOW
- M1 stale source-health labelling, M2 immutable event-type select, M3 subject
  template placeholder, M4 breadcrumbs + type-scoped heading, M5 palette
  vocabulary, M6 Variables/Relations in sidebar, M7 "open merge"->"ungated",
  M8 chart text alternatives, M9 stat label/value association, M10 stat units,
  L1 pluralization, L2 zero-vs-not-wired, L3 empty-metric hints, L4 colon names,
  L5 columns badge, L6 settings nav a11y label, L7 "Dev" sublabel, L8 placeholder.
- L10 (moment.js warning): not our code — moment is absent from the bundle.

Quality gates: tsc, eslint (zero-warnings), vitest 273/273, pytest 552/552.
Removes the last windy reference in shipped code (the project-slug prefix
shown in project settings). The windy-ios / ch.windyapp.co / *@windyapp.co
strings from the review are live DB records, not code.
From the v2 UX/design review (~/tripl-prerelease-review/v2). Bounded craft
items across 8 surfaces; the M/L "reshape a core surface" bets are deferred.

- H1 residual: dashboard no longer labels the recent-signal count "active"
  (only Live activity/Monitors speak of active/open signals).
- UX-2/3: empty & zero cells muted (var(--fg-faint)); bare "—" carries a
  "no data" tooltip and is told apart from a real 0 (events table, event detail).
- UX-5: event-detail "Coming soon" actions (Watch/Implementation) moved out of
  the primary bar into a "…" overflow menu; Edit promoted to primary.
- UX-6: events drag handle now reveals on row hover/focus instead of always-on.
- UX-7: reconciliation "never" dead events calmed from red to amber + an
  explanation line; bulk-archive affordance stub.
- UX-8: scan list leads with a human "name · source · cadence" summary; raw SQL
  demoted to a faint secondary line + tooltip.
- UX-9: glitchy empty-segment event names ("spot::services", "0:forecast:0")
  render an explicit muted placeholder instead of "::" or a bare "0".
- UX-17: failed/stale data sources get inline Re-test / Edit recovery actions.
- UX-18: dashboard Latest-scan panel shows the real last result (status + rows).
- UX-19/20: empty alerting channels pocketed into one "Add another channel" row;
  added a signal→destination routing framing line.
- UX-21: ${…} template tokens in property values tinted as variables.
- UX-22: auth card title/subtitle reflect the active Sign in / Create Account tab.
- UX-23: project card leads with a single attention color; supporting chips calmed.

Gates: tsc, eslint (zero-warnings), vitest 294/294.
Closes the open backend follow-ups and the deferred feature bets.

- firing_monitor_count: new ProjectSummary field (= MonitorsSummary.firing_count);
  sidebar "Monitors" badge now shows firing monitors in danger tone (H1 PRIMARY,
  tripl-tksk).
- Error sanitization: shared worker/tasks/_errors.py; metrics-replay and
  data-source test_connection now persist friendly messages, raw to logs
  (tripl-xnu2; sync test-connection API path noted as remaining).
- Alert-delivery retry: POST /alert-deliveries/{id}/retry + retry buttons on the
  delivery rows and notifications (tripl-yhia).
- Monitor drill-in (UX-12 / H8 / tripl-ox4b): new MonitorDetailPage (condition,
  fired-history timeline, routing, recency, mute/unmute via new muted_until
  column + endpoints); monitor rows now navigate (keyboard-accessible).
- Reconciliation dead-events archive (UX-16 backend + bulk UI) + constant-match
  layout; api/reconciliation.archiveDeadEvents.
- Regenerated backend/openapi.json + frontend api.gen.ts for the new surface.

Gates: backend pytest 565 (incl. OpenAPI contract), tsc, eslint, vitest 311/311.
…mns (UX-14)

- UX-10: merged the dashboard's three stacked stat tiers into one row (no metric
  shown twice); state metrics vs action-needed cards visually separated via an
  AttentionStat; create-actions moved into the header.
- UX-14: lean default Events column set for fresh users (long tail one click away
  in the Columns editor; persisted prefs respected); toolbar grouped into
  primary/secondary/utility tiers; "Ask AI" surfaced as a differentiator.

Gates: tsc, eslint, vitest 315/315.
…ing (UX-15)

- UX-11/25: when exactly one project exists, "/" redirects straight into it
  (/p/<slug>/overview); 0 or 2+ projects show the workspace dashboard. The
  portfolio view stays reachable at a new /workspace route (non-destructive).
- UX-15: instead of a risky merge, the two settings surfaces are now explicitly
  signposted ("Project operations" vs "Workspace & account configuration") with
  cross-links both ways and consistent group labels + descriptors.

Gates: tsc, eslint, vitest 321/321.
New lib/statusLexicon.ts is the single source for {label, tone} per status
family (event lifecycle, monitor, scan-run, signal, review, data-source health,
alert delivery, coverage) with a documented colour-meaning key. Surfaces now
resolve status colour/word through it.

Concrete inconsistencies fixed:
- DataSourcesPage: failed source amber → red (matches Overview + its own banner);
  "unverified" → "untested".
- ReconciliationPage: good (≥90%) coverage heatmap brand-blue → green (a calm
  "done" metric no longer competes with real alerts in brand colour).
- Monitor STATUS_TONE/LABEL de-duplicated across MonitorsPage / MonitorDetailPage
  / RoutingRulesPanel; delivery + scan-run + event-row signal tones routed
  through the lexicon.

No new hex/CSS vars; existing var(--*) tokens only. Cohesive visual language
preserved (direction cues + timing windows left as-is).

Gates: tsc, eslint, vitest 336/336.
… (UX-26)

- UX-24: new onboarding-checklist on the project Overview — the 5 core-loop
  steps (define plan → connect source → run scan → review reconciliation → set up
  alerting) with auto-derived completion from project state, deep links, a
  "N of 5" progress chip; dismissible (localStorage) and self-hides when complete.
- UX-26: new ConceptsPage at /p/:slug/concepts — a Plan→Observe→Govern concept
  map + grouped glossary of the core terms (taught, not renamed), each linking to
  its home; reachable from a new sidebar "Concepts" entry.

Gates: tsc, eslint, vitest 346/346.
…ipl-xnu2)

The synchronous test-connection probe (datasource_service._run_adapter_test)
returned raw str(exc) into DataSourceTestResponse.message and
DataSource.last_test_message, leaking host/port/driver/credential internals.
Now it logs the full exception and returns a friendly, category-based message
(timeout / unreachable / auth / generic). Closes the last sanitization gap.

Test: TestConnectionErrorSanitization asserts no host/port/errno/username leaks.
Additive responsive utilities at sm/md breakpoints; desktop (lg+) unchanged.
- MonitorsPage: fixed-grid table wrapped in overflow-x-auto + min-w floor so it
  scrolls horizontally on narrow screens (inert at lg).
- MonitoringDetailPage: fields table overflow-x-auto; page padding p-4 sm:p-6.
Most surfaces were already responsive (verified). First pass — needs device QA.
…nput

CI's jsdom build omits localStorage, so onboarding-checklist.test's
localStorage.clear() threw and aborted Testing Library's cleanup, leaking
renders into later tests (red pipeline). test-setup.ts now installs an
in-memory Storage unconditionally so every test file behaves identically.
Also removed the unsupported python-version-file input from setup-uv (warning).
…uff E501)

Hoist the hint tuples to module constants and wrap the long message so the
file passes ruff's 100-col limit (the CI ruff gate).
checkout v4->v7, setup-node v4->v6, pnpm/action-setup v4->v6, setup-uv v3->v8
— all current majors run on Node 24, clearing the deprecation warnings.
pnpm/action-setup now reads the version from frontend/package.json
"packageManager" (pnpm@11.6.0) instead of a conflicting version: input.
astral-sh/setup-uv publishes full-version tags for v7/v8 (no floating major),
so @v8 failed to resolve. Pin the latest full version; still on Node 24.
…ipl-7zz2)

P0 regression: the all-projects/workspace portfolio (which holds New /
Generate-demo project) was unreachable — the sidebar logos and "View all
projects" pointed at "/", which HomeRoute bounces into the sole project.

- Repoint both sidebar logos + "View all projects" to /workspace
- Add /projects -> /workspace redirect and a catch-all *->NotFoundPage
  (unknown routes rendered a blank black page)
- SettingsArea back fallback "/" -> /workspace

UX polish:
- UX-9: shared <EventName> renders empty name segments as a muted marker
  in both Events list and Reconciliation (kills literal "0:forecast_for_4:0")
- UX-21: tint ${...} template tokens in the expanded JSON field value
- UX-14: "Dynamics" chart defaults open; leaner default Events columns
- UX-4: coached empty states on event detail ("No metrics data available",
  "No recent changes") instead of bare dashes
- UX-16: empty reconciliation inbox sizes to content, no half-screen dead space
- Auth: align CTA + accents from blue (sky) to product teal

Gates: tsc clean, eslint 0 warnings, vitest 349/349.
@ecc-tools

ecc-tools Bot commented Jun 27, 2026

Copy link
Copy Markdown

Analyzing 200 commits...

@ecc-tools

ecc-tools Bot commented Jun 27, 2026

Copy link
Copy Markdown

Analysis Complete

Generated ECC bundle from 16 commits | Confidence: 75%

View Pull Request #15

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory mixed
Changed Files (123)
Metric Value
Files changed 123
Additions 8486
Deletions 931

Top hotspots

Path Status +/-
backend/openapi.json modified +549 / -0
frontend/src/pages/ProjectsPage.tsx modified +265 / -233
frontend/src/pages/MonitorDetailPage.tsx added +482 / -0
frontend/src/types/api.gen.ts modified +368 / -0
frontend/src/pages/ConceptsPage.tsx added +290 / -0

Top directories

Directory Files Total changes
frontend/src/pages 25 3577
frontend/src/components 13 854
frontend/src/lib 10 760
frontend/src/pages/events 15 728
backend/src/tripl/tests 8 630
Analysis Depth Readiness (evidence-backed, 71%)

ECC Tools uses this to decide whether recommendations should stay at commit-history/setup guidance or expand into CI, security, harness, reference-set, AI-routing, and team backlog work.

Area Status Evidence / Next Step
Commit history Ready 16 commits sampled
CI/CD signals Ready .github/workflows/ci.yml
Security evidence Missing Add AgentShield, audit, SARIF, SBOM, or security review evidence so recommendations can cover security posture.
Harness configuration Ready .claude/settings.json
Reference/eval evidence Ready frontend/src/lib/coverage.test.ts
AI routing and cost controls Ready CLAUDE.md
Team handoff and project tracking Missing Add roadmap, runbook, project, Linear, or follow-up tracking docs so generated work can land in a team queue.
Reference Set Readiness (2/7, 29%)
Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Present frontend/src/lib/coverage.test.ts
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Present .claude/settings.json
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.
Likely Future Issues (10)
Severity Signal Why it may show up
HIGH API contract changes may ship without integration coverage 4 API surface paths changed; 0 integration or e2e tests changed
HIGH Schema or model changes may ship without migration follow-up 1 schema/model paths changed; 0 migration files changed
MEDIUM Runtime config changes may ship without example or template updates 1 runtime config paths changed; 0 example or template config files changed
HIGH Async job or webhook changes may ship without reliability coverage 4 async surface paths changed; 0 async-focused integration or e2e tests changed
MEDIUM User-facing UI changes may ship without browser coverage 91 user-facing UI paths changed; 0 browser or e2e coverage files changed
MEDIUM Cost or token-risk changes may ship without budget evidence 1 cost/token-risk paths changed; 0 budget, usage, or cost validation artifacts changed
MEDIUM AI or harness analysis changes may ship without reference-set validation 1 reference-sensitive path(s) changed; 0 eval, golden trace, benchmark, or reference-set artifacts changed
MEDIUM CI workflow changes may ship without failure-mode evidence 1 CI/test-runner paths changed; 0 CI failure-mode evidence artifacts changed
MEDIUM Harness config changes may ship without compatibility evidence 1 harness config paths changed; 0 harness compatibility evidence artifacts changed
MEDIUM Dependency or CI drift could surface after merge CI/workflow files changed; no lockfile changes detected
  • API contract changes may ship without integration coverage: The PR changes API or route-facing files but does not touch any obvious integration or end-to-end tests.
  • Schema or model changes may ship without migration follow-up: The PR changes schema or model-facing files but does not include any obvious migration artifact.
  • Runtime config changes may ship without example or template updates: The PR changes runtime config or deployment settings but does not update any obvious example env file or config template.
  • Async job or webhook changes may ship without reliability coverage: The PR changes queue, worker, cron, or webhook-sensitive files without touching any obvious async-focused integration or end-to-end tests.
  • User-facing UI changes may ship without browser coverage: The PR changes components, pages, or other user-facing UI files without touching any obvious browser or end-to-end coverage.
  • Cost or token-risk changes may ship without budget evidence: The PR changes AI routing, usage, token budget, or model-call surfaces without touching obvious budget, usage-limit, or cost regression evidence.
  • AI or harness analysis changes may ship without reference-set validation: The PR changes analyzer, skill, agent, command, or harness guidance without updating any obvious eval, golden trace, benchmark, or reference-set artifact.
  • CI workflow changes may ship without failure-mode evidence: The PR changes CI workflows or test-runner entrypoints without touching CI failure fixtures, captured logs, troubleshooting notes, or regression evidence.
  • Harness config changes may ship without compatibility evidence: The PR changes harness, MCP, plugin, or agent configuration without touching harness audit, adapter matrix, cross-harness docs, or compatibility regression evidence.
  • Dependency or CI drift could surface after merge: Package or workflow changes landed without an accompanying lockfile update, which often turns into CI or release noise later.
Suggested Follow-up Work (10)
Type Suggested title Targets
PR test: add integration coverage for backend/src/tripl/api/v1/alerting.py + backend/src/tripl/api/v1/reconciliation.py backend/src/tripl/api/v1/alerting.py, backend/src/tripl/api/v1/reconciliation.py
PR db: add migration follow-up for backend/src/tripl/models/alert_rule.py backend/src/tripl/models/alert_rule.py
PR chore: sync config templates for .claude/settings.json .claude/settings.json
PR test: add async coverage for backend/src/tripl/worker/tasks/_errors.py + backend/src/tripl/worker/tasks/metrics/tasks.py backend/src/tripl/worker/tasks/_errors.py, backend/src/tripl/worker/tasks/metrics/tasks.py
PR test: add browser coverage for frontend/src/App.test.tsx + frontend/src/App.tsx frontend/src/App.test.tsx, frontend/src/App.tsx
PR test: add budget evidence for CLAUDE.md CLAUDE.md
PR analysis: add reference-set evidence for .claude/settings.json .claude/settings.json
PR ci: add failure-mode evidence for .github/workflows/ci.yml .github/workflows/ci.yml
PR harness: add config quality evidence for .claude/settings.json .claude/settings.json
PR chore: refresh lockfile and validate CI after dependency updates .github/workflows/ci.yml
  • test: add integration coverage for backend/src/tripl/api/v1/alerting.py + backend/src/tripl/api/v1/reconciliation.py: Backfill integration or end-to-end coverage for the changed API surface before more contract changes land.
  • db: add migration follow-up for backend/src/tripl/models/alert_rule.py: Backfill the missing migration artifact before another schema or model change lands on top.
  • chore: sync config templates for .claude/settings.json: Backfill example env files or config templates before a fresh setup drifts from the shipped runtime surface.
  • test: add async coverage for backend/src/tripl/worker/tasks/_errors.py + backend/src/tripl/worker/tasks/metrics/tasks.py: Backfill async reliability coverage before another queue, worker, or webhook change lands on the touched surface.
  • test: add browser coverage for frontend/src/App.test.tsx + frontend/src/App.tsx: Backfill browser coverage before another user-facing UI change lands on the touched surface.
  • test: add budget evidence for CLAUDE.md: Backfill cost, token, or usage-limit validation before another model-routing change lands on the touched surface.
  • analysis: add reference-set evidence for .claude/settings.json: Backfill eval, golden trace, benchmark, or reference-set evidence before another AI or harness-analysis change lands on the touched surface.
  • ci: add failure-mode evidence for .github/workflows/ci.yml: Backfill CI failure-mode evidence before another workflow or test-runner change lands on the touched surface.
  • harness: add config quality evidence for .claude/settings.json: Backfill harness audit, adapter matrix, or cross-harness compatibility evidence before another config change lands on the touched surface.
  • chore: refresh lockfile and validate CI after dependency updates: Package or workflow changes without a lockfile refresh tend to turn into noisy follow-up fixes after merge.

Copy-ready bodies

test: add integration coverage for backend/src/tripl/api/v1/alerting.py + backend/src/tripl/api/v1/reconciliation.py

## Summary
- Add integration or end-to-end coverage for the recently changed API surface.

## Why
- Backfill integration or end-to-end coverage for the changed API surface before more contract changes land.

## Touched paths
- `backend/src/tripl/api/v1/alerting.py`
- `backend/src/tripl/api/v1/reconciliation.py`

## Validation
- Add or extend integration / e2e coverage for the changed API, route, or contract surface.
- Exercise the touched endpoints or route handlers against realistic request / response flows.

db: add migration follow-up for backend/src/tripl/models/alert_rule.py

## Summary
- Add the missing migration or schema rollout step for the recently changed schema surface.

## Why
- Backfill the missing migration artifact before another schema or model change lands on top.

## Touched paths
- `backend/src/tripl/models/alert_rule.py`

## Validation
- Create the migration or schema rollout artifact used by this repo.
- Run the repo migration / schema validation flow and verify the changed models still match production expectations.

chore: sync config templates for .claude/settings.json

## Summary
- Update the example env files, sample configs, or deployment templates that should mirror the changed runtime configuration surface.

## Why
- Backfill example env files or config templates before a fresh setup drifts from the shipped runtime surface.

## Touched paths
- `.claude/settings.json`

## Validation
- Update the repo example env file or config template that should reflect the new runtime settings.
- Run the setup, boot, or deployment validation flow that depends on the changed config surface.

test: add async coverage for backend/src/tripl/worker/tasks/_errors.py + backend/src/tripl/worker/tasks/metrics/tasks.py

## Summary
- Add async reliability coverage for the recently changed queue, worker, cron, or webhook surface.

## Why
- Backfill async reliability coverage before another queue, worker, or webhook change lands on the touched surface.

## Touched paths
- `backend/src/tripl/worker/tasks/_errors.py`
- `backend/src/tripl/worker/tasks/metrics/tasks.py`

## Validation
- Add or extend integration / e2e coverage for the changed queue, worker, cron, or webhook behavior.
- Exercise retries, idempotency, failure handling, or equivalent async boundary cases.

test: add browser coverage for frontend/src/App.test.tsx + frontend/src/App.tsx

## Summary
- Add browser or end-to-end coverage for the recently changed user-facing surface.

## Why
- Backfill browser coverage before another user-facing UI change lands on the touched surface.

## Touched paths
- `frontend/src/App.test.tsx`
- `frontend/src/App.tsx`

## Validation
- Add or extend browser / e2e coverage for the changed component, page, or flow.
- Exercise the visible user journey that depends on the touched UI surface.

test: add budget evidence for CLAUDE.md

## Summary
- Add budget or usage-limit validation for the recently changed AI routing or model-call surface.

## Why
- Backfill cost, token, or usage-limit validation before another model-routing change lands on the touched surface.

## Touched paths
- `CLAUDE.md`

## Validation
- Add or extend budget, token, usage-limit, or model-routing regression coverage for the changed path.
- Verify the route still enforces plan limits, retry caps, fallback behavior, or explicit cost controls.

analysis: add reference-set evidence for .claude/settings.json

## Summary
- Add reference-set or eval evidence for the recently changed AI, analyzer, skill, agent, command, or harness guidance surface.

## Why
- Backfill eval, golden trace, benchmark, or reference-set evidence before another AI or harness-analysis change lands on the touched surface.

## Touched paths
- `.claude/settings.json`

## Validation
- Add or update an eval, golden trace, benchmark, fixture, or reference-set artifact for the changed AI/harness behavior.
- Compare the changed behavior against the maintained reference set and record the pass/fail evidence.
- Confirm the follow-up evidence covers the same analyzer, skill, agent, command, or harness surface touched by this PR.

ci: add failure-mode evidence for .github/workflows/ci.yml

## Summary
- Add CI failure-mode evidence for the recently changed workflow or test-runner surface.

## Why
- Backfill CI failure-mode evidence before another workflow or test-runner change lands on the touched surface.

## Touched paths
- `.github/workflows/ci.yml`

## Validation
- Add or update a CI failure fixture, captured failing log, troubleshooting note, workflow dry-run evidence, or regression test for the changed CI/test-runner behavior.
- Run the affected workflow or test-runner entrypoint locally or in CI and record pass/fail evidence.

harness: add config quality evidence for .claude/settings.json

## Summary
- Add harness compatibility evidence for the recently changed config surface.

## Why
- Backfill harness audit, adapter matrix, or cross-harness compatibility evidence before another config change lands on the touched surface.

## Touched paths
- `.claude/settings.json`

## Validation
- Run or update the harness audit, adapter compliance matrix, or cross-harness compatibility check for the changed config.
- Add or update a regression, fixture, or doc evidence path that covers the affected harness, MCP, plugin, or agent loading behavior.

chore: refresh lockfile and validate CI after dependency updates

## Summary
- Refresh the lockfile and rerun CI after the dependency or workflow changes in this PR.

## Why
- Package or workflow changes without a lockfile refresh tend to turn into noisy follow-up fixes after merge.

## Touched paths
- `.github/workflows/ci.yml`

## Validation
- Refresh the lockfile in the same package manager used by the repo.
- Run the repo typecheck / test / CI entrypoints that depend on the updated package graph.
Detected Workflows (5)
Workflow Description
feature-development Standard feature implementation workflow
feature-development-frontend-implementation-test-polish Implements or enhances a frontend feature, updates related files, and adds/updates corresponding tests. Often includes UX polish or design review items.
backend-api-schema-migration-feature Adds or changes backend features involving new API endpoints, schema/model changes, and database migrations, with corresponding test updates.
bugfix-cross-surface-regression-and-qa Fixes regressions or QA issues, often spanning both frontend and backend, with targeted changes and test updates.
ci-pipeline-update-or-fix Updates or fixes CI pipeline configuration, often to address deprecations, environment issues, or test setup problems.
Generated Instincts (32)
Domain Count
git 4
code-style 9
architecture 2
testing 8
workflow 9

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/tripl-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/tripl/SKILL.md
  • .agents/skills/tripl/SKILL.md
  • .agents/skills/tripl/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/tripl-instincts.yaml
  • .claude/commands/feature-development.md
  • .claude/commands/feature-development-frontend-implementation-test-polish.md
  • .claude/commands/backend-api-schema-migration-feature.md

ECC Tools | Everything Claude Code

Live-app walkthrough findings — consistency, copy, empty-states:

- #2 Reconciliation: rename "data-match coverage" → "seen in data" so
  it no longer collides with the Overview/Portfolio plan "Coverage"
- #3 Overview: H1 "Overview" → "Live activity" to match nav + breadcrumb
- #4 Alerting: zero-state shows channel buttons inline under the empty
  state; "Add another channel" → "Add a channel" when no channels exist
- #5 Dynamics chart: compact one-line empty state instead of a tall
  empty block when there's no recent data (chart now defaults open)
- #6 Event types: clarify "gated"/"ungated" via consistent hover tooltips
- #9 Hide all-empty columns: Sensitive/Owner on the event-types table and
  Sensitivity on the event-detail Fields table
- #10 Reconciliation: align dead-events window to 14d (was 30d)
- #12 Overview: clearer "Active trend · 14d" sparkline + a11y label
- #13 Onboarding checklist collapses to a slim bar once mostly done

#1 (stale demo data / contradictory 24h labels) was a data-freshness
artifact — the generator is rolling/correct; resolved by re-seeding the
demo project. #8 (pluralization) was already implemented.

Verified live in-browser against a freshly re-seeded demo.
Gates: tsc clean, eslint 0 warnings, vitest 351/351.
…ne (tripl-re3c)

- #11a Monitors: centered guidance empty state (icon + copy + "Alerting
  settings" CTA) filling the void; muted all-zero stat tiles
- #11b Alerting: pull the "No alert destinations" empty state up under its
  heading (py-16 → py-8) so heading + message + channel buttons read as one
- #11c Reconciliation: give empty Shadow/Dead panels min-height with centered
  content so the page isn't top-heavy
- #12 Overview: align the "Active trend · 14d" sparkline cell with the stat
  columns + right padding so it no longer bleeds into the card edge

Layout/CSS only. Verified live in-browser on the re-seeded demo.
Gates: tsc clean, eslint 0 warnings, vitest passes in isolation (full-suite
failures are pre-existing concurrency flakiness, all touched files green alone).
@vladenisov vladenisov merged commit d1ce90a into main Jun 27, 2026
2 checks passed
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