Skip to content

Commit b3a1671

Browse files
author
web3blind
committed
Dedupe chronicle blessing replays
1 parent 620e386 commit b3a1671

4 files changed

Lines changed: 12 additions & 4 deletions

File tree

app/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
<script src="js/ui/screens/character.js"></script>
185185
<script src="js/ui/screens/hunt.js"></script>
186186
<script src="js/ui/screens/inventory.js"></script>
187-
<script src="js/ui/screens/chronicle.js?v=20260621f"></script>
187+
<script src="js/ui/screens/chronicle.js?v=20260621g"></script>
188188
<script src="js/ui/screens/duel.js"></script>
189189
<script src="js/ui/screens/arena.js?v=20260621d"></script>
190190
<script src="js/ui/screens/guild.js?v=20260621d"></script>

app/js/ui/screens/chronicle.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ var ChronicleScreen = (function() {
243243
entries.push({
244244
type: 'action',
245245
account: action.sender,
246+
receiver: action.receiver || '',
246247
text: postText,
247248
actionType: action.type,
248249
timestamp: action.timestamp,
@@ -302,7 +303,12 @@ var ChronicleScreen = (function() {
302303
var seen = {};
303304
var out = [];
304305
for (var i = 0; i < entries.length; i++) {
305-
var key = (entries[i].account || '') + '|' + (entries[i].blockNum || 0) + '|' + (entries[i].actionType || '') + '|' + (entries[i].text || '');
306+
var key;
307+
if (entries[i].actionType === 'blessing_sent') {
308+
key = (entries[i].account || '') + '|blessing_sent|' + (entries[i].receiver || '') + '|' + (entries[i].text || '');
309+
} else {
310+
key = (entries[i].account || '') + '|' + (entries[i].blockNum || 0) + '|' + (entries[i].actionType || '') + '|' + (entries[i].text || '');
311+
}
306312
if (seen[key]) continue;
307313
seen[key] = true;
308314
out.push(entries[i]);

app/sw.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Viz Magic — Service Worker
2-
var CACHE_NAME = 'viz-magic-v19';
2+
var CACHE_NAME = 'viz-magic-v20';
33
var ASSETS = [
44
'/',
55
'/index.html',

tests/player-bug-regressions.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ test('chronicle keeps loaded tabs visible and shows sent blessings immediately',
122122
assert.ok(/cachedFeedHtml\[currentTab\]/.test(chronicleJs), 'chronicle should reuse loaded tab HTML before async refresh');
123123
assert.ok(/function _injectLocalBlessing/.test(chronicleJs), 'chronicle should add local blessing feedback after broadcast success');
124124
assert.ok(/_injectLocalBlessing\(account, energy\)/.test(chronicleJs), 'blessing success path should inject visible local action');
125+
assert.ok(/receiver: action\.receiver/.test(chronicleJs), 'chronicle entries should preserve blessing receiver for dedupe');
126+
assert.ok(/\|blessing_sent\|/.test(chronicleJs), 'blessing dedupe should ignore optimistic/replay block mismatch');
125127
});
126128

127129

@@ -185,7 +187,7 @@ test('high-traffic UI narration and inventory stat labels are translated', funct
185187

186188
test('service worker updates quickly and keeps navigations network-first', function () {
187189
const swJs = read('app/sw.js');
188-
assert.ok(/viz-magic-v19/.test(swJs), 'service worker cache version should be bumped');
190+
assert.ok(/viz-magic-v20/.test(swJs), 'service worker cache version should be bumped');
189191
assert.ok(/self\.skipWaiting\(\)/.test(swJs), 'service worker should activate new cache without waiting for all tabs to close');
190192
assert.ok(/self\.clients\.claim\(\)/.test(swJs), 'service worker should claim clients after activation');
191193
assert.ok(/event\.request\.mode === 'navigate'[\s\S]*fetch\(event\.request\)/.test(swJs), 'navigation requests should prefer network to avoid stale cached index');

0 commit comments

Comments
 (0)