2026-04-22 - 2026-10-22

Overview

86 Active Pull Requests
96 Active Issues
Excluding merges, 3 authors have pushed 3 commits to main and 82 commits to all branches. On main, 18 files have changed and there have been 800 additions and 126 deletions.

2 Releases published by 1 user

Published v1.0.0-rc2 2026-10-19 08:25:44 +02:00

Published v1.0.0-rc1 2026-10-14 15:01:59 +02:00

84 Pull requests merged by 2 users

Merged #186 server.go starts listenAndServe in an anonymous function (closes #162) 2026-10-19 08:24:50 +02:00

Merged #188 Match .gitignore, .editorconfig and .golangci.yml to sneak/prompts (closes #174) 2026-10-19 08:22:06 +02:00

Merged #184 package.json drops its version field and is private (closes #158) 2026-10-19 08:16:30 +02:00

Merged #185 TODO.md Status says where release candidates are tagged 2026-10-19 08:13:01 +02:00

Merged #187 netwatch-server refuses arguments it does not understand (closes #179) 2026-10-19 08:09:14 +02:00

Merged #178 main() is one call into internal/cli (closes #160) 2026-10-19 07:53:10 +02:00

Merged #182 script/build stamps lightweight tags too (closes #156) 2026-10-19 07:45:18 +02:00

Merged #183 .dockerignore keeps root test binaries and coverage out (closes #155) 2026-10-19 07:42:44 +02:00

Merged #181 CI checkout fetches all history and tags (closes #153) 2026-10-19 07:32:36 +02:00

Merged #176 Bootstrap keeps yarn at its pinned version and node at its pinned major 2026-10-19 07:20:43 +02:00

Merged #180 Entrypoint steps are functions called from main (closes #163) 2026-10-19 07:17:33 +02:00

Merged #177 Health check answers 503 while report files cannot be written (closes #142) 2026-10-19 06:55:52 +02:00

Merged #172 Report file writes run one at a time (closes #150) 2026-10-19 06:02:12 +02:00

Merged #175 DEBUG turns debug logging on for any non-empty value (closes #159) 2026-10-19 05:48:21 +02:00

Merged #171 Check builds keep Go's modules and caches between runs (refs #118) 2026-10-19 04:26:26 +02:00

Merged #173 Discarded-check unit tests check nothing was recorded 2026-10-19 03:44:14 +02:00

Merged #169 Unusable DATA_DIR error names DATA_DIR; report file number is atomic.Int64 2026-10-19 03:15:35 +02:00

Merged #170 Page is sent with Cache-Control: no-cache (closes #141) 2026-10-19 03:10:40 +02:00

Merged #168 README states what refused reports, one sender and nginx's 413 do (closes #145, closes #146, closes #147) 2026-10-19 02:55:30 +02:00

Merged #167 Clock errors no longer stop probing; legend reads >=500ms (closes #149, closes #152) 2026-10-19 01:34:46 +02:00

Merged #165 prepare-data-dir leaves files with a second name to their owner (closes #143) 2026-10-19 01:11:42 +02:00

Merged #166 Client address is the right-most untrusted X-Forwarded-For entry (closes #144) 2026-10-19 00:28:19 +02:00

Merged #164 Summary reads --/-- after an interval change, not 0/26 in red (closes #140) 2026-10-18 23:00:37 +02:00

Merged #138 Stopping the server waits for report file writes under way (closes #122) 2026-10-14 14:47:02 +02:00

Merged #137 make test no longer runs the frontend's production build (refs #118) 2026-10-14 14:30:03 +02:00

Merged #135 Debug log adds each line instead of drawing the whole panel (closes #131) 2026-10-14 14:13:04 +02:00

Merged #136 Unset TRUSTED_PROXIES trusts RFC 1918, empty trusts none (closes #129) 2026-10-14 14:01:38 +02:00

Merged #130 Reports refused while report files cannot be written (closes #123) 2026-10-14 13:47:14 +02:00

Merged #133 A handler's panic is logged and counted as 500 (closes #125) 2026-10-14 13:30:12 +02:00

Merged #121 Unset TRUSTED_PROXIES trusts the RFC 1918 ranges (closes #119) 2026-10-14 13:01:35 +02:00

Merged #132 Reports are taken only as application/json (closes #126) 2026-10-14 12:43:26 +02:00

Merged #128 Interval change keeps unreported samples for the reporter (closes #124) 2026-10-14 12:23:13 +02:00

