tinymux/tests
Stephen Dennis 4d3a85c536 feat(comsys): channel config moves to columns, closing #1585 (#1589 stage 2)
Stage 2 moves the last piece of engine-owned channel state out of
attributes.  LOG_TIMESTAMPS becomes a column on the channel row
(schema v15, seeded from the attribute by the same "non-empty is on"
rule both implementations settled on in #1604).

This is what closes #1585 rather than working around it.  As an
attribute the engine wrote the flag as GOD with AF_CONST, and
bCanSetAttr denies AF_CONST in every branch including God's -- so the
module's permission-checked write was refused and a channel whose
timestamps the engine had turned on could never be turned off from the
other side.  A column has no permission bits to refuse with, so the
whole class goes away.

What deliberately does NOT move: MOGRIFY`* and CHATFORMAT.  Those are
game-authored softcode, not server configuration, and attributes are
exactly the right home for them.  The line stage 2 draws is ownership --
engine-owned config becomes columns; code the game wrote stays where the
game can edit it.

The attribute is left in place, inert, on the same reasoning as
HISTORY_%d: a wrong migration should be recoverable rather than terminal.

  ok 1  - engine enables timestamp logging
  ok 2  - engine records retention on the channel row
  ok 3  - module reads the retention the engine set
  ok 4  - module reads history the engine wrote
  ok 5  - engine reads history the module wrote
  ok 6  - both implementations' messages, in order
  ok 7  - module keeps writing past the point the ring would wrap
  ok 8  - retention expires the oldest entries
  ok 9  - cmsgs() reports the retained count, matching retention
  ok 10 - timestamps the engine enabled apply under the module
  ok 11 - module can clear a flag the engine set (#1585)
  ok 12 - engine sees the flag the module cleared

  === comsys handoff: 12 passed, 0 failed, 0 known-failing ===

No TODO markers remain in that file.  Cases 11 and 12 were the last one.

Two things this turned up, both the same shape and both caught by the
fixture rather than by reading:

  - The module's @cset/timestamp_logs gate asked whether the MAX_LOG
    ATTRIBUTE existed.  Nothing writes it since stage 1, so the gate
    rejected every channel configured after the migration and the
    command silently stopped working.  The engine had the identical gate
    and the identical failure, fixed the same way.  Moving a value out of
    a store means finding every reader, and "does this attribute exist"
    is a reader that does not look like one.

  - The driver's own assertions had to move from get(HObj/LOG_TIMESTAMPS)
    to recall output.  Reading the attribute would have tested storage
    that no longer decides anything, and would have kept passing after
    the flag stopped mattering -- the failure mode where a test outlives
    the thing it inspects.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 14:54:11 -06:00
..
alarm fix(alarm): construct worker before marking started; harden review tests 2026-07-23 23:59:56 -06:00
color_ops Fix splice() to use color-stripped comparison; remove co_splice_raw 2026-04-02 12:02:12 -06:00
comsys_handoff feat(comsys): channel config moves to columns, closing #1585 (#1589 stage 2) 2026-07-27 14:54:11 -06:00
comsys_history feat(comsys): channel config moves to columns, closing #1585 (#1589 stage 2) 2026-07-27 14:54:11 -06:00
config fix(conf): make an unreadable configuration file fatal (#1601) 2026-07-27 11:20:21 -06:00
db Retire ISSUES.md trackers; migrate open items to GitHub issues 2026-06-04 20:14:00 -05:00
dbt test(dbt): close out the inline-call route this PR left unverified 2026-07-27 09:34:25 -06:00
format nls: first format-string slice — rob give/kill templates (#1419) 2026-07-27 13:56:53 +00:00
libmux fix(libmux): fail cleanly when the module transport is used before init (#1362) 2026-07-26 08:42:36 -06:00
luajit test(lua/jit): assert execution, not attempts, and show what declined (#1426) 2026-07-27 09:18:30 -06:00
narrowing fix(engine): clamp @poor's limit and widen hasquota's stored quota (#1402) 2026-07-27 06:02:12 -06:00
netaddr build(asan): tests/netaddr must honour the tree's sanitizer flags (#1522) 2026-07-27 05:54:15 -06:00
nls nls: first format-string slice — rob give/kill templates (#1419) 2026-07-27 13:56:53 +00:00
parity213 Merge master into fix/1247-fmand-abort 2026-07-26 12:03:36 -06:00
scenario test(scenario): cover the Lua half of the wall-clock budget (#1591) 2026-07-27 12:27:06 -06:00
stress test(stress): live network+queue stress harness (defensive) 2026-07-21 19:04:57 -06:00
build-msvc.sh build(win32): add /utf-8 to the MSVC projects (#1499) 2026-07-26 20:58:42 -06:00