Skip to content

History / Communication debugging

Revisions

  • Seven pages carried the same broken line, and nobody had ever built one The samples are compiled now (WikiSampleCompilationTests in tik4net.unittests), and the first run found six defects: * `new TikConnectionSetup(HOST, USER, PASS).setup.CreateXConnection()` - a stray receiver in the opening call, on all seven transport pages that have one. * `IpProxy.MaxSessions` does not exist; the example now uses MaxClientConnections and makes the point that survives - an assigned value equal to the declared default is still not sent. * The REST listen example invented `onAdded:` / `onChanged:` / `onDeleted:`. * `long? up = q.MaxLimit?.Upload` - each half of a TikRatePair is itself a TikDataRate, because a half can hold a word too. * Safe Mode showed `connection.SafeModeTake()` eight lines under a paragraph saying there is deliberately no such shim on a plain ITikConnection. * `Objects.Ip.IpAddress` compiles for nobody: a using-namespace directive imports a namespace's types, not its nested namespaces. Two conventions the check needs, both of which also tell the reader something: `<!-- no-compile: why -->` marks the 22 blocks that cannot compile by design - an elided body, one link of a fluent chain, code shown *because* it no longer compiles - and a second test fails if such a marker stops being needed. `<!-- sample-connection: ... -->` lets a page state what its snippets assume `connection` already is, which CRUD examples needed because it opens one ITikApiConnection at the top and continues from it. Also here: WinBox Native documents the two members its interface now declares (UseGuiNames, CatalogHandlerCount) and where the pre-Open mapping settings live; TikValue is deferred out of 4.0 with the reason and with what the shipped value types do and do not cover; the native transports are "experimental" on the roadmap too, matching what every other page has said all along.

    @danikf danikf committed Aug 29, 2026
  • Entity value types: the conversions normalise, and a word is not a gap Two things the page did not say. The implicit conversions keep the VALUE, not the spelling: TikDuration time = "10:00:00" comes back as "10h". That is the point of the type -- both spellings are one value and compare equal, and ToString() writes the form every transport accepts -- but it means these must never be compared as strings, and the page now shows that with the example rather than leaving it to be discovered. And the part the type only just learned: 'none' is a router STATE, while text we cannot read is a gap in tik4net, and they used to be the same Token. Kind now separates Value / Special / Unknown; Special is a typed enum, so a check is `lease.Special == TikDurationSpecial.None` rather than a string comparison, and a write is FromSpecial(...) rather than a spelling at the call site. Unknown still round-trips verbatim but raises a note on the new value.token trace channel -- documented in the channel table -- because a token that behaves perfectly is exactly how a missing word stays missing. Also: a bare word in a rate pair applies to both halves. It used to become "unlimited/0", which is a configuration the router never reported.

    @danikf danikf committed Aug 29, 2026
  • Communication debugging & testing: split into the fake and the trace The page owned two subjects that share only the word "debugging": replacing the router with a fake so tests run in CI, and watching a real exchange. A reader arriving for one had to walk past the other, and the title promised both. Unit-testing-without-a-router now holds TikFakeConnection and sits with the three Testing-* pages it links to. Communication-debugging holds OnReadRow/OnWriteRow, TikWireTrace and the console sample for trying out API syntax. Each opens with what it is and points at the other. Seventeen inbound links were re-pointed one at a time rather than by pattern -- they do not all go to the same half, and two of them named both subjects in one line and became two links. The old page is deleted: nothing links to it, and the link graph has no broken references and no orphans. Also here, because it is one line: the ordered-menu list in High-level-API-advanced gains the bridge firewall and /routing/ospf/interface-template. The router was asked -- /interface/bridge/filter and /interface/bridge/nat both offer a move verb -- so their absence was a gap in the entities, now fixed in the library.

    @danikf danikf committed Aug 29, 2026