Merged #127 Move to the layout REPO_POLICIES.md gives (closes #30) 2026-10-14 12:01:33 +02:00

Merged #115 Re-vendor the shared files from sneak/prompts at dd4027b 2026-10-07 13:41:51 +02:00

Merged #116 Hetzner checks answer again; failed checks go to the console 2026-10-07 12:24:53 +02:00

Merged #112 Footer no longer says IPv4 only (closes #111) 2026-10-04 07:38:07 +02:00

Merged #110 README, TODO and the viewport README say what the tree does (closes #24) 2026-10-04 07:03:06 +02:00

Merged #108 Latency statistics written once, thresholds read from CONFIG (closes #102) 2026-10-04 06:51:24 +02:00

Merged #109 Rate limit password attempts on /metrics (closes #104) 2026-10-04 06:19:07 +02:00

Merged #107 Report handler panics to Sentry when SENTRY_DSN is set (closes #95) 2026-10-04 05:57:03 +02:00

Merged #105 Target names, URLs and log lines reach the page as text (closes #29) 2026-10-04 05:35:37 +02:00

Merged #106 Add make add-dependency and make tidy (closes #45) 2026-10-04 05:17:34 +02:00

Merged #103 Serve Prometheus metrics at /metrics behind basic auth (closes #94) 2026-10-04 04:58:47 +02:00

Merged #101 Shim make dev and make build, format backend/ markdown (closes #28) 2026-10-04 04:15:00 +02:00

Merged #100 Move tailwind off the deprecated module.register() (closes #32) 2026-10-04 03:51:56 +02:00

Merged #99 Frontend unit tests cover durations, colours, statistics and health (closes #21) 2026-10-04 03:25:07 +02:00

Merged #98 Log fx through slog, snake_case health check keys (closes #27) 2026-10-04 03:11:43 +02:00

Merged #97 Lint the frontend with eslint in its own Docker stage (closes #47) 2026-10-04 01:58:08 +02:00

Merged #96 Tap-target check expects a pin button per WAN host row (closes #46) 2026-10-04 01:53:03 +02:00

Merged #92 Each target's row shows its result as soon as its check ends (closes #91) 2026-10-04 01:41:05 +02:00

Merged #81 Entrypoint acts as root on nothing outside /data (closes #80) 2026-10-03 18:24:39 +02:00

Merged #90 Delete the oldest report files to stay under the size cap (closes #54) 2026-10-03 17:51:09 +02:00

Merged #93 Lint's .golangci.yml check says which fix applies (closes #34) 2026-10-03 17:14:27 +02:00

Merged #89 Go tests run with -race and -cover under Go's own timeout (closes #88) 2026-10-03 16:26:17 +02:00

Merged #79 Target check timeout is 80% of the refresh interval (closes #78) 2026-10-03 15:36:48 +02:00

Merged #87 Stamp the git tag or short commit in a plain docker build (closes #86) 2026-10-02 04:26:41 +02:00

Merged #84 Remove Buildarch: read the architecture at run time (closes #83) 2026-10-02 01:05:09 +02:00

Merged #73 next into main 2026-09-29 12:04:31 +02:00

Merged #76 Container sets up its own data directory (closes #75) 2026-09-29 12:04:00 +02:00

Merged #72 cibuild: the org model, which runs every check uncached (closes #37) 2026-09-29 11:55:52 +02:00

Merged #71 chore(backend): re-vendor .golangci.yml with gomodguard_v2 (closes #41) 2026-09-29 10:56:01 +02:00

Merged #49 next into main: netwatch as one container, ready for upaas 2026-09-29 10:43:13 +02:00

Merged #70 nginx: security headers on every response (closes #18) 2026-09-29 10:22:13 +02:00

Merged #69 fix(backend): cut request log fields to the log bound (closes #60) 2026-09-29 09:39:12 +02:00

Merged #68 nginx: trust X-Forwarded-For only from TRUSTED_PROXIES (closes #64) 2026-09-29 08:55:48 +02:00

Merged #66 fix(backend): give each report file a name of its own (closes #61) 2026-09-29 08:05:27 +02:00

Merged #67 upaas: health check, settings checked at start, README section (closes #59) 2026-09-29 06:39:12 +02:00

Merged #65 nginx: listen on PORT, default 8080; server_tokens off (closes #26) 2026-09-29 04:55:49 +02:00

Merged #63 fix(backend): rate-limit and cap report ingest, drop wildcard CORS (closes #20) 2026-09-29 04:22:20 +02:00

