re: the seven chatter fields, read off sub_82213980

The one function referencing all seven field-name strings is the rule table's
loader.  Interval / IntervalFluctuation / EffectiveTime are SECONDS, emitted
as *60 frame counts; Probability is a percentage and zero skips the record;
Pattern is a 4-arm enum of which only Sound and Window ship; the Yes/No pair
element is a u32 bitmask, which is why MessageCount is clamped to 32 (max on
disc is 26).  40-byte object layout recorded.  13 dead records characterised.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
Claude (auto)
2026-08-27 16:35:56 +00:00
parent 6a81268cf1
commit c4fd90baa9
5 changed files with 190 additions and 5 deletions

View File

@@ -118,6 +118,43 @@ def main():
print('MessageCount*2 == positional count: %d/%d (mismatches %d)' % (ok, ok + bad, bad))
print('second-of-pair values : %s' % dict(flags))
# value census of the seven named fields, against sub_82213980's reader
FIELDS = ['EffectiveTime', 'Interval', 'IntervalFluctuation', 'Priority',
'Probability', 'Pattern', 'MessageCount']
vals = {f: collections.Counter() for f in FIELDS}
cross = collections.Counter()
yes_bits = collections.Counter()
over32 = 0
for recs in rule.values():
for r in recs:
if r['squadron'] == 'Sperkers':
continue
d = U.named(r)
for f in FIELDS:
vals[f][d.get(f)] += 1
n, pr = int(d['MessageCount']), int(d['Probability'])
cross[(n == 0, pr == 0)] += 1
if n > 32:
over32 += 1
pos = [v for _, nm, v in r['fields'] if nm is None]
yes_bits[sum(1 for i, v in enumerate(pos) if i % 2 and v == 'Yes')] += 1
print()
print('value census of the seven named fields (all %d event records):' % sum(vals['Priority'].values()))
for f in FIELDS:
v = vals[f]
try:
order = sorted(v, key=lambda x: int(x))
except (TypeError, ValueError):
order = sorted(v, key=str)
print(' %-20s %2d distinct %s' % (
f, len(v), ' '.join('%s=%d' % (k, v[k]) for k in order)))
print(' (MessageCount==0, Probability==0) cross-tab: %s' % {
'both zero': cross[(True, True)], 'both set': cross[(False, False)],
'no lines but Probability>0': cross[(True, False)],
'lines but Probability==0 (dead)': cross[(False, True)]})
print(' records with MessageCount > 32 (the reader clamps here): %d' % over32)
print(' Yes-bits per record: %s' % dict(sorted(yes_bits.items())))
print()
print('the 64 event records, and how many of the %d tables give each one lines:' % len(rule))
for name in sorted(n for n in shape if n != 'Sperkers'):