Skip to content

History / One task on every transport and API level

Revisions

  • One task, Low-level API: the byte counters are in neither print form The five ADO.NET-like CLI tabs still said 'detail' brings back the byte counters. It does not -- measured over the raw CLI: as-value gives 8 fields, detail 14, and rx-byte/tx-byte are in neither; they need 'print stats'. The Level-1 tabs were corrected when they were rewritten, so these five now carry the same wording. Low-level-API: the two raw entry points fail differently on the transports that have no command language. CreateRawCommand throws at run time, but CallCommandSync is not on ITikRestConnection / ITikWinboxNativeConnection at all, so writing it does not compile. The page named only the throw.

    @danikf danikf committed Aug 29, 2026
  • One task: rewrap the three "not a program" paragraphs Line breaks only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @danikf danikf committed Aug 29, 2026
  • One task: the four "not a program" tab titles match the others Literal em dash and separator in the four new summary lines, the way the other 29 tabs are written, and the Rest tab keeps its "(RouterOS 7.1+)" qualifier. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @danikf danikf committed Aug 29, 2026
  • One task: the low level speaks each transport's own language, or none Rewrote the Level-1 section against a live RouterOS 7.24 router. Every tab declared ITikConnection and called CallCommandSync, which does not compile: the method is on ITikRawSentenceConnection. The seven programs now ask the transport's own factory for the connection (CreateApiConnection, CreateTelnetConnection, ...) and get a type that has it. The five CLI tabs sent API sentence words. This level sends what it is given unchanged, so on a terminal it takes a RouterOS CLI line; they now send ':put [/interface print detail as-value where comment="..."]' and '/interface set *2 comment="..."'. All seven programs were compiled and run against the router; OUTPUT is what they printed, including the empty-result and refusal branches. Rest, RestSsl, WinboxNative and WinboxNativeMac declare no RawCommand and have no CallCommandSync at all, so their four tabs now explain why the level does not exist there and point at the ADO.NET-like and O/R mapper tabs, which do work. Also measured: the CLI summary column set is 8 fields, 'detail' raises it to 14, and the byte counters are in neither - they need 'print stats'. The counts of programs are corrected from 33 to 29. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @danikf danikf committed Aug 29, 2026
  • One task: say that the low-level tabs are API-sentence-only, pending a rewrite

    @danikf danikf committed Aug 29, 2026
  • The recovery transports, documented for the recovery case All three MAC pages promised access to a router with no reachable IP and then passed a host in every example. They now show the case they are for: address the setup by MAC alone and give no host. Two consequences are worth stating rather than discovering: the MAC has to be given (MNDP answers "the MAC of the router at this address", which a MAC-only session has no address to ask about), and the local interface is found by trying, so a machine with many adapters wants room in ConnectTimeout.

    @danikf danikf committed Aug 22, 2026
  • Thirty-three complete programs, one per tab The page argued that the code does not change between transports and showed one sample per API level, leaving the reader to assemble the rest. That is the wrong shape for the question it answers: someone picking a transport wants a program they can paste and run, not a snippet plus a diff to apply mentally. Now every API level carries one complete, runnable program per transport — 33 of them, each in its own collapsible tab (GitHub wiki has no tab control, and the page says so once). Usings, class, Main, connection setup, the task, the output: nothing elided. Each sample's header comment states what the transport needs on the router, what goes in, what comes out and what to watch out for there. Those prerequisites were measured, not recalled — a user with only read,write,test,local was given one policy at a time: Api / ApiSsl api "not allowed (9)" Rest / RestSsl rest-api HTTP 401 Telnet / MacTelnet telnet "incorrect username or password" Ssh ssh "Permission denied (password)" WinboxCli/CliMac/Native/NativeMac winbox "not allowed (9)" MAC-Telnet authenticates against the telnet policy, not a MAC-specific one, and three of the five refusals are indistinguishable from a typo in the password — both now stated on the page, because both cost time to find out the other way. The tabs are not copies with one line swapped. The low-level sample inspects a trap SENTENCE on Api/ApiSsl and catches an exception on the other nine; the CLI tabs add 'detail', without which print as-value returns 8 of /interface's 28 fields; the MAC tabs carry RouterMac and their own mac-server prerequisites; Ssh is the only one with a Register() call. All 33 compile against tik4net + tik4net.objects + tik4net.ssh, clean. Six were run against the lab CHR (7.24) across both API levels and both carriers, and the printed output matches what the OUTPUT comment promises — which is how the low-level block was caught claiming a line it does not print. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @danikf danikf committed Aug 22, 2026
  • The same task, at every API level and over every transport New page: One task on every transport and API level. It holds one task fixed — find an interface by its comment, keep its .id, write a new comment back by that .id — and varies the two axes around it. The existing pages cover one axis each: CRUD examples for all APIs is three API levels on one transport, and each transport page is one transport. Neither answers what a reader actually asks, which is what changes when they switch. The answer is "one line", and the page is laid out to say so: the three samples name no transport, and the transport section is one collapsible block per transport carrying only the line that differs plus that transport's own note. Eleven tabs each repeating the same body would have implied differences that do not exist. Every behavioural claim was measured on the lab CHR (7.24), not reasoned: 33 of 33 combinations found the row and wrote the comment through. What does differ is what comes back, and that is the table: - the trap sentence exists on Api/ApiSsl only; everywhere else a refusal throws, so sentence-inspecting low-level code stops checking anything when it is moved - a bare print on a CLI transport returns the summary columns, 8 fields against the API's 28 — but the O/R mapper adds the entity's detail markers, so a typed entity is complete on all eleven Also: Home.md said the library is tested against 7.23.2, where the router is 7.24 and the repo README already said so. The dated "measured on 7.23.2" lines elsewhere are provenance and stay as they are. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @danikf danikf committed Aug 21, 2026