Merged #62 build: one image, nginx in front of the backend on loopback (closes #52) 2026-09-29 02:59:33 +02:00

Merged #38 build: unify the gate so root make check covers the backend (closes #16) 2026-09-29 01:22:09 +02:00

Merged #55 feat(frontend): post collected samples to /api/v1/reports 2026-09-28 23:39:11 +02:00

Merged #58 Report ingest correctness: propagate storage failure, 413 on oversize, global body-size cap 2026-09-28 20:39:39 +02:00

Merged #31 lint: adopt org-standard .golangci.yml and golangci-lint v2.12.2 (closes #14) 2026-09-21 19:30:07 +02:00

Merged #57 fix(server): shut down through fx so buffered reports flush 2026-09-21 18:47:12 +02:00

Merged #44 test: automated responsive-layout harness (closes #13) 2026-09-21 18:29:20 +02:00

Merged #56 feat(backend): server hardening — timeouts, security headers, trusted-proxy client IP 2026-09-21 15:05:27 +02:00

Merged #51 fix(frontend): meet the 44x44 minimum tap target on every control (closes #43) 2026-08-10 16:12:00 +02:00

Merged #50 fix: wrap per-host status line so 320px viewport does not scroll (closes #42) 2026-08-10 16:07:28 +02:00

Merged #40 build: Dockerfile.backend multistage lint stage (closes #17) 2026-08-10 16:04:49 +02:00

Merged #35 chore: root .editorconfig and hardened .gitignore (closes #15) 2026-08-10 15:47:49 +02:00

Merged #12 frontend: gate the Docker build on make check (closes #11) 2026-08-07 17:46:37 +02:00

Merged #10 scripts-to-rule-them-all 2026-07-07 02:14:16 +02:00

Merged #9 TODO 2026-07-06 21:20:37 +02:00

2 Pull requests proposed by 1 user

94 Issues closed from 1 user

Closed #162 A bare go statement in server.go; the Go style guide asks for an anonymous function 2026-10-19 08:24:50 +02:00

Closed #174 .gitignore, .editorconfig and .golangci.yml differ from the sneak/prompts copies the policy is vendored from 2026-10-19 08:22:06 +02:00

Closed #158 package.json says version 1.0.0 at the v1.0.0-rc1 tag 2026-10-19 08:16:30 +02:00

Closed #157 TODO.md Status says there are no git tags, but v1.0.0-rc1 is tagged 2026-10-19 08:13:05 +02:00

Closed #179 netwatch-server starts the server when given arguments it does not understand 2026-10-19 08:09:14 +02:00

Closed #160 cmd/netwatch-server/main.go carries subcommand dispatch that the Go style guide puts in internal/ 2026-10-19 07:53:10 +02:00

Closed #156 script/build stamps versions from annotated tags only; the image build uses --tags 2026-10-19 07:45:18 +02:00

Closed #155 .dockerignore lacks the Go test-binary and coverage patterns the checklist asks for 2026-10-19 07:42:44 +02:00

Closed #153 CI checkout fetches no tags, so the CI-built image stamps the short commit instead of the tag 2026-10-19 07:32:37 +02:00

Closed #154 script/bootstrap keeps any yarn it finds on PATH; the policy says compare versions, never test presence 2026-10-19 07:20:43 +02:00

Closed #163 bin/entrypoint.sh is not in the functions-and-main form the shell style guide asks for 2026-10-19 07:17:33 +02:00

Closed #142 The health check answers ok, and the container stays healthy, while every report is refused with 500 2026-10-19 06:55:52 +02:00

Closed #150 Two report file writes that fail at the same time put their reports back out of order 2026-10-19 06:02:13 +02:00

Closed #159 DEBUG accepts only true or false; the code style guide says any non-empty value enables debug mode 2026-10-19 05:48:21 +02:00

Closed #118 make test takes about 35 seconds, over the 20-second target 2026-10-19 04:28:59 +02:00

Closed #151 The three discarded-check unit tests check only the row, not that nothing was recorded 2026-10-19 03:44:23 +02:00

Closed #161 reportbuf numbers report files with atomic.Uint64; the Go style guide asks for int types 2026-10-19 03:15:41 +02:00

Closed #148 An unusable DATA_DIR stops the standalone server with an error that does not name DATA_DIR 2026-10-19 03:15:35 +02:00

Closed #141 The page's index.html is served without Cache-Control, so a cached copy can point at assets a new deploy no longer has 2026-10-19 03:10:40 +02:00

