Files
waggle-os/judging/verifier-report.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

6.8 KiB

Verifier Report — commit b508583

Verifier: fresh-context, did not author the code. Commit: b50858396a186c0166b5bde6cefdafc0843b79a7 (HEAD of main at verification time; parent d369f6a). Date: 2026-06-12.

Verdict: PASS

All five claimed code changes are present, traceable to the mission, and covered by new tests. All touched test files green; full FE suite 925/925 and server local suite 917/917 green; both typechecks clean (0 errors). No scope creep, no new dependencies, no flags/shims found.


1. Diff review (claimed changes vs actual)

# Claim Verified
1 Home briefing 'Up next' dedups global cron schedules across workspaces (home.ts) YES — seenUpNextLabels Set hoisted above the per-workspace loop; both the per-workspace and global passes check/populate it. The old per-pass seenLabels (built from upNext.map(label)) is subsumed; at that point in the flow upNext only ever contained schedule items, so semantics are equivalent plus the new cross-workspace dedup.
2 buildUpcomingSchedules filters past-due next_run_at (workspace-context.ts) YES — single added .filter(s => new Date(s.next_run_at).getTime() > nowTs) with a comment correctly pointing at cron-store getDueSchedules/markRun recompute.
3 Monthly assessment frame replace-on-update per period (monthly-assessment.ts) YES — frames.deleteByContentPrefix('# Monthly Agent Assessment — <period>') before insert. The prefix exactly matches the content header built below it, and includes the period so other months are untouched. deleteByContentPrefix pre-exists in packages/hive-mind-core/src/mind/frames.ts:343 (also used by extract-memory-lanes.ts) — the commit does NOT touch the OSS substrate.
4 Memory Center default status filter Active (MemoryCenterTab.tsx) YES — `useState<''
5 Login briefing 30-min dismiss cooldown (login-briefing.ts + useOverlayState.ts + AppShell.tsx) YES — new LOGIN_BRIEFING_LAST_DISMISSED_AT_KEY localStorage timestamp, LOGIN_BRIEFING_COOLDOWN_MINUTES = 30, optional minutesSinceLastDismiss input to the pure shouldShowLoginBriefing, wired in useOverlayState. AppShell records the timestamp on dismiss AND on open-workspace-from-briefing (both are engagement; correct). Corrupt/missing stored values return null → briefing shows (fail-open to the original behavior).
6 +11 regression tests YES — exact count: 6 in login-briefing.test.ts (3 visibility-gate + 3 storage round-trip/corrupt), 1 in p3-two-mind-memory.test.tsx, 3 in home.test.ts (dedup-across-workspaces, past-due-excluded, buildUpcomingSchedules unit incl. workspace scoping), 1 in monthly-assessment.test.ts (replace same period / preserve other periods).
7 Goal artifacts: PLAN.md, notes/ (5 files, ~10 lines each), judging/screenshots/ (13 PNGs) YES — non-code mission artifacts; PLAN.md §5 explicitly restates the boundary contract.

Boundary checks:

  • No new dependencies — no package.json/lockfile changes in the commit.
  • No flags or compat shimsLOGIN_BRIEFING_COOLDOWN_MINUTES is a constant, not a toggle; the optional minutesSinceLastDismiss? param has null-means-never semantics, not a compat path.
  • Backend touched only to surface memory/agent state — all 3 server changes are briefing/assessment display-correctness fixes.
  • Validation at system boundaries only — the only added validation is Number.isFinite on a localStorage read (persisted external data = boundary). Correct.
  • No unrelated refactoring — every changed line traces to one of the five fixes.

2. Touched test files

npx vitest run packages/server/tests/local/home.test.ts packages/server/tests/local/monthly-assessment.test.ts --root .
→ 2 files passed, 25/25 tests passed

npx vitest run apps/web/src/lib/login-briefing.test.ts apps/web/src/test/p3-two-mind-memory.test.tsx apps/web/src/test/p3-memory-center-app.test.tsx --root apps/web
→ 3 files passed, 43/43 tests passed

(The briefing: state build failed ... dataDir stderr lines in home.test.ts are intentional test-fixture noise — localConfig deliberately absent per the file header; the route's non-blocking catch handles it.)

3. Regression sweeps

npx vitest run --root apps/web                       → 89 files, 925/925 passed
npx vitest run packages/server/tests/local --root .  → 76 files, 917/917 passed

Zero failures in either suite — no parent-commit comparison needed.

4. Typecheck

npx tsc --noEmit --project packages/server/tsconfig.json   → exit 0
npx tsc -p apps/web/tsconfig.app.json --noEmit             → exit 0

5. Do the new tests assert the new behavior?

Yes, all of them assert behavior (not implementation details):

  • Dedup: 3 workspaces + 1 global schedule → injects /api/home/briefing, asserts exactly ONE "Memory compaction" label. This fails on the parent code (which emitted one per workspace).
  • Past-due: past + future schedules → past absent, future present exactly once.
  • Unit: buildUpcomingSchedules filters past, keeps future, excludes other-workspace schedules.
  • Assessment upsert: save → re-save same period with changed data → save different period; asserts 2 total frames, exactly 1 for March, and that it carries the UPDATED value (Interactions: 120) — proves replace, not skip.
  • Memory default: asserts the adapter is called with status: 'active' AND the Active button has aria-pressed=true — both data and UI contract.
  • Cooldown: hides at 2 min, shows at 31 min, null (never dismissed) shows; storage round-trips minutes with injectable now, corrupt value → null. Boundary at exactly 30 min resolves to "show" (< 30), consistent with "30-min cooldown".

6. Minor observations (non-blocking, no action required)

  1. Label-collision dedup edge: dedup keys on the display label "<name> at <Mon D, H:MM>". Two distinct workspace-scoped schedules sharing the same name and same next-run minute across workspaces would render once. Implausible in practice and arguably desirable display behavior; consistent with "simplest thing that works."
  2. Clock-skew edge: if the system clock moves backwards after a dismiss, minutesSinceLastDismiss is negative → < 30 → briefing suppressed for up to 30 min. Harmless.
  3. writeLoginBriefingLastDismissedAt() is also called on permanent dismiss — redundant (permanent flag wins) but harmless.
  4. Untracked judging/screenshots/_crops/ exists in the working tree but is not part of the commit.

Final

PASS — all 5 fixes verified in-diff and behavior-asserted by 11 new tests; FE 925/925, server-local 917/917, tsc 0+0; zero scope creep, zero new deps, zero regressions.