Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1479 commits
Select commit Hold shift + click to select a range
857fcb7
🔄 refactor(tag): move TagPrecision type to tag/precision module
scttbnsn Apr 5, 2026
c9ecf1e
🔒 security(ui): sanitize vulnerability URLs and CSV export fields
scttbnsn Apr 5, 2026
3340b7c
⚡ perf(ui): incremental newest-first cache for log viewer
scttbnsn Apr 5, 2026
37a33a8
🐛 fix(ui): harden dashboard layout against unknown widgets and unnece…
scttbnsn Apr 5, 2026
ecda246
🧪 test: cover vuln export downloads, dashboard updateContainers optio…
scttbnsn Apr 5, 2026
2512bcf
🧪 test(triggers): update default template expectations for digest-awa…
scttbnsn Apr 5, 2026
a5ce5eb
🧪 test: close remaining backend coverage gaps in Trigger and AgentClient
scttbnsn Apr 5, 2026
33c6598
🧪 test(ui): close remaining frontend coverage gaps and add v8 ignore …
scttbnsn Apr 5, 2026
d256e3a
🐛 fix(triggers): type flushDigestBuffer store container map as Container
scttbnsn Apr 5, 2026
849fb60
🧪 test(e2e): update trigger simpletitle expectation for digest-aware …
scttbnsn Apr 5, 2026
898b619
🎨 style(ui): improve outlined button contrast for readability
scttbnsn Apr 5, 2026
b901295
🎨 style(ui): filled background for outlined action buttons across all…
scttbnsn Apr 5, 2026
9deb3ba
🐛 fix(store): skip tagPrecision backfill when upgrading past v1.5.0
scttbnsn Apr 5, 2026
f2cc81e
🔄 refactor(tag): deduplicate numeric tag shape parser into tag/precis…
scttbnsn Apr 5, 2026
42f5c7a
🔄 refactor(triggers): type-safe notification containers and raw store…
scttbnsn Apr 5, 2026
66873a6
🔄 refactor(ui): extract responsive layout logic into useDashboardResp…
scttbnsn Apr 5, 2026
d9bcbe5
⚡ perf(ui): memoize safe URL computation for vulnerability list
scttbnsn Apr 5, 2026
659f9ff
🧪 test(ui): cover notification rule help text, rollback menu action, …
scttbnsn Apr 5, 2026
eedc01b
🐛 fix(tag): guard getNumericTagShape against undefined transformTag r…
scttbnsn Apr 6, 2026
1c30e2f
🧪 test(watchers): fix tag mock to preserve transform passthrough for …
scttbnsn Apr 6, 2026
9f65dff
🧪 test: add v8 ignore for defensive guards in precision and dashboard…
scttbnsn Apr 6, 2026
0740bd9
🧪 test: fix v8 ignore blocks and add missing migrate branch coverage
scttbnsn Apr 6, 2026
ecebf67
🎨 style: fix biome formatting in DashboardView
scttbnsn Apr 6, 2026
11f9a37
🎨 style: fix biome import ordering in DashboardView spec
scttbnsn Apr 6, 2026
c782d3d
🗑️ remove(security): retire axios supply chain advisory from README a…
scttbnsn Apr 6, 2026
89ca53d
🐛 fix(ui): strip hover affordance from disabled outlined buttons
scttbnsn Apr 6, 2026
0886493
✨ feat(ui): show info toast when container update finds no pending up…
scttbnsn Apr 6, 2026
e686bde
🐛 fix(ui): responsive layout for dashboard recent updates widget on m…
scttbnsn Apr 6, 2026
304db9d
🧪 test(ui): cover dashboard lifecycle flush and disabled rollback button
scttbnsn Apr 6, 2026
f9ece2a
🧪 test(store): cover migrate backfill when from version is invalid se…
scttbnsn Apr 6, 2026
a75c36f
🎨 style: fix lint warnings in Trigger typecheck file
scttbnsn Apr 6, 2026
327e101
📝 docs: changelog for v1.5.0-rc.6
scttbnsn Apr 6, 2026
7339c81
Merge pull request #277 from CodesWhat/feature/v1.5-rc6
scttbnsn Apr 6, 2026
0949a14
🐛 fix(store): unconditional tagPrecision repair on startup and outsid…
scttbnsn Apr 6, 2026
3ff905f
🧪 test(store): cover unconditional startup repair and silent image-in…
scttbnsn Apr 6, 2026
56e9f3c
🎨 style(ui): remove chevron separator from header breadcrumb (#279)
scttbnsn Apr 6, 2026
e74a589
🐛 fix(ui): remove HTML5 drag handlers conflicting with grid-layout-plus
scttbnsn Apr 6, 2026
b8a80de
🔄 refactor(triggers): use Joi .valid() and custom validators for Http…
scttbnsn Apr 6, 2026
68f4a4e
🧪 test(triggers): improve coverage for validation, auth, and edge cases
scttbnsn Apr 6, 2026
3f5b4a3
🧪 test(api): cover OpenAPI component collection and detail endpoints
scttbnsn Apr 6, 2026
7b3566f
🎨 style(ui): align DetailPanel with content padding and add scroll co…
scttbnsn Apr 6, 2026
8af6918
🐛 fix(ui): use .js extension for vitest coverage provider import
scttbnsn Apr 6, 2026
1d32239
📝 docs: add security guide, vulnerability export docs, and FAQ entries
scttbnsn Apr 6, 2026
23a3fc7
🐛 fix(ui): remove DetailPanel top margin that caused bottom gap on de…
scttbnsn Apr 6, 2026
487bf52
🐛 fix(ui): populate all breakpoints on dashboard reset to default (#280)
scttbnsn Apr 7, 2026
727bbb8
🐛 fix(triggers): include watcher context in digest/batch notification…
scttbnsn Apr 7, 2026
84d8987
🔄 refactor(api): make container update fire-and-forget with operation…
scttbnsn Apr 7, 2026
1375cbf
⚡ perf(ui): debounce SSE container-changed events in ContainersView
scttbnsn Apr 7, 2026
b7dc2a2
⚡ perf(ui): cache and deduplicate auth user fetch requests
scttbnsn Apr 7, 2026
982b4d7
🐛 fix(triggers): evict digest buffer entries after successful batch s…
scttbnsn Apr 7, 2026
0594e97
🐛 fix(watchers): await emitContainerReport to ensure handler ordering…
scttbnsn Apr 7, 2026
a4e146c
✨ feat(ui): show Queued status for containers awaiting group update
scttbnsn Apr 7, 2026
c31f78e
🐛 fix(triggers): retry failed batch sends, audit delivery failures, f…
scttbnsn Apr 7, 2026
ae5309b
✨ feat(ui): surface notification-delivery-failed audit entries (#282)
scttbnsn Apr 7, 2026
ba6341b
🐛 fix(notifications): resolve shorthand trigger references in notific…
scttbnsn Apr 7, 2026
bb1550e
🎨 style(triggers): add debug logging to every silent filter in trigge…
scttbnsn Apr 7, 2026
1436587
✨ feat(triggers): add agent name prefix to default notification templ…
scttbnsn Apr 8, 2026
15abb91
📦 deps(vite): patch CVE-2026-39363, CVE-2026-39364, CVE-2026-39365
scttbnsn Apr 8, 2026
12942ee
🎨 style(api): include client ID and IP in SSE connect/disconnect logs
scttbnsn Apr 8, 2026
0e8f620
✨ feat(docker): add infrastructure update mode for socket proxy conta…
scttbnsn Apr 8, 2026
ca86d51
🧪 test(triggers): close coverage gaps in Docker trigger and related m…
scttbnsn Apr 8, 2026
5ad365c
🐛 fix(ui): update DashboardView widget ordering test expectations
scttbnsn Apr 8, 2026
86553b5
🧪 test(triggers): additional coverage tests for skip-log and executor…
scttbnsn Apr 8, 2026
374e03f
🧪 test(ui): cover string target branch in isContainerUpdateQueued
scttbnsn Apr 8, 2026
6f478a4
🧪 test(triggers): fix agent mismatch and threshold test assertions
scttbnsn Apr 8, 2026
992086d
🔄 refactor(triggers): simplify Dockercompose trigger guard and close …
scttbnsn Apr 8, 2026
25cb867
🧪 test(triggers): cover null strict-agent values and threshold unknow…
scttbnsn Apr 8, 2026
f04af79
✅ test(triggers): cover notification prefix and suffix in api title
scttbnsn Apr 8, 2026
0840163
📝 docs(docker): document infrastructure update mode
scttbnsn Apr 8, 2026
bfe5203
🐛 fix(ui): avoid throttling static assets with the spa fallback limiter
scttbnsn Apr 8, 2026
0d51733
✅ test(watchers): stub socket version probe in docker events tests
scttbnsn Apr 8, 2026
4c899cb
🐛 fix(e2e): ensure Docker engine is running before e2e tests
scttbnsn Apr 8, 2026
56580bf
📦 deps(app): update nodemailer 8.0.4 → 8.0.5
scttbnsn Apr 8, 2026
bacbc1c
✨ feat(triggers): backend-driven update queue with per-trigger concur…
scttbnsn Apr 8, 2026
b670687
🐛 fix(triggers): move update semaphore to runContainerUpdateLifecycle
scttbnsn Apr 8, 2026
95c0d53
🐛 fix(ui): defer to backend queue status over local actionInProgress
scttbnsn Apr 8, 2026
3e6c963
🐛 fix(triggers): use module-level semaphore shared across all trigger…
scttbnsn Apr 8, 2026
caebe60
🐛 fix(triggers): fail queued operations on early trigger errors
scttbnsn Apr 8, 2026
18890d5
🐛 fix(triggers): serialize compose-file-once pre-pulls
scttbnsn Apr 8, 2026
5edc55a
✨ feat(ui): queue-aware container update state with sequence labels
scttbnsn Apr 8, 2026
7d7cfdf
✨ feat(ui): queue-aware bulk update for dashboard Updates widget
scttbnsn Apr 8, 2026
5880b4c
✨ feat(triggers): identify controller in notifications when agents ar…
scttbnsn Apr 8, 2026
6615ccb
✨ feat(containers): add container action operations and dashboard upd…
scttbnsn Apr 8, 2026
58f96d3
📝 docs: update README and CHANGELOG for v1.5.0-rc.7
scttbnsn Apr 8, 2026
ef8c474
📝 docs: add DD_SERVER_NAME and notification template variables to guides
scttbnsn Apr 8, 2026
b60a8b5
🧪 test(containers): fix batch metadata assertions and dashboard widge…
scttbnsn Apr 9, 2026
2f511d3
🐛 fix(ui): collapse stacks into single table to eliminate column shif…
scttbnsn Apr 9, 2026
aaf9962
🐛 fix(triggers): suppress duplicate server name in notification prefi…
scttbnsn Apr 9, 2026
c7eccee
🐛 fix(containers): replace tagPrecision with computed tagPinned for h…
scttbnsn Apr 9, 2026
6253fa2
📝 docs: add custom dashboard grid to v1.5.1 roadmap
scttbnsn Apr 9, 2026
c9f21a7
🐛 fix(ui): unify dashboard container update start semantics (#291)
scttbnsn Apr 9, 2026
6b5c1f7
🐛 fix(notifications): preserve update-applied success events across r…
scttbnsn Apr 9, 2026
6706929
✨ feat(watchers): add next run metadata to watcher API and UI (#288)
scttbnsn Apr 9, 2026
414f017
🐛 fix(healthcheck): restore curl compatibility and deprecation schedu…
scttbnsn Apr 10, 2026
d475d33
🐛 fix(trigger): stabilize notification buffering keys (#253)
scttbnsn Apr 10, 2026
1ac7c36
🐛 fix(agent): await remote report events (#282)
scttbnsn Apr 10, 2026
f1688c4
🧪 test(store): add #270 startup-order and pinned-tag regressions
scttbnsn Apr 10, 2026
110aae3
🐛 fix(api): guard duplicate container updates (#248)
scttbnsn Apr 10, 2026
2b00c4b
🐛 fix(ui): restore standalone update state handling (#289)
scttbnsn Apr 10, 2026
c81e25a
🐛 fix(ui): key dashboard update tracking by container id (#276)
scttbnsn Apr 10, 2026
05c023f
🐛 fix(ui): scope pending update state by stable container identity (#…
scttbnsn Apr 10, 2026
431be5e
🐛 fix(ui): top-align vulnerability rows in detail panels (#217)
scttbnsn Apr 10, 2026
9728f20
🔧 chore(test): emit coverage summaries for the gate
scttbnsn Apr 10, 2026
af7c997
🧪 test(app): close backend coverage gaps
scttbnsn Apr 10, 2026
62aa405
🧪 test(ui): close container action coverage gaps
scttbnsn Apr 10, 2026
8fb7507
✨ feat(api): identity-keyed container tracking for audit events and r…
scttbnsn Apr 10, 2026
04e847e
🐛 fix(triggers): revive expired pre-created update operations instead…
scttbnsn Apr 10, 2026
923e092
🔄 refactor(ui): remove auth user TTL cache in favor of request dedupl…
scttbnsn Apr 10, 2026
ea413c3
✨ feat(ui): identity-keyed container state tracking across dashboard …
scttbnsn Apr 10, 2026
9151810
🎨 style(docker): fix Dockerfile formatting per dockerfmt
scttbnsn Apr 10, 2026
c4af5e4
📦 deps(app): update axios 1.13.6 → 1.15.0 (CVE-2025-62718)
scttbnsn Apr 10, 2026
de51995
🧪 test(ui): cover duplicate-name fallback and add v8 ignore for ident…
scttbnsn Apr 10, 2026
f36611c
📝 docs: changelog, readme, and guides for v1.5.0-rc.8
scttbnsn Apr 10, 2026
1e75b19
🧪 test(ui): add v8 ignore for defensive containerNameCounts guard
scttbnsn Apr 10, 2026
8095bc9
🧪 test(ui): cover container-update edge cases for batch heads and que…
scttbnsn Apr 10, 2026
f55c9a7
🧪 test(ui): add v8 ignore for defensive in-progress batch head guard
scttbnsn Apr 10, 2026
4def3e0
🧪 test(ui): add v8 ignore for batch head routing branches covered by …
scttbnsn Apr 10, 2026
ad32518
🧪 test(ui): widen v8 ignore to cover batch head position comparison b…
scttbnsn Apr 10, 2026
0173d7e
🔒 security(healthcheck): harden HTTPS probe against shell injection b…
scttbnsn Apr 10, 2026
9e23674
🔒 security(api): remove client ID and IP from SSE connect/disconnect …
scttbnsn Apr 10, 2026
981f7f8
🔒 security(triggers): validate HTTP trigger proxy URL scheme at confi…
scttbnsn Apr 10, 2026
95de9f0
🔒 security(ui): tighten vulnerability CSV export escaping
scttbnsn Apr 10, 2026
c6a9930
✨ feat(triggers): add retention and capacity limits to digest and bat…
scttbnsn Apr 10, 2026
3ffe2f1
✨ feat(updates): add recovered and recovery-failed operation phases
scttbnsn Apr 10, 2026
da613f7
🐛 fix(tag): treat compound rolling channel aliases as floating even w…
scttbnsn Apr 10, 2026
606d5cc
⚡ perf(ui): enable virtual scrolling for the grouped containers table
scttbnsn Apr 10, 2026
69c5a82
📝 docs: append security, performance, and recovery phase entries to v…
scttbnsn Apr 10, 2026
c0919bd
🔒 security(api): hash SSE log IPs by default with opt-in raw mode via…
scttbnsn Apr 10, 2026
0ab2dc5
🐛 fix(registries): fall back to manifest digest when HEAD response om…
scttbnsn Apr 10, 2026
4ac98dd
🧪 test(oidc): cover stale lock cleanup replacement branch
scttbnsn Apr 10, 2026
39ea983
🧪 test(ui): cover preference store lifecycle skip when addEventListen…
scttbnsn Apr 10, 2026
9872a0d
🧪 test(ui): cover dashboard layout fallbacks for missing persisted la…
scttbnsn Apr 10, 2026
773def3
🧪 test: remove v8 ignores where defensive branches are already exerci…
scttbnsn Apr 10, 2026
56d9f13
🔧 chore(scripts): shard pre-push coverage by workspace and add lcov-a…
scttbnsn Apr 10, 2026
1772433
♻️ refactor(ui): collapse getPersistedBatchHeadIds to queued operatio…
scttbnsn Apr 10, 2026
33b5674
♻️ refactor(triggers): drop redundant canonical-name guard in getStal…
scttbnsn Apr 10, 2026
069f110
🧪 test(app): cover digest buffer pruning edges and legacy v1 manifest…
scttbnsn Apr 10, 2026
3e7f4fb
🧪 test(ui): cover dashboard fallback paths and container action key g…
scttbnsn Apr 10, 2026
9113746
🔧 chore(lefthook): split pre-push pipeline into separate coverage and…
scttbnsn Apr 10, 2026
f5b6c88
🎨 style(scripts): fix biome lint and format on coverage-gaps.mjs
scttbnsn Apr 10, 2026
fd7c4e5
🎨 style(scripts): apply shfmt to pre-push build and coverage scripts
scttbnsn Apr 10, 2026
3efdc00
🔒 security(web): bump next to 16.2.3 (GHSA-q4gf-8mx6-v5v3)
scttbnsn Apr 10, 2026
65f0240
📝 docs(changelog): regenerate current MDX from CHANGELOG.md
scttbnsn Apr 10, 2026
de2b5ae
🔧 chore(docker): bump Alpine apk pins to current mirror versions
scttbnsn Apr 10, 2026
65d7db2
🔧 chore(lefthook): bump clean-tree to priority 1 so it actually runs …
scttbnsn Apr 10, 2026
e2762cd
📝 docs(contributing): reflect the pre-push coverage/build split
scttbnsn Apr 10, 2026
dc7359d
🔧 chore(scripts): broaden commit-message validator gitmoji set
scttbnsn Apr 10, 2026
f03334e
🎨 style(scripts): apply biome formatting to commit-message.mjs ternary
scttbnsn Apr 10, 2026
0eefb08
📝 docs(changelog): use ASCII hyphen in rc.8 heading for release extra…
scttbnsn Apr 10, 2026
2fedd59
🐛 fix(ui): restore DetailPanel top margin so it aligns with content p…
scttbnsn Apr 11, 2026
b5d7942
📝 docs(architecture): add update-path refactor plan
scttbnsn Apr 11, 2026
49dd193
✨ feat(app): container update operation model and persistent queue store
scttbnsn Apr 11, 2026
06bf677
✨ feat(app): add request-update admission service
scttbnsn Apr 11, 2026
c07c24e
♻️ refactor(app): route container update APIs through operation store
scttbnsn Apr 11, 2026
0d7cbc8
♻️ refactor(app): integrate self-update into shared operation system
scttbnsn Apr 11, 2026
5389495
✨ feat(agent): track pending watcher cycle reports on AgentClient
scttbnsn Apr 11, 2026
64b9cd4
✅ test(app): audit failed digest deliveries in Trigger.flushDigestBuffer
scttbnsn Apr 11, 2026
b356773
♻️ refactor(ui): align update path with backend operation model
scttbnsn Apr 11, 2026
a7e5263
♻️ refactor(ui): phase-only update status on cards, batch progress on…
scttbnsn Apr 12, 2026
494a981
🐛 fix(ui): bypass 500ms SSE debounce for update operation events
scttbnsn Apr 12, 2026
fb845c2
🐛 fix(app): isolate per-entry failures in batch container updates
scttbnsn Apr 12, 2026
01fdbab
⚡ perf(ui): apply update operation state from SSE event payload directly
scttbnsn Apr 12, 2026
0a53c98
🐛 fix(ui): hold update-in-progress display through SSE debounce gaps
scttbnsn Apr 12, 2026
7b710df
✨ feat(ui): show active filter chips in collapsed containers filter bar
scttbnsn Apr 12, 2026
31e782e
✨ feat(ui): dim entire container card with centered Updating/Queued o…
scttbnsn Apr 12, 2026
aa061e5
♻️ refactor(test): extract shared vitest coverage provider helpers
scttbnsn Apr 12, 2026
8ac7af1
♻️ refactor(ui): extract shared websocket stream connection helper
scttbnsn Apr 12, 2026
5849cef
♻️ refactor(watchers): simplify docker helpers, image orchestration, …
scttbnsn Apr 12, 2026
584d58c
♻️ refactor(app): simplify self-update finalize, debug dump, and cont…
scttbnsn Apr 12, 2026
8528fa2
♻️ refactor(scripts): simplify stryker aggregate, coverage gaps, and …
scttbnsn Apr 12, 2026
1a9824c
♻️ refactor(ui): simplify preferences, utils, and view-helper modules
scttbnsn Apr 12, 2026
58e836b
🧪 test(qa): expand QA compose with edge, messaging, and runtime stacks
scttbnsn Apr 12, 2026
4e328fa
✨ feat(ui): surface bouncer-blocked update state in container kind cell
scttbnsn Apr 12, 2026
ecce468
🎨 style(ui): enlarge container card header icon to 44px
scttbnsn Apr 13, 2026
b542eb1
🔧 chore(docker): bump cosign and trivy alpine pins to current mirror …
scttbnsn Apr 13, 2026
888f62f
🎨 style(ui): enlarge container list view icon to 28px
scttbnsn Apr 13, 2026
6ff87d8
🗑️ remove(app): drop unused imports flagged by biome
scttbnsn Apr 13, 2026
4d51827
🎨 style(scripts): wrap coverage-gaps ternary to satisfy biome format
scttbnsn Apr 13, 2026
858dfe2
🎨 style(docs): satisfy markdownlint in queue + update-path refactor p…
scttbnsn Apr 13, 2026
72d6d68
🧪 test(app): close coverage gaps across store, triggers, watchers, an…
scttbnsn Apr 13, 2026
9f238be
🧪 test(ui): close coverage gaps in composables, preferences, services…
scttbnsn Apr 13, 2026
d027441
🎨 style(ui): center data table rows vertically instead of top-align
scttbnsn Apr 13, 2026
b723369
🐛 fix(notifications): use detected daemon host name for controller se…
scttbnsn Apr 13, 2026
23b7fcf
🔧 chore(deps): pin loose package.json specifiers to exact versions
scttbnsn Apr 13, 2026
61f4960
🔒 security(snyk): add .snyk policy for reviewed false-positive findings
scttbnsn Apr 13, 2026
0e9ba5e
⏪ revert(ui): restore align-top on data table cells
scttbnsn Apr 13, 2026
58932e4
🧪 test(watchers): cover detectLocalDaemonServerName guard branches
scttbnsn Apr 13, 2026
578f93a
📝 docs(changelog): refresh v1.5.0-rc.8 with post-04-09 work
scttbnsn Apr 13, 2026
cee7796
🔧 chore(ci): skip heavy e2e shards on docs-only changes
scttbnsn Apr 13, 2026
3ba728c
🔧 chore(codecov): per-shard project + patch status and PR comment
scttbnsn Apr 13, 2026
6ecffcc
🐛 fix(ci): diff paths-filter against the pushed ref's previous SHA
scttbnsn Apr 13, 2026
33e862a
Merge pull request #292 from CodesWhat/feature/v1.5-rc8
scttbnsn Apr 13, 2026
a6ed8b2
🗑️ remove(ci): delete auto-tag job — switch to manual release tagging
scttbnsn Apr 13, 2026
c05d2c7
Merge pull request #297 from CodesWhat/fix/release-next-version-regex
scttbnsn Apr 13, 2026
4303d87
♻️ refactor(triggers): share compose bind-mount path remap between do…
scttbnsn Apr 14, 2026
656e502
✨ feat(api): set cache-control for SPA index and hashed UI assets
scttbnsn Apr 14, 2026
264a1b9
🧪 test(e2e): verify dashboard updates start in place without navigati…
scttbnsn Apr 14, 2026
e033bc2
📝 docs(changelog): note phase-only queue copy refactor for update cards
scttbnsn Apr 14, 2026
98ce29a
🔧 chore(readme): replace broken Snyk test badge with static monitored…
scttbnsn Apr 14, 2026
dfa8ecf
✨ feat(ui): swap containers table virtualization for bounded native s…
scttbnsn Apr 14, 2026
bbda0cd
🔒 security(deps): bump follow-redirects to 1.16.0
scttbnsn Apr 14, 2026
8a2360a
🔒 security(snyk): clarify .snyk scope and drop non-enforced Code rules
scttbnsn Apr 14, 2026
ce2d2b9
🔧 chore(web): switch build to Turbopack (Next 16 default)
scttbnsn Apr 14, 2026
d2fceec
🐛 fix(ui): drop 70vh cap so containers table fills the viewport
scttbnsn Apr 15, 2026
7bb2668
🐛 fix(ui): register z-index @utility rules so modal backdrops actuall…
scttbnsn Apr 15, 2026
6c4d10e
🐛 fix(ui): disable only the updating container, not every row in its …
scttbnsn Apr 15, 2026
a8ff30b
📝 docs(sse): label client ID and source IP in SSE connect/disconnect …
scttbnsn Apr 15, 2026
02c2729
✨ feat(auth): validate OIDC redirect target against backend endpoint …
scttbnsn Apr 15, 2026
76023d1
⚡ perf(api): preload active update operations once for container list
scttbnsn Apr 15, 2026
3853031
✨ feat(ui): tooltip directive falls back to binding text and suppress…
scttbnsn Apr 15, 2026
dec4ac0
✨ feat(ui): cap long labels with truncation + tooltips across data su…
scttbnsn Apr 15, 2026
fa55816
🐛 fix(ui): show a centered Updating badge on table rows instead of ti…
scttbnsn Apr 15, 2026
8bcec36
🎨 style(ui): dim updating table rows to 30% to match the card view
scttbnsn Apr 15, 2026
2143804
🐛 fix(notifications): detect daemon host name for socket-proxy topolo…
scttbnsn Apr 16, 2026
c0054d2
✨ feat(store): add notification history collection for per-trigger/co…
scttbnsn Apr 16, 2026
f79d9ec
🐛 fix(triggers): persist once=true dedup so notifications survive tra…
scttbnsn Apr 16, 2026
2053a5d
🔒 security(oidc): redact sensitive tokens from error logs
scttbnsn Apr 16, 2026
b579d81
♻️ refactor(registries): hoist public-image credential-fallback into …
scttbnsn Apr 16, 2026
ac567d7
⚡ perf(api): project container lists with Proxy and drop redundant co…
scttbnsn Apr 16, 2026
bcaba6e
🐛 fix(sse): register cleanup listeners with once so teardown runs exa…
scttbnsn Apr 16, 2026
0a93f11
🐛 fix(tag): throw on malformed or oversized regex transform patterns
scttbnsn Apr 16, 2026
89adcc1
🐛 fix(security): guard trivy DB cache against stale in-flight overrides
scttbnsn Apr 16, 2026
1fb2ac6
🧪 test(helpers): expand mock request/response helpers and pin their b…
scttbnsn Apr 16, 2026
7998abf
🧪 test(registry): small hygiene — typo fix, Agent typecheck fixture, …
scttbnsn Apr 16, 2026
6664396
📝 docs(roadmap): fold v1.5.1 scope into v1.6.0
scttbnsn Apr 16, 2026
ba82d91
🔒 security(api): require explicit DD_SERVER_CORS_ORIGIN when CORS is …
scttbnsn Apr 16, 2026
cb36aff
🔒 security(api): prefer socket.remoteAddress over request.ip for unau…
scttbnsn Apr 16, 2026
e81a492
🔒 security(oidc): require strict authorization endpoint match, drop b…
scttbnsn Apr 16, 2026
e29d571
🔒 security(hooks): validate hook commands against a restricted shell-…
scttbnsn Apr 16, 2026
89abe35
♻️ refactor(components): add generic configuration type parameters ac…
scttbnsn Apr 16, 2026
5d6c76a
🐛 fix(agent): trim remote trigger payload for docker update triggers …
scttbnsn Apr 16, 2026
318d97a
🐛 fix(ui): keep pinned containers with pending updates visible in Hid…
scttbnsn Apr 16, 2026
458030b
🐛 fix(triggers): give digest channel its own dedup so batch+digest se…
scttbnsn Apr 17, 2026
2b473f2
🔒 security(deps): bump protobufjs to 7.5.5 to close GHSA-xq3m-2v4x-88gg
scttbnsn Apr 17, 2026
455036b
📝 docs(code-smells): explain coarse error-suppression key, preload fa…
scttbnsn Apr 17, 2026
b49be38
📝 docs: backfill Unreleased changelog + Recent Updates for rc.9
scttbnsn Apr 17, 2026
336a5f8
🧪 test(app): close remaining coverage gaps across list, BaseRegistry,…
scttbnsn Apr 17, 2026
4c993b4
🐛 fix(ui): bound grouped containers table scroll + future-date expire…
scttbnsn Apr 17, 2026
bf4941f
🔒 security(deps): bump Dockerfile Trivy pin to 0.70.0-r0 to track Alp…
scttbnsn Apr 17, 2026
4e6bdbd
🧪 test(e2e): sync api-trigger + api-v14 fixtures with rc.9 trigger re…
scttbnsn Apr 17, 2026
fd14ad0
🔧 chore(ci): dedupe ci-verify concurrency across push + pull_request …
scttbnsn Apr 17, 2026
c35a05f
🔧 chore(ci): drop feature/** from push trigger so PR events drive CI …
scttbnsn Apr 17, 2026
ba51aa0
🐛 fix(quality): resolve CodeQL findings on PR #303
scttbnsn Apr 17, 2026
ca404d2
🎨 style(ui): density + alignment polish from rc.9 QA pass
scttbnsn Apr 17, 2026
93268d9
🧪 test(ui): sync containers table test with unbounded height change
scttbnsn Apr 17, 2026
b114690
Merge pull request #303 from CodesWhat/feature/v1.5-rc9
scttbnsn Apr 18, 2026
37fe406
✨ feat(rc): v1.5.0-rc.10 — security scan digest + notification UX rew…
scttbnsn Apr 20, 2026
3ebcae9
v1.5.0-rc.11 — #289 row drop + terminal toasts, #291 dashboard toasts…
scttbnsn Apr 21, 2026
a00798b
v1.5.0-rc.12 — self-update fix (#315), status column (#309), perf/UX …
scttbnsn Apr 22, 2026
51fee94
Merge remote-tracking branch 'upstream/main' into copilot/rebase-main…
Copilot Apr 23, 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
206 changes: 0 additions & 206 deletions .github/workflows/ci.yml

This file was deleted.

1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed

- **Tag update display accuracy** — Fixed update classification/display so tag-based updates are shown correctly as tag updates.

## [1.5.0-rc.12] — 2026-04-22

### Fixed
Expand Down
36 changes: 0 additions & 36 deletions app/api/component.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,42 +65,6 @@ describe('Component Router', () => {
expect(result.agent).toBe('remote-agent');
});

test('should include requireinclude for triggers even when masked config omits it', () => {
const comp = {
kind: 'trigger',
type: 'dockercompose',
name: 'my-service',
configuration: { requireinclude: true, auto: true },
maskConfiguration: vi.fn(() => ({ auto: true })),
agent: undefined,
};

const result = component.mapComponentToItem('dockercompose.my-service', comp, 'trigger');

expect(result.configuration).toEqual({
auto: true,
requireinclude: true,
});
});

test('should keep masked requireinclude when already present', () => {
const comp = {
kind: 'trigger',
type: 'dockercompose',
name: 'my-service',
configuration: { requireinclude: true, auto: true },
maskConfiguration: vi.fn(() => ({ auto: true, requireinclude: false })),
agent: undefined,
};

const result = component.mapComponentToItem('dockercompose.my-service', comp, 'trigger');

expect(result.configuration).toEqual({
auto: true,
requireinclude: false,
});
});

test('should fallback to raw configuration when maskConfiguration is unavailable', () => {
const comp = {
type: 'docker',
Expand Down
12 changes: 0 additions & 12 deletions app/api/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,18 +73,6 @@ export function mapComponentToItem(
? redactTriggerConfigurationInfrastructureDetails(configuration)
: configuration;

// Preserve requireinclude for triggers even when maskConfiguration omits it
if (
kind === 'trigger' &&
(component as any).configuration?.requireinclude !== undefined &&
sanitizedConfiguration != null &&
typeof sanitizedConfiguration === 'object' &&
!Array.isArray(sanitizedConfiguration) &&
(sanitizedConfiguration as any).requireinclude === undefined
) {
(sanitizedConfiguration as any).requireinclude = (component as any).configuration.requireinclude;
}

const item: ApiComponent = {
id: key,
type: component.type,
Expand Down
56 changes: 0 additions & 56 deletions app/api/container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2311,22 +2311,6 @@ describe('Container Router', () => {
expect(res.json).toHaveBeenCalledWith({ data: expect.any(Array), total: 1 });
});

test('should associate trigger when configuration is missing', async () => {
const res = await callGetContainerTriggers({ id: 'c1' }, [
{ type: 'slack', name: 'default' },
]);

const triggers = getTriggersFromResponse(res);
expect(triggers).toHaveLength(1);
expect(triggers[0]).toEqual(
expect.objectContaining({
type: 'slack',
name: 'default',
configuration: {},
}),
);
});

test('should filter triggers with triggerInclude', async () => {
Trigger.parseIncludeOrIncludeTriggerString.mockReturnValue({ id: 'slack.default' });
Trigger.doesReferenceMatchId.mockImplementation((ref, id) => ref === id);
Expand Down Expand Up @@ -2370,16 +2354,6 @@ describe('Container Router', () => {
expect(getTriggersFromResponse(res)).toHaveLength(0);
});

test('should keep non-docker local triggers for remote containers', async () => {
const res = await callGetContainerTriggers({ id: 'c1', agent: 'agent-1' }, [
{ type: 'slack', name: 'default', configuration: {} },
]);

const triggers = getTriggersFromResponse(res);
expect(triggers).toHaveLength(1);
expect(triggers[0].type).toBe('slack');
});

test('should include triggers with matching include threshold', async () => {
Trigger.parseIncludeOrIncludeTriggerString.mockReturnValue({
id: 'slack.default',
Expand All @@ -2395,18 +2369,6 @@ describe('Container Router', () => {
expect(triggers).toHaveLength(1);
expect(triggers[0].configuration.threshold).toBe('all');
});

test('should exclude requireinclude triggers when container has no include list', async () => {
const res = await callGetContainerTriggers({ id: 'c1' }, [
{ type: 'slack', name: 'default', configuration: { requireinclude: true } },
{ type: 'email', name: 'default', configuration: { requireinclude: false } },
]);

expect(res.status).toHaveBeenCalledWith(200);
const triggers = getTriggersFromResponse(res);
expect(triggers).toHaveLength(1);
expect(triggers[0].type).toBe('email');
});
});

describe('runTrigger', () => {
Expand Down Expand Up @@ -2458,24 +2420,6 @@ describe('Container Router', () => {
});
});

test('should return 400 when trigger conditions are not met', async () => {
const mockTrigger = {
mustTrigger: vi.fn().mockReturnValue(false),
trigger: vi.fn(),
};
storeContainer.getContainer.mockReturnValue({ id: 'c1' });
registry.getState.mockReturnValue({ watcher: {}, trigger: { 'slack.default': mockTrigger } });
const res = await callRunTrigger({ id: 'c1', triggerType: 'slack', triggerName: 'default' });

expect(mockTrigger.trigger).not.toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(400);
expect(res.json).toHaveBeenCalledWith(
expect.objectContaining({
error: expect.stringContaining('Trigger conditions not met'),
}),
);
});

test('should use triggerAgent in trigger id when provided', async () => {
const mockTrigger = { trigger: vi.fn().mockResolvedValue(undefined) };
storeContainer.getContainer.mockReturnValue({ id: 'c1' });
Expand Down
Loading