Closed #147 README describes the backend's 413 answer, but in the image nginx answers 413 first with an HTML page 2026-10-19 02:55:31 +02:00

Closed #146 README does not say that one address at the default limits can replace the whole report store in about 17 minutes 2026-10-19 02:55:30 +02:00

Closed #145 README says the page keeps its samples while reports are refused; at the 1 s interval one refused report already loses 20 s per host 2026-10-19 02:55:30 +02:00

Closed #152 The footer legend puts 500 ms in neither colour band 2026-10-19 01:34:47 +02:00

Closed #149 A failure in the clock formatter runs before the rounds start and stops the page from probing 2026-10-19 01:34:47 +02:00

Closed #143 prepare-data-dir changes the owner of a file outside /data through a hard link in the volume 2026-10-19 01:11:42 +02:00

Closed #144 The backend takes the leftmost X-Forwarded-For address from a trusted proxy, so a client behind an appending proxy picks its own address 2026-10-19 00:28:20 +02:00

Closed #140 After an interval change the summary shows Reachable: 0/26 in red until the second round ends 2026-10-18 23:00:38 +02:00

Closed #134 yarn install prints "Workspaces can only be enabled in private projects" on every build 2026-10-14 15:01:51 +02:00

Closed #122 Stopping the server does not wait for a report file already being written, so its reports are lost 2026-10-14 14:47:02 +02:00

Closed #131 Opening the debug log raises the measured latencies, on the page and in the stored reports 2026-10-14 14:13:04 +02:00

Closed #129 The backend's own TRUSTED_PROXIES default adds loopback, and empty does not trust nothing 2026-10-14 14:01:38 +02:00

Closed #123 Reports are answered ok while report files cannot be written, and are lost 2026-10-14 13:47:14 +02:00

Closed #125 A request whose handler panics is logged, and counted in the metrics, as 200 though it is answered 500 2026-10-14 13:30:12 +02:00

Closed #119 Unset TRUSTED_PROXIES trusts no proxy; the ruled default is the RFC 1918 ranges 2026-10-14 13:01:35 +02:00

Closed #126 Another origin's page can store reports through its visitors' browsers 2026-10-14 12:43:26 +02:00

Closed #124 Changing the interval drops the samples not yet reported to the backend 2026-10-14 12:23:14 +02:00

Closed #30 Repo layout differs from REPO_POLICIES.md, and backend/ repeats repo-level files 2026-10-14 12:01:34 +02:00

Closed #120 Defect hunt before the first release candidate: run it as a user, read the code 2026-10-14 11:31:28 +02:00

Closed #117 yarn install warns three times that workspaces need a private project 2026-10-07 13:59:38 +02:00

Closed #113 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-07 13:45:44 +02:00

Closed #114 Find why the Hetzner targets fail in the browser, and log every failed check to the console 2026-10-07 12:30:57 +02:00

Closed #111 Footer says IPv4 only, but checks use whatever the browser picks 2026-10-04 07:38:07 +02:00

Closed #24 README.md and TODO.md are substantially inaccurate — 14 documented claims contradict the code 2026-10-04 07:03:06 +02:00

Closed #102 src/main.js: two median functions, four passes over a target's history, thresholds written inline 2026-10-04 06:51:24 +02:00

Closed #104 Rate limit password attempts on /metrics 2026-10-04 06:19:08 +02:00

Closed #95 Sentry error reporting when SENTRY_DSN is set 2026-10-04 05:57:03 +02:00

Closed #29 src/main.js: 1262-line monolith with innerHTML injection sinks, unfrozen CONFIG, and duplicated logic 2026-10-04 05:35:37 +02:00

Closed #45 No sanctioned way to add a dependency: script/bootstrap is --frozen-lockfile and nothing updates the lockfile 2026-10-04 05:17:34 +02:00

Closed #94 Prometheus metrics at /metrics behind basic auth when METRICS_USERNAME and METRICS_PASSWORD are set 2026-10-04 04:58:47 +02:00

Closed #28 script/ and Makefile drift from the org models; make dev is not a shim, make build is missing 2026-10-04 04:15:00 +02:00

Closed #32 Node deprecation warning DEP0205 emitted on every frontend build 2026-10-04 03:51:56 +02:00

Closed #21 make test is effectively a no-op: Go tests are compile stubs, frontend has no test framework 2026-10-04 03:25:07 +02:00

