• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lsm / HyperNeo / 30735256214

02 Aug 2026 06:04AM UTC coverage: 83.086% (-0.04%) from 83.122%
30735256214

push

github

web-flow
feat(space): split drift into "Update available" vs "Customized" (#2309)

* feat(space): split agent/workflow drift into "Update available" vs "Customized"

The single `drifted` boolean conflated two unrelated signals — "the user
customized this row" and "the template improved in code" — and the "Outdated"
badge implied the user did something wrong. Split into two independent signals,
both measured against the stored hash as the common reference:

  updateAvailable = currentHash !== storedHash   (template moved; == old drifted)
  customized      = rowHash      !== storedHash   (row moved; NEW)

Four-state UI: nothing | quiet "Customized" tag | "Update available" (safe,
one-click apply) | "Update available" + "Customized" (review diff before
apply). User-created agents/workflows never badge.

Agents: getAgentDriftReport + SpaceWorkerAgentDriftEntry now return
updateAvailable/customized/rowHash; the rowHash is computed from the row's
fingerprint fields (name/description/tools/customPrompt). updateAvailable is
byte-identical to the former drifted on a pristine row.

Workflows: spaceWorkflow.detectDrift returns the same split (it already
computed the workflowContentHash/rowHash, just OR'd into one flag).
checkBuiltInWorkflowDriftOnStartup logs "update available" vs "customized".

Dangerous case: reuses PR #2305's read-only previewTemplateSync diff for
agents and adds a parallel structural preview for workflows — both gate the
apply behind a review modal. No new write RPC; syncFromTemplate stays the only
sync surface.

* fix(space): address review — workflow diff-gate, re-stamp signal, apply guard

P1 #1 — workflow diff-review gate was hollow: buildWorkflowSyncDiff only
enumerates description/instructions/step-names, but customized can live in
gates/channels/hooks/per-step prompts. When it did, the modal showed an empty
diff and falsely claimed "structure already matches". The modal now (a) never
claims that when customized, (b) always shows a persistent "... (continued)

12026 of 17178 branches covered (70.01%)

Branch coverage included in aggregate %.

102126 of 120213 relevant lines covered (84.95%)

300.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

63.81
/packages/web/src/components/MessageInput.tsx


Source Not Available

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc