Skip to content

port(upstream#1962): naive-clock notice says it clears itself - #43

Merged
adminopenclaw8-sketch merged 4 commits into
masterfrom
codex/port-upstream-1962-naive-clock-notice-text
Sep 17, 2026
Merged

adminopenclaw8-sketch merged 4 commits into
masterfrom
codex/port-upstream-1962-naive-clock-notice-text

Conversation

@adminopenclaw8-sketch

@adminopenclaw8-sketch adminopenclaw8-sketch commented Sep 13, 2026 •

Copy link
Copy Markdown
Collaborator

"Split out of #25 (commit 2a745f4c there). This branch holds exactly one upstream change so it can be reviewed, tested and reverted on its own.\n\n## Upstream\n- PR: Kpa-clawbot/CoreScope#1962 by @efiten, merged 2026-09-04\n- Upstream commit: 83134d6e7022bb1575d04c2b6809514a614ded5c\n- Applied with git cherry-pick -x onto master fda24ca5; upstream authorship kept, and the commit message carries the (cherry picked from commit …) line.\n- Patch-id identical to the #25 commit and to the upstream commit.\n- Scope: public/observers.js (one string).\n\n## Problem\nThe observer slide-over told operators their clock is naive but not that the notice goes away on its own.\n\n## Change\nAppends “Clears itself 24h after the last skew event.” to the notice text.\n\n## Adaptation to this fork\nNone. The cherry-pick applied without conflicts and the changed lines are identical to upstream.\n\n## Dependencies and merge order\n- Independent. Branched directly from master fda24ca5 and needs no other PR from this split.\n- A merge simulation of all 24 split PRs gives the same tree in upstream order and in reverse order.\n- The same simulation also merges cleanly with each of the open #11, #13 and #22, and with #33 (opened during this split; it makes TestPruneOldNeighborMetrics deterministic). If #33 lands first, the expected CI failure named below disappears; nothing in this PR depends on it.\n- Recommended position: 17 of 24, following upstream's merge order (the order #25 was assembled in).\n\n## Verification\nLocal run of the same commands as CI's “Go Build & Test” job (server tests with -race), on this branch and on master fda24ca5 under the same conditions (same machine, run one after another):\n\n| Check | master fda24ca5 | this branch | verdict |\n|---|---|---|---|\n| xss-gate-diff | PASS | PASS | |\n| channel-lib-test | PASS | PASS | |\n| decrypt-cli-build-test | PASS | PASS | |\n| dockerfile-copy-invariants | FAIL | FAIL | not runnable locally: script needs bash ≥4 (declare -A), macOS has 3.2; identical on master |\n| staging-disk-monitor | PASS | PASS | |\n| css-vars-lint | PASS | PASS | |\n| JS unit tests from CI list + AGENTS.md set (67 files) | see below | 63 PASS, 4 FAIL | |\n| test-issue-1375-scope-stats-fetch.js | FAIL | FAIL Exactly one api('/scope-stats' call exists (the fixed loader) — found 2 | baseline failure, unchanged |\n| test-issue-1648-m4-emoji-scan.js | FAIL | FAIL map.js has 1 emoji/misc-icon hit(s): | baseline failure, unchanged |\n| test-a11y-axe-routes-coverage.js | FAIL | FAIL axe ROUTES missing analytics tabs (issue #1706): areas, foreign-traffic, wardriving | baseline failure, unchanged |\n| test-frontend-helpers.js | FAIL | FAIL favStar returns empty star for non-favorite: The expression evaluated to a falsy value:, favStar returns filled star for favorite: The expression evaluated to a falsy value: | baseline failure, unchanged |\n\nBaseline failures (fail identically on master; not introduced or changed here): see rows marked baseline failure, unchanged.\n\nBrowser validation (local, fixture DB, no staging/production): Local Go server (built from master) on the committed E2E fixture DB (freshened, migrated and seeded exactly like CI), serving this branch's public/, compared side by side with the same server serving master's public/. Fixture copy: observer "DUBLIN Observer" given a current clock_last_naive_at so /api/observers reports clock_naive: true. The notice lives in the observer slide-over, which the app only uses at narrow widths, so both runs used a 375×812 mobile viewport and clicked the observer row. master slide-over: "Clock is naive — per-packet timing clamped to ingest time." this branch: "Clock is naive — per-packet timing clamped to ingest time. Clears itself 24h after the last skew event."\n\nNot run:\n- Playwright E2E suites (no local Playwright install); CI's E2E job will also be skipped, see below.\n- eslint (not installed locally; CI installs it on the fly).\n- Go -race/tests for modules this PR does not touch (unchanged code, identical to master).\n- Browser tests against staging/production (deliberately none).\n\nExpected GitHub CI: “Go Build & Test” is expected to fail on TestPruneOldNeighborMetrics, which already fails on master (see #25's run). Downstream jobs (Playwright, image build) are therefore skipped. “Deploy Staging” and all GHCR publish steps only run on push to master and cannot run for this PR.\nTwo further ingestor tests have failed intermittently in this split's CI on branches whose cmd/ingestor tree is byte-identical to master (#27, #28), so they can also appear here without being caused by this change:\n- TestBackfillTxLastSeen_ResolvesFromMaxObservationTimestamp: also reproduced locally on unmodified master.\n- TestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749: the suite flake that upstream Kpa-clawbot#2003 (also split out of #25) addresses.\n\nGitHub CI result: run 34751731885 on bd3d73c2. Go Build & Test: failure; all downstream jobs incl. Deploy Staging skipped. Failed tests:\n - TestPruneOldNeighborMetrics: fails on master, documented baseline\n - TestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749: intermittent suite flake. It is not reproduced locally on master: 0/20 and 0/100 (-cpu=1/-cpu=2) runs of the watchdog tests, and 3 full ingestor-suite runs. This branch's cmd/ingestor and internal trees are byte-identical to master, so the ingestor test binary is the same as master's; the failure has hit two frontend-only split PRs (#27, #43). Upstream documents it as flaky on clean master (2/20), and Kpa-clawbot#2003 (split PR #48) fixes the test\n\n🤖 Generated with Claude Code\n\n## Update — current master 693eb04 (2026-09-17)\n\nThe existing PR branch was updated without force-push from bd3d73c2 to 350b0b74. The merge graph preserves the original upstream-attributed commit, incorporates green master 693eb045dbb10ecdd4657444134a696f007297e1, and includes the verified local prep commit c32b640c.\n\nThe PR diff against current master remains exactly public/observers.js.\n\n### Fresh verification on 350b0b7\n\n- node --check public/observers.js: PASS\n- node test-observer-naive-clock-1478.js: 8/8 PASS for list-chip and detail-banner rendering\n- git diff --check: PASS\n- test-naive-banner-tone.js: FAILS because its document stub lacks addEventListener; the same harness failure reproduces unchanged on master 693eb045\n\nNo staging, production, deployment, workflow, or auto-merge action was performed. GitHub PR CI: run 35220097556 completed successfully. Go/build gates and Playwright E2E passed. The Docker job performed only the local staging build; GHCR login/push, release artifacts, staging deploy, and badge publication were skipped.\n\n"

…pa-clawbot#1962)

Closes Kpa-clawbot#1896.

The banner told operators their clock is naive but not that the notice
goes away on its own, so people went looking for Kpa-clawbot#1480 to find out. One
sentence:

> Clock is naive — per-packet timing clamped to ingest time. **Clears
itself 24h after the last skew event.**

## Verified before writing it into the UI

The issue asserts the 24h self-clear. Rather than repeat that, I checked
it:

- `cmd/server/observer_naive_clock.go:8` — `const
observerNaiveClockWindow = 24 * time.Hour`
- `applyObserverNaiveClock` applies the decay at read time and leaves
`clock_naive` false once the last event is older than the window
- its own comment: *"any event older than observerNaiveClockWindow is
treated as absent so the chip and banner clear automatically without a
background sweep"*

So "24h after the last skew event" is accurate, including the fact that
it needs no sweep and no restart.

No test pinned the old string.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 83134d6)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
efiten and others added 3 commits September 16, 2026 11:48
…pa-clawbot#1962)

Closes Kpa-clawbot#1896.

The banner told operators their clock is naive but not that the notice
goes away on its own, so people went looking for Kpa-clawbot#1480 to find out. One
sentence:

> Clock is naive — per-packet timing clamped to ingest time. **Clears
itself 24h after the last skew event.**

## Verified before writing it into the UI

The issue asserts the 24h self-clear. Rather than repeat that, I checked
it:

- `cmd/server/observer_naive_clock.go:8` — `const
observerNaiveClockWindow = 24 * time.Hour`
- `applyObserverNaiveClock` applies the decay at read time and leaves
`clock_naive` false once the last event is older than the window
- its own comment: *"any event older than observerNaiveClockWindow is
treated as absent so the chip and banner clear automatically without a
background sweep"*

So "24h after the last skew event" is accurate, including the fact that
it needs no sweep and no restart.

No test pinned the old string.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 83134d6)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@adminopenclaw8-sketch
adminopenclaw8-sketch merged commit 99d336e into master Sep 17, 2026
6 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.

2 participants