Closed #27 Backend observability: fx logs bypass slog, Identify() is dead, Sentry/Prometheus config is parsed but unwired 2026-10-04 03:11:44 +02:00

Closed #47 Run all linting in Docker via Dockerfile.lint + script/lint 2026-10-04 01:58:08 +02:00

Closed #46 Viewport harness: derive .pin-btn presence floor from rowCount, and correct two overclaiming statements 2026-10-04 01:53:03 +02:00

Closed #91 Each target's result shows as soon as its check ends, not when the round's slowest check ends 2026-10-04 01:41:05 +02:00

Closed #80 Entrypoint acts as root on DATA_DIR before checking it: creates outside /data, accepts paths outside /data 2026-10-03 18:24:39 +02:00

Closed #54 Retention: prune old report files in DATA_DIR 2026-10-03 17:51:09 +02:00

Closed #34 golangci config drift guard: failure message loops the operator when the org standard legitimately updates 2026-10-03 17:14:27 +02:00

Closed #88 Go tests run with -race and -cover under Go's own timeout; remaining handler and report-file tests 2026-10-03 16:26:17 +02:00

Closed #78 Target timeout is 80% of the refresh interval 2026-10-03 15:36:48 +02:00

Closed #33 make hooks and make docker both fail when run from a git worktree 2026-10-03 14:30:29 +02:00

Closed #86 docker build . stamps dev, not the git tag or short commit 2026-10-02 04:26:41 +02:00

Closed #36 Exclude .git from .dockerignore once the builds no longer read git metadata 2026-10-02 02:21:58 +02:00

Closed #83 Remove Buildarch: read the architecture at run time with runtime.GOARCH 2026-10-02 01:05:10 +02:00

Closed #82 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:15 +02:00

Closed #77 Entrypoint changes a mode through a symbolic link in the data directory 2026-09-29 12:06:53 +02:00

Closed #75 The container sets its data directory permissions itself before startup 2026-09-29 12:04:00 +02:00

Closed #37 CI can report a green it did not earn: script/cibuild serves make check from the Docker layer cache 2026-09-29 11:55:52 +02:00

Closed #41 golangci-lint v2.12.2 deprecates the gomodguard linter; migrate to gomodguard_v2 2026-09-29 10:56:01 +02:00

Closed #53 Frontend reporting client: POST collected samples to /api/v1/reports 2026-09-29 10:43:14 +02:00

Closed #23 Report ingest correctness: returns 200 on storage failure, 400 on oversize, logs untrusted body 2026-09-29 10:43:14 +02:00

Closed #22 Shutdown is broken: os.Exit races fx OnStop hooks, losing buffered reports on every restart 2026-09-29 10:43:14 +02:00

Closed #18 Frontend image serves zero security headers; add the full REPO_POLICIES set to nginx.conf 2026-09-29 10:22:13 +02:00

Closed #60 Request log writes URL, User-Agent and Referer with no length limit 2026-09-29 09:39:12 +02:00

Closed #64 nginx trusts X-Forwarded-For from every private address, so the rate limit can be dodged 2026-09-29 08:55:48 +02:00

Closed #61 Two report flushes in the same millisecond collide on the file name 2026-09-29 08:05:27 +02:00

Closed #59 Ready to run under upaas on fsn1app1: prod branch, settings from env, health check, README section 2026-09-29 06:39:12 +02:00

Closed #26 nginx: PORT env override is documented but does not exist; add it and server_tokens off 2026-09-29 04:55:49 +02:00

Closed #20 POST /api/v1/reports is unauthenticated, wildcard-CORS, and unrated-limited 2026-09-29 04:22:20 +02:00

Closed #52 Ship one container image: nginx serves the frontend and proxies /api to the backend in the same container 2026-09-29 02:59:34 +02:00

Closed #39 Follow-ups from PR #38: bootstrap re-extract guard, message attribution, and the #31 rebase reconciliation 2026-09-29 01:22:26 +02:00

Closed #16 Unify the gate: root make check must cover the backend, and CI must route through script/ 2026-09-29 01:22:09 +02:00

Closed #14 Adopt the org-standard .golangci.yml and golangci-lint v2.12.2 2026-09-21 19:30:07 +02:00

Closed #13 QA: test responsive mobile layout on real devices 2026-09-21 18:29:20 +02:00

Closed #19 Backend hardening: missing IdleTimeout/ReadHeaderTimeout, no security headers, no trusted-proxy client IP 2026-09-21 15:06:07 +02:00

