Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
060d8d9
chore: enforce LF line endings via .gitattributes, ignore .idea and .…
123FLO321 Jul 13, 2026
fca7624
test: add Vitest server project with tool.ts timestamp tests
123FLO321 Jul 13, 2026
180c963
test: cover tool.ts uptime math (ParseUptime, formulas, UptimeCalcula…
123FLO321 Jul 13, 2026
048518f
test: cover tool.ts validation and string helpers
123FLO321 Jul 13, 2026
e800867
test: add Vitest browser-mode client project with CopyButton test
123FLO321 Jul 13, 2026
2dc46ab
test: add StatusBarCalendar browser-mode component test
123FLO321 Jul 13, 2026
ae1586c
test: pin test timezone to UTC, document test commands
123FLO321 Jul 13, 2026
a7b5c2c
ci: add test workflow with Playwright browser caching
123FLO321 Jul 14, 2026
c40b41a
ci: disable credential persistence, read Playwright version from inst…
123FLO321 Jul 14, 2026
3fc1d75
test: use extends: true for Vitest projects, guard clipboard spy target
123FLO321 Jul 14, 2026
4366705
feat: add FormatValue formatter with per-monitor value display config
123FLO321 Jul 14, 2026
6d80939
feat: thread value display config through server-side formatting
123FLO321 Jul 14, 2026
f4af55d
fix: gate day-latency no-data as empty, format last-latency with valu…
123FLO321 Jul 14, 2026
9c39b95
fix: last-latency shows blank for missing readings on custom-unit mon…
123FLO321 Jul 14, 2026
4738e3b
feat: interpolate i18n fallback keys, add value-display label keys
123FLO321 Jul 14, 2026
b160cec
feat: render custom metric units on status page components
123FLO321 Jul 14, 2026
3f2ad36
feat: custom metric units in embed widgets
123FLO321 Jul 14, 2026
43f0a7d
feat: metric display settings card and unit-aware admin tables
123FLO321 Jul 14, 2026
e5ca8bf
fix: sync sibling admin cards after metric display save
123FLO321 Jul 14, 2026
8166769
docs: document per-monitor metric display settings
123FLO321 Jul 14, 2026
36e81fb
style: fix prettier formatting on admin UI metric display files
123FLO321 Jul 14, 2026
1552d5b
fix: final review fixes — decimals null handling, % join, DayHasData …
123FLO321 Jul 14, 2026
699c6a2
fix: swap remaining latency labels for custom display names
123FLO321 Jul 14, 2026
4fa0754
fix: custom display names in badges, embed, and group settings labels
123FLO321 Jul 14, 2026
4713299
docs: update todo about next major
123FLO321 Jul 14, 2026
78b903c
refactor: rename MonitorBarResponse.value_display to valueDisplay
123FLO321 Jul 14, 2026
87bd9e9
fix: exclude all-NULL reading days from custom-unit aggregates
123FLO321 Jul 14, 2026
01a428c
chore: restrict permissions for test workflow
123FLO321 Jul 14, 2026
dda87e6
Merge branch 'feat/test-setup' into feature/custom-metric-units
123FLO321 Jul 14, 2026
857283e
refactor: consolidate value-display label derivations, add docstrings
123FLO321 Jul 14, 2026
935617c
docs: correct FormatValue and MonitorValueDisplay docstrings
123FLO321 Jul 14, 2026
9e479cd
refactor: simplify lastStatus accessors with optional chaining
123FLO321 Jul 14, 2026
76fcf1c
docs: add docstrings to metric display admin functions
123FLO321 Jul 14, 2026
575d7f7
docs: expand DayHasReading and monitor-bar helper docstrings
123FLO321 Jul 14, 2026
2292df1
style: fix indents
123FLO321 Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
46 changes: 46 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Tests

on:
push:
branches:
- main
pull_request:

jobs:
test:
runs-on: ubuntu-latest
Comment thread
coderabbitai[bot] marked this conversation as resolved.
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
with:
persist-credentials: false

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm

- name: Install dependencies
run: npm ci

- name: Get Playwright version
id: playwright-version
run: echo "version=$(npx playwright --version | awk '{print $2}')" >> "$GITHUB_OUTPUT"

- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ steps.playwright-version.outputs.version }}

- name: Install Playwright Chromium
run: npx playwright install --with-deps chromium

- name: Type check
run: npm run check

- name: Run tests
run: npm test
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ config/server.yaml
/package
.env
.vscode
.idea
.env.*
!.env.example
vite.config.js.timestamp-*
Expand Down Expand Up @@ -39,4 +40,5 @@ translation-report.json
# AI workflow docs (not version-controlled)
CONTEXT.md
docs/adr/
docs/superpowers/
docs/superpowers/
.superpowers/
6 changes: 6 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,14 @@ npm run check # Svelte + TypeScript type checking
npm run prettify # Format all files with Prettier
npm run migrate # Run database migrations via Knex
npm run seed # Run database seeds (migrations run automatically first)
npm test # Run all tests (server unit + browser component projects)
npm run test:server # Server-side unit tests only (Node)
npm run test:client # Component tests only (headless Chromium via Playwright)
npm run test:watch # Watch mode
```

Component tests need a one-time `npx playwright install chromium`.

## Architecture

### Dual Process Model
Expand Down
1 change: 1 addition & 0 deletions migrations/20250111153517_init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export async function up(knex: Knex): Promise<void> {
table.string("monitor_tag", 255).notNullable();
table.integer("timestamp").notNullable();
table.text("status");
// TODO(next-major): rename column latency -> value. Stores any numeric metric, not just milliseconds. (and potentially allow multiple metrics)
table.float("latency", 8, 2);
table.text("type");
table.primary(["monitor_tag", "timestamp"]);
Expand Down
Loading