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 shims —
LOGIN_BRIEFING_COOLDOWN_MINUTESis a constant, not a toggle; the optionalminutesSinceLastDismiss?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.isFiniteon 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:
buildUpcomingSchedulesfilters 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 hasaria-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)
- 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." - Clock-skew edge: if the system clock moves backwards after a dismiss,
minutesSinceLastDismissis negative →< 30→ briefing suppressed for up to 30 min. Harmless. writeLoginBriefingLastDismissedAt()is also called on permanent dismiss — redundant (permanent flag wins) but harmless.- 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.