Permanent Links

The stable, or machine-accessible, part of the documentation tree is rooted on the /tB/ prefix. URLs with this prefix — and the internal links that target them, e.g. docs.twinbasic.com/tB/Modules/Math/Round — are guaranteed not to move. This is the contract the IDE help system and external links rely on; anything documented below should be treated as essential.

What the guarantee covers, and what retires a URL

The guarantee is that a published /tB/ URL is never re-pointed: it is not renamed, not restructured, and never made to resolve to a different symbol. A page that moves on disk keeps its permalink, which is why the Default / Built-In split changed no URL at all, and a page that takes over another’s subject declares the old URL in redirect_from: rather than leaving it dead.

One case falls outside it: a symbol that no longer exists in twinBASIC. Its page is removed and its URL goes with it, and that is a deliberate decision rather than a routine edit — nothing in the build will stop you, because the link check only resolves links made from inside the tree and no link inside the tree survives the removal. Three things are expected of one:

  • A redirect wherever anything can carry the URL. If another page covers the subject now, it takes a redirect_from: entry for the old URL. Only a URL nothing can stand in for is allowed to 404.
  • The entry comes out of this page in the same commit. This page is the contract; a URL listed here that no longer resolves is worse than one that was never listed, because it is the thing an implementer reads to decide what is safe to link to.
  • The commit message says which URL was retired. Consumers of the contract are outside this repository — the IDE help system above all — and a commit message naming the URL is the only record they can be pointed at.

Renaming a heading is the quieter version of the same thing: redirect_from: emits whole-page stubs and has no fragment remapping, so an anchor that some page links into breaks silently when its heading is reworded. Anchors named in the sections below are part of the contract for the same reason the URLs are.

/tB/Core/<Statement>

/tB/Modules/<ModuleName>/<Symbol>

Within each VBA module, each procedure, property, or statement has its own stand-alone page, e.g. LenB: /tB/Modules/Strings/Len. The $-suffixed and B/W variants are documented on the same page as the base symbol (so LenB, Len$, etc. all share the Len page).

/tB/Packages/<Package>/…

Each package lives under /tB/Packages/<Package>/. The sub-structure depends on the package: modules, classes, enumerations, sub-objects, and interface members each have their own page.

Depth differs by section. VBRUN is listed by module, and its members are reached from the module page, exactly as under /tB/Modules/. Every other package is listed page by page — so a new class, control, enumeration, sub-object, or member needs its own bullet here, in the commit that adds the page. Nothing catches the omission: the link check confirms that the links a page makes resolve, and has no opinion about whether anything links to a published URL. Authoring Pages covers the other indexes a new page must join.

VBRUN – /tB/Packages/VBRUN/<Module>/

VB – /tB/Packages/VB/<Class>/

WebView2 – /tB/Packages/WebView2/…

Assert – /tB/Packages/Assert/<Module>

CustomControls – /tB/Packages/CustomControls/…

CEF – /tB/Packages/CEF/…

WinEventLogLib – /tB/Packages/WinEventLogLib/<Class>

WinNamedPipesLib – /tB/Packages/WinNamedPipesLib/<Class>

WinServicesLib – /tB/Packages/WinServicesLib/…

tbIDE – /tB/Packages/tbIDE/<Class>

WinNativeCommonCtls – /tB/Packages/WinNativeCommonCtls/…

AppGlobalClassObject – /tB/Packages/AppGlobalClassObject/_App/<Member>

The App global object is available in every project without a reference, and each of its members is documented on a page of its own. Those pages sit under the interface App implements, so every member URL carries an _App/ segment — App.EXEName is documented at /tB/Packages/AppGlobalClassObject/_App/EXEName. The leading underscore is part of the interface name, after the COM hidden-interface convention; it is not a private-page marker.

/tB/Core/Attributes#<attribute>

Note

All non-alphabetic characters, as well as parameters, are removed from the links. All attribute names are in lowercase in the links. E.g. ArrayBoundsChecks(Bool) is referenced as /tB/Core/Attributes#arrayboundschecks.