Closed #25 Decision needed: the backend is not connected to anything — does it ship in 1.0? 2026-09-21 09:48:09 +02:00

Closed #48 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-08-11 13:57:46 +02:00

Closed #43 Mobile: every interactive control is below the 44x44 minimum tap target 2026-08-10 16:12:00 +02:00

Closed #42 Mobile: per-host status line forces horizontal page scroll at 320px 2026-08-10 16:07:28 +02:00

Closed #17 Rework Dockerfile.backend to the mandated Go multistage lint-stage pattern 2026-08-10 16:04:49 +02:00

Closed #15 Dotfile compliance: add root .editorconfig, harden .gitignore, exclude .git from .dockerignore 2026-08-10 15:47:50 +02:00

Closed #4 Add mobile detection: show "Not yet available on mobile" message 2026-08-07 18:06:34 +02:00

Closed #11 Frontend Dockerfile CI build does not run make check (only yarn build) 2026-08-07 17:46:37 +02:00

95 Issues created by 1 user

Opened #11 Frontend Dockerfile CI build does not run make check (only yarn build) 2026-07-25 13:17:50 +02:00

Opened #13 QA: test responsive mobile layout on real devices 2026-08-07 17:49:33 +02:00

Opened #14 Adopt the org-standard .golangci.yml and golangci-lint v2.12.2 2026-08-09 03:36:49 +02:00

Opened #15 Dotfile compliance: add root .editorconfig, harden .gitignore, exclude .git from .dockerignore 2026-08-09 03:37:13 +02:00

Opened #16 Unify the gate: root make check must cover the backend, and CI must route through script/ 2026-08-09 03:37:45 +02:00

Opened #17 Rework Dockerfile.backend to the mandated Go multistage lint-stage pattern 2026-08-09 03:38:14 +02:00

Opened #18 Frontend image serves zero security headers; add the full REPO_POLICIES set to nginx.conf 2026-08-09 03:38:45 +02:00

Opened #19 Backend hardening: missing IdleTimeout/ReadHeaderTimeout, no security headers, no trusted-proxy client IP 2026-08-09 03:39:16 +02:00

Opened #20 POST /api/v1/reports is unauthenticated, wildcard-CORS, and unrated-limited 2026-08-09 03:40:06 +02:00

Opened #21 make test is effectively a no-op: Go tests are compile stubs, frontend has no test framework 2026-08-09 03:40:39 +02:00

Opened #22 Shutdown is broken: os.Exit races fx OnStop hooks, losing buffered reports on every restart 2026-08-09 03:41:42 +02:00

Opened #23 Report ingest correctness: returns 200 on storage failure, 400 on oversize, logs untrusted body 2026-08-09 03:42:45 +02:00

Opened #24 README.md and TODO.md are substantially inaccurate — 14 documented claims contradict the code 2026-08-09 03:43:24 +02:00

Opened #25 Decision needed: the backend is not connected to anything — does it ship in 1.0? 2026-08-09 03:43:57 +02:00

Opened #26 nginx: PORT env override is documented but does not exist; add it and server_tokens off 2026-08-09 03:44:34 +02:00

Opened #27 Backend observability: fx logs bypass slog, Identify() is dead, Sentry/Prometheus config is parsed but unwired 2026-08-09 03:45:07 +02:00

Opened #28 script/ and Makefile drift from the org models; make dev is not a shim, make build is missing 2026-08-09 03:45:41 +02:00

Opened #29 src/main.js: 1262-line monolith with innerHTML injection sinks, unfrozen CONFIG, and duplicated logic 2026-08-09 03:46:19 +02:00

Opened #30 Repo layout differs from REPO_POLICIES.md, and backend/ repeats repo-level files 2026-08-09 03:46:54 +02:00

Opened #32 Node deprecation warning DEP0205 emitted on every frontend build 2026-08-09 03:49:12 +02:00

Opened #33 make hooks and make docker both fail when run from a git worktree 2026-08-09 04:11:48 +02:00

Opened #34 golangci config drift guard: failure message loops the operator when the org standard legitimately updates 2026-08-09 04:25:53 +02:00

Opened #36 Exclude .git from .dockerignore once the builds no longer read git metadata 2026-08-09 07:00:19 +02:00

Opened #37 CI can report a green it did not earn: script/cibuild serves make check from the Docker layer cache 2026-08-09 07:39:59 +02:00

Opened #39 Follow-ups from PR #38: bootstrap re-extract guard, message attribution, and the #31 rebase reconciliation 2026-08-09 10:20:38 +02:00

Opened #41 golangci-lint v2.12.2 deprecates the gomodguard linter; migrate to gomodguard_v2 2026-08-09 12:16:01 +02:00

Opened #42 Mobile: per-host status line forces horizontal page scroll at 320px 2026-08-09 16:50:20 +02:00

Opened #43 Mobile: every interactive control is below the 44x44 minimum tap target 2026-08-09 16:50:35 +02:00

Opened #45 No sanctioned way to add a dependency: script/bootstrap is --frozen-lockfile and nothing updates the lockfile 2026-08-09 17:10:25 +02:00

Opened #46 Viewport harness: derive .pin-btn presence floor from rowCount, and correct two overclaiming statements 2026-08-09 17:46:16 +02:00

Opened #47 Run all linting in Docker via Dockerfile.lint + script/lint 2026-08-10 13:15:09 +02:00

Opened #48 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-08-10 14:30:34 +02:00

Opened #52 Ship one container image: nginx serves the frontend and proxies /api to the backend in the same container 2026-09-21 09:47:41 +02:00

Opened #53 Frontend reporting client: POST collected samples to /api/v1/reports 2026-09-21 09:47:41 +02:00

Opened #54 Retention: prune old report files in DATA_DIR 2026-09-21 09:47:42 +02:00

Opened #59 Ready to run under upaas on fsn1app1: prod branch, settings from env, health check, README section 2026-09-25 11:02:24 +02:00

Opened #60 Request log writes URL, User-Agent and Referer with no length limit 2026-09-28 19:56:06 +02:00

Opened #61 Two report flushes in the same millisecond collide on the file name 2026-09-28 20:40:12 +02:00

Opened #64 nginx trusts X-Forwarded-For from every private address, so the rate limit can be dodged 2026-09-29 03:39:25 +02:00

Opened #75 The container sets its data directory permissions itself before startup 2026-09-29 11:07:46 +02:00

Opened #77 Entrypoint changes a mode through a symbolic link in the data directory 2026-09-29 12:05:41 +02:00

Opened #78 Target timeout is 80% of the refresh interval 2026-09-29 12:20:07 +02:00

Opened #80 Entrypoint acts as root on DATA_DIR before checking it: creates outside /data, accepts paths outside /data 2026-09-29 12:39:19 +02:00

Opened #82 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:22 +02:00

Opened #83 Remove Buildarch: read the architecture at run time with runtime.GOARCH 2026-10-02 00:47:26 +02:00

Opened #86 docker build . stamps dev, not the git tag or short commit 2026-10-02 02:21:44 +02:00

Opened #88 Go tests run with -race and -cover under Go's own timeout; remaining handler and report-file tests 2026-10-03 14:31:58 +02:00

Opened #91 Each target's result shows as soon as its check ends, not when the round's slowest check ends 2026-10-03 15:37:37 +02:00

Opened #94 Prometheus metrics at /metrics behind basic auth when METRICS_USERNAME and METRICS_PASSWORD are set 2026-10-03 17:25:20 +02:00

Opened #95 Sentry error reporting when SENTRY_DSN is set 2026-10-03 17:25:25 +02:00

Opened #102 src/main.js: two median functions, four passes over a target's history, thresholds written inline 2026-10-04 03:43:24 +02:00

Opened #104 Rate limit password attempts on /metrics 2026-10-04 04:03:57 +02:00

Opened #111 Footer says IPv4 only, but checks use whatever the browser picks 2026-10-04 06:31:10 +02:00

Opened #113 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:30:00 +02:00

Opened #114 Find why the Hetzner targets fail in the browser, and log every failed check to the console 2026-10-07 10:33:19 +02:00

Opened #117 yarn install warns three times that workspaces need a private project 2026-10-07 12:42:16 +02:00

Opened #118 make test takes about 35 seconds, over the 20-second target 2026-10-07 13:10:02 +02:00

Opened #119 Unset TRUSTED_PROXIES trusts no proxy; the ruled default is the RFC 1918 ranges 2026-10-14 10:43:16 +02:00

Opened #120 Defect hunt before the first release candidate: run it as a user, read the code 2026-10-14 10:43:26 +02:00

Opened #122 Stopping the server does not wait for a report file already being written, so its reports are lost 2026-10-14 11:00:42 +02:00

Opened #123 Reports are answered ok while report files cannot be written, and are lost 2026-10-14 11:00:48 +02:00

Opened #124 Changing the interval drops the samples not yet reported to the backend 2026-10-14 11:00:54 +02:00

Opened #125 A request whose handler panics is logged, and counted in the metrics, as 200 though it is answered 500 2026-10-14 11:01:00 +02:00

Opened #126 Another origin's page can store reports through its visitors' browsers 2026-10-14 11:01:06 +02:00

Opened #129 The backend's own TRUSTED_PROXIES default adds loopback, and empty does not trust nothing 2026-10-14 11:13:38 +02:00

Opened #131 Opening the debug log raises the measured latencies, on the page and in the stored reports 2026-10-14 11:15:17 +02:00

Opened #134 yarn install prints "Workspaces can only be enabled in private projects" on every build 2026-10-14 12:03:59 +02:00

Opened #139 netwatch 1.0 2026-10-14 15:02:09 +02:00

Opened #140 After an interval change the summary shows Reachable: 0/26 in red until the second round ends 2026-10-14 16:08:45 +02:00

Opened #146 README does not say that one address at the default limits can replace the whole report store in about 17 minutes 2026-10-14 16:08:46 +02:00

Opened #145 README says the page keeps its samples while reports are refused; at the 1 s interval one refused report already loses 20 s per host 2026-10-14 16:08:46 +02:00

Opened #143 prepare-data-dir changes the owner of a file outside /data through a hard link in the volume 2026-10-14 16:08:46 +02:00

Opened #142 The health check answers ok, and the container stays healthy, while every report is refused with 500 2026-10-14 16:08:46 +02:00

Opened #141 The page's index.html is served without Cache-Control, so a cached copy can point at assets a new deploy no longer has 2026-10-14 16:08:46 +02:00

Opened #144 The backend takes the leftmost X-Forwarded-For address from a trusted proxy, so a client behind an appending proxy picks its own address 2026-10-14 16:08:46 +02:00

Opened #147 README describes the backend's 413 answer, but in the image nginx answers 413 first with an HTML page 2026-10-14 16:08:47 +02:00

Opened #148 An unusable DATA_DIR stops the standalone server with an error that does not name DATA_DIR 2026-10-14 16:08:47 +02:00

Opened #149 A failure in the clock formatter runs before the rounds start and stops the page from probing 2026-10-14 16:08:47 +02:00

Opened #150 Two report file writes that fail at the same time put their reports back out of order 2026-10-14 16:08:47 +02:00

Opened #151 The three discarded-check unit tests check only the row, not that nothing was recorded 2026-10-14 16:08:47 +02:00

Opened #152 The footer legend puts 500 ms in neither colour band 2026-10-14 16:08:47 +02:00

Opened #155 .dockerignore lacks the Go test-binary and coverage patterns the checklist asks for 2026-10-14 16:08:48 +02:00

Opened #157 TODO.md Status says there are no git tags, but v1.0.0-rc1 is tagged 2026-10-14 16:08:48 +02:00

Opened #156 script/build stamps versions from annotated tags only; the image build uses --tags 2026-10-14 16:08:48 +02:00

Opened #154 script/bootstrap keeps any yarn it finds on PATH; the policy says compare versions, never test presence 2026-10-14 16:08:48 +02:00

Opened #153 CI checkout fetches no tags, so the CI-built image stamps the short commit instead of the tag 2026-10-14 16:08:48 +02:00

Opened #158 package.json says version 1.0.0 at the v1.0.0-rc1 tag 2026-10-14 16:08:49 +02:00

Opened #159 DEBUG accepts only true or false; the code style guide says any non-empty value enables debug mode 2026-10-14 16:08:49 +02:00

Opened #160 cmd/netwatch-server/main.go carries subcommand dispatch that the Go style guide puts in internal/ 2026-10-14 16:08:49 +02:00

Opened #161 reportbuf numbers report files with atomic.Uint64; the Go style guide asks for int types 2026-10-14 16:08:49 +02:00

Opened #162 A bare go statement in server.go; the Go style guide asks for an anonymous function 2026-10-14 16:08:49 +02:00

Opened #163 bin/entrypoint.sh is not in the functions-and-main form the shell style guide asks for 2026-10-14 16:08:49 +02:00

Opened #174 .gitignore, .editorconfig and .golangci.yml differ from the sneak/prompts copies the policy is vendored from 2026-10-19 03:50:33 +02:00

Opened #179 netwatch-server starts the server when given arguments it does not understand 2026-10-19 06:22:46 +02:00

Opened #189 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-10-22 20:16:30